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

⚡ Έξυπνη Σύνοψη

PostgreSQL Οι ενεργοποιητές είναι συναρτήσεις που εκτελούνται αυτόματα όταν ενεργοποιείται ένα συμβάν INSERT, UPDATE ή DELETE σε έναν πίνακα, επιτρέποντας στη βάση δεδομένων να επιβάλλει κανόνες, να καταγράφει αλλαγές και να ελέγχει δεδομένα χωρίς επιπλέον κώδικα εφαρμογής.

  • Ορισμός: Ένα trigger είναι μια συνάρτηση που καλείται αυτόματα σε ένα συμβάν βάσης δεδομένων, όπως INSERT, UPDATE ή DELETE.
  • 🔁 Πεδίο εφαρμογής: Η εντολή FOR EACH ROW εκτελεί την ενεργοποίηση μία φορά ανά επηρεαζόμενη σειρά, ενώ η εντολή FOR EACH STATEMENT την εκτελεί μία φορά ανά λειτουργία.
  • Δημιουργώ: Η συνάρτηση CREATE TRIGGER συνδέει μια συνάρτηση με έναν πίνακα και ορίζει τον χρόνο ΠΡΙΝ, ΜΕΤΑ ή ΑΝΤΙ ΓΙΑ.
  • 📋 Λίστα: Υποβάλετε ερώτημα στον κατάλογο pg_trigger με την εντολή SELECT tgname για να δείτε κάθε ενεργοποίηση στη βάση δεδομένων.
  • 🗑️ Πτώση: Η συνάρτηση DROP TRIGGER αφαιρεί μια ενεργοποίηση και η συνάρτηση IF EXISTS αποτρέπει ένα σφάλμα όταν αυτή λείπει.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης δημιουργούν συναρτήσεις ενεργοποίησης και προτείνουν χρονισμό ΠΡΙΝ ή ΜΕΤΑ από ένα αίτημα απλής γλώσσας.

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, μια εγγραφή θα πρέπει επίσης να εισαχθεί στον πίνακα Price_Audits λόγω του trigger που δημιουργήσαμε. Ας ελέγξουμε τα εξής:

SELECT * FROM Price_Audits;

Αυτό θα επιστρέψει τα ακόλουθα:

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

Η σκανδάλη λειτούργησε με επιτυχία.

PostgreSQL Ενεργοποίηση λίστας

Όλα τα εναύσματα στα οποία δημιουργείτε PostgreSQL αποθηκεύονται στον πίνακα pg_trigger. Για να δείτε τη λίστα των κανόνων που έχετε στο βάσεις δεδομένων, υποβάλετε ερώτημα στον πίνακα εκτελώντας την εντολή SELECT όπως φαίνεται παρακάτω:

SELECT tgname FROM pg_trigger;

Αυτό επιστρέφει τα ακόλουθα:

PostgreSQL Ενεργοποίηση λίστας

Η στήλη tgname του πίνακα pg_trigger υποδηλώνει το όνομα του έναυσμα.

PostgreSQL Πτώση σκανδάλης

Όταν δεν χρειάζεστε πλέον μια σκανδάλη, μπορείτε να την αφαιρέσετε εξίσου εύκολα. Για να ρίξετε μια PostgreSQL έναυσμα, χρησιμοποιούμε την πρόταση DROP TRIGGER με την ακόλουθη σύνταξη:

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

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

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

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

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

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

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

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

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Χρήση του pgAdmin

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

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

Δείτε πώς μπορείτε να δημιουργήσετε ένα trigger στο PostgreSQL χρησιμοποιώντας το 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 για τη λειτουργία ελέγχου

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

Εκτελέστε τον ακόλουθο κώδικα για να δημιουργήσετε το 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)
  1. Εκτελέστε την ακόλουθη εντολή για να ελέγξετε εάν μια εγγραφή έχει εισαχθεί στον πίνακα Price_Audits:
SELECT * FROM Price_Audits

Αυτό θα πρέπει να επιστρέψει τα ακόλουθα:

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

Βήμα 8) Ελέγξτε το περιεχόμενο του πίνακα

Ας ελέγξουμε τα περιεχόμενα του πίνακα Price_Audits.

Ενεργοποιητές καταχώρισης χρησιμοποιώντας το pgAdmin

Βήμα 1) Εκτελέστε την ακόλουθη εντολή για να ελέγξετε τους κανόνες ετικέτας στη βάση δεδομένων σας:

SELECT tgname FROM pg_trigger

Αυτό επιστρέφει τα ακόλουθα:

Ενεργοποιητές καταχώρισης χρησιμοποιώντας το pgAdmin

Πτώσηping Ενεργοποιητές χρησιμοποιώντας pgAdmin

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

DROP TRIGGER example_trigger IF EXISTS
ON Company

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

Συχνές Ερωτήσεις

Μια ενεργοποίηση ΠΡΙΝ εκτελείται πριν από την εγγραφή της αλλαγής στη γραμμή, επομένως μπορεί να τροποποιήσει ή να απορρίψει τη γραμμή. Μια ενεργοποίηση ΜΕΤΑ εκτελείται μετά την αποθήκευση της αλλαγής, κατάλληλη για εργασίες καταγραφής και ελέγχου.

Ένα σκανδάλη INSTEAD OF ορίζεται σε μια προβολή, όχι σε έναν πίνακα. Αντικαθιστά την ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ ή ΔΙΑΓΡΑΦΗ με προσαρμοσμένη λογική, καθιστώντας μια προβολή μόνο για ανάγνωση εγγράψιμη.

Οι συναρτήσεις ενεργοποίησης συνήθως γράφονται σε PL/pgSQL. PostgreSQL υποστηρίζει επίσης PL/Python, PL/Perl, PL/Tcl και C, ώστε να μπορείτε να επιλέξετε τη γλώσσα που ταιριάζει στη λογική σας.

Χρησιμοποιήστε την εντολή ALTER TABLE table-name DISABLE TRIGGER για να την απενεργοποιήσετε και την εντολή ENABLE TRIGGER για να την ενεργοποιήσετε ξανά. Αυτό αποτρέπει την απόρριψη.ping και αναδημιουργία της σκανδάλης κατά τη διάρκεια μαζικών φορτώσεων.

Ναι. Κάθε ενεργοποίηση προσθέτει εργασία σε κάθε γραμμή ή πρόταση που επηρεάζεται, επομένως η έντονη λογική ενεργοποίησης μπορεί να επιβραδύνει τις εγγραφές. Διατηρήστε τις συναρτήσεις ενεργοποίησης σύντομες και προσθέστε στο ευρετήριο τυχόν στήλες που υποβάλλουν ερώτημα.

Ναι. Εάν μια ενεργοποίηση αλλάξει έναν άλλο πίνακα που έχει επίσης εναύσματα, ενεργοποιούνται και αυτά, δημιουργώντας διαδοχικά εναύσματα. PostgreSQL περιορίζει το βάθος ένθεσης για να αποτρέψει άπειρους βρόχους.

Οι βοηθοί κωδικοποίησης τεχνητής νοημοσύνης μετατρέπουν ένα αίτημα απλής γλώσσας σε μια ολοκληρωμένη πρόταση CREATE TRIGGER και συνάρτηση ενεργοποίησης, προτείνουν χρονισμό BEFORE ή AFTER και εξηγούν την παραγόμενη PL/pgSQL για γρήγορη ανασκόπηση.

Ναι. Εργαλεία όπως το pgai και οι βοηθοί που βασίζονται στο GPT μεταφράζουν έναν περιγραφόμενο κανόνα σε SQL ενεργοποίησης και μπορούν να δημιουργήσουν ενεργοποιητές INSERT που προσθέτουν ετικέτες ή επικυρώνουν αυτόματα νέα δεδομένα καθώς αυτά φτάνουν.

Συνοψίστε αυτήν την ανάρτηση με: