ما هو Postgres؟ قاعدة البيانات خلف كثير من التطبيقات
Postgres (واسمه الرسمي PostgreSQL) قاعدة بيانات علائقية مجانية ومفتوحة المصدر: برنامج يخزن بيانات التطبيق في جداول من صفوف وأعمدة، ويربط الجداول ببعضها، ويجيب عن الأسئلة حولها بلغة اسمها SQL. يشتهر بالموثوقية، والصرامة في الحفاظ على صحة البيانات، والمرونة التي تكفي لأي شيء من قائمة تسجيل بسيطة إلى سجلات شركة كبيرة. وكثير من تطبيقات الويب، وكثير من الخدمات التي تستضيفها، مبني عليه.
لماذا يهم الأمر عند البناء بالذكاء الاصطناعي
حين يضيف مُنشئ التطبيقات بالذكاء الاصطناعي «قاعدة بيانات» إلى مشروعك، فهناك احتمال جيد أن تكون Postgres. لا تحتاج إلى كتابة SQL لاستخدامه، لكن القليل من الفهم يفيد كثيرًا:
- يمكنك وصف البيانات بالشكل الذي تحتاجه قاعدة البيانات. «للعملاء طلبات كثيرة، ولكل طلب عناصر كثيرة» يُترجم مباشرة إلى جداول.
- يمكنك أن تطلب الحماية المناسبة. يستطيع Postgres رفض البيانات السيئة بنفسه، كبريد إلكتروني مكرر أو طلب لعميل غير موجود، إذا وضع الذكاء الاصطناعي القواعد.
- يمكنك قراءة ما فعله الذكاء الاصطناعي. أسماء الجداول والأعمدة والعلاقات سهلة التحقق في عارض جداول، حتى لو لم تلمس الكود.
تشبيه يومي: مكتب ملفات صارم جدًا
تخيل مكتب ملفات فيه خزانة لكل نوع من الأشياء: واحدة للعملاء، وواحدة للطلبات، وواحدة للمنتجات. كل بطاقة في أحد الأدراج لها الحقول المطبوعة نفسها لتملأها. ولكل بطاقة رقم فريد، وبطاقة الطلب لا تكرر تفاصيل العميل، بل تقول «العميل رقم 214» فتشير إلى درج العملاء.
الموظف صارم. لن يقبل ملف طلب يشير إلى عميل غير موجود. ولن يقبل بطاقة تُركت فيها خانة التاريخ فارغة إذا كانت مطلوبة. وإذا طلبت منه نقل مبلغ من حساب إلى آخر، فإما ينفذ الجزأين معًا أو لا ينفذ أيًا منهما، ولا ينفذ جزءًا واحدًا فقط.
هذا الموظف هو Postgres. والأدراج هي الجداول، والحقول المطبوعة هي الأعمدة، وكل بطاقة صف، ورابط «العميل رقم 214» هو المفتاح الأجنبي (Foreign key).
ما الذي تجيده Postgres
| الميزة | ما تعنيه بكلمات بسيطة |
|---|---|
| الجداول والعلاقات | تعيش البيانات في جداول تشير إلى بعضها، فلا يُنسخ شيء في خمسة أماكن |
| SQL | لغة معيارية لطرح الأسئلة: «كل الطلبات غير المدفوعة من الشهر الماضي، الأحدث أولًا» |
| المعاملات (ACID) | مجموعة من التغييرات إما أن تحدث كلها أو لا تحدث أي منها، حتى لو توقف الخادم في منتصفها |
| القيود (Constraints) | قواعد تفرضها قاعدة البيانات بنفسها: حقول مطلوبة، وبريد إلكتروني فريد، وروابط صالحة بين الجداول |
| الفهارس (Indexes) | اختصارات للبحث تبقي البحث سريعًا مع نمو الجداول |
| JSONB | تخزين بيانات مرنة على هيئة مستندات في عمود، حين لا تناسب البنية الثابتة |
| البحث في النص الكامل | البحث في الكلمات داخل حقول النص دون خدمة بحث منفصلة، للحالات البسيطة |
| الإضافات (Extensions) | ملحقات مثل PostGIS للخرائط والمواقع، أو pgvector لتخزين تضمينات الذكاء الاصطناعي (Embeddings) |
| أمان على مستوى الصف (Row-level security) | قواعد داخل قاعدة البيانات تحدد الصفوف التي يحق لمستخدم معين رؤيتها |
بدأ Postgres مشروعًا بحثيًا في جامعة كاليفورنيا في بيركلي خلال الثمانينيات، وطُوّر بشكل مفتوح من مجتمع عالمي منذ التسعينيات. هذا التاريخ الطويل هو سبب كونه غالبًا الخيار الافتراضي: فهو موثّق جيدًا، ومدعوم على نطاق واسع، وكل مزود سحابي رئيسي يقدم نسخة مُدارة منه.
مثال عملي: تحويل جدول بيانات إلى جداول
لنفترض أنك تدير مشروع تموين صغيرًا وتتبع كل شيء في جدول بيانات واحد: كل صف يمثل مناسبة، فيه اسم العميل وهاتفه وبريده الإلكتروني، والتاريخ، وأصناف القائمة، والسعر.
تظهر المشكلات بسرعة. العميل نفسه يتكرر في ستة صفوف برقمي هاتف مختلفين. وأصناف القائمة مكتوبة في خلية واحدة كـ«كنافيه x40، سلطة x2»، فلا تستطيع جمع عدد قطع الكنافيه التي أعددتها في الشهر.
في Postgres تتحول المعلومات نفسها إلى أربعة جداول:
| الجدول | الأعمدة | ملاحظات |
|---|---|---|
| clients | id، name، phone، email | البريد الإلكتروني يجب أن يكون فريدًا |
| events | id، client_id، date، venue، status | يجب أن يطابق client_id عميلًا حقيقيًا |
| menu_items | id، name، unit_price | صف واحد لكل طبق |
| event_items | event_id، menu_item_id، quantity | يربط المناسبات بالأطباق مع الكمية |
الآن يعيش رقم هاتف العميل في مكان واحد. والسؤال «كم قطعة كنافيه أعددنا في مارس؟» استعلام SQL واحد. وحين تسجل مناسبة جديدة مع أصنافها، تضمن المعاملة ألا تنتهي بمناسبة محفوظة نصف أصنافها فقط.
هذه الخطوة هي ما يتجاوزه الناس حين يطلبون من الذكاء الاصطناعي أن «يصنع تطبيقًا من جدولي». ويتعمق دليل تحويل جدول بيانات إلى تطبيق في الموضوع.
شرح المصطلحات الأساسية
- الجدول (Table)، الصف (Row)، العمود (Column): نوع من الأشياء، ونسخة واحدة منه، ومعلومة واحدة عنه.
- المفتاح الأساسي (Primary key): المعرّف الفريد لكل صف، وغالبًا ما يكون
id. - المفتاح الأجنبي (Foreign key): عمود يشير إلى صف في جدول آخر، مثل
client_id. - المخطط (Schema): تصميم كل جداولك وأعمدتها.
- الترحيل (Migration): تغيير محفوظ وقابل للتكرار على المخطط، مثل «أضف عمود
venueإلى events». - الاستعلام (Query): سؤال أو تعليمة مكتوبة بلغة SQL.
- سلسلة الاتصال (Connection string): العنوان وكلمة المرور اللذان تستخدمهما الخلفية للوصول إلى قاعدة البيانات. وهي سر، انظر متغيرات البيئة والأسرار.
- Postgres المُدار (Managed Postgres): خدمة تشغّل Postgres وتنسخه احتياطيًا وتحدّثه عنك.
أما العمليات اليومية التي يقوم بها كل تطبيق على هذه الجداول، أي الإنشاء والقراءة والتحديث والحذف، فانظر ما معنى CRUD.
أخطاء شائعة ومفاهيم خاطئة
- جدول عملاق واحد. نسخ جدول البيانات عمودًا بعمود يؤدي إلى المشكلات نفسها من التكرار. افصل ما يتكرر في جداول خاصة به.
- تخزين القوائم في حقل نص واحد. «كنافيه x40، سلطة x2» في عمود واحد لا يمكن عدّه أو البحث فيه بشكل صحيح. استخدم جدول ربط.
- غياب القيود. بدون «البريد يجب أن يكون فريدًا» أو «كل مناسبة تحتاج عميلًا»، تتسلل البيانات السيئة بهدوء وتظهر بعد أشهر.
- تغيير قاعدة البيانات يدويًا في الإنتاج. اطلب تغييرات المخطط كعمليات ترحيل، حتى يُسجَّل التغيير ويمكن تكراره.
- السماح للمتصفح بالتحدث إلى قاعدة البيانات مباشرة. يجب أن تمر الواجهة عبر خلفيتك التي تتحقق من الصلاحيات. وكلمة مرور قاعدة البيانات لا تنتمي أبدًا إلى كود الصفحة.
- «Postgres للشركات الكبيرة فقط». يعمل بالكفاءة نفسها لقائمة انتظار من 50 صفًا، ولن تحتاج إلى الانتقال منه مع نمو التطبيق.
- افتراض أن قاعدة البيانات نسخة احتياطية. إنها تخزّن البيانات، ولا تحميك تلقائيًا من حذفها. تحقق من النسخ الاحتياطية التي توفرها منصة الاستضافة.
ماذا تطلب من مُنشئ التطبيقات بالذكاء الاصطناعي
- «احفظ [الأشياء] في قاعدة بيانات. الجداول: … بهذه الحقول: … اربط كل [طلب] بـ[عميل].»
- «اجعل البريد الإلكتروني فريدًا في جدول العملاء. اجعل هذه الحقول مطلوبة. لا تسمح بطلب بلا عميل.»
- «استخدم الترحيلات (Migrations) لكل تغيير في المخطط.»
- «أضف فهارس لأكثر عمليات البحث التي نجريها: الطلبات حسب العميل وحسب التاريخ.»
- «كل الوصول إلى قاعدة البيانات يمر عبر الخادم. أبقِ سلسلة الاتصال في متغيرات البيئة.»
إذا كانت فكرة قاعدة البيانات جديدة عليك تمامًا، فابدأ بـما هي قاعدة البيانات، ثم عُد إلى هنا. ويوضح التطبيق الكامل (Full-stack) أين تقع قاعدة البيانات بجانب الواجهة والخلفية.
Postgres في Mythex
تمنح Mythex كل مشروع يحتاج إليها قاعدة Postgres مخصصة به. لا تحتاج إلى إعدادها: اطلب ذلك في المحادثة («احفظ عناوين بريد قائمة الانتظار في قاعدة بيانات») أو استخدم الأمر /database، فتربطها Mythex وتحقن تفاصيل الاتصال في تطبيقك، ويمكنها إنشاء الجداول لك. وقاعدة بيانات التطبيق المنشور تنام بعد خمس دقائق من الخمول وتستيقظ مع الطلب التالي، وتُحاسب على الوقت الذي كانت فيه مستيقظة فعلًا، من رصيد الأرصدة نفسه المستخدم للبناء. التفاصيل في وثائق قاعدة البيانات، وقوالب لوحات التحكم مكان جيد لرؤية تطبيقات مدعومة بالبيانات.
الأسئلة
هل Postgres هو نفسه PostgreSQL؟
نعم. PostgreSQL هو الاسم الرسمي، وPostgres هو الاسم المختصر الشائع، والاسمان يشيران إلى قاعدة البيانات العلائقية المفتوحة المصدر نفسها.
هل Postgres مجاني؟
نعم. PostgreSQL مفتوح المصدر بموجب ترخيص PostgreSQL المتساهل، فيمكنك استخدامه مجانًا، بما فيه في المنتجات التجارية. تدفع فقط ثمن الخوادم أو الخدمة المُدارة التي تشغّله.
ما الفرق بين Postgres وMySQL؟
كلاهما قاعدة بيانات SQL علائقية مجانية، وكلاهما مناسب لمعظم التطبيقات. يشتهر Postgres بسلامة البيانات الصارمة وأنواع البيانات الغنية مثل JSONB والمصفوفات، ومنظومة إضافات واسعة. أما MySQL فيشتهر بالبساطة وتاريخ طويل في استضافة الويب.
هل Postgres مناسب لتطبيق صغير؟
نعم. يعمل جيدًا لقائمة انتظار من جدول واحد، ولأنظمة الإنتاج الكبيرة، فلن تحتاج إلى تغيير قاعدة البيانات مع نمو التطبيق. والخدمات المُدارة تجعل تشغيله ممكنًا دون مدير قواعد بيانات.