يُوصى لمستخدمي ClickHouse Cloud باستخدام ClickPipes لنسخ PostgreSQL إلى ClickHouse. ويدعم ذلك أصلاً CDC (التقاط تغييرات البيانات) عالي الأداء لـ PostgreSQL.
MaterializedPostgreSQL لقطة لقاعدة بيانات PostgreSQL وتحمّل الجداول المطلوبة. ويمكن أن تشمل الجداول المطلوبة أي subset من الجداول من أي subset من المخططات ضمن قاعدة البيانات المحددة. وبالتزامن مع إنشاء لقطة، يحصل محرك قاعدة البيانات على LSN، وبعد تنفيذ dump أولي للجداول يبدأ في سحب التحديثات من WAL. بعد إنشاء قاعدة البيانات، لا تتم إضافة الجداول التي تُضاف لاحقاً إلى قاعدة بيانات PostgreSQL تلقائياً إلى النسخ المتماثل. ويجب إضافتها يدوياً باستخدام الاستعلام ATTACH TABLE db.table.
يُنفَّذ النسخ المتماثل باستخدام PostgreSQL Logical Replication Protocol، الذي لا يسمح بتكرار DDL، لكنه يتيح معرفة ما إذا كانت قد حدثت breaking changes تؤثر في النسخ المتماثل (مثل تغيير نوع العمود أو إضافة الأعمدة/إزالتها). تُكتشف هذه التغييرات، وعندها تتوقف الجداول المعنية عن تلقي التحديثات. في هذه الحالة، يجب استخدام استعلامي ATTACH و DETACH PERMANENTLY لإعادة تحميل الجدول بالكامل. وإذا كان DDL لا يعطّل النسخ المتماثل (على سبيل المثال، إعادة تسمية عمود)، فسيستمر الجدول في تلقي التحديثات (تتم عملية insertion حسب الموضع).
محرك قاعدة البيانات هذا تجريبي. لاستخدامه، اضبط
allow_experimental_database_materialized_postgresql على 1 في configuration files أو باستخدام الأمر SET:إنشاء قاعدة بيانات
host:port— نقطة نهاية خادم PostgreSQL.database— اسم قاعدة بيانات PostgreSQL.user— اسم مستخدم PostgreSQL.password— كلمة مرور المستخدم.
مثال للاستخدام
إضافة جداول جديدة إلى النسخ المتماثل بشكل ديناميكي
MaterializedPostgreSQL، فإنها لا تكتشف تلقائيًا الجداول الجديدة في قاعدة بيانات PostgreSQL المقابلة. ويمكن إضافة هذه الجداول يدويًا:
إزالة الجداول من النسخ المتماثل ديناميكيًا
مخطط PostgreSQL
- مخطط واحد لكل محرك قاعدة بيانات
MaterializedPostgreSQL. يتطلب ذلك استخدام الإعدادmaterialized_postgresql_schema. يتم الوصول إلى الجداول باستخدام اسم الجدول فقط:
- أي عدد من المخططات مع مجموعة جداول محددة لمحرك قاعدة بيانات
MaterializedPostgreSQLواحد. يتطلب ذلك استخدام الإعدادmaterialized_postgresql_tables_list. يُذكر كل جدول مع المخطط التابع له. يتم الوصول إلى الجداول باستخدام اسم المخطط واسم الجدول في الوقت نفسه:
materialized_postgresql_tables_list مع اسم الـ مخطط الخاص بها.
يتطلب ذلك materialized_postgresql_tables_list_with_schema = 1.
تحذير: في هذه الحالة، لا يُسمح بوجود نقاط في اسم الجدول.
- أي عدد من الـ مخططات مع المجموعة الكاملة من الجداول لمحرك قاعدة البيانات
MaterializedPostgreSQLواحد. يتطلب ذلك استخدام الإعدادmaterialized_postgresql_schema_list.
المتطلبات
-
يجب أن تكون قيمة إعداد wal_level هي
logical، وأن تكون قيمة المَعلمةmax_replication_slotsفي ملف إعدادات PostgreSQL2على الأقل. - يجب أن يتضمن كل جدول مكرّر أحد خيارات هوية النسخة المتماثلة التالية:
- المفتاح الأساسي (افتراضيًا)
- فهرس
لا يدعم النسخ المتماثل لقيم TOAST. وسيُستخدم النوع الافتراضي للبيانات.
الإعدادات
materialized_postgresql_tables_list
materialized_postgresql_schema
materialized_postgresql_schema_list
materialized_postgresql_max_block_size
- عدد صحيح موجب.
65536.
materialized_postgresql_replication_slot
materialized_postgresql_snapshot.
materialized_postgresql_snapshot
materialized_postgresql_replication_slot.
materialized_postgresql_tables_list. ولتحديث قائمة الجداول في هذا الإعداد، استخدم استعلام ATTACH TABLE.
materialized_postgresql_use_unique_replication_consumer_identifier
0.
إذا ضُبطت القيمة على 1، فسيُسمح بإعداد عدة جداول MaterializedPostgreSQL تشير إلى جدول PostgreSQL نفسه.
ملاحظات
التبديل عند الفشل لفتحة النسخ المنطقي
materialized_postgresql_replication_slot، ويجب تصديرها باستخدام الخيار EXPORT SNAPSHOT. كما يجب تمرير معرّف اللقطة عبر الإعداد materialized_postgresql_snapshot.
يرجى ملاحظة أن هذا يجب استخدامه فقط عند الحاجة الفعلية إليه. إذا لم تكن هناك حاجة حقيقية لذلك أو فهم واضح لسببه، فمن الأفضل السماح لـ table engine بإنشاء فتحة النسخ المتماثل الخاصة به وإدارتها.
مثال (من @bchrobot)
-
هيّئ فتحة النسخ المتماثل في PostgreSQL.
-
انتظر حتى تصبح فتحة النسخ المتماثل جاهزة، ثم ابدأ معاملة وصدّر معرّف لقطة المعاملة:
-
في ClickHouse، أنشئ database:
-
أنهِ معاملة PostgreSQL بمجرد تأكيد النسخ إلى ClickHouse DB. تحقّق من أن النسخ يستمر بعد التبديل عند الفشل:
الأذونات المطلوبة
- CREATE PUBLICATION — امتياز إنشاء الاستعلام.
- CREATE_REPLICATION_SLOT — امتياز replication.
- pg_drop_replication_slot — امتياز replication أو superuser.
-
DROP PUBLICATION — مالك publication (أي
usernameفي engine MaterializedPostgreSQL نفسه).
2 و3 وتجنّب الحاجة إلى هذه الأذونات. استخدم الإعدادين materialized_postgresql_replication_slot وmaterialized_postgresql_snapshot، ولكن بحذر شديد.
الوصول إلى الجداول:
- pg_publication
- pg_replication_slots
- pg_publication_tables