PostgreSQL: التثبيت وأول قاعدة بيانات لك
تثبيت PostgreSQL على VDS، والأدوار وأول قاعدة بيانات، وكيف يعمل التحقق في pg_hba.conf، ومعالجة أخطاء الاتصال.
آخر تحديث 23 أغسطس 2026
PostgreSQL هو الخيار الافتراضي للتطبيقات في Python وNode.js وGo. يتعامل مع البيانات بصرامة أكبر من MySQL ويتعامل مع الاستعلامات المعقدة بشكل أفضل.
التثبيت
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
على AlmaLinux وCentOS Stream تحتاج إلى إنشاء العنقود يدويًا:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
تحقق من الإصدار والحالة:
sudo -u postgres psql -c "SELECT version();"
الدور وقاعدة البيانات
في PostgreSQL يُسمى المستخدم دورًا. أنشئ دورًا منفصلًا لكل مشروع:
sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;
سلسلة الاتصال للتطبيق:
postgresql://shop:password@127.0.0.1:5432/shop
تحقق من مستخدم النظام:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
المصادقة
ملفان يحددان من يمكنه تسجيل الدخول ومن أي مكان.
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — تُقرأ القواعد من الأعلى إلى الأسفل، وتفوز أول قاعدة مطابقة:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
تعني طريقة peer أن «مستخدم النظام يطابق الدور» — ولهذا يعمل sudo -u postgres psql دون كلمة مرور، بينما لا يعمل الأمر نفسه من مستخدم آخر.
بعد التعديل: systemctl reload postgresql. لا تستخدم طريقة trust أبدًا — فهي تسمح لأي شخص بالدخول دون كلمة مرور على الإطلاق.
للوصول من الخارج، اقرأ الوصول عن بُعد: يجب ألا تفتح منفذًا للخارج دون تقييده حسب العنوان.
الأخطاء الشائعة
| العَرَض | السبب |
|---|---|
role "..." does not exist | تتصل كمستخدم نظام ليس له دور |
password authentication failed | القاعدة في pg_hba.conf تتطلب طريقة مختلفة، أو لم تُضبط كلمة مرور |
could not connect to server: No such file or directory | الخدمة لا تعمل، أو تستخدم منفذًا مختلفًا |
permission denied for schema public | في الإصدارات 15+ يجب منح الحقوق على public صراحةً: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | استُنفد max_connections — أعدّ تجمّع اتصالات على جانب التطبيق |
السجلات: /var/log/postgresql/ أو journalctl -u postgresql.
الخطوات التالية
- ضبط الذاكرة حسب المستوى — على VDS-1 القيم الافتراضية منخفضة بشكل ملحوظ.
- النسخ الاحتياطي —
pg_dumpوالاستعادة. - ترحيل قاعدة بيانات من خادم آخر.
لا تمنح التطبيق دور مستخدم فائق. يمكن لدور مالك قاعدة بيانات عادي أن يفعل كل ما يحتاجه، لكنه لا يستطيع حذف قواعد البيانات المجاورة إذا فشل الترحيل.