Skip to main content
Drizzle ORM هي أداة ربط الكائنات بقواعد البيانات مكتوبة بلغة TypeScript، وتوفّر أداة لبناء الاستعلامات بصيغة قريبة من SQL، في حين أن 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.
إذا كنت تشغّل خادم Node.js واحدًا يعمل لفترات طويلة، فإن node-postgres يدير مجمّع اتصالات خاصًا به، لذا يمكنك أيضًا توجيه التطبيق إلى الاتصال المباشر. استخدم اتصال PgBouncer عند التوسّع أفقيًا إلى عدد كبير من العمليات أو عند التشغيل على منصات بلا خادم.
بعد تحديد Directly، فعّل Use SSL. سينتهي عنوان URL الخاص بالاتصال في تبويب url عندئذٍ بـ 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:
هل تُضيف ذلك إلى تطبيق قائم؟تخطَّ الأوامر mkdir وnpm init وnpm pkg set type=module. بدلاً من ذلك، شغّل في مشروعك الأمرين npm install drizzle-orm pg dotenv وnpm install -D drizzle-kit tsx @types/pg، ثم انتقل إلى قسم تهيئة الاتصال.

تهيئة الاتصال

انقل شهادة 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 migrate برمز الحالة 1 ومن دون أي رسالة error عندما يتعذّر عليه الاتصال، كأن يكون مسار sslrootcert أو كلمة المرور غير صحيحين. في هذه الحالة، اختبر DIRECT_DATABASE_URL أولًا باستخدام psql.
يطبّق 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 في متصفحك لعرض المهام المتبقية. ستظهر الاستجابة على النحو التالي:
لعرض البيانات في وحدة التحكم، افتح SQL console من الشريط الجانبي الأيسر لخدمتك، ثم وسّع guide_drizzle ثم public، وانقر على جدول todos. يحتوي المخطط drizzle على جدول سجل عمليات الترحيل. ويضم الجدول الصف المتبقي:

الخطوات التالية