SELECT وINSERT على البيانات المخزنة على خادم PostgreSQL بعيد.
حاليًا، لا يدعم محرك جدول PostgreSQL هذا إلا PostgreSQL بالإصدار 12 فما فوق.
إنشاء جدول
- يجب أن تكون أسماء الأعمدة مطابقة لما هي عليه في جدول PostgreSQL الأصلي، ولكن يمكنك استخدام بعض هذه الأعمدة فقط وبأي ترتيب.
- قد تختلف أنواع الأعمدة عن تلك الموجودة في جدول PostgreSQL الأصلي. يحاول ClickHouse cast القيم إلى أنواع بيانات ClickHouse.
- يحدّد الإعداد external_table_functions_use_nulls كيفية التعامل مع الأعمدة Nullable. القيمة الافتراضية: 1. إذا كانت القيمة 0، فلن تُنشئ دالة الجدول أعمدة Nullable، وستُدرج القيم الافتراضية بدلًا من قيم NULL. وينطبق هذا أيضًا على قيم NULL داخل المصفوفات.
host:port— عنوان خادم PostgreSQL.database— اسم قاعدة البيانات البعيدة.table— اسم الجدول البعيد.user— مستخدم PostgreSQL.password— كلمة مرور المستخدم.schema— مخطط الجدول غير الافتراضي. اختياري.on_conflict— استراتيجية حل التعارض. مثال:ON CONFLICT DO NOTHING. اختياري. ملاحظة: ستؤدي إضافة هذا الخيار إلى جعل الإدراج أقل كفاءة.
تفاصيل التنفيذ
SELECT على جانب PostgreSQL بصيغة COPY (SELECT ...) TO STDOUT داخل معاملة PostgreSQL للقراءة فقط، مع تنفيذ commit بعد كل استعلام SELECT.
تُنفَّذ عبارات WHERE البسيطة مثل =, !=, >, >=, <, <=, وIN على خادم PostgreSQL.
تُنفَّذ جميع عمليات JOIN، وعمليات التجميع، والفرز، وشروط IN [ array ]، وقيد أخذ العينات الخاص بـ LIMIT في ClickHouse فقط بعد اكتمال الاستعلام إلى PostgreSQL.
تُنفَّذ استعلامات INSERT على جانب PostgreSQL بصيغة COPY "table_name" (field1, field2, ... fieldN) FROM STDIN داخل معاملة PostgreSQL مع auto-commit بعد كل تعليمة INSERT.
تُحوَّل أنواع Array في PostgreSQL إلى مصفوفات في ClickHouse.
انتبه: في PostgreSQL، قد تحتوي بيانات المصفوفة المُنشأة على هيئة
type_name[] على مصفوفات متعددة الأبعاد بأعداد مختلفة من الأبعاد في صفوف مختلفة من الجدول داخل العمود نفسه. لكن في ClickHouse، لا يُسمح إلا بمصفوفات متعددة الأبعاد لها العدد نفسه من الأبعاد في جميع صفوف الجدول داخل العمود نفسه.|. على سبيل المثال:
map، انخفضت الأولوية. أعلى أولوية هي 0.
في المثال أدناه، تتمتع النسخة المتماثلة example01-1 بأعلى أولوية: