PostgreSQL المشغلات: إنشاء وإدراج وإفلات مع مثال

ما هو الزناد في PostgreSQL?

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

كيف يتم استخدام الزناد في 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 إنشاء مثال الزناد

سوف نستخدم جدول الأسعار الموضح أدناه:

السعر:

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);

الآن بعد أن قمنا بإدراج سجل في جدول الأسعار، يجب أيضًا إدراج سجل في جدول Price_Audit. سيكون هذا نتيجة للمحفز الذي أنشأناه في جدول الأسعار. دعونا نتحقق من هذا:

SELECT * FROM Price_Audits;

سيؤدي هذا إلى إرجاع ما يلي:

PostgreSQL إنشاء الزناد

لقد عمل الزناد بنجاح.

مشغل قائمة Postgres

جميع المشغلات التي تقوم بإنشائها PostgreSQL يتم تخزينها في جدول pg_trigger. للاطلاع على قائمة المشغلات الموجودة لديك على قاعدة بيانات، قم بالاستعلام عن الجدول عن طريق تشغيل الأمر SELECT كما هو موضح أدناه:

SELECT tgname FROM pg_trigger;

هذا يعيد ما يلي:

مشغل قائمة Postgres

يشير عمود tgname في الجدول pg_trigger إلى اسم المشغل.

Postgres إسقاط الزناد

لإسقاط أ PostgreSQL المشغل، نستخدم عبارة DROP TRIGGER مع بناء الجملة التالي:

DROP TRIGGER [IF EXISTS] trigger-name 
ON table-name [ CASCADE | RESTRICT ];

تشير معلمة اسم المشغل إلى اسم المشغل الذي سيتم حذفه.

يشير اسم الجدول إلى اسم الجدول الذي سيتم حذف المشغل منه.

تحاول جملة IF EXISTS حذف المشغل الموجود. إذا حاولت حذف مشغل غير موجود دون استخدام جملة IF EXISTS، فسوف تحصل على خطأ.

سيساعدك خيار CASCADE على إسقاط كافة الكائنات التي تعتمد على المشغل تلقائيًا.

إذا استخدمت خيار RESTRICT، فلن يتم حذف المشغل إذا كانت الكائنات تعتمد عليه.

على سبيل المثال:

لحذف المشغل المسمى example_trigger على جدول Price، نقوم بتشغيل الأمر التالي:

لإسقاط المشغل المسمى example_trigger على جدول Company، قم بتشغيل الأمر التالي:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

باستخدام pgAdmin

الآن دعونا نرى كيفية تنفيذ الإجراءات الثلاثة باستخدام pgAdmin.

كيفية إنشاء الزناد في PostgreSQL باستخدام pgAdmin

إليك كيفية إنشاء مشغل في Postgres باستخدام pgAdmin:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك

افتح pgAdmin وقم بتسجيل الدخول إلى حسابك باستخدام بيانات الاعتماد الخاصة بك

الخطوة 2) إنشاء قاعدة بيانات تجريبية

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

إنشاء الزناد في PostgreSQL باستخدام pgAdmin

الخطوة 3) اكتب الاستعلام

لإنشاء جدول Price_Audits، اكتب الاستعلام في المحرر:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

الخطوة 4) تنفيذ الاستعلام

انقر فوق الزر "تنفيذ".

إنشاء الزناد في PostgreSQL باستخدام pgAdmin

الخطوة 5) قم بتشغيل الكود الخاص بـ Auditfunc

قم بتشغيل الكود التالي لتحديد وظيفة 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) قم بتشغيل الكود لإنشاء المشغل

قم بتشغيل الكود التالي لإنشاء المشغل price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

الخطوة 7) أدخل سجلا جديدا

  1. قم بتشغيل الأمر التالي لإدراج سجل جديد في جدول الأسعار:
    INSERT INTO Price
    VALUES (3, 400)
  2. قم بتشغيل الأمر التالي للتحقق مما إذا كان قد تم إدراج سجل في جدول Price_Audits:
    SELECT * FROM Price_Audits

    يجب أن يعيد هذا ما يلي:

إنشاء الزناد في PostgreSQL باستخدام pgAdmin

الخطوة 8) التحقق من محتوى الجدول

دعونا نتحقق من محتويات جدول Price_Audits:

مشغلات القائمة باستخدام pgAdmin

الخطوة 1) قم بتشغيل الأمر التالي للتحقق من المشغلات في قاعدة البيانات الخاصة بك:

SELECT tgname FROM pg_trigger

هذا يعيد ما يلي:

مشغلات القائمة باستخدام pgAdmin

إسقاط المشغلات باستخدام pgAdmin

لإسقاط المشغل المسمى example_trigger على جدول Company، قم بتشغيل الأمر التالي:

DROP TRIGGER example_trigger IF EXISTS
ON Company

الملخص

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

قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي