Bun.sql، لذا لا حاجة إلى تثبيت أي مشغّل.
في هذا الدليل، ستربط Bun بخدمة ClickHouse Managed Postgres عبر اتصال TLS مُتحقَّق منه، ثم تنشئ جدولًا، وتنفّذ استعلامات ومعاملة، وأخيرًا تعرض الصفوف عبر HTTP باستخدام Bun.serve.
المتطلبات الأساسية
- Bun الإصدار 1.4 أو أحدث. اختُبر هذا الدليل باستخدام Bun 1.4.2 وPostgres 18.
- حساب على ClickHouse Cloud.
psql، لإنشاء قاعدة البيانات. ويمكنك بدلًا من ذلك تنفيذ عبارةCREATE DATABASEفي SQL console.
إنشاء خدمة ClickHouse Managed Postgres
في وحدة تحكم ClickHouse Cloud، انقر على New service ثم اختر Postgres. سيصبح المثيل جاهزًا خلال بضع دقائق. للاطلاع على شرح مفصّل للخطوات، راجع دليل البدء السريع.احصل على بيانات الاتصال
افتح خدمتك وانقر على Connect في الشريط الجانبي الأيسر. أبقِ الخيار Directly محددًا وفعّل Use SSL. سينتهي عنوان URL حينها بـsslmode=verify-full&sslrootcert=.... انقر على Download CA certificate لتنزيل شهادة CA الخاصة بالمثيل.
يعتمد هذا الدليل على الاتصال المباشر عبر المنفذ 5432. فتطبيق Bun.serve عملية تعمل لفترات طويلة، كما يدير Bun.sql مجمّع الاتصالات الخاص به، لذا لا حاجة إلى أداة تجميع اتصالات من جهة الخادم. أما إذا كنت تشغّل عددًا كبيرًا من عمليات Bun قصيرة الأمد، فراجع الاتصال عبر PgBouncer.
إعداد المشروع
أنشئ مشروعًا:تهيئة الاتصال
انقل شهادة CA التي نزّلتها إلى المشروع، ثم أعد تسميتها إلىca-certificate.pem:
<PASSWORD> واسم المضيف بالقيم المعروضة في النافذة المنبثقة Connect:
guide_bun إلى الملف .env، وأنشئ الملف إن لم يكن موجودًا. يحمّل Bun الملف .env تلقائيًا، ويقرأ التصدير sql من bun المتغير DATABASE_URL:
.env
.env إلى نظام التحكم في الإصدارات.
أضف هذه النصوص البرمجية إلى package.json، وادمجها في قسم scripts إن كان موجودًا بالفعل. تمرّر هذه النصوص البرمجية شهادة CA إلى Bun عبر NODE_EXTRA_CA_CERTS:
package.json
كيف يتحقق Bun من شهادة الخادم
- يجعل
sslmode=verify-fullالأداةBun.sqlتتحقق من سلسلة الشهادات ومن اسم المضيف معًا. - لا تنسخ المعلمة
sslrootcertمن عنوان URL الظاهر في وحدة التحكم، فالأداةBun.sqlلا تقرؤها، بل تمررها إلى الخادم على أنها إعداد وقت تشغيل، فيفشل الاتصال بالخطأunrecognized configuration parameter "sslrootcert". - يجب تعيين
NODE_EXTRA_CA_CERTSفي البيئة عند بدء تشغيل Bun، إذ لا يقرؤه Bun من الملف.env، ولهذا يُضاف في النصوص البرمجية. - في الإصدار Bun 1.4.2، يفشل تمرير الشهادة التي نزّلتها عبر الخيار
tls: { ca }فيSQLبالخطأcertificate signature failure. استخدمNODE_EXTRA_CA_CERTSبدلًا من ذلك.
إنشاء جدول
أنشئ الملفsetup.ts. يعرض هذا الملف حالة TLS الخاصة بالـ session، ثم ينشئ جدول todos:
setup.ts
الاستعلام عن قاعدة البيانات
يعتمدBun.sql على القوالب الموسومة (tagged templates)، إذ تُرسَل كل قيمة مُضمَّنة بوصفها معلمة ربط (bind parameter)، ولذلك يمكن تمرير مدخلات المستخدم بأمان. أنشئ الملف queries.ts:
queries.ts
sql.begin دالة الاستدعاء (callback) ضمن معاملة (transaction)، فتُثبِّت المعاملة عند انتهاء دالة الاستدعاء، وتتراجع عنها إذا رفعت الدالة استثناءً.
شغِّلها:
تقديم الصفوف عبر HTTP
أنشئ الملفserver.ts يتضمّن نقطة نهاية /todos لاستعراض الصفوف وإنشائها:
server.ts
التحقق
افتح http://localhost:3106/todos في متصفحك لعرض جميع الصفوف. ستظهر الاستجابة على النحو التالي، بعد تنسيقها لتسهيل قراءتها:الاتصال عبر PgBouncer
إذا كنت تشغّل عددًا كبيرًا من عمليات Bun قصيرة العمر، فاتصل عبر PgBouncer المضمَّن بدلًا من ذلك. اختر via PgBouncer في نافذة Connect المنبثقة، وغيّر المنفذ فيDATABASE_URL إلى 6432. أما شهادة CA وsslmode=verify-full فتبقى كما هي.
يعمل PgBouncer في وضع تجميع الاتصالات على مستوى المعاملة (transaction pooling). يستخدم Bun.sql افتراضيًا العبارات المُعدّة المسمّاة (named prepared statements)، وقد عملت عبر PgBouncer في اختباراتنا دون أي أخطاء. إذا ظهرت لك أخطاء prepared statement does not exist، فأنشئ العميل مع الخيار prepare: false:
prepare كخيار، لا ضمن عنوان URL. فكما هو الحال مع sslrootcert، تُمرَّر معلمة URL prepare=false إلى الخادم فيرفضها.
الخطوات التالية
- الاتصال: سلاسل الاتصال وPgBouncer وTLS
- الإعدادات: تغيير معلمات Postgres وPgBouncer
- النسخ المتماثلة للقراءة: توسيع نطاق عمليات القراءة
- توثيق Bun SQL: المرجع الكامل لواجهة برمجة التطبيقات
Bun.sql