تعدّ أنظمة إدارة قواعد البيانات العلاقية Relational database management systems، عنصرا أساسيا في الكثير من مواقع الويب والتطبيقات؛ فهي تتيح وسيلة مبنية لتخزين المعلومات، تنظيمها والوصول إليها.
PostgrSQL (أو Postgres) هو نظام علاقي لإدارة قواعد البيانات يستخدم لغة الاستعلام SQL. يشيع استخدام PostgreSQL في المشاريع الصغيرة والكبيرة على حد السواء؛ ويتميز بتوافقه مع المعايير Standards ووجود خصائص متقدمة كثيرة مثل المعاملات Transactions الموثوقة والتزامن Concurrency دون قفل القراءة.
يشرح هذا المقال كيفية تثبيت Postgres على Ubuntu 14.04 وبعض الأمور الأساسية لاستخدامه.
التثبيت
تحتوي المستودعات الافتراضية لأوبنتو على حزم Postgres لذا يمكننا تثبيته بدون متاعب.
نبدأ بتحديث الحزم ثم تثبيت حزمتي postgresql
وpostgresql-contrib
. تثبت الحزمة الأخيرة أدوات مساعدة ووظائف إضافية:
sudo apt-get update sudo apt-get install postgresql postgresql-contrib
نستطيع الآن بعد إكمال تثبيت البرنامج عرض كيفية عمله و فيمَ يختلف عن أنظمة إدارة قاعد البيانات المشابهة.
استخدام قواعد بيانات PostgreSQL وأدواره Roles
يستخدم PostgreSQL مفهوم الدور للمساعدة في الاستيثاق Authentication والتصريح Authorization. يوجد شبه بين الأدوار في PostgreSQL وحسابات المستخدمين في الأنظمة الشبيهة بيونكس؛ إلا أن PostgreSQL لا يميّز بين المستخدمين والمجموعات ويفضل مفهوم الدور.
يستخدم PostgreSQL مباشرة بعد تثبيته طريقة الاستيثاق ident
التي تتمثل في ربط دور PostgreSQL بحساب موافق له على لينكس/يونكس. يمكن الولوج إلى دور Postgres - إن وُجد - بالولوج إلى حساب المستخدم الموافق له على النظام.
تنشئ عملية التثبيت حساب مستخدم باسم postgres
مربوطا بدور PostgreSQL الافتراضي. يجب الولوج إلى الحساب لكي نستطيع استخدام PostgreSQL؛ نفذ الأمر التالي لهذا الغرض:
sudo -i -u postgres
سيُطلب منك إدخال كلمة سرك الاعتيادية ثم تُنقَل إلى محث Prompt مستخدم PostgreSQL.
نفذ الأمر التالي للحصول على محث PostgreSQL:
psql
ستُنقَل مباشرة إلى سطر أوامر يمكِّنك من التفاعل مع نظام قاعدة البيانات.
سنشرح في الفقرات المقبلة كيفية استخدام الأدوار الأخرى وقواعد البيانات من أجل الحصول على مرونة أكثر في المستخدم وقاعدة البيانات الذين نريد العمل معهما.
اخرج من محث PostgreSQL بتنفيذ الأمر:
\q
يعيدك الأمر إلى محث Shell الخاص بالمستخدم postgres
.
ملحوظة: إن نفذت الأمر psql
دون الولوج إلى المستخدم postgres
فستحصُل على رسالة خطأ تفيد بأن الدور الذي تستخدمه غير موجود.
إنشاء دور جديد
يمكن لحساب postgres
على لينكس الدخول إلى نظام قاعدة البيانات؛ إلا أن لديه أيضا إمكانية الوصول إلى أدوات لإنشاء الأدوار وقواعد البيانات نظرا لكونه مربوطا بالدور الإداري Postgres
.
نستخدم الأمر التالي لإنشاء دور جديد:
createuser --interactive
الأمر في الأساس هو سكربت Shell تفاعلي يستدعي أوامر Postgres الصحيحة من أجل إنشاء دور وفقا لما تحدده. يطرح السكربت سؤالين الأول اسم الدور، والثاني هل يجب أن تكون لديه صلاحيات إدارية أم لا. في حال الإجابة بلا على السؤال الثاني تضاف بعض الأسئلة الأخرى مثل هل يُسمح له بإنشاء قاعدة بيانات. توجد خيارات أخرى للاستخدام مع أمر createuser
يمكن الاطلاع عليها بتنفيذ الأمر:
man createuser
إنشاء قاعدة بيانات جديدة
يفترض PostgreSQL عند تثبيته، إضافةً إلى طريقة الاستيثاق (ربط دور PostgreSQL بحساب موافق له على لينكس/يونكس)، وجودَ قاعدة بيانات موافقة للدور المراد الاتصال به. يعني هذا أنه إن كان يوجد دور باسم test1
فإنه سيحاول افتراضا (أي عند استخدام أمر psql
دون خيارات إضافية) الاتصال بقاعدة بيانات باسم test1
.
ينشئ اﻷمر التالي قاعدة بيانات مناسبة:
createdb test1
استخدام الدور الجديد للاتصال بـPostgreSQL
سنفترض أن لديك حساب لينكس باسم test1
(نفذ اﻷمر adduser test1
لإنشائه)، وأنك أنشأت دور PostgreSQL وقاعدة بيانات مع تسمية الدور وقاعدة البيانات بـtest1
.
نفذ الأمر التالي للانتقال لاستخدام الحساب test1
على لينكس:
sudo -i -u test1
ثم يمكنك بعدها الاتصال بقاعدة البيانات test1
بالدور test1
:
psql
ستلج مباشرة إلى محث إدارة قاعدة البيانات.
استخدم الخيار d-
مع ذكر اسم قاعدة البيانات، إن أردت أن يتصل الدور بقاعدة بيانات مختلفة عن تلك الموافقة له في الاسم:
psql -d postgres
يعطيك الأمر التالي معلومات عن دور PostgreSQL الذي تستخدمه للاتصال وقاعدة البيانات التي تتصل بها:
\conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
يساعد الأمر في تذكيرك بالإعدادات الحالية.
إنشاء جداول البيانات
نبدأ، بعد أن تعرفنا على كيفية الاتصال بنظام PostgreSQL لإدارة قواعد البيانات، بعرض طريقة تنفيذ بعض المهام الأساسية.
سننشئ أولا جدولا Table نحفظ فيه بيانات، وليكن الجدول عن أدوات تُستخدَم في الملعب.
في ما يلي الصيغة القاعدية لإنشاء جدول:
CREATE TABLE table_name ( column_name1 col_type (field_length) column_constraints, column_name2 col_type (field_length), column_name3 col_type (field_length) );
نبدأ بتعريف اسم جدول البيانات table_name
، ثم الأعمدة Columns المكوِّنة للجدول (column_name2
، column_name1
وcolumn_name3
). نحدّد نوع البيانات التي يحويها كل عمود (col_type
) وطولها (field_length
). يمكن أيضا وضع قيود constraints على العمود (column_constraints
).
ننشئ لغرض التجربة الجدول المحدود التالي:
CREATE TABLE playground ( equip_id serial PRIMARY KEY, type varchar (50) NOT NULL, color varchar (25) NOT NULL, location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')), install_date date );
أنشأنا جدولا باسم playground
لسرد بضع معدّات رياضية نمتلكها. العمود الأول من الجدول equip_id
هو معرِّف الأداة ونوعه serial
(عدد صحيح يزداد تلقائيّا مع كل إدخال للبيانات في الجدول). وضعنا القيد PRIMARY KEY
على العمود الأول للإشارة إلى أن قيمة العمود يجب أن تكون وحيدة (أي لا توجد أداتان في الجدول لديهما نفس قيمة العمود الأول) وغير خاوية.
العمودان الثاني والثالث يحدّدان على التوالي نوع الأداة ولونها؛ لا يمكن أن يكون أي من العمودين خاويا بسبب وضع القيد NOT NULL
عليهما. وضعنا على العمود الرابع قيدا يتمثل في أن قيمة الحقل يجب أن تكون واحدة من ثمانية قيم ممكنة. يسجل العمود الأخير تاريخ تثبيت الأداة لذا أعطيناه نوع البيانات date
.
لم نحدّد لاثنين من الأعمدة طول البيانات، ويعود السبب في ذلك أن بعض الأنواع تحدد تلقائيا طول الحقل.
نستخدم الأمر التالي لعرض الجداول الموجودة في قاعدة البيانات التي نعمل عليها:
\d
النتيجة:
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+---------- public | playground | table | postgres public | playground_equip_id_seq | sequence | postgres (2 rows)
يظهر جدول playground
الذي أنشأناه؛ ولكن يوجد معه أمر آخر: playground_equip_id_seq
وهو من نوع sequence
(متتالية). المتتالية playground_equip_id_seq
هي تمثيل لنوع البيانات serial
الذي حددناه للعمود equip_id
. تخزن المتتالية العدد الذي يجب أن تُعطَى قيمته للعمود عند العملية الموالية لإضافة البيانات في الجدول.
يصبح الأمر على النحو التالي إن أردت رؤية الجداول فقط:
\dt
النتيجة:
List of relations Schema | Name | Type | Owner --------+------------+-------+---------- public | playground | table | postgres (1 row)
إضافة تسجيلات لجدول، الاستعلام عنها وحذفها
الخطوة التالية لإنشاء جدول هي إضافة بيانات إليه. لإضافة تسجيلات Records إلى جدول نحدّد اسم الجدول، نسمي الأعمدة ثم نوفر البيانات لكل عمود. سنضيف لوح انزلاق Swing وأرجوحة Slide إلى جدول playground
على النحو التالي:
INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28'); INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');
لاحظ أن قيمة العمود يجب أن تكون بين ظفرين''
بينما لا يحتاج اسم العمود لذلك. لاحظ أيضا أننا لم نذكر اسم العمود equip_id
ولم نعطه بالتالي قيمة. يعود السبب في ذلك إلى أن العمود من نوع serial
أي أنه سيحصُل على قيمة موّلَّدة تلقائيا في كل مرة يُضاف فيها سطر (تسجيلة) جديد إلى الجدول.
الاستعلام التالي يُظهِر جميع البيانات المخزَّنة في جدول playground
:
SELECT * FROM playground;
النتيجة:
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2014-04-28 2 | swing | yellow | northwest | 2010-08-16 (2 rows)
تمكن ملاحظة أن العمود equip_id
مُلئ بأعداد متتالية وأن البيانات الأخرى نُظِّمت على النحو المرغوب.
افترض أن لوح الانزلاق كُسر ولم يعد ضمن المعدات التي نمتلكها؛ سنحتاج في هذه الحالة لحذفه من قاعدة البيانات، يؤدي الاستعلام التالي هذا الغرض:
DELETE FROM playground WHERE type = 'slide';
لنعد إظهار جميع البيانات الموجودة في الجدول:
SELECT * FROM playground;
النتيجة:
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2010-08-16 (1 row)
حذف أو إضافة أعمدة إلى جدول
يمكننا بسهولة إضافة أعمدة جديدة إلى جدول بعد إنشائه. يضيف الاستعلام التالي عمودا باسم last_maint
لحفظ تاريخ آخر صيانة للأداة:
ALTER TABLE playground ADD last_maint date;
إن عرضنا البيانات المخزّنة في الجدول الآن فسنرى أن العمود الجديد أُضيف (غير أنه لا توجد به بيانات):
SELECT * FROM playground;
النتيجة:
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2010-08-16 | (1 row)
يمكننا بطريقة مشابهة حذف عمود:
ALTER TABLE playground DROP last_maint;
تحديث بيانات جدول
تناولنا كيفية إضافة تسجيلات إلى الجدول وحذفها، ولكننا لم نغطِّ بعد كيفية التعديل على بيانات موجودة.
لتغيير قيمة موجودة في جدول البيانات نستعلم عن التسجيلة المُراد تعديلها ونسمي العمود الذي نريد تغيير قيمته ونعطي القيمة الجديدة. في المثال التالي نستعلم عن التسجيلات التي قيمة العمود type
فيها تساوي swing
ثم نبدِل قيمة العمود color
في هذه التسجيلات إلى red
. في حال وجود أكثر من تسجيلة ينطبق عليها الاستعلام فستُصبح قيمة العمود color
فيها جميعا تساوي red
.
UPDATE playground SET color = 'red' WHERE type = 'swing';
يمكن التأكد من نجاح تحديث البيانات بالاستعلام عن محتويات الجدول مرة أخرى:
SELECT * FROM playground;
النتيجة:
equip_id | type | color | location | install_date | last_maint ----------+-------+-------+-----------+--------------+------------ 2 | swing | red | northwest | 2010-08-16 | (1 row)
يظهر في نتيجة الاستعلام أن اللون الجديد (color
) للأرجوحة (swing
) هو الأحمر (red
).
ترجمة -وبتصرف- لمقال How To Install and Use PostgreSQL on Ubuntu 14.04 لصاحبه Justin Ellingwood.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.