أهلا بكم في هذا الدرس عن واحدة من أقوى قواعد البيانات مفتوحة المصدر: PostgreSQL. سنبدأ بالأساسيات ونتدرج تدريجياً للوصول إلى مواضيع متقدمة مع أمثلة عملية وتطبيقات تساعدك على الفهم بشكل أفضل.
توجهوا إلى الموقع الرسمي للـ PostgreSQL واختاروا نسخة البرنامج التي تناسب نظام التشغيل لديكم:
اختاروا أحدث إصدار متاح (مثلاً الإصدار 17). انقروا على زر Download Installer لتحميل المثبت.
عند تشغيل المثبت، ستظهر لكم نافذة تطلب تثبيت pgAdmin - وهي أداة رسومية للتعامل مع قاعدة البيانات. يفضل تثبيتها للسهولة.
بعد إكمال التثبيت، تحققوا من أن كل شيء تم تثبيته بشكل صحيح:
psql في قائمة البرامج أو استخدموا terminalpsqlإذا ظهر الأمر بدون أخطاء، فهذا يعني أن التثبيت تم بنجاح.
هناك ثلاث طرق رئيسية للتواصل مع قاعدة البيانات:
pgAdmin أو تطبيقات أخرىالطريقة الأولى هي كتابة الأمر البسيط:
psql
عند الاتصال بتفاصيل محددة، استخدموا الصيغة التالية:
psql -h localhost -p 5432 -U postgres
شرح الخيارات:
| الخيار | الوصف | القيمة الافتراضية |
|---|---|---|
-h | اسم الخادم (Host) |
اشترك في النشرة البريدية
دروس جديدة، مقالات، وأدوات مباشرة لبريدك.
localhost |
-p | رقم الميناء (Port) | 5432 |
-U | اسم المستخدم (Username) | postgres |
-W | طلب كلمة المرور (Password) | - |
المستخدم الافتراضي عند التثبيت هو postgres. إذا قمتم بتعيين كلمة مرور، استخدموا الخيار -W لإدخالها.
بعد الاتصال الناجح، ستلاحظون أن رمز الموجه تغير إلى:
postgres=#
\lهذا الأمر يعرض جميع قواعد البيانات الموجودة في النظام. ستجدون قواعد بيانات افتراضية مثل:
Name │ Owner │ Encoding
───────────────────┼──────────┼──────────
demo │ postgres │ UTF8
employee │ postgres │ UTF8
postgres │ postgres │ UTF8
template0 │ postgres │ UTF8
template1 │ postgres │ UTF8
ملاحظة مهمة: قواعد البيانات template0 و template1 قوالب نظام ولا يجب حذفها أو تعديلها، لأنها تستخدم لإنشاء قواعد بيانات جديدة.
\c demoإذا كنتم في قاعدة postgres وأردتم الانتقال إلى demo، ستظهر الرسالة:
You are now connected to database "demo" as user "postgres".
\dtهذا الأمر يعرض جميع الجداول في قاعدة البيانات الحالية:
Schema │ Name │ Type │ Owner
────────┼──────────┼───────┼─────────
public │ category │ table │ postgres
public │ events │ table │ postgres
\d categoryيظهر معلومات مفصلة عن جدول category مثل الأعمدة والأنواع والقيود:
Column │ Type │ Collation │ Nullable │ Default
────────┼─────────┼───────────┼──────────┼─────────
id │ uuid │ │ not null │
name │ text │ │ │
\dnيعرض جميع schemas الموجودة في قاعدة البيانات الحالية.
\i /path/to/file.sqlاستخدموا هذا الأمر لتنفيذ ملف SQL مباشرة.
\qأو اكتبوا quit للخروج من سطر أوامر PostgreSQL.
تخيلوا أن لديكم قاعدة بيانات واحدة تحتوي على تطبيقين مختلفين. قد تحتاج كلا التطبيقين إلى جدول باسم users. لكن قاعدة البيانات لا تسمح بتكرار أسماء الجداول في نفس قاعدة البيانات.
الحل التقليدي (غير الأمثل) قد يكون:
users_app1
users_app2
لكن هذا ليس حلاً جميلاً أو منظماً.
Schema هي طريقة لفصل الجداول داخل نفس قاعدة البيانات. يمكنكم تنظيم الجداول بناءً على الوظيفة أو التطبيق.
مثال:
تخيلوا تطبيق لمدرسة قيادة:
Schema: driving_school
├── users
├── courses
└── exams
Schema: education_system
├── students
├── teachers
└── lessons
بهذه الطريقة، يمكن أن يكون لديكم جدول users في كل schema دون تضارب.
CREATE SCHEMA education;بعد تنفيذ الأمر، ستحصلون على رسالة تأكيد:
CREATE SCHEMA
\dnستجدون:
List of schemas
Name │ Owner
───────────┼─────────
education │ postgres
public │ postgres
كل قاعدة بيانات تحتوي افتراضياً على schema باسم public.
لحذف schema:
DROP SCHEMA schema_name;لإعادة تسمية schema:
ALTER SCHEMA old_name RENAME TO new_name;على سبيل المثال:
ALTER SCHEMA test RENAME TO edo;عند إنشاء جدول، يمكنكم تحديد الـ schema الذي سينتمي إليه:
CREATE TABLE education.users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);الصيغة العامة:
CREATE TABLE schema_name.table_name (
columns...
);
| النوع | الوصف |
|---|---|
CHAR(n) | نص بطول ثابت. يضيف مسافات فارغة تلقائياً إذا كان النص أقصر. |
VARCHAR(n) | نص بطول متغير يصل إلى n حرف بدون مسافات فارغة. |
TEXT | نص بطول غير محدود. |
الفرق بين CHAR و VARCHAR:
إذا أنشأتم عمود CHAR(5) وأدخلتم القيمة "abc":
"abc " (مع مسافتين فارغتين)"abc" (بدون مسافات)| النوع | الوصف |
|---|---|
SMALLINT | رقم صحيح صغير (-32,768 إلى 32,767) |
INTEGER | رقم صحيح عادي (-2,147,483,648 إلى 2,147,483,647) |
BIGINT | رقم صحيح كبير |
NUMERIC(precision, scale) | رقم عشري دقيق |
FLOAT | رقم عشري (تقريبي) |
NUMERIC(5, 2)شرح المعاملات:
مثال: NUMERIC(5, 2) يقبل أرقام مثل 123.45 لكن ليس 1234.5.
النوع NUMERIC شائع جداً في التطبيقات التجارية حيث تتعامل مع أسعار وقيم مالية.
| النوع | الصيغة | الوصف |
|---|---|---|
DATE | YYYY-MM-DD | التاريخ فقط |
TIME | HH:MM:SS | الوقت فقط |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | التاريخ والوقت معاً |
TIMESTAMPTZ | YYYY-MM-DD HH:MM:SS+TZ | التاريخ والوقت مع المنطقة الزمنية |
إذا أردتم استخراج السنة من حقل التاريخ:
SELECT EXTRACT(YEAR FROM event_date) FROM events;يمكنكم أيضاً استخراج الشهر واليوم:
SELECT EXTRACT(MONTH FROM event_date) FROM events;
SELECT EXTRACT(DAY FROM event_date) FROM events;TIMESTAMP للأحداث العامةTIMESTAMPTZ عندما تحتاجون لتسجيل المنطقة الزمنية (مفيد للتطبيقات العالمية)في الدروس القادمة، سنتعمق أكثر في كيفية إنشاء جداول واستخدام أنواع البيانات هذه بشكل عملي.