PostgreSQL
PostgreSQL نظام قواعد بيانات علائقي مفتوح المصدر، يلتزم بمعيار SQL ويضيف أنواعاً متقدمة مثل JSONB والمصفوفات والبحث النصي.
أنواع مفيدة
| النوع | الاستخدام |
|---|---|
TEXT | نصوص بأي طول |
TIMESTAMPTZ | وقت مع منطقة زمنية (يُخزن بتوقيت UTC) |
NUMERIC(10,2) | مبالغ مالية بدقة تامة |
JSONB | بيانات JSON قابلة للفهرسة والاستعلام |
UUID | معرفات فريدة عالمياً |
الفهارس
الفهرس يسرّع البحث على حساب مساحة إضافية وكتابة أبطأ قليلاً:
CREATE INDEX posts_user_id_idx ON posts (user_id);
CREATE INDEX users_email_lower_idx ON users (lower(email)); -- فهرس على تعبير
المعاملات
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- أو ROLLBACK للتراجع عن الكل
المعاملة تضمن أن تنجح كل العمليات معاً أو لا ينجح شيء منها. مستوى العزل الافتراضي READ COMMITTED.
فهم الأداء
EXPLAIN ANALYZE
SELECT * FROM posts WHERE user_id = 7;
يعرض خطة التنفيذ الفعلية والزمن. Seq Scan على جدول كبير مع شرط انتقائي يعني غالباً أن فهرساً مفقود.
النسخ الاحتياطي
pg_dump --format=custom --file=backup.dump mydb
pg_restore --dbname=mydb_restore backup.dump
اختبر الاستعادة دورياً؛ النسخة التي لم تُجرَّب استعادتها ليست نسخة موثوقة.
أخطاء شائعة
- تخزين الوقت بنوع
TIMESTAMPبلا منطقة زمنية ثم الخلط بين التوقيتات. - استخدام
FLOATللمبالغ المالية. - فتح اتصال جديد لكل طلب بدل استخدام مجمّع اتصالات (pool).