Skip to main content
Prisma ORM هي أداة ربط الكائنات بقواعد البيانات مكتوبة بلغة TypeScript، توفّر مخططًا تصريحيًا وأداة ترحيل (Prisma Migrate) وعميلًا مُولَّدًا آمنًا من حيث الأنواع. ستربط في هذا الدليل Prisma بخدمة ClickHouse Managed Postgres، وتنشئ جدولًا عبر عملية ترحيل، ثم تستعلم عنه من برنامج نصي ومن نقطة نهاية HTTP بسيطة. يعتمد هذا الدليل على Prisma ORM 7 (جرى اختباره على الإصدار 7.10.0)، وهو الإصدار المستقر الحالي.

المتطلبات الأساسية

  • Node.js بالإصدار 20.19 أو 22.12 أو 24 فما فوق
  • خدمة ClickHouse Managed Postgres
  • psql، لإنشاء قاعدة البيانات. ويمكنك أيضًا تنفيذ عبارة CREATE DATABASE في SQL console.
  • على نظام macOS: ‏Docker، لتشغيل Prisma Migrate (راجع تشغيل الترحيل)

إنشاء خدمة ClickHouse Managed Postgres

في وحدة تحكم ClickHouse Cloud، انقر على New service ثم اختر Postgres. سيصبح المثيل جاهزًا في غضون دقائق قليلة. للاطلاع على شرح مفصّل للخطوات، راجع دليل البدء السريع.

احصل على بيانات الاتصال

انقر على Connect في الشريط الجانبي الأيسر لخدمتك. تعرض النافذة المنبثقة اسم المستخدم وكلمة المرور والخادم والمنفذ، إلى جانب سلاسل اتصال جاهزة للاستخدام. يستخدم هذا الدليل اتصالين، لأن Prisma يتضمن مكوّنين يتواصلان مع قاعدة البيانات:
  • تطبيقك (Prisma Client) يتصل عبر PgBouncer على المنفذ 6432. يتولى PgBouncer تجميع الاتصالات، ما يتيح للعديد من عمليات التطبيق أو مثيلات serverless مشاركة عدد محدود من الاتصالات الخلفية بـ Postgres.
  • واجهة سطر الأوامر الخاصة بـ Prisma (Prisma Migrate) تتصل مباشرةً على المنفذ 5432. يحصل Prisma Migrate على قفل استشاري على مستوى الـ session طوال مدة تشغيله. وفي وضع تجميع المعاملات (transaction pooling) في PgBouncer، قد يظل هذا القفل محجوزًا على اتصال خلفي مُجمَّع يخدم عملاء آخرين لاحقًا، فتتعطل عمليات الترحيل التالية في انتظار تحريره.
في أعلى النافذة المنبثقة، بدّل بين Directly وvia PgBouncer لعرض منفذ كل منهما. الخادم وبيانات الاعتماد واحدة في كلا الاتصالين؛ والاختلاف الوحيد هو المنفذ. عند تحديد via PgBouncer، انقر على Download CA certificate. أما عند تحديد Directly، ففعّل Use SSL أولًا لإظهار الزر. يحمل الملف الاسم <service-name>-ca-certificate.pem، ويمكنك العثور عليه أيضًا ضمن Settings → CA Certificate. هذه الشهادة خاصة بمثيلك وحده، وتستخدمها للاتصال مع sslmode=verify-full، الذي يتحقق من أنك تتصل بخادمك أنت فعلًا.

إعداد المشروع

أنشئ مشروع TypeScript، ثم ثبّت واجهة سطر الأوامر الخاصة بـ Prisma، وPrisma Client، وadapter المشغّل node-postgres، وdotenv:
ثبّت prisma@7 و@prisma/client@7 صراحةً. فحتى وقت كتابة هذا الدليل، يشير الوسم latest للحزمة prisma في npm إلى إصدار مرشح من Prisma 8، يعتمد طريقة إعداد تختلف عن تلك الموضحة في هذا الدليل.
أنشئ ملف tsconfig.json:
هل تُضيفه إلى تطبيق قائم؟تخطَّ خطوات mkdir وnpm init وملف tsconfig.json. شغّل في مشروعك الأمرين npm install tsx @types/pg prisma@7 --save-dev وnpm install @prisma/client@7 @prisma/adapter-pg pg dotenv، ثم انتقل إلى قسم تهيئة Prisma.

تهيئة Prisma

1

تشغيل prisma init

ينشئ هذا الأمر الملف prisma/schema.prisma وملف إعداد Prisma المسمى prisma7.config.ts، ويضيف عنصرًا نائبًا للمتغير DATABASE_URL إلى .env والعميل المُولَّد إلى .gitignore (مع إنشاء أيٍّ من الملفين عند الحاجة)، كما يضيف مهارات Prisma لوكلاء البرمجة المعتمدين على الذكاء الاصطناعي. تُسمّي إصدارات Prisma 7.10 وما بعدها ملف الإعداد prisma7.config.ts تجنّبًا للتعارض مع صيغة Prisma 8.
2

إضافة شهادة CA

انقل شهادة CA التي نزّلتها إلى الدليل الجذر للمشروع وأعد تسميتها إلى ca-certificate.pem:
تُحدَّد مسارات الشهادات النسبية انطلاقًا من الدليل الذي تشغّل منه الأوامر، لذا شغّل جميع الأوامر الواردة في هذا الشرح من الدليل الجذر للمشروع.

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

1

إنشاء قاعدة بيانات

أنشئ قاعدة بيانات للتطبيق. استبدل <PASSWORD> والمضيف بالقيم الظاهرة في النافذة المنبثقة Connect:
2

تعيين عناوين URL للاتصال

في الملف .env، استبدل العنصر النائب DATABASE_URL الذي أضافه الأمر prisma init بعنواني URL الاتصال التاليين، ويشير كلاهما إلى قاعدة البيانات guide_prisma. استخدم كلمة المرور الظاهرة في النافذة المنبثقة Connect:
يستخدم العنوانان معلمات TLS مختلفة لأن كلًّا منهما يقرؤه مشغّل مختلف:
  • DATABASE_URL يقرؤه node-postgres عبر @prisma/adapter-pg، وهو يدعم معلمات sslmode=verify-full&sslrootcert=... القياسية، أي المعلمات نفسها المعروضة في النافذة المنبثقة Connect.
  • DIRECT_URL يقرؤه محرك المخطط التابع لواجهة سطر الأوامر في Prisma، وله معلماته الخاصة: sslcert هو مسار شهادة CA، وsslaccept=strict يفعّل التحقق من الشهادة ومن اسم المضيف.
لا تستخدم sslmode=verify-full&sslrootcert=... في عنوان URL الخاص بواجهة سطر الأوامر في Prisma؛ إذ يتجاهل محرك المخطط sslrootcert، ولا يتحقق من شهادة الخادم إطلاقًا في غياب sslaccept=strict، فيكون الاتصال مشفّرًا لكنه غير موثَّق.
3

توجيه Prisma CLI إلى الاتصال المباشر

استبدل محتويات الملف prisma7.config.ts بما يلي:
في Prisma 7، لا يُستخدم عنوان URL الموجود في ملف الإعداد إلا من قِبل واجهة سطر الأوامر. أما Prisma Client فيحصل على اتصاله من adapter المشغّل، الذي ستهيّئه في الاستعلام عن قاعدة البيانات.

تعريف المخطط وتشغيل عملية الترحيل

1

إضافة نموذج

أضف النموذج Todo إلى نهاية الملف prisma/schema.prisma:
2

تشغيل عملية الترحيل

على Linux، شغّل Prisma Migrate مباشرةً:
على macOS، شغّل الأمر نفسه داخل حاوية Linux:
لا تقبل ClickHouse Managed Postgres سوى TLS 1.3. وعلى macOS، يعتمد محرك المخطط في واجهة سطر الأوامر الخاصة بـ Prisma على مكتبة TLS الخاصة بالنظام، وهي لا تستطيع الاتصال بهذه الإعدادات. فيفشل الأمر بالخطأ P1011: Error opening a TLS connection: One or more parameters passed to a function were not valid، أو بالخطأ bad protocol version إذا أزلت sslcert (prisma/orm#29600). ويقتصر ذلك على أوامر واجهة سطر الأوامر التي تتصل بقاعدة البيانات، مثل prisma migrate وprisma db pull. أما Prisma Client فلا يتأثر، لأنه يتصل عبر node-postgres. ولتجاوز هذه المشكلة، شغّل واجهة سطر الأوامر داخل حاوية Linux، أو ضمن مسار CI القائم على Linux لديك.
تُنشئ Prisma ملف ترحيل SQL في prisma/migrations/ ثم تطبّقه:
3

توليد Prisma Client

يُولَّد العميل في generated/prisma. ولأن هذا الأمر لا يتصل بقاعدة البيانات، يمكنك تشغيله على أي منصة.

الاستعلام من قاعدة البيانات

1

إنشاء Prisma Client

أنشئ الملف lib/prisma.ts. يتصل الـ adapter المسمى PrismaPg باستخدام DATABASE_URL عبر PgBouncer:
لا حاجة إلى أي إعدادات خاصة بـ PgBouncerيرسل @prisma/adapter-pg كل استعلام على هيئة عبارة مُعدّة مسبقًا (prepared statement) غير مسماة، ولا ينفّذ DEALLOCATE أبدًا، ما يجعله متوافقًا مع وضع تجميع المعاملات (transaction pooling) في PgBouncer. كما يتعامل دون أخطاء مع مئات الاستعلامات المختلفة التي تُنفَّذ بالتزامن عبر اتصالات الخلفية المجمّعة. ولم تعد هناك حاجة إلى معلمة URL pgbouncer=true التي كانت تُستخدم في إصدارات Prisma الأقدم، إذ لا أثر لها مع adapter المشغّل.
2

تشغيل استعلامات CRUD

أنشئ الملف script.ts:
شغّله:
3

تقديم البيانات عبر HTTP

أنشئ الملف server.ts، وهو خادم HTTP بسيط يُنشئ المهام عبر POST /todos ويعرضها عند تلقّي أي طلب GET:
شغّل الخادم:
في طرفية أخرى، أضف مهمتين:
افتح http://localhost:3000/todos في متصفحك لعرضهما. ستبدو الاستجابة على النحو التالي:

التحقق في SQL console

في وحدة تحكم ClickHouse Cloud، افتح SQL console الخاصة بخدمتك، ثم وسّع قاعدة بياناتك والمخطط public، واختر الجدول Todo. ستجد أيضًا الجدول _prisma_migrations، الذي يسجّل فيه Prisma Migrate عمليات الترحيل المطبّقة. يحتوي الجدول Todo على الصفّين اللذين أضفتهما عبر نقطة نهاية HTTP:

استكشاف الأخطاء وإصلاحها

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