اذهب إلى المحتوى

تعدّ أنظمة إدارة قواعد البيانات العلاقية Relational database management systems، عنصرا أساسيا في الكثير من مواقع الويب والتطبيقات؛ فهي تتيح وسيلة مبنية لتخزين المعلومات، تنظيمها والوصول إليها.

PostgrSQL (أو Postgres) هو نظام علاقي لإدارة قواعد البيانات يستخدم لغة الاستعلام SQL. يشيع استخدام PostgreSQL في المشاريع الصغيرة والكبيرة على حد السواء؛ ويتميز بتوافقه مع المعايير Standards ووجود خصائص متقدمة كثيرة مثل المعاملات Transactions الموثوقة والتزامن Concurrency دون قفل القراءة.

postgresql-ubuntu.thumb.png.cf0bea029f82

يشرح هذا المقال كيفية تثبيت 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.


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...