PostgreSQL المشغلات: إنشاء وإدراج وإفلات مع مثال
⚡ ملخص ذكي
PostgreSQL المشغلات هي وظائف يتم تشغيلها تلقائيًا عند حدوث حدث INSERT أو UPDATE أو DELETE على جدول، مما يسمح لقاعدة البيانات بفرض القواعد وتسجيل التغييرات ومراجعة البيانات دون الحاجة إلى رمز تطبيق إضافي.

ما هو الزناد في PostgreSQL?
A PostgreSQL تحفيز عملية هي دالة يتم تشغيلها تلقائيًا عند وقوع حدث في قاعدة البيانات على عنصر من عناصرها، مثل جدول. ومن أمثلة أحداث قاعدة البيانات التي يمكنها تفعيل المشغل: الإدراج، والتحديث، والحذف، وما إلى ذلك. علاوة على ذلك، عند إنشاء مشغل لجدول، يتم حذفه تلقائيًا عند حذف ذلك الجدول.
كيف يتم استخدام الزناد في PostgreSQL?
يمكن تحديد المُشغِّل باستخدام عامل التشغيل FOR EACH ROW أثناء إنشائه. سيتم استدعاء هذا المُشغِّل مرة واحدة لكل صف يتم تعديله بواسطة العملية. كما يمكن تحديد المُشغِّل باستخدام عامل التشغيل FOR EACH STATEMENT أثناء إنشائه. سيتم تنفيذ هذا المُشغِّل مرة واحدة فقط لعملية محددة.
PostgreSQL إنشاء الزناد
لإنشاء مشغل، نستخدم وظيفة CREATE TRIGGER. هنا هو بناء الجملة للوظيفة:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
اسم المشغل هو اسم المشغل.
الكلمات "قبل" و"بعد" و"بدلاً من" هي الكلمات الرئيسية التي تحدد متى سيتم استدعاء المشغل.
اسم الحدث هو اسم الحدث الذي سيؤدي إلى استدعاء المشغل. هذا يمكن أن يكون INSERT، تحديث، حذف، الخ.
اسم الجدول هو اسم الجدول الذي سيتم إنشاء المشغل عليه.
إذا كان من المقرر إنشاء المشغل لعملية INSERT، فيجب علينا إضافة معلمة اسم العمود ON.
يوضح بناء الجملة التالي ذلك:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL إنشاء مثال الزناد
سوف نستخدم جدول الأسعار الموضح أدناه:
السعر:
لنقم بإنشاء جدول آخر، Price_Audits، حيث سنقوم بتسجيل التغييرات التي تم إجراؤها على جدول الأسعار:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
يمكننا الآن تعريف دالة جديدة اسمها Auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
ستقوم الوظيفة المذكورة أعلاه بإدراج سجل في جدول Price_Audits بما في ذلك معرف الصف الجديد ووقت إنشاء السجل.
الآن وقد أصبح لدينا دالة التشغيل، يجب ربطها بجدول الأسعار. سنسمي دالة التشغيل price_trigger. قبل إنشاء سجل جديد، سيتم استدعاء دالة التشغيل تلقائيًا لتسجيل التغييرات. إليك دالة التشغيل:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
دعونا نقوم بإدراج سجل جديد في جدول الأسعار:
INSERT INTO Price VALUES (3, 400);
بعد إدراج سجل في جدول الأسعار، يجب إدراج سجل مماثل في جدول تدقيق الأسعار نتيجةً للمُشغّل الذي أنشأناه. لنتحقق من ذلك:
SELECT * FROM Price_Audits;
سيؤدي هذا إلى إرجاع ما يلي:
لقد عمل الزناد بنجاح.
PostgreSQL قائمة التشغيل
جميع المشغلات التي تقوم بإنشائها PostgreSQL يتم تخزينها في جدول pg_trigger. للاطلاع على قائمة المشغلات الموجودة لديك على قاعدة بيانات، قم بالاستعلام عن الجدول عن طريق تشغيل الأمر SELECT كما هو موضح أدناه:
SELECT tgname FROM pg_trigger;
هذا يعيد ما يلي:
يشير عمود tgname في الجدول pg_trigger إلى اسم المشغل.
PostgreSQL زناد الإسقاط
عندما لا تعود هناك حاجة إلى الزناد، يمكنك إزالته بسهولة. لإسقاط PostgreSQL المشغل، نستخدم عبارة DROP TRIGGER مع بناء الجملة التالي:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
تشير معلمة اسم المشغل إلى اسم المشغل الذي سيتم حذفه.
يشير اسم الجدول إلى اسم الجدول الذي سيتم حذف المشغل منه.
تحاول جملة IF EXISTS حذف المشغل الموجود. إذا حاولت حذف مشغل غير موجود دون استخدام جملة IF EXISTS، فسوف تحصل على خطأ.
سيساعدك خيار CASCADE على إسقاط كافة الكائنات التي تعتمد على المشغل تلقائيًا.
إذا استخدمت خيار RESTRICT، فلن يتم حذف المشغل إذا كانت الكائنات تعتمد عليه.
على سبيل المثال:
لإسقاط المشغل المسمى example_trigger على جدول Company، قم بتشغيل الأمر التالي:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
باستخدام pgAdmin
والآن دعونا نرى كيف يتم تنفيذ الإجراءات الثلاثة باستخدام pgAdmin.
كيفية إنشاء الزناد في PostgreSQL باستخدام pgAdmin
إليك كيفية إنشاء مُشغّل في PostgreSQL باستخدام pgAdmin:
الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك
افتح pgAdmin وقم بتسجيل الدخول إلى حسابك باستخدام بيانات الاعتماد الخاصة بك.
الخطوة 2) إنشاء قاعدة بيانات تجريبية
- من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
- انقر فوق العرض التوضيحي.
الخطوة 3) اكتب الاستعلام
لإنشاء جدول Price_Audits، اكتب الاستعلام في المحرر:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
الخطوة 4) تنفيذ الاستعلام
انقر فوق الزر "تنفيذ".
الخطوة 5) تشغيل Code لوظيفة التدقيق
قم بتشغيل الكود التالي لتحديد وظيفة auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
الخطوة 6) تشغيل Code لإنشاء مُشغِّل
قم بتشغيل الكود التالي لإنشاء المشغل price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
الخطوة 7) أدخل سجلا جديدا
- قم بتشغيل الأمر التالي لإدراج سجل جديد في جدول الأسعار:
INSERT INTO Price VALUES (3, 400)
- قم بتشغيل الأمر التالي للتحقق مما إذا كان قد تم إدراج سجل في جدول Price_Audits:
SELECT * FROM Price_Audits
يجب أن يعيد هذا ما يلي:
الخطوة 8) التحقق من محتوى الجدول
دعونا نتحقق من محتويات جدول Price_Audits.
مشغلات القائمة باستخدام pgAdmin
الخطوة 1) قم بتشغيل الأمر التالي للتحقق من المشغلات في قاعدة البيانات الخاصة بك:
SELECT tgname FROM pg_trigger
هذا يعيد ما يلي:
قطرةping المشغلات باستخدام pgAdmin
لإسقاط المشغل المسمى example_trigger على جدول Company، قم بتشغيل الأمر التالي:
DROP TRIGGER example_trigger IF EXISTS
ON Company
قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي







