> ## 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.

# PostgreSQL

> صفحة تشرح كيفية تكامل Postgres مع ClickHouse

> يمكن العثور [هنا](/ar/get-started/migrate/postgres/overview) على دليل كامل لترحيل PostgreSQL إلى ClickHouse، بما في ذلك إرشادات حول نمذجة البيانات والمفاهيم المكافئة. يوضح ما يلي كيفية ربط ClickHouse بـ PostgreSQL.

تستعرض هذه الصفحة الخيارات التالية لتكامل PostgreSQL مع ClickHouse:

* استخدام محرك الجدول `PostgreSQL` للقراءة من جدول في PostgreSQL
* استخدام محرك قاعدة البيانات التجريبي `MaterializedPostgreSQL` لمزامنة قاعدة بيانات في PostgreSQL مع قاعدة بيانات في ClickHouse

<Tip>
  اطّلع على خدمة [Managed Postgres](/ar/products/managed-postgres/overview) الخاصة بنا. فهي تعتمد على تخزين NVMe موجود فعليًا إلى جانب موارد compute، وتوفّر أداءً أسرع بما يصل إلى 10 مرات لأعباء العمل التي يقيّدها أداء القرص، مقارنةً بالبدائل التي تستخدم تخزينًا متصلًا بالشبكة مثل EBS. كما تتيح لك نسخ بيانات Postgres إلى ClickHouse باستخدام موصل Postgres CDC في ClickPipes.
</Tip>

<div id="using-the-postgresql-table-engine">
  ## استخدام محرك جدول PostgreSQL
</div>

يتيح محرك الجدول `PostgreSQL` تنفيذ عمليتَي **SELECT** و**INSERT** على البيانات المخزّنة على خادم PostgreSQL البعيد انطلاقًا من ClickHouse.
تهدف هذه المقالة إلى توضيح أساليب التكامل الأساسية باستخدام جدول واحد.

<div id="1-setting-up-postgresql">
  ### 1. إعداد PostgreSQL
</div>

1. في `postgresql.conf`، أضِف السطر التالي لتمكين PostgreSQL من الاستماع عبر واجهات الشبكة:

```text theme={null}
  listen_addresses = '*'
```

2. أنشئ مستخدمًا ليتصل ClickHouse من خلاله. ولأغراض العرض التوضيحي، يمنح هذا المثال امتيازات superuser كاملة.

```sql theme={null}
  CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
```

3. أنشئ قاعدة بيانات جديدة في PostgreSQL:

```sql theme={null}
  CREATE DATABASE db_in_psg;
```

4. أنشئ جدولًا جديدًا:

```sql theme={null}
  CREATE TABLE table1 (
      id         integer primary key,
      column1    varchar(10)
  );
```

5. لنُضِف بضعة صفوف للاختبار:

```sql theme={null}
  INSERT INTO table1
    (id, column1)
  VALUES
    (1, 'abc'),
    (2, 'def');
```

6. لتهيئة PostgreSQL للسماح بإجراء اتصالات بقاعدة البيانات الجديدة باستخدام المستخدم الجديد لغرض النسخ المتماثل، أضف الإدخال التالي إلى الملف `pg_hba.conf`. حدِّث سطر العنوان باستخدام الشبكة الفرعية أو عنوان IP لخادم PostgreSQL لديك:

```text theme={null}
  # TYPE  DATABASE        USER            ADDRESS                 METHOD
  host    db_in_psg             clickhouse_user 192.168.1.0/24          password
```

7. أعد تحميل إعدادات `pg_hba.conf` (عدّل هذا الأمر وفقًا لإصدارك):

```text theme={null}
  /usr/pgsql-12/bin/pg_ctl reload
```

8. تحقّق من إمكانية تسجيل دخول المستخدم الجديد `clickhouse_user`:

```text theme={null}
  psql -U clickhouse_user -W -d db_in_psg -h <your_postgresql_host>
```

<Note>
  إذا كنت تستخدم هذه الميزة في ClickHouse Cloud، فقد تحتاج إلى السماح لعناوين IP الخاصة بـ ClickHouse Cloud بالوصول إلى مثيل PostgreSQL لديك.
  راجع [Cloud Endpoints API](/ar/products/cloud/guides/sql-console/query-endpoints) للاطّلاع على تفاصيل حركة البيانات الصادرة.
</Note>

<div id="2-define-a-table-in-clickhouse">
  ### 2. أنشئ جدولًا في ClickHouse
</div>

1. سجّل الدخول إلى `clickhouse-client`:

```bash theme={null}
  clickhouse-client --user default --password ClickHouse123!
```

2. لنُنشئ قاعدة بيانات جديدة:

```sql theme={null}
  CREATE DATABASE db_in_ch;
```

3. أنشئ جدولًا يستخدم `PostgreSQL`:

```sql theme={null}
  CREATE TABLE db_in_ch.table1
  (
      id UInt64,
      column1 String
  )
  ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'clickhouse_user', 'ClickHouse_123');
```

المعلمات المطلوبة كحد أدنى هي:

| parameter | Description                      | example                       |
| --------- | -------------------------------- | ----------------------------- |
| host:port | اسم المضيف أو عنوان IP والمنفذ   | postgres-host.domain.com:5432 |
| database  | اسم قاعدة بيانات PostgreSQL      | db\_in\_psg                   |
| user      | اسم المستخدم للاتصال بـ Postgres | clickhouse\_user              |
| password  | كلمة المرور للاتصال بـ Postgres  | ClickHouse\_123               |

<Note>
  راجع صفحة توثيق [PostgreSQL محرك الجدول](/ar/reference/engines/table-engines/integrations/postgresql) للاطلاع على القائمة الكاملة للمعلمات.
</Note>

<div id="3-test-the-integration">
  ### 3 اختبر التكامل
</div>

1. في ClickHouse، اعرض الصفوف المبدئية:

```sql theme={null}
  SELECT * FROM db_in_ch.table1
```

يجب أن يُملأ جدول ClickHouse تلقائيًا بالصفَّين الموجودين مسبقًا في جدول PostgreSQL:

```response theme={null}
  Query id: 34193d31-fe21-44ac-a182-36aaefbd78bf

  ┌─id─┬─column1─┐
  │  1 │ abc     │
  │  2 │ def     │
  └────┴─────────┘
```

2. ارجع إلى PostgreSQL وأضِف صفَّين إلى الجدول:

```sql theme={null}
  INSERT INTO table1
    (id, column1)
  VALUES
    (3, 'ghi'),
    (4, 'jkl');
```

4. يُفترض أن يظهر هذان الصفّان الجديدان في جدول ClickHouse لديك:

```sql theme={null}
  SELECT * FROM db_in_ch.table1
```

يجب أن يكون الرد:

```response theme={null}
  Query id: 86fa2c62-d320-4e47-b564-47ebf3d5d27b

  ┌─id─┬─column1─┐
  │  1 │ abc     │
  │  2 │ def     │
  │  3 │ ghi     │
  │  4 │ jkl     │
  └────┴─────────┘
```

5. لنرَ ما الذي يحدث عند إضافة صفوف إلى جدول ClickHouse:

```sql theme={null}
  INSERT INTO db_in_ch.table1
    (id, column1)
  VALUES
    (5, 'mno'),
    (6, 'pqr');
```

6. يجب أن تظهر الصفوف المُضافة في ClickHouse في جدول PostgreSQL:

```sql theme={null}
  db_in_psg=# SELECT * FROM table1;
  id | column1
  ----+---------
    1 | abc
    2 | def
    3 | ghi
    4 | jkl
    5 | mno
    6 | pqr
  (6 rows)
```

يوضح هذا المثال التكامل الأساسي بين PostgreSQL وClickHouse باستخدام `PostrgeSQL` محرك الجدول.

اطّلع على [صفحة التوثيق الخاصة بـ PostgreSQL محرك الجدول](/ar/reference/engines/table-engines/integrations/postgresql) للتعرّف على مزيد من الميزات، مثل تحديد المخططات، وإرجاع مجموعة فرعية من الأعمدة فقط، والاتصال بعدة نُسخ متماثلة. واطّلع أيضًا على مدونة [ClickHouse and PostgreSQL - a match made in data heaven - part 1](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres).

<div id="using-the-materializedpostgresql-database-engine">
  ## استخدام محرك قاعدة البيانات MaterializedPostgreSQL
</div>

<CloudNotSupportedBadge />

<ExperimentalBadge />

يستخدم محرك قاعدة البيانات PostgreSQL ميزات النسخ المتماثل في PostgreSQL لإنشاء نسخة متماثلة من قاعدة البيانات تشمل جميع المخططات والجداول أو مجموعة فرعية منها.
تهدف هذه المقالة إلى توضيح الأساليب الأساسية للتكامل باستخدام قاعدة بيانات واحدة ومخطط واحد وجدول واحد.

***في الإجراءات التالية، يُستخدم PostgreSQL CLI ‏(psql) وClickHouse CLI ‏(clickhouse-client). خادم PostgreSQL مُثبّت على Linux. ويوضح ما يلي الحد الأدنى من الإعدادات إذا كانت قاعدة بيانات PostgreSQL تثبيت اختبار جديدًا.***

<div id="1-in-postgresql">
  ### 1. في PostgreSQL
</div>

1. في `postgresql.conf`، اضبط الحد الأدنى لمستويات الاستماع، و`wal level` للنسخ المتماثل، وفتحات النسخ المتماثل:

أضف الأسطر التالية:

```text theme={null}
listen_addresses = '*'
max_replication_slots = 10
wal_level = logical
```

\**يتطلب ClickHouse حدًا أدنى من مستوى `logical` لـ wal، وحدًا أدنى قدره `2` من فتحات النسخ المتماثل*

2. باستخدام حساب مسؤول، أنشئ مستخدمًا للاتصال من ClickHouse:

```sql theme={null}
CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';
```

\**لأغراض التوضيح، مُنحت صلاحيات superuser كاملة.*

3. أنشئ قاعدة بيانات جديدة:

```sql theme={null}
CREATE DATABASE db1;
```

4. اتصل بقاعدة البيانات الجديدة باستخدام `psql`:

```text theme={null}
\connect db1
```

5. أنشئ جدولًا جديدًا:

```sql theme={null}
CREATE TABLE table1 (
    id         integer primary key,
    column1    varchar(10)
);
```

6. أضف الصفوف الأولية:

```sql theme={null}
INSERT INTO table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');
```

7. اضبط PostgreSQL للسماح بالاتصال بقاعدة البيانات الجديدة باستخدام المستخدم الجديد لأغراض النسخ المتماثل. في ما يلي الحد الأدنى من الإدخالات التي يجب إضافتها إلى ملف `pg_hba.conf`:

```text theme={null}
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db1             clickhouse_user 192.168.1.0/24          password
```

\**لأغراض الشرح، يُستخدم هنا أسلوب المصادقة بكلمة مرور بنص واضح. حدِّث سطر العنوان باستخدام الشبكة الفرعية أو عنوان الخادم وفقًا لوثائق PostgreSQL*

8. أعد تحميل إعدادات `pg_hba.conf` بشيء مماثل لما يلي (عدِّله بما يناسب إصدارك):

```text theme={null}
/usr/pgsql-12/bin/pg_ctl reload
```

9. اختبر تسجيل الدخول باستخدام مستخدم `clickhouse_user` الجديد:

```text theme={null}
 psql -U clickhouse_user -W -d db1 -h <your_postgresql_host>
```

<div id="2-in-clickhouse">
  ### 2. في ClickHouse
</div>

1. سجّل الدخول إلى ClickHouse CLI

```bash theme={null}
clickhouse-client --user default --password ClickHouse123!
```

2. فعّل الميزة التجريبية لـ PostgreSQL لمحرك قاعدة البيانات:

```sql theme={null}
SET allow_experimental_database_materialized_postgresql=1
```

3. أنشئ قاعدة البيانات الجديدة التي ستخضع للنسخ المتماثل وعرّف الجدول الأولي:

```sql theme={null}
CREATE DATABASE db1_postgres
ENGINE = MaterializedPostgreSQL('postgres-host.domain.com:5432', 'db1', 'clickhouse_user', 'ClickHouse_123')
SETTINGS materialized_postgresql_tables_list = 'table1';
```

الحد الأدنى من الخيارات:

| المعلمة   | الوصف                            | مثال                                              |
| --------- | -------------------------------- | ------------------------------------------------- |
| host:port | اسم المضيف أو عنوان IP والمنفذ   | postgres-host.domain.com:5432                     |
| database  | اسم قاعدة بيانات PostgreSQL      | db1                                               |
| user      | اسم المستخدم للاتصال بـ Postgres | clickhouse\_user                                  |
| password  | كلمة المرور للاتصال بـ Postgres  | ClickHouse\_123                                   |
| settings  | إعدادات إضافية للمحرك            | materialized\_postgresql\_tables\_list = 'table1' |

<Info>
  للاطلاع على الدليل الكامل لمحرك قاعدة بيانات PostgreSQL، راجع [https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings](https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings)
</Info>

4. تحقّق من أن الجدول الأصلي يحتوي على بيانات:

```sql theme={null}
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1
```

```response theme={null}
Query id: df2381ac-4e30-4535-b22e-8be3894aaafc

┌─id─┬─column1─┐
│  1 │ abc     │
└────┴─────────┘
┌─id─┬─column1─┐
│  2 │ def     │
└────┴─────────┘
```

<div id="3-test-basic-replication">
  ### 3. اختبر النسخ المتماثل الأساسي
</div>

1. في PostgreSQL، أضف صفوفًا جديدة:

```sql theme={null}
INSERT INTO table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');
```

2. في ClickHouse، تحقّق من ظهور الصفوف الجديدة:

```sql theme={null}
ch_env_2 :) select * from db1_postgres.table1;

SELECT *
FROM db1_postgres.table1
```

```response theme={null}
Query id: b0729816-3917-44d3-8d1a-fed912fb59ce

┌─id─┬─column1─┐
│  1 │ abc     │
└────┴─────────┘
┌─id─┬─column1─┐
│  4 │ jkl     │
└────┴─────────┘
┌─id─┬─column1─┐
│  3 │ ghi     │
└────┴─────────┘
┌─id─┬─column1─┐
│  2 │ def     │
└────┴─────────┘
```

<div id="4-summary">
  ### 4. الملخص
</div>

يركّز دليل التكامل هذا على مثال بسيط يوضّح كيفية إجراء النسخ المتماثل لقاعدة بيانات تضم جدولًا واحدًا، لكن هناك خيارات أكثر تقدّمًا تشمل إجراء النسخ المتماثل لقاعدة البيانات بالكامل أو إضافة جداول ومخططات جديدة إلى عمليات النسخ المتماثل الحالية. ورغم أن أوامر DDL غير مدعومة في هذا النوع من النسخ المتماثل، يمكن تهيئة المحرّك لاكتشاف التغييرات وإعادة تحميل الجداول عند إجراء تغييرات هيكلية.

<Info>
  للاطّلاع على المزيد من الميزات المتاحة ضمن الخيارات المتقدمة، يُرجى مراجعة [الوثائق المرجعية](/ar/reference/engines/database-engines/materialized-postgresql).
</Info>
