PostgreSQL Trigger: Δημιουργία, Παράδειγμα Παράθεσης

Πίνακας περιεχομένων:

Anonim

Τι είναι το Postgresql Triggers;

Μια σκανδάλη PostgreSQL είναι μια συνάρτηση που ενεργοποιείται αυτόματα όταν συμβαίνει ένα συμβάν βάσης δεδομένων σε ένα αντικείμενο βάσης δεδομένων. Για παράδειγμα, ένας πίνακας.

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

Σε αυτό το σεμινάριο PostgreSQL, θα μάθετε τα εξής:

  • Τι είναι το Postgresql Triggers;
  • Πώς χρησιμοποιείται το Trigger στο POSRGREQL;
  • Δημιουργία σκανδάλης
  • Χρήση του pgAdmin
  • Εγκαταλείψεις σκανδάλης

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

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

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

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

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

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

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

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

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

Εάν η σκανδάλη πρόκειται να δημιουργηθεί για μια λειτουργία ΕΙΣΑΓΩΓΗΣ, πρέπει να προσθέσουμε την παράμετρο ΟΝΟ στήλης.

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

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

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

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

Τιμή:

Ας δημιουργήσουμε έναν άλλο πίνακα, 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$BEGININSERT 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 PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

Ας εισαγάγουμε μια νέα εγγραφή στον πίνακα τιμών:

INSERT INTO PriceVALUES (3, 400);

Τώρα που έχουμε εισαγάγει μια εγγραφή στον πίνακα τιμών, πρέπει επίσης να εισαχθεί μια εγγραφή στον πίνακα Price_Audit. Αυτό θα είναι αποτέλεσμα της ενεργοποίησης που έχουμε δημιουργήσει στον πίνακα τιμών. Ας το ελέγξουμε:

SELECT * FROM Price_Audits;

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

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

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

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

SELECT tgname FROM pg_trigger;

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

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

Εγκαταστάσεις πτώσης

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

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

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

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

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

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

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

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

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

Για να αποθέσετε τη σκανδάλη που ονομάζεται example_trigger στον πίνακα Company, εκτελέστε την ακόλουθη εντολή:

DROP TRIGGER example_trigger IF EXISTSON Company;

Χρήση του pgAdmin

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

Δημιουργία ενεργοποιήσεων

Για να το πετύχετε μέσω του pgAdmin, κάντε το:

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

Βήμα 2)

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

Βήμα 3) Για να δημιουργήσετε τον πίνακα Price_Audits, πληκτρολογήστε τον επεξεργαστή ερωτημάτων:

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

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Βήμα 5) Εκτελέστε τον ακόλουθο κώδικα για να ορίσετε τη συνάρτηση auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT 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 PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()

Βήμα 7)

  1. Εκτελέστε την ακόλουθη εντολή για να εισαγάγετε μια νέα εγγραφή στον πίνακα τιμών:
    INSERT INTO PriceVALUES (3, 400)
  2. Εκτελέστε την ακόλουθη εντολή για να ελέγξετε εάν έχει εισαχθεί μια εγγραφή στον πίνακα Price_Audits:
    SELECT * FROM Price_Audits

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

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

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

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

SELECT tgname FROM pg_trigger

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

Εγκαταλείψεις σκανδάλης

Για να αποθέσετε τη σκανδάλη που ονομάζεται example_trigger στον πίνακα Company, εκτελέστε την ακόλουθη εντολή:

DROP TRIGGER example_trigger IF EXISTSON Company

Περίληψη:

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

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