> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# الدليل السريع لـ Managed Postgres

> اختبر أداء Postgres المعزّز بـ NVMe وأضف التحليل في الوقت الفعلي عبر تكامل ClickHouse الأصلي

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                ميزة Beta. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        مزيد من المعلومات.
                    </a>
                </u>
            </span>
        </div>;
};

ClickHouse Managed Postgres هو Postgres بمستوى مؤسسي ومدعوم بتخزين NVMe، ويوفّر أداءً أسرع بما يصل إلى 10 مرات لأعباء العمل المقيّدة بأداء القرص مقارنةً بالتخزين المتصل عبر الشبكة مثل EBS. ينقسم هذا الدليل السريع إلى جزأين:

* **الجزء 1:** ابدأ باستخدام NVMe Postgres واختبر أداءه
* **الجزء 2:** فعّل التحليل في الوقت الفعلي من خلال التكامل مع ClickHouse

يتوفر Managed Postgres حاليًا على AWS في عدة مناطق، وهو مجاني خلال المعاينة الخاصة.

**في هذا الدليل السريع، ستقوم بما يلي:**

* إنشاء مثيل Managed Postgres بأداء مدعوم من NVMe
* تحميل مليون حدث تجريبي ومشاهدة سرعة NVMe عمليًا
* تشغيل الاستعلامات واختبار أداء منخفض الكمون
* نسخ البيانات إلى ClickHouse للتحليل في الوقت الفعلي
* الاستعلام من ClickHouse مباشرةً عبر Postgres باستخدام `pg_clickhouse`

<div id="part-1">
  ## الجزء 1: بدء استخدام NVMe Postgres
</div>

<div id="create-postgres-database">
  ### إنشاء قاعدة بيانات
</div>

لإنشاء خدمة Managed Postgres جديدة، انقر على زر **New service** في قائمة الخدمات في Cloud Console. بعد ذلك، يمكنك اختيار Postgres كنوع قاعدة البيانات.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/create-service.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=313c2935caade4d87fce5fbc7874ab9a" alt="إنشاء خدمة Managed Postgres" size="md" border width="1666" height="1634" data-path="images/managed-postgres/create-service.png" />

أدخل اسمًا لمثيل قاعدة البيانات، ثم انقر على **Create service**. سيتم توجيهك إلى صفحة Overview.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/overview.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=b7845e66255b4346251be3a02aad895d" alt="صفحة Overview لـ Managed Postgres" size="md" border width="3680" height="2324" data-path="images/managed-postgres/overview.png" />

سيتم توفير مثيل Managed Postgres الخاص بك، وسيكون جاهزًا للاستخدام خلال 3 إلى 5 دقائق.

<div id="connect">
  ### اتصل بقاعدة بياناتك
</div>

في الشريط الجانبي الأيسر، سترى [زر **Connect**](/ar/products/managed-postgres/connection). انقر عليه لعرض تفاصيل الاتصال وسلاسل الاتصال بتنسيقات متعددة.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/connect-modal.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=eed2a011ab40aa0326c714afca3e8f5f" alt="النافذة المنبثقة Connect في Managed Postgres" size="md" border width="1910" height="1728" data-path="images/managed-postgres/connect-modal.png" />

انسخ سلسلة اتصال `psql` واتصل بقاعدة بياناتك. يمكنك أيضًا استخدام أي عميل متوافق مع Postgres، مثل DBeaver، أو أي مكتبة تطبيقات.

<div id="nvme-performance">
  ### اختبر أداء NVMe
</div>

لنرَ أداء NVMe عمليًا. أولًا، فعّل التوقيت في `psql` لقياس زمن تنفيذ الاستعلام:

```sql theme={null}
\timing
```

أنشئ جدولين تجريبيين للأحداث والمستخدمين:

```sql theme={null}
CREATE TABLE events (
   event_id SERIAL PRIMARY KEY,
   event_name VARCHAR(255) NOT NULL,
   event_type VARCHAR(100),
   event_timestamp TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
   event_data JSONB,
   user_id INT,
   user_ip INET,
   is_active BOOLEAN DEFAULT TRUE,
   created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE users (
   user_id SERIAL PRIMARY KEY,
   name VARCHAR(100),
   country VARCHAR(50),
   platform VARCHAR(50)
);
```

الآن، أدخِل مليون حدث وشاهد سرعة NVMe:

```sql theme={null}
INSERT INTO events (event_name, event_type, event_timestamp, event_data, user_id, user_ip)
SELECT
   'Event ' || gs::text AS event_name,
   CASE
       WHEN random() < 0.5 THEN 'click'
       WHEN random() < 0.75 THEN 'view'
       WHEN random() < 0.9 THEN 'purchase'
       WHEN random() < 0.98 THEN 'signup'
       ELSE 'logout'
   END AS event_type,
   NOW() - INTERVAL '1 day' * (gs % 365) AS event_timestamp,
   jsonb_build_object('key', 'value' || gs::text, 'additional_info', 'info_' || (gs % 100)::text) AS event_data,
   GREATEST(1, LEAST(1000, FLOOR(POWER(random(), 2) * 1000) + 1)) AS user_id,
   ('192.168.1.' || ((gs % 254) + 1))::inet AS user_ip
FROM
   generate_series(1, 1000000) gs;
```

```text theme={null}
INSERT 0 1000000
Time: 3596.542 ms (00:03.597)
```

<Tip>
  **أداء NVMe**

  تم إدراج مليون صف من بيانات JSONB في أقل من 4 ثوانٍ. في قواعد البيانات السحابية التقليدية التي تستخدم تخزينًا متصلًا عبر الشبكة مثل EBS، تستغرق العملية نفسها عادةً وقتًا أطول بمرتين إلى ثلاث مرات بسبب زمن انتقال الذهاب والإياب عبر الشبكة وتقييد IOPS. يزيل تخزين NVMe هذه الاختناقات من خلال إبقاء التخزين متصلًا فعليًا بالحوسبة.

  يختلف الأداء حسب حجم المثيل، والحمل الحالي، وخصائص البيانات.
</Tip>

أدرج 1,000 مستخدم:

```sql theme={null}
INSERT INTO users (name, country, platform)
SELECT
    first_names[first_idx] || ' ' || last_names[last_idx] AS name,
    CASE
        WHEN random() < 0.25 THEN 'India'
        WHEN random() < 0.5 THEN 'USA'
        WHEN random() < 0.7 THEN 'Germany'
        WHEN random() < 0.85 THEN 'China'
        ELSE 'Other'
    END AS country,
    CASE
        WHEN random() < 0.2 THEN 'iOS'
        WHEN random() < 0.4 THEN 'Android'
        WHEN random() < 0.6 THEN 'Web'
        WHEN random() < 0.75 THEN 'Windows'
        WHEN random() < 0.9 THEN 'MacOS'
        ELSE 'Linux'
    END AS platform
FROM
    generate_series(1, 1000) AS seq
    CROSS JOIN LATERAL (
        SELECT
            array['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Hank', 'Ivy', 'Jack', 'Liam', 'Olivia', 'Noah', 'Emma', 'Sophia', 'Benjamin', 'Isabella', 'Lucas', 'Mia', 'Amelia', 'Aarav', 'Riya', 'Arjun', 'Ananya', 'Wei', 'Li', 'Huan', 'Mei', 'Hans', 'Klaus', 'Greta', 'Sofia'] AS first_names,
            array['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Martinez', 'Taylor', 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Moore', 'Lee', 'Perez', 'Sharma', 'Patel', 'Gupta', 'Reddy', 'Zhang', 'Wang', 'Chen', 'Liu', 'Schmidt', 'Müller', 'Weber', 'Fischer'] AS last_names,
            1 + (seq % 32) AS first_idx,
            1 + ((seq / 32)::int % 32) AS last_idx
    ) AS names;
```

<div id="run-queries">
  ### شغّل استعلامات على بياناتك
</div>

لنُشغّل الآن بعض الاستعلامات لنرى مدى سرعة استجابة Postgres مع تخزين NVMe.

**تجميع مليون حدث حسب النوع:**

```sql theme={null}
SELECT event_type, COUNT(*) as count 
FROM events 
GROUP BY event_type 
ORDER BY count DESC;
```

```text theme={null}
 event_type | count  
------------+--------
 click      | 499523
 view       | 375644
 purchase   | 112473
 signup     |  12117
 logout     |    243
(5 rows)

Time: 114.883 ms
```

**استعلام مع التصفية بـ JSONB ونطاق التاريخ:**

```sql theme={null}
SELECT COUNT(*) 
FROM events 
WHERE event_timestamp > NOW() - INTERVAL '30 days'
  AND event_data->>'additional_info' LIKE 'info_5%';
```

```text theme={null}
 count 
-------
  9042
(1 row)

Time: 109.294 ms
```

**اربط الأحداث ببيانات المستخدمين:**

```sql theme={null}
SELECT u.country, COUNT(*) as events, AVG(LENGTH(e.event_data::text))::int as avg_json_size
FROM events e
JOIN users u ON e.user_id = u.user_id
GROUP BY u.country
ORDER BY events DESC;
```

```text theme={null}
 country | events | avg_json_size 
---------+--------+---------------
 USA     | 383748 |            52
 India   | 255990 |            52
 Germany | 223781 |            52
 China   | 127754 |            52
 Other   |   8727 |            52
(5 rows)

Time: 224.670 ms
```

<Info>
  **أصبح Postgres لديك جاهزًا**

  في هذه المرحلة، أصبح لديك قاعدة بيانات Postgres عالية الأداء وعاملة بكامل طاقتها، وجاهزة لأعباء العمل الخاصة بالمعاملات.

  تابع إلى الجزء 2 لترى كيف يمكن للتكامل الأصلي مع ClickHouse أن يعزّز تحليلاتك بشكل كبير.
</Info>

***

<div id="part-2">
  ## الجزء 2: أضِف التحليلات في الوقت الفعلي باستخدام ClickHouse
</div>

في حين يتفوّق Postgres في أعباء العمل المعاملاتية (OLTP)، صُمِّم ClickHouse خصيصًا للاستعلامات التحليلية (OLAP) على مجموعات البيانات الكبيرة. وبدمج الاثنين، ستحصل على أفضل ما في العالمين:

* **Postgres** لبيانات المعاملات الخاصة بتطبيقك (عمليات الإدراج، والتحديث، وعمليات البحث المباشرة)
* **ClickHouse** لتحليلات بزمن استجابة أقل من ثانية على مليارات الصفوف

يوضح لك هذا القسم كيفية مزامنة بيانات Postgres مع ClickHouse والاستعلام عنها بسلاسة.

<div id="setup-integrate-clickhouse">
  ### إعداد تكامل ClickHouse
</div>

الآن بعد أن أصبحت لدينا جداول وبيانات في Postgres، لننسخ الجداول إلى ClickHouse لأغراض analytics. نبدأ بالنقر على **تكامل ClickHouse** في الشريط الجانبي. ثم يمكنك النقر على **Replicate data in ClickHouse**.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/integration-landing.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=b839a23f8ab9eaa5262dc68612d4cd7d" alt="تكامل Managed Postgres فارغ" size="md" border width="3448" height="1982" data-path="images/managed-postgres/integration-landing.png" />

في النموذج التالي، يمكنك إدخال اسم للتكامل وتحديد مثيل ClickHouse موجود لنسخ البيانات إليه. وإذا لم يكن لديك مثيل ClickHouse بعد، فيمكنك إنشاء واحد مباشرةً من هذا النموذج.

<Info>
  **مهم**

  تأكد من أن خدمة ClickHouse التي تحددها في حالة Running قبل المتابعة.
</Info>

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/postgres-analytics-form.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=a31fc77efb0e5722e2b6c864f28ecc9f" alt="نموذج تكامل Managed Postgres" size="md" border width="3400" height="1976" data-path="images/managed-postgres/postgres-analytics-form.png" />

انقر على **Next** للانتقال إلى picker الجداول. وكل ما عليك فعله هنا هو:

* تحديد قاعدة بيانات ClickHouse لنسخ البيانات إليها.
* توسيع schema **public** وتحديد جدولَي users وevents اللذين أنشأناهما سابقًا.
* النقر على **Replicate data to ClickHouse**.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/table-picker.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=609a681b82f2738513f009450a1e7847" alt="منتقي جداول Managed Postgres" size="md" border width="3400" height="1976" data-path="images/managed-postgres/table-picker.png" />

ستبدأ عملية النسخ المتماثل، وسيتم نقلك إلى صفحة Overview الخاصة بالتكامل. وبما أن هذا هو التكامل الأول، فقد يستغرق إعداد البنية التحتية الأولية من دقيقتين إلى ثلاث دقائق. وفي أثناء ذلك، لنلقِ نظرة على الامتداد الجديد **pg\_clickhouse**.

<div id="pg-clickhouse-extension">
  ### الاستعلام في ClickHouse من خلال Postgres
</div>

يتيح لك امتداد `pg_clickhouse` الاستعلام عن بيانات ClickHouse مباشرةً من Postgres باستخدام SQL القياسي. وهذا يعني أن تطبيقك يمكنه استخدام Postgres كطبقة استعلام موحّدة لكلٍّ من البيانات الخاصة بالمعاملات والبيانات التحليلية. راجع [التوثيق الكامل](/ar/products/managed-postgres/extensions/pg_clickhouse/introduction) لمزيد من التفاصيل.

فعِّل الامتداد:

```sql theme={null}
CREATE EXTENSION pg_clickhouse;
```

ثم أنشئ اتصال foreign server بـ ClickHouse. استخدم برنامج التشغيل `http` مع المنفذ `8443` للاتصالات الآمنة:

```sql theme={null}
CREATE SERVER ch FOREIGN DATA WRAPPER clickhouse_fdw
       OPTIONS(driver 'http', host '<clickhouse_cloud_host>', dbname '<database_name>', port '8443');
```

استبدل `<clickhouse_cloud_host>` باسم مضيف ClickHouse لديك، واستبدل `<database_name>` بقاعدة البيانات التي اخترتها أثناء إعداد النسخ المتماثل. يمكنك العثور على اسم المضيف في خدمة ClickHouse بالنقر على **Connect** في الشريط الجانبي.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/get-clickhouse-host.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=2bdf26ba809707b214e54a5eefeb9eaa" alt="الحصول على مضيف ClickHouse" size="md" border width="695" height="765" data-path="images/managed-postgres/get-clickhouse-host.png" />

الآن، نربط مستخدم Postgres ببيانات اعتماد خدمة ClickHouse:

```sql theme={null}
CREATE USER MAPPING FOR CURRENT_USER SERVER ch 
OPTIONS (user 'default', password '<clickhouse_password>');
```

الآن استورد جداول ClickHouse إلى مخطط في Postgres:

```sql theme={null}
CREATE SCHEMA organization;
IMPORT FOREIGN SCHEMA "<database_name>" FROM SERVER ch INTO organization;
```

استبدل `<database_name>` باسم قاعدة البيانات نفسه الذي استخدمته عند إنشاء الخادم.

يمكنك الآن رؤية جميع جداول ClickHouse في عميل Postgres لديك:

```sql theme={null}
\det+ organization.*
```

<div id="analytics-after-integration">
  ### شاهد تحليلاتك على أرض الواقع
</div>

لنعد إلى صفحة التكامل. ينبغي أن ترى أن النسخ المتماثل الأولي قد اكتمل. انقر على اسم التكامل لعرض التفاصيل.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/analytics-list.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=fad8d34d055e439f15c4dbb5e63959b3" alt="قائمة تحليلات Managed Postgres" size="md" border width="1821" height="319" data-path="images/managed-postgres/analytics-list.png" />

انقر على اسم الخدمة لفتح وحدة تحكم ClickHouse والاطلاع على جداولك المنسوخة بالنسخ المتماثل.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/replicated-tables.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=b8800156abfb9f9333d0be1b057409d9" alt="جداول Managed Postgres المنسوخة بالنسخ المتماثل في ClickHouse" size="md" border width="1725" height="1179" data-path="images/managed-postgres/replicated-tables.png" />

<div id="performance-comparison">
  ### قارن بين أداء Postgres وClickHouse
</div>

لنُشغِّل الآن بعض الاستعلامات التحليلية ونقارن الأداء بين Postgres وClickHouse. لاحظ أن الجداول المُكرَّرة تستخدم نمط التسمية `public_<table_name>`.

**الاستعلام 1: أكثر المستخدمين نشاطًا**

يعثر هذا الاستعلام على أكثر المستخدمين نشاطًا باستخدام عدة عمليات تجميع:

```sql theme={null}
-- Via ClickHouse
SELECT 
    user_id,
    COUNT(*) as total_events,
    COUNT(DISTINCT event_type) as unique_event_types,
    SUM(CASE WHEN event_type = 'purchase' THEN 1 ELSE 0 END) as purchases,
    MIN(event_timestamp) as first_event,
    MAX(event_timestamp) as last_event
FROM organization.public_events
GROUP BY user_id
ORDER BY total_events DESC
LIMIT 10;
```

```text theme={null}
 user_id | total_events | unique_event_types | purchases |        first_event         |         last_event         
---------+--------------+--------------------+-----------+----------------------------+----------------------------
       1 |        31439 |                  5 |      3551 | 2025-01-22 22:40:45.612281 | 2026-01-21 22:40:45.612281
       2 |        13235 |                  4 |      1492 | 2025-01-22 22:40:45.612281 | 2026-01-21 22:40:45.612281
...
(10 rows)

Time: 163.898 ms   -- ClickHouse
Time: 554.621 ms   -- Same query on Postgres
```

**الاستعلام 2: تفاعل المستخدمين حسب البلد والمنصة**

يربط هذا الاستعلام بين الأحداث والمستخدمين ويحسب مقاييس التفاعل:

```sql theme={null}
-- Via ClickHouse
SELECT 
    u.country,
    u.platform,
    COUNT(DISTINCT e.user_id) as users,
    COUNT(*) as total_events,
    ROUND(COUNT(*)::numeric / COUNT(DISTINCT e.user_id), 2) as events_per_user,
    SUM(CASE WHEN e.event_type = 'purchase' THEN 1 ELSE 0 END) as purchases
FROM organization.public_events e
JOIN organization.public_users u ON e.user_id = u.user_id
GROUP BY u.country, u.platform
ORDER BY total_events DESC
LIMIT 10;
```

```text theme={null}
 country | platform | users | total_events | events_per_user | purchases 
---------+----------+-------+--------------+-----------------+-----------
 USA     | Android  |   115 |       109977 |             956 |     12388
 USA     | Web      |   108 |       105057 |             972 |     11847
 USA     | iOS      |    83 |        84594 |            1019 |      9565
 Germany | Android  |    85 |        77966 |             917 |      8852
 India   | Android  |    80 |        68095 |             851 |      7724
...
(10 rows)

Time: 170.353 ms   -- ClickHouse
Time: 1245.560 ms  -- Same query on Postgres
```

**مقارنة الأداء:**

| الاستعلام                              | Postgres (NVMe) | ClickHouse (عبر pg\_clickhouse) | عامل التسريع |
| -------------------------------------- | --------------- | ------------------------------- | ------------ |
| أهم المستخدمين (5 عمليات تجميع)        | 555 ms          | 164 ms                          | 3.4x         |
| تفاعل المستخدمين (JOIN + عمليات تجميع) | 1,246 ms        | 170 ms                          | 7.3x         |

<Tip>
  **متى تستخدم ClickHouse**

  حتى مع مجموعة البيانات هذه التي تضم 1M صف، يوفّر ClickHouse أداءً أسرع بمقدار 3-7x في الاستعلامات التحليلية المعقدة التي تتضمن عمليات JOIN وعمليات تجميع متعددة. ويصبح الفارق أكثر وضوحًا على نطاقات أكبر (100M+ صف)، حيث يمكن لتخزين ClickHouse العمودي وتنفيذه المتجهي أن يوفّرا تسارعًا بمقدار 10-100x.

  تختلف أزمنة الاستعلام حسب حجم المثيل، وزمن انتقال الشبكة بين الخدمات، وخصائص البيانات، والحمل الحالي.
</Tip>

<div id="cleanup">
  ## التنظيف
</div>

لحذف الموارد التي أُنشئت في الدليل السريع هذا:

1. أولًا، احذف تكامل ClickPipe من خدمة ClickHouse
2. ثم احذف مثيل Managed Postgres من Cloud Console
