يتيح الاتصال بقواعد البيانات على خادم PostgreSQL بعيد. ويدعم عمليات القراءة والكتابة (استعلامات SELECT وINSERT) لتبادل البيانات بين ClickHouse وPostgreSQL.
يوفّر وصولًا في الوقت الفعلي إلى قائمة الجداول وبنية الجدول على خادم PostgreSQL البعيد باستخدام استعلامَي SHOW TABLES وDESCRIBE TABLE.
ويدعم تعديل بنية الجدول (ALTER TABLE ... ADD|DROP COLUMN). إذا جرى تعيين المَعلمة use_table_cache (انظر معلمات المحرك أدناه) إلى 1، فستُخزَّن بنية الجدول مؤقتًا ولن يُتحقق من حدوث أي تعديل عليها، ولكن يمكن تحديثها باستخدام استعلامَي DETACH وATTACH.
إنشاء قاعدة بيانات
CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);معلمات المحرّك
host:port— عنوان خادم PostgreSQL.database— اسم قاعدة البيانات البعيدة.user— مستخدم PostgreSQL.password— كلمة مرور المستخدم.schema— مخطط PostgreSQL.use_table_cache— يحدّد ما إذا كانت بنية جدول قاعدة البيانات مخزنة مؤقتًا أم لا. اختياري. القيمة الافتراضية:0.
تُمرَّر معلمات TLS/SSL إلى libpq ويمكن توفيرها عبر مجموعة مسماة أو كوسيطات مفتاح-قيمة لاحقة: sslmode (disable أو allow أو prefer أو require أو verify-ca أو verify-full)، والشهادات والمفتاح بأحد شكلين. تمثل sslrootcert (شهادة CA)، وsslcert (شهادة العميل)، وsslkey (المفتاح الخاص للعميل) مسارات إلى ملفات محلية على الخادم، ولا تُقبل إلا من مجموعة مسماة معرّفة في ملف تكوين الخادم. تقبل sslrootcert_pem وsslcert_pem وsslkey_pem المحتويات الحرفية للملف المقابل بدلًا من ذلك، ويمكن تحديدها من SQL (على سبيل المثال، ENGINE = PostgreSQL('host:port', 'database', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...'))، وتُخفى في السجلات واستعلامات SHOW مثل كلمة المرور. عند عدم تعيينها، تُطبَّق القيم الافتراضية لـ libpq (sslmode=prefer).
دعم أنواع البيانات
| PostgreSQL | ClickHouse |
|---|---|
| DATE | Date |
| TIMESTAMP | DateTime |
| REAL | Float32 |
| DOUBLE | Float64 |
| DECIMAL, NUMERIC | Decimal (انظر الملاحظة أدناه) |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| SERIAL | UInt32 |
| BIGSERIAL | UInt64 |
| TEXT, CHAR | String |
| INTEGER | Nullable(Int32) |
| ARRAY | Array |
أمثلة على الاستخدام
قاعدة بيانات في ClickHouse تتبادل البيانات مع خادم PostgreSQL:
CREATE DATABASE test_database
ENGINE = PostgreSQL('postgres1:5432', 'test_database', 'postgres', 'mysecretpassword', 'schema_name',1);SHOW DATABASES;┌─name──────────┐
│ default │
│ test_database │
│ system │
└───────────────┘SHOW TABLES FROM test_database;┌─name───────┐
│ test_table │
└────────────┘قراءة البيانات من جدول PostgreSQL:
SELECT * FROM test_database.test_table;┌─id─┬─value─┐
│ 1 │ 2 │
└────┴───────┘كتابة البيانات في جدول PostgreSQL:
INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘لنفترض أنه جرى تعديل بنية الجدول في PostgreSQL:
postgre> ALTER TABLE test_table ADD COLUMN data Textبما أن المعلمة use_table_cache ضُبطت على 1 عند إنشاء قاعدة البيانات، فقد كانت بنية الجدول في ClickHouse مخزنة مؤقتًا، ولذلك لم تُعدَّل:
DESCRIBE TABLE test_database.test_table;┌─name───┬─type──────────────┐
│ id │ Nullable(Integer) │
│ value │ Nullable(Integer) │
└────────┴───────────────────┘بعد فصل الجدول ثم إعادة إرفاقه، تم تحديث البنية:
DETACH TABLE test_database.test_table;
ATTACH TABLE test_database.test_table;
DESCRIBE TABLE test_database.test_table;┌─name───┬─type──────────────┐
│ id │ Nullable(Integer) │
│ value │ Nullable(Integer) │
│ data │ Nullable(String) │
└────────┴───────────────────┘