PostgreSQL Ενεργοποιητές: Δημιουργία, λίστα και απόθεση με Παράδειγμα

Τι είναι το Trigger in PostgreSQL?

A PostgreSQL Σκανδάλη είναι μια συνάρτηση που ενεργοποιείται αυτόματα όταν εμφανίζεται ένα συμβάν βάσης δεδομένων σε ένα αντικείμενο βάσης δεδομένων. Για παράδειγμα, ένα τραπέζι. Παραδείγματα συμβάντων βάσης δεδομένων που μπορούν να ενεργοποιήσουν έναν κανόνα ετικέτας περιλαμβάνουν INSERT, UPDATE, DELETE, κ.λπ. Επιπλέον, όταν δημιουργείτε έναν κανόνα ετικέτας για έναν πίνακα, ο κανόνας ετικέτας θα απορριφθεί αυτόματα όταν διαγραφεί αυτός ο πίνακας.

Πώς χρησιμοποιείται το Trigger PostgreSQL?

Μια σκανδάλη μπορεί να επισημανθεί με τον τελεστή ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ κατά τη δημιουργία της. Ένας τέτοιος κανόνας θα καλείται μία φορά για κάθε σειρά που τροποποιείται από τη λειτουργία. Μια σκανδάλη μπορεί επίσης να επισημανθεί με τον τελεστή ΓΙΑ ΚΑΘΕ ΔΗΛΩΣΗ κατά τη δημιουργία του. Αυτό το έναυσμα θα εκτελεστεί μόνο μία φορά για μια συγκεκριμένη λειτουργία.

PostgreSQL Δημιουργία σκανδαλισμού

Για να δημιουργήσουμε ένα έναυσμα, χρησιμοποιούμε τη συνάρτηση CREATE TRIGGER. Εδώ είναι η σύνταξη για τη συνάρτηση:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

Το όνομα της σκανδάλης είναι το όνομα της σκανδάλης.

Τα ΠΡΙΝ, ΜΕΤΑ και ΑΝΤΙ ΓΙΑ είναι λέξεις-κλειδιά που καθορίζουν πότε θα γίνει επίκληση της ενεργοποίησης.

Το όνομα συμβάντος είναι το όνομα του συμβάντος που θα προκαλέσει την κλήση του κανόνα. Αυτό μπορεί να είναι ΕΝΘΕΤΟ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ κ.λπ.

Το όνομα του πίνακα είναι το όνομα του πίνακα στον οποίο πρόκειται να δημιουργηθεί το έναυσμα.

Εάν η ενεργοποίηση πρόκειται να δημιουργηθεί για μια λειτουργία INSERT, πρέπει να προσθέσουμε την παράμετρο ON στήλης-όνομα.

Η ακόλουθη σύνταξη το δείχνει αυτό:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL Δημιουργία παραδείγματος σκανδάλης

Θα χρησιμοποιήσουμε τον πίνακα τιμών που δίνεται παρακάτω:

Τιμή:

PostgreSQL Δημιουργία σκανδαλισμού

Ας δημιουργήσουμε έναν άλλο πίνακα, Price_Audits, όπου θα καταγράψουμε τις αλλαγές που έγιναν στον πίνακα Price:

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 Drop Trigger

Να πέσει α PostgreSQL έναυσμα, χρησιμοποιούμε την πρόταση DROP TRIGGER με την ακόλουθη σύνταξη:

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

Η παράμετρος trigger-name υποδηλώνει το όνομα του κανόνα ετικέτας που πρόκειται να διαγραφεί.

Το όνομα πίνακα υποδηλώνει το όνομα του πίνακα από τον οποίο πρόκειται να διαγραφεί το έναυσμα.

Η ρήτρα IF EXISTS επιχειρεί να διαγράψει έναν κανόνα που υπάρχει. Εάν επιχειρήσετε να διαγράψετε έναν κανόνα που δεν υπάρχει χωρίς να χρησιμοποιήσετε τον όρο IF EXISTS, θα λάβετε ένα σφάλμα.

Η επιλογή CASCADE θα σας βοηθήσει να απορρίψετε αυτόματα όλα τα αντικείμενα που εξαρτώνται από τη σκανδάλη.

Εάν χρησιμοποιείτε την επιλογή RESTRICT, η σκανδάλη δεν θα διαγραφεί εάν τα αντικείμενα εξαρτώνται από αυτήν.

Για παράδειγμα:

Για να διαγράψουμε το έναυσμα με όνομα example_trigger στον πίνακα Price, εκτελούμε την ακόλουθη εντολή:

Για να αποθέσετε τον κανόνα ετικέτας με το όνομα example_trigger στον πίνακα Εταιρεία, εκτελέστε την ακόλουθη εντολή:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Χρήση του pgAdmin

Ας δούμε τώρα πώς εκτελέστηκαν και οι τρεις ενέργειες χρησιμοποιώντας το pgAdmin.

Πώς να δημιουργήσετε έναυσμα σε PostgreSQL χρησιμοποιώντας το pgAdmin

Δείτε πώς μπορείτε να δημιουργήσετε ένα έναυσμα στο Postgres χρησιμοποιώντας το pgAdmin:

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin

Ανοίξτε το pgAdmin και συνδεθείτε στο λογαριασμό σας χρησιμοποιώντας τα διαπιστευτήριά σας

Βήμα 2) Δημιουργήστε μια βάση δεδομένων επίδειξης

  1. Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  2. Κάντε κλικ στο Demo.

Δημιουργία σκανδάλης σε PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 3) Πληκτρολογήστε το ερώτημα

Για να δημιουργήσετε τον πίνακα Price_Audits, πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας:

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

Βήμα 4) Εκτελέστε το ερώτημα

Κάντε κλικ στο κουμπί Εκτέλεση

Δημιουργία σκανδάλης σε PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 5) Εκτελέστε το Code for 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) Εκτελέστε τον Κώδικα για να δημιουργήσετε έναυσμα

Εκτελέστε τον ακόλουθο κώδικα για να δημιουργήσετε το trigger 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 στον πίνακα Εταιρεία, εκτελέστε την ακόλουθη εντολή:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Σύνοψη

  • A PostgreSQL Το trigger αναφέρεται σε μια συνάρτηση που ενεργοποιείται αυτόματα όταν εμφανίζεται ένα συμβάν βάσης δεδομένων σε ένα αντικείμενο βάσης δεδομένων, όπως ένας πίνακας.
  • Παραδείγματα τέτοιων συμβάντων βάσης δεδομένων περιλαμβάνουν INSERT, UPDATE, DELETE κ.λπ.
  • Ένας κανόνας ετικέτας υπάρχει μόνο κατά τη διάρκεια ζωής του αντικειμένου της βάσης δεδομένων για το οποίο δημιουργήθηκε.
  • Εάν το αντικείμενο της βάσης δεδομένων διαγραφεί, θα διαγραφεί και η ενεργοποίηση.
  • PostgreSQL Οι εναύσματα δημιουργούνται χρησιμοποιώντας τη δήλωση CREATE TRIGGER.
  • Κάθε έναυσμα συσχετίζεται με μια συνάρτηση που δηλώνει τι θα κάνει η σκανδάλη όταν κληθεί.

Κάντε λήψη της βάσης δεδομένων που χρησιμοποιείται σε αυτό το σεμινάριο