مقدمة
يعد pgAgent أداة تُستخدم لجدولة المهام لقواعد بيانات PostgreSQL. كما أن لديها إمكانيات جدولة أكثر قوة من الأمر الشائع cron
لأنها بُنيت خصيصًا للتعامل مع مهام Postgres. على سبيل المثال، يمكن لـ pgAgent جدولة خطوات متعددة بدون دفتر أو بدون تكرار الأمر. من المهم أن نلاحظ أنه حتى إذا كان لديك pgAdmin مثبتًا، يجب تنزيل pgAgent بشكل مستقل، على وجه التحديد كاملة ل pgAdmin.
في هذا البرنامج التعليمي، ستقوم بتثبيت pgAgent، تكوين قاعد البيانات لاستخدام pgAgent على واجهة المستخدم الرسومية لـ pgAdmin (GUI)، إعداد pgAgent كخدمة، ومن ثم استخدام pgAgent لجدولة وظيفة تقوم بنسخ احتياطي لقاعدة البيانات الخاصة بك.
المتطلبات
لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:
- خادم Ubuntu 22.04 مُعد بمستخدم غير root مُمكن لديه صلاحيات
sudo
وجدار نار. يمكنك القيام بذلك عن طريق قراءة دليل إعداد الخادم الأولي لدينا. - تم تثبيت PostgreSQL على الخادم الخاص بك. يمكنك إعداد ذلك باتباع دليلنا على كيفية تثبيت واستخدام PostgreSQL على أوبونتو 22.04. أثناء متابعتك لهذا الدليل، تأكد من إنشاء دور وقاعدة بيانات جديدة، حيث ستحتاج إلى كل منهما للاتصال بـ pgAdmin بمثيل PostgreSQL الخاص بك
- تم تثبيت pgAdmin مع حساب معين. يمكنك القيام بذلك باتباع البرنامج التعليمي الخاص بنا على كيفية تثبيت وتكوين pgAdmin4 في وضع الخادم على أوبونتو 22.04
الخطوة 1 — تثبيت pgAgent
كما ذكر سابقًا، لا يتم تكوين pgAgent تلقائيًا عند تثبيت pgAdmin. يمكنك تثبيت pgAgent من الطرفية الخاصة بك عن طريق تشغيل apt install
واسم الحزمة pgagent
كما في الأمر التالي:
- sudo apt install pgagent
بعد تثبيت pgAgent، انتقل إلى الخطوة التالية لتكوين قاعدة البيانات الخاصة بك لاستخدام pgAgent في pgAdmin.
الخطوة 2 — تكوين قاعدة البيانات الخاصة بك لـ pgAgent
بعد اتباع المتطلبات الأساسية، تم إعداد pgAdmin وجاهز للاستخدام. يمكنك تكوين قاعدة البيانات الخاصة بك لاستخدام pgAgent من خلال pgAdmin. افتح متصفح الويب الخاص بك وانتقل إلى تطبيق pgAdmin على http://your_domain. بمجرد تسجيل الدخول إلى حسابك، انتقل إلى شجرة التحكم على اللوحة الجانبية اليسرى. ابحث عن قاعدة البيانات التي قمت بإنشائها بعنوان sammy ووسع القائمة. من هذه القائمة، ستجد خيارًا يسمى Extensions. بمجرد العثور عليه، انقر بزر الماوس الأيمن واختر الخيار Query Tool:

يتطلب pgAgent تحميل إضافة في قاعدة البيانات الخاصة بك قبل أن يمكن استخدامه في pgAdmin. للقيام بذلك، قم بكتابة الاستعلام التالي وانقر على السهم الجانبي ▶ الذي يشير إلى تنفيذ لتشغيل الأمر:
- CREATE EXTENSION pgagent;
يُمثل هذا الخطوة باستخدام وظيفة Query Tool في المثال التالي:

تحت علامة Messages، ستظهر إخراجًا يعيد Query returned successfully in 300 msec. وهذا يؤكد أن إضافة pgAgent تم إنشاؤها بنجاح.
ملاحظة: إذا لم يتم تحميل لغة plpgsql
المناسبة في قاعدة البيانات الخاصة بك، ستتلقى رسالة خطأ تقول:
OutputERROR: language "plpgsql" does not exist
HINT: Use CREATE EXTENSION to load the language into the database.
SQL state: 42704
إذا حدثت هذه المشكلة، يجب عليك تشغيل CREATE LANGUAGE
لتثبيت لغة البرمجة pl/pgsql المطلوبة. يمكنك تثبيت ذلك بتشغيل الأمر التالي:
- CREATE LANGUAGE plpgsql;
بمجرد تثبيت لغة pl/pgsql، ستظهر رسالة في الأسفل تشير إلى شيء مثل تمت إعادة الاستعلام بنجاح في 231 مللي ثانية. بعد ذلك، قم بتشغيل الاستعلام CREATE EXTENSION pgagent
مرة أخرى.
بعد تشغيل هذه الاستعلامات، تحت الملحقات، ستظهر عناصران لـ pgagent و plpgsql:

A new item in the tree control on the left-hand side will appear called pgAgent Jobs. This signifies that pgAgent was successfully installed on your pgAdmin account. Next, you will set up pgAgent as a daemon so that it can run your jobs successfully.
ملاحظة: إذا لم تظهر هذه العناصر لك مباشرة، قم بتحديث صفحة المتصفح الخاصة بك، ويجب أن تظهر إذا كانت استعلاماتك ناجحة.
الخطوة 3 — إعداد pgAgent كبرنامج خلفي
الآن بعد أن قمت بتثبيت pgAgent وتكوينه لقاعدة البيانات الخاصة بك من خلال pgAdmin، يتعين عليك إعداد pgAgent كبرنامج خلفي على خادمك. برنامج خلفي هو برنامج يعمل كعملية مستمرة في الخلفية وينفذ مهام الخدمة. يعمل pgAgent كبرنامج خلفي على أنظمة Unix وعادةً على خادم قاعدة البيانات نفسه.
لإعداد pgAgent كبرنامج خلفي، تحتاج إلى سلسلة اتصال PostgreSQL حتى عندما تجدول وظيفتك، ستقوم العملية بالتنفيذ بشكل مناسب. في هذه الحالة، أنت تقوم بإعداد سلسلة اتصال PostgreSQL libpq، وهذا يعني سلسلة تتصل بمعلمات معينة قمت بتعيينها. يمكنك معرفة المزيد حول وظائف اتصال PostgreSQL libpq في وثائق PostgreSQL.
سيوفر سلسلة الاتصال الخاصة بك بيانات اعتماد مضيفك، واسم قاعدة البيانات، واسم المستخدم. في مثالنا، سيستخدم المضيف مأخذًا مجاليًا يونكس، اسم قاعدة البيانات هو sammy
، والمستخدم هو sammy
. سيتم إضافة هذه السلسلة إلى أمر pgagent
لبدء الخادم. في الطرفية الخاصة بك، ستقوم بتشغيل الكود التالي:
- pgagent host=/var/run/postgresql dbname=sammy user=sammy
إذا لم يعُد أي شيء في إخراجك ولم تتلق رسالة خطأ في الاتصال، فقد نجحت عملية إعداد سلسلة الاتصال.
بعد إنشاء سلسلة الاتصال، أنت جاهز الآن لجدولة وظيفة باستخدام pgAgent.
الخطوة 4 — جدولة وظيفة باستخدام pgAgent
يعمل pgAgent كوكيل جدولة يمكنه تشغيل وإدارة الوظائف وإنشاء وظائف تتكون من خطوة واحدة أو أكثر أو جداول. على سبيل المثال، قد تتكون الخطوة من عدة عبارات SQL في نص قابل للتشغيل وتُنفذ بتتابع بعد الأخرى. بشكل عام، يمكنك استخدام pgAgent لجدولة أو إدارة أو تعديل أو تعطيل وظائفك.
لأغراض هذا البرنامج التعليمي، ستستخدم pgAgent لإنشاء وظيفة ستقوم بنسخ قاعدة البيانات sammy الخاصة بك كل دقيقة في كل يوم من أيام الأسبوع. يمكنك البدء بالنقر بزر الماوس الأيمن على وظائف pgAgent واختيار إنشاء ثم وظيفة pgAgent… كما هو موضح فيما يلي:

مرة واحدة تقوم بذلك، سيظهر تنبيه بعنوان إنشاء – وظيفة pgAgent، ويمكنك بدء إكمال المعلومات المطلوبة في علامة عامة. في هذا المثال، سنستخدم الاسم sammy_backup ولن نحدد عامل المضيف لأننا نريد أن نتمكن من تشغيل هذه المهمة على أي مضيف. بالإضافة إلى ذلك، سنترك فئة العمل كصيانة روتينية. إذا كنت ترغب في تضمين أي تعليقات أخرى، فلا تتردد في فعل ذلك في قسم التعليق:

بعد ذلك، انتقل إلى علامة خطوات. انقر فوق الرمز + في الزاوية العلوية اليمنى لإنشاء خطوة. في هذا المثال، سنسمي هذه الخطوة خطوة1. ثم، لتوسيع خياراتك، انقر على القلم على الجانب الأيسر من رمز سلة المهملات. يتم تشغيل زر تم التمكين؟ افتراضيًا ليكون مفعلاً ويدل على أن هذه الخطوة ستتم إدراجها عند تنفيذ هذه المهمة.
بالنسبة للخيار النوع، يمكنك اختيار إما SQL أو Batch، هنا قمنا باختيار Batch. السبب في اختيار Batch في هذا المثال هو لأن هذا ما سيقوم بتشغيل أوامر PostgreSQL المناسبة التي ستحددها للنسخ الاحتياطي الذي ترغب في جدولته لقاعدة البيانات الخاصة بك. الخيار SQL متاح لجدولة عملية لتنفيذ SQL الخام. في هذه الحالة، قمنا باختيار Local لـ نوع الاتصال بحيث يتم تنفيذ الخطوة على الخادم المحلي، ولكن إذا كنت تفضل، يمكنك أيضًا اختيار Remote لخادم بعيد من اختيارك. إذا كنت تفضل القيام بذلك على خادم بعيد، فيجب عليك تحديد هذا المعيار في حقل سلسلة الاتصال. إذا قمت باتباع الخطوة 1، فقد تم تعيين سلسلة الاتصال الخاصة بك بالفعل وتم الاتصال بها.
بالنسبة لحقل قاعدة البيانات، تأكد من تحديد قاعدة البيانات الصحيحة، هنا قمنا بتحديد sammy. بخيار في حالة الخطأ، يمكنك تخصيص استجابة pgAgent إذا حدث خطأ عند تنفيذ خطوة. في هذه الحالة، قمنا باختيار Fail لإعلامنا إذا كان هناك خطأ عند محاولة معالجة الخطوة. مرة أخرى، إذا كنت ترغب في إضافة ملاحظات إضافية، يمكنك إضافتها في مربع التعليق:
Dentro de la misma pestaña Pasos también hay una pestaña de Código. Si seleccionaste Lote como hicimos en este ejemplo, entonces navega hasta esa pestaña de Código. Una vez que estés en esta pestaña, hay una línea vacía para que insertes tu comando PostgreSQL. Puedes sustituir tu propio comando de respaldo aquí con tu conjunto personalizado de opciones. Cualquier comando válido es aceptable.
Este tutorial usará el comando pg_dump
para respaldar tu base de datos de Postgres sammy. En este comando, incluye tu nombre de usuario específico, el nombre de la base de datos y la bandera --clean
, que ayuda con pg_dump
al eliminar o “limpiar” los objetos de la base de datos antes de generar cualquier comando que se esté creando. Para la bandera --file
, estás especificando la ubicación exacta donde se guardarán los archivos de respaldo. La parte final de esta declaración date +%Y-%m-%d-%H-%M-%S
es para generar dinámicamente una fecha y múltiples archivos para cada respaldo. De lo contrario, el archivo de respaldo sobrescribirá constantemente y se guardará sobre el existente. De esta manera, puedes hacer un seguimiento de cada uno de tus archivos de respaldo para cualquier momento o fecha especificada que hayas programado. Tu comando completo será el siguiente:
pg_dump --username=sammy --dbname=sammy --clean --file=/home/sammy/backup-`date +%Y-%m-%d-%H-%M-%S`.sql
Nota: Si decides guardar tus archivos de respaldo en una ubicación diferente, asegúrate de usar una ruta absoluta hacia tu directorio elegido. Por ejemplo, aunque ~/
normalmente apunta al directorio de inicio de /home/sammy/
, pg_dump
en este caso requiere la ruta absoluta de /home/sammy/
.
بمجرد أن تقوم بإضافة أمر النسخ الاحتياطي الخاص بك، يمكنك الانتقال إلى علامة التبويب المسماة الجداول الزمنية. مماثلة لعملية إعداد الخطوات، انقر على الرمز + لإضافة جدول زمني، ثم قم بتقديم الاسم المفضل لك، وانقر على رمز القلم بجانب رمز سلة المهملات لتوسيع خياراتك. تحت علامة التبويب العامة سيكون هناك الاسم الذي كتبته، في هذا المثال، هو جدول1. مرة أخرى، بالنسبة لخيار تمكين فإن هذا يكون افتراضيًا على وضع التشغيل لضمان تنفيذ الجدول الزمني بشكل صحيح. بالنسبة لخيارات البدء و الانتهاء، حدد اليوم والوقت البدء والانتهاء لعملك المجدول. نظرًا لأنك ستختبر عملك المجدول، تأكد من أن الوقت الحالي داخل نطاق البدء و الانتهاء. أضف ملاحظة في التعليق إذا كنت تفضل:
الآن قم بالانتقال إلى علامة التبويب Repeat. هنا يمكنك تخصيص تكرار تنفيذ هذه المهمة المجدولة بالتحديد. يمكنك أن تكون دقيقًا قدر الإمكان فيما يتعلق بالأسبوع، أو الشهر، أو التاريخ، أو الساعات، أو الدقائق. يرجى ملاحظة أن عدم اختيارك لشيء ما يعتبر نفسه كاختيار Select All. لذلك، إذا تركت Week Days فارغة، سيأخذ الجدول الزمني في اعتباره جميع أيام الأسبوع. بالمثل، مع Times، يمكنك ترك الساعات أو الدقائق فارغة، وهذا نفسه كـ Selecting All. تذكر أن الأوقات تأتي في تنسيق سجل cron، لذلك، على سبيل المثال، لإنشاء نسخة احتياطية كل دقيقة، يجب عليك اختيار كل دقيقة في الساعة (00 إلى 59). لتوضيح ذلك، لقد اخترنا Select All للدقائق. يتم إدراج جميع الدقائق، ولكن تركها فارغة سيحقق نفس النتائج أيضًا:
إذا كانت هناك أيام أو أوقات لا ترغب في تنفيذ مهمة، يمكنك إنشاء جدول زمني أكثر تفصيلاً، أو يمكنك ضبط ذلك من خلال التنقل إلى علامة التبويب Exceptions.
ملاحظة: يتم تنفيذ المهمة أيضًا استنادًا إلى الجدول الزمني، لذا في أي وقت يتم تعديلها، سيتم إعادة حساب وقت التشغيل المجدول. وعند حدوث ذلك، سيقوم pgAgent بفحص قاعدة البيانات للحصول على قيمة آخر وقت تشغيل مجدول ومن ثم، من المرجح أن يبدأ في غضون دقيقة من ذلك الوقت المحدد. إذا كانت هناك مشكلات، فعند بدء تشغيل pgAgent مرة أخرى، سيعود إلى الجدول الزمني العادي الذي قمت بتعيينه.
عندما تنتهي من إعداد وتخصيص الجدول الزمني الذي ترغب في تنفيذه، اضغط على الزر Save. سيظهر وظيفة جديدة لـ pgAgent على شجرة التحكم على الجهة اليسرى بتسمية وظيفتك. على سبيل المثال، ستظهر sammy_backup مع Schedules و Steps المدرجة أسفلها:

الآن بعد أن قمت بإنشاء وظيفة pgAgent بنجاح، في الخطوة التالية، ستتعلم كيفية التحقق من أن وظيفة pgAgent الخاصة بك تعمل بنجاح.
الخطوة 5 — التحقق من وظيفة pgAgent الخاصة بك
يمكنك التحقق مما إذا كانت وظيفتك المجدولة لإنشاء ملف نسخ احتياطي لقاعدة البيانات الخاصة بك كل دقيقة تعمل بطرق متعددة. في pgAdmin، يمكنك الانتقال إلى شجرة التحكم على الجهة اليسرى والنقر فوق sammy_backup. من هناك، انتقل إلى علامة التبويب المسماة Statistics. ستقوم صفحة Statistics بسرد كل حالة من حالات وظيفتك المجدولة كما يلي:

يرجى ملاحظة أن الإحصائيات قد لا تظهر أو تتجدد على الفور، لذلك قد تحتاج إلى التنقل أو تحديث المتصفح. تذكر أن وظيفتك مجدولة لتشغيلها بفاصل زمني محدد، لذا احتفظ بهذا في اعتبارك إذا كنت تقوم بتحديد تاريخ أو وقت دوري أو طول أطول.
إذا كنت تفضل التحقق من أن وظيفتك تعمل من سطر الأوامر، يمكنك تشغيل الأمر ls ~
لعرض ملفات دليل المنزل الخاص بك. في هذا البرنامج التعليمي، قمت بتحديد الموقع الدقيق لهذا الدليل المنزل عند كتابة الأمر pg_dump
في الخطوة 4:
- ls ~
سيقوم الإخراج بسرد كل حالة من حالات حفظ ملفات النسخ الاحتياطي.
الخطوة 6 — تعديل، تعطيل، حذف، وتنفيذ وظائف pgAgent يدويًا (اختياري)
يوفر pgAgent مرونة عندما يتعلق الأمر بتعديل أو تعطيل وظيفة. باستخدام pgAdmin، يمكنك الانتقال إلى وظيفة pgAgent المحددة، في هذه الحالة، sammy_backup. ثم انقر بزر الماوس الأيمن واختر الخيار الخصائص من القائمة. من هنا يمكنك الضغط على أيقونة القلم في الأعلى لإجراء تعديلات على وظيفتك:

إذا كنت في الخصائص وقمت بالضغط على أيقونة القلم، يمكنك الانتقال إلى علامة التبويب الجداول الزمنية لتعطيل وظيفتك كما في الصورة التالية:
بالإضافة إلى ذلك، من شجرة التحكم على الجانب الأيسر، إذا قمت بالنقر بزر الماوس الأيمن على وظيفة pgAgent يمكنك اختيار الاختيار حذف/إسقاط لحذف الوظيفة بالكامل. إذا كنت ترغب في تنفيذ وظيفة يدويًا، يمكنك تكرار نفس الخطوة، ولكن هذه المرة اختر الاختيار تشغيل الآن من القائمة:

على الرغم من أن هذه مجرد بعض الوظائف لاستخدام pgAgent لجدولة الوظائف، إلا أن هناك العديد من الإمكانيات الأخرى. على سبيل المثال، قد ترغب في جدولة وظيفة تقوم بإنشاء نسخة احتياطية لجميع المستخدمين والأدوار في قاعدة البيانات الخاصة بك، على وجه الخصوص باستخدام الأمر pg_dumpall --globals only
. يمكنك حتى استخدام النصوص الدفعية الأكثر تعقيدًا مع الوظائف الدفعية، والتي يمكنك معرفة المزيد عنها من صفحة ويكي بوستغريسكيويل.
الاستنتاج
pgAgent مفيد لجدولة مختلف الوظائف التي قد تساعد في تقليل بعض المهام اليومية الروتينية ولكن الضرورية، مثل عمل نسخ احتياطية لقاعدة البيانات بانتظام. بمجرد أن تشعر بالراحة أكثر في استخدام هذه الأداة، يمكنك حتى محاولة إنشاء وظيفة متعددة الخطوات أو مهام SQL التي تتطلب جدولة معقدة. إذا كنت ترغب في معرفة المزيد، يمكنك قراءة التوثيق الرسمي لـ pgAgent على موقع pgAdmin.