drizzle-kit هي واجهة سطر الأوامر المصاحبة لها، وتُستخدم لتوليد عمليات الترحيل وتنفيذها. في هذا الدليل، ستُعرّف جدول todos بلغة TypeScript، ثم تنشئه عبر عملية ترحيل باستخدام drizzle-kit، وبعد ذلك تعالج استعلامات الإنشاء والقراءة والتحديث والحذف من خلال خادم HTTP صغير مبني على Node.js. ويعتمد كل اتصال على بروتوكول TLS مع التحقق الكامل من الشهادة.
المتطلبات الأساسية
- Node.js الإصدار 20 أو أحدث
- حساب ClickHouse Cloud
psqlلإنشاء قاعدة البيانات. ويمكنك أيضًا تنفيذ عبارةCREATE DATABASEفي SQL console.
إنشاء خدمة ClickHouse Managed Postgres
في وحدة تحكم ClickHouse Cloud، انقر على New service ثم اختر Postgres. سيصبح المثيل جاهزًا في غضون دقائق قليلة. للاطلاع على شرح تفصيلي للخطوات، راجع دليل البدء السريع.الحصول على بيانات الاتصال
انقر على Connect في الشريط الجانبي الأيسر لخدمتك. تعرض النافذة المنبثقة اسم المستخدم وكلمة المرور والخادم والمنفذ، وتتضمّن مفتاح تبديل Directly / via PgBouncer. يستخدم هذا الدليل سلسلتي اتصال:- الاتصال المباشر (المنفذ
5432) لأداةdrizzle-kit. تنفّذ عمليات الترحيل أوامر DDL، وقد يطول تنفيذها، وقد تعتمد على حالة الجلسة مثلSET lock_timeout، لذا ينبغي أن تتصل بـ Postgres مباشرةً. - PgBouncer (المنفذ
6432) للتطبيق. يعمل PgBouncer المضمَّن في وضع تجميع المعاملات، ويتيح لعدد كبير من مثيلات التطبيق، بما فيها الدوال بلا خادم، أن تتشارك عددًا محدودًا من اتصالات Postgres.
sslmode=verify-full&sslrootcert=<service-name>-ca-certificate.pem، ويكون المنفذ 5432. حدّد via PgBouncer لعرض بيانات الاتصال عبر المجمّع: يتغيّر المنفذ إلى 6432، ويتضمّن عنوان URL دائمًا sslmode=verify-full.
في النافذة المنبثقة، انقر على Download CA certificate. يمكنك أيضًا تنزيلها من Settings → CA Certificate. هذه الشهادة خاصة بمثيلك وحده، لذا يمكن للمشغّل استخدامها للتحقق من أنه يتصل بخادمك فعلًا.
إعداد المشروع
أنشئ مشروعًا، ثم ثبّت Drizzle ORM ومشغّلnode-postgres (pg) وdrizzle-kit:
تهيئة الاتصال
انقل شهادة CA التي نزّلتها إلى دليل المشروع، ثم أعد تسميتها إلىca-certificate.pem.
أنشئ قاعدة بيانات للتطبيق. استبدل <PASSWORD> والمضيف بالقيم الظاهرة في النافذة المنبثقة Connect:
.env في المجلد الجذر للمشروع، أو إلى ملف .env الموجود لديك مسبقًا. ولا تختلف السلسلتان إلا في رقم المنفذ، وكلتاهما تشيران إلى قاعدة البيانات guide_drizzle:
.env
node-postgres القيمتين sslmode=verify-full وsslrootcert من عنوان URL، ثم تحمّل ملف CA وتتحقق من سلسلة الشهادات ومن اسم المضيف معًا، فلا حاجة إلى كتابة أي شيفرة TLS إضافية. يُحدَّد مسار sslrootcert نسبةً إلى الدليل الذي تشغّل الأوامر منه. واحرص على إبقاء الملف .env خارج نظام التحكم في الإصدارات.
إذا كان ملف CA مفقودًا أو غير صحيح، يفشل الاتصال ويظهر الخطأ
unable to verify the first certificate. وإذا لم يطابق اسم المضيف الشهادة، يفشل الاتصال ويظهر الخطأ ERR_TLS_CERT_ALTNAME_INVALID. وإذا احتوت كلمة المرور على محارف خاصة مثل @ أو / أو #، فرمّزها بترميز URL.تعريف المخطط
أنشئ الملفsrc/db/schema.ts:
src/db/schema.ts
drizzle.config.ts في المجلد الجذر للمشروع. يوجّه هذا الملف أداة drizzle-kit إلى المخطط وإلى الاتصال المباشر:
drizzle.config.ts
تشغيل عمليات الترحيل
أنشئ ترحيل SQL انطلاقًا من المخطط:drizzle/0000_init.sql على عبارة CREATE TABLE. راجِعه، ثم ثبّت (commit) المجلد drizzle مع شيفرتك. بعد ذلك، طبّقه:
drizzle-kit migrate عمليات الترحيل المُطبَّقة في جدول drizzle.__drizzle_migrations، ولا ينفّذ في الاستدعاءات اللاحقة سوى عمليات الترحيل الجديدة. وكلما غيّرت schema.ts، شغّل generate ثم migrate من جديد.
يطبّق drizzle-kit push تغييرات المخطط من دون ملفات ترحيل. وهو مفيد عند إعداد النماذج الأولية، أما في بيئة الإنتاج فيوفّر لك generate وmigrate ملفات SQL قابلة للمراجعة وسجلًا بالتغييرات.
الاستعلام من قاعدة البيانات
أنشئ الملفsrc/db/index.ts، الذي يُنشئ عميل Drizzle عبر مجمّع اتصالات node-postgres باستخدام اتصال PgBouncer:
src/db/index.ts
src/server.ts، وهو خادم HTTP صغير يُنفّذ استعلام Drizzle واحدًا لكل مسار. أما إن كان لديك تطبيق قائم، فيمكنك بدلًا من ذلك استدعاء استعلامات db نفسها من معالجات المسارات في تطبيقك:
src/server.ts
لا حاجة إلى أي إعدادات للمشغّل عند استخدام PgBouncer. تستخدم استعلامات Drizzle عبارات غير مسمّاة افتراضيًا، كما يدعم PgBouncer المضمَّن العبارات المُعدّة مسبقًا المسمّاة أيضًا، مثل تلك التي تُنشأ باستخدام
.prepare في Drizzle، وذلك في وضع تجميع المعاملات. أما الميزات المرتبطة بمستوى الـ session، مثل LISTEN والأقفال الاستشارية على مستوى الـ session، فلا تعمل عبر PgBouncer. راجع الأسئلة الشائعة.التشغيل والتحقق
شغّل الخادم:PATCH الصفَّ المُحدَّث:
http://localhost:3101/todos في متصفحك لعرض المهام المتبقية. ستظهر الاستجابة على النحو التالي:
guide_drizzle ثم public، وانقر على جدول todos. يحتوي المخطط drizzle على جدول سجل عمليات الترحيل. ويضم الجدول الصف المتبقي:
الخطوات التالية
- الاتصال: سلاسل الاتصال وPgBouncer وTLS
- الإعدادات: معلمات Postgres وPgBouncer، مثل
max_connections - النسخ المتماثلة للقراءة: توسيع نطاق عمليات القراءة باستخدام الدالة
withReplicasفي Drizzle - الأمان: قوائم التحكم في الوصول حسب عناوين IP والشبكات الخاصة