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 Δημιουργία παραδείγματος σκανδάλης
Θα χρησιμοποιήσουμε τον πίνακα τιμών που δίνεται παρακάτω:
Τιμή:
Ας δημιουργήσουμε έναν άλλο πίνακα, 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;
Αυτό θα επιστρέψει τα ακόλουθα:
Η σκανδάλη λειτούργησε με επιτυχία.
Έναρξη λίστας Postgres
Όλα τα εναύσματα στα οποία δημιουργείτε PostgreSQL αποθηκεύονται στον πίνακα pg_trigger. Για να δείτε τη λίστα των κανόνων που έχετε στο βάσεις δεδομένων, υποβάλετε ερώτημα στον πίνακα εκτελώντας την εντολή SELECT όπως φαίνεται παρακάτω:
SELECT tgname FROM pg_trigger;
Αυτό επιστρέφει τα ακόλουθα:
Η στήλη 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) Δημιουργήστε μια βάση δεδομένων επίδειξης
- Από τη γραμμή πλοήγησης στα αριστερά - Κάντε κλικ στην επιλογή Βάσεις δεδομένων.
- Κάντε κλικ στο Demo.
Βήμα 3) Πληκτρολογήστε το ερώτημα
Για να δημιουργήσετε τον πίνακα Price_Audits, πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Βήμα 4) Εκτελέστε το ερώτημα
Κάντε κλικ στο κουμπί Εκτέλεση
Βήμα 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) Εισαγάγετε μια νέα εγγραφή
- Εκτελέστε την ακόλουθη εντολή για να εισαγάγετε μια νέα εγγραφή στον πίνακα Τιμή:
INSERT INTO Price VALUES (3, 400)
- Εκτελέστε την ακόλουθη εντολή για να ελέγξετε εάν μια εγγραφή έχει εισαχθεί στον πίνακα Price_Audits:
SELECT * FROM Price_Audits
Αυτό θα πρέπει να επιστρέψει τα ακόλουθα:
Βήμα 8) Ελέγξτε το περιεχόμενο του πίνακα
Ας ελέγξουμε τα περιεχόμενα του πίνακα Price_Audits:
Ενεργοποιητές καταχώρισης χρησιμοποιώντας το pgAdmin
Βήμα 1) Εκτελέστε την ακόλουθη εντολή για να ελέγξετε τους κανόνες ετικέτας στη βάση δεδομένων σας:
SELECT tgname FROM pg_trigger
Αυτό επιστρέφει τα ακόλουθα:
Απόρριψη ενεργοποιήσεων χρησιμοποιώντας το pgAdmin
Για να αποθέσετε τον κανόνα ετικέτας με το όνομα example_trigger στον πίνακα Εταιρεία, εκτελέστε την ακόλουθη εντολή:
DROP TRIGGER example_trigger IF EXISTS ON Company
Σύνοψη
- A PostgreSQL Το trigger αναφέρεται σε μια συνάρτηση που ενεργοποιείται αυτόματα όταν εμφανίζεται ένα συμβάν βάσης δεδομένων σε ένα αντικείμενο βάσης δεδομένων, όπως ένας πίνακας.
- Παραδείγματα τέτοιων συμβάντων βάσης δεδομένων περιλαμβάνουν INSERT, UPDATE, DELETE κ.λπ.
- Ένας κανόνας ετικέτας υπάρχει μόνο κατά τη διάρκεια ζωής του αντικειμένου της βάσης δεδομένων για το οποίο δημιουργήθηκε.
- Εάν το αντικείμενο της βάσης δεδομένων διαγραφεί, θα διαγραφεί και η ενεργοποίηση.
- PostgreSQL Οι εναύσματα δημιουργούνται χρησιμοποιώντας τη δήλωση CREATE TRIGGER.
- Κάθε έναυσμα συσχετίζεται με μια συνάρτηση που δηλώνει τι θα κάνει η σκανδάλη όταν κληθεί.
Κάντε λήψη της βάσης δεδομένων που χρησιμοποιείται σε αυτό το σεμινάριο