Skip to main content
يسمح بتنفيذ استعلامات SELECT وINSERT على البيانات المخزنة على خادم PostgreSQL بعيد.

الصياغة

الوسيطات

يمكن أيضًا تمرير الوسيطات باستخدام المجموعات المسماة. في هذه الحالة، يجب تحديد host وport كلٌّ منهما على حدة. ويُنصح بهذا النهج في بيئة الإنتاج.

القيمة المعادة

كائن جدول يحتوي على الأعمدة نفسها الموجودة في جدول PostgreSQL الأصلي.
في استعلام INSERT، وللتمييز بين دالة الجدول postgresql(...) واسم الجدول المصحوب بقائمة أسماء الأعمدة، يجب استخدام الكلمتين المفتاحيتين FUNCTION أو TABLE FUNCTION. راجع الأمثلة أدناه.

الإعدادات

يمكن تهيئة تجمّع الاتصالات المستخدم في دالة الجدول postgresql (وفي محرك الجدول PostgreSQL) باستخدام عبارة SETTINGS في نهاية العبارة. وإذا لم يُحدَّد إعداد معيّن، فستُستخدم تلقائيًا قيمة إعداد postgresql_* المناظر له على مستوى الاستعلام. راجع قسم الإعدادات الخاص بمحرك الجدول للاطلاع على القائمة الكاملة لإعدادات postgresql_connection_pool_* وpostgresql_connection_attempt_timeout وقيمها الافتراضية. مثال:

تفاصيل التنفيذ

تُنفَّذ استعلامات SELECT على جانب PostgreSQL بصيغة COPY (SELECT ...) TO STDOUT داخل معاملة PostgreSQL للقراءة فقط، مع إجراء commit بعد كل استعلام SELECT. تُنفَّذ عبارات WHERE البسيطة مثل =, !=, >, >=, <, <= وIN على خادم PostgreSQL. تُنفَّذ جميع عمليات الربط والتجميع والفرز وشروط IN [ array ] وقيد sampling الخاص بـ LIMIT في ClickHouse فقط بعد اكتمال الاستعلام على PostgreSQL.

تمرير استعلام بدلاً من اسم جدول

بدلاً من اسم جدول، يمكن أن تكون الوسيطة الثالثة استعلام SELECT يُمرَّر إلى PostgreSQL كما هو. ويُستدل على بنية الجدول الناتج من نتيجة الاستعلام. ويمكن كتابة الاستعلام إما على شكل استعلام فرعي، أو بتغليفه داخل الدالة query:
يفيد هذا في دفع عمليات الربط والتجميع أو أي معالجة أخرى إلى PostgreSQL. ويكون هذا الجدول للقراءة فقط: لا يُسمح بتنفيذ INSERT فيه. وتدعم البنية نفسها في محرك الجدول PostgreSQL.
يُحلِّل ClickHouse صيغة الاستعلام الفرعي (SELECT ...) ويُعيد تسلسلها بلهجة PostgreSQL (بما في ذلك وضع علامات الاقتباس لمعرّفات PostgreSQL وإفلات القيم الحرفية النصية) قبل إرسالها إلى الخادم. لذلك يجب أن تكون صالحة في ClickHouse SQL. ولتمرير بنية خاصة بـ PostgreSQL لا يحلّلها ClickHouse، استخدم الصيغة query('...')، إذ يُرسل نصها إلى PostgreSQL كما هو.إن أي WHERE أو LIMIT خارجي، أو aggregation، وما إلى ذلك، من استعلام ClickHouse المحيط لا يُدفَع إلى داخل الاستعلام المُمرَّر، بل يُطبَّق في ClickHouse بعد جلب نتيجة الاستعلام الكاملة. ولتقييد البيانات المقروءة من PostgreSQL، ضع شرط التصفية داخل الاستعلام المُمرَّر. ومع external_table_strict_query = 1، يُرفَض أي شرط تصفية خارجي لا يمكن دفعه مع استثناء بدلًا من تطبيقه محليًا.
تُنفَّذ استعلامات INSERT على جانب PostgreSQL بصيغة COPY "table_name" (field1, field2, ... fieldN) FROM STDIN داخل معاملة PostgreSQL، مع auto-commit بعد كل تعليمة INSERT. تُحوَّل أنواع Array في PostgreSQL إلى مصفوفات في ClickHouse.
انتبه، في PostgreSQL قد يحتوي عمود من نوع بيانات المصفوفة مثل Integer[] على مصفوفات بأبعاد مختلفة في صفوف مختلفة، لكن في ClickHouse لا يُسمح إلا بأن تكون المصفوفات متعددة الأبعاد ذات الأبعاد نفسها في جميع الصفوف.
يدعم عدة نُسخ متماثلة يجب إدراجها باستخدام |. على سبيل المثال:
أو
يدعم تحديد أولوية النسخ المتماثلة لمصدر القاموس في PostgreSQL. وكلما كان الرقم في map أكبر، كانت الأولوية أقل. وأعلى أولوية هي 0.

أمثلة

جدول في PostgreSQL:
اختيار البيانات من ClickHouse باستخدام الوسيطات المباشرة:
أو باستخدام المجموعات المُسمّاة:
الإدراج:
استخدام مخطط غير افتراضي:

نسخ بيانات Postgres أو ترحيلها باستخدام PeerDB

إلى جانب دوال الجداول، يمكنك دائمًا استخدام PeerDB من ClickHouse لإعداد مسار بيانات مستمر من Postgres إلى ClickHouse. تُعد PeerDB أداةً مصممةً خصيصًا لنسخ البيانات من Postgres إلى ClickHouse باستخدام التقاط بيانات التغيير (CDC).
آخر تعديل في ٢٣ يوليو ٢٠٢٦