Was sind Postgresql-Trigger?
Ein PostgreSQL-Trigger ist eine Funktion, die automatisch ausgelöst wird, wenn ein Datenbankereignis für ein Datenbankobjekt auftritt. Zum Beispiel eine Tabelle.
Beispiele für Datenbankereignisse, die einen Trigger aktivieren können, sind INSERT, UPDATE, DELETE usw. Wenn Sie einen Trigger für eine Tabelle erstellen, wird der Trigger beim Löschen dieser Tabelle automatisch gelöscht.
In diesem PostgreSQL-Tutorial lernen Sie Folgendes:
- Was sind Postgresql-Trigger?
- Wie wird der Trigger in POSRGREQL verwendet?
- Trigger erstellen
- Verwenden von pgAdmin
- Trigger fallen lassen
Wie wird der Trigger in POSRGREQL verwendet?
Ein Trigger kann während seiner Erstellung mit dem Operator FOR EACH ROW markiert werden. Ein solcher Trigger wird einmal für jede durch die Operation geänderte Zeile aufgerufen. Ein Trigger kann während seiner Erstellung auch mit dem Operator FOR EACH STATEMENT markiert werden. Dieser Trigger wird für eine bestimmte Operation nur einmal ausgeführt.
Trigger erstellen
Um einen Trigger zu erstellen, verwenden wir die Funktion CREATE TRIGGER. Hier ist die Syntax für die Funktion:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Der Triggername ist der Name des Triggers.
BEFORE, AFTER und INSTEAD OF sind Schlüsselwörter, die bestimmen, wann der Trigger aufgerufen wird.
Der Ereignisname ist der Name des Ereignisses, durch das der Trigger aufgerufen wird. Dies kann INSERT, UPDATE, DELETE usw. sein.
Der Tabellenname ist der Name der Tabelle, für die der Trigger erstellt werden soll.
Wenn der Trigger für eine INSERT-Operation erstellt werden soll, müssen wir den Parameter ON-Spaltenname hinzufügen.
Die folgende Syntax demonstriert dies:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Zum Beispiel:
Wir werden die unten angegebene Preistabelle verwenden:
Preis:
Erstellen wir eine weitere Tabelle, Price_Audits, in der wir die an der Preistabelle vorgenommenen Änderungen protokollieren:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Wir können jetzt eine neue Funktion namens auditfunc definieren:
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;
Die obige Funktion fügt einen Datensatz in die Tabelle Price_Audits ein, einschließlich der neuen Zeilen-ID und der Zeit, zu der der Datensatz erstellt wird.
Nachdem wir die Triggerfunktion haben, sollten wir sie an unsere Preistabelle binden. Wir geben dem Trigger den Namen price_trigger. Bevor ein neuer Datensatz erstellt wird, wird die Triggerfunktion automatisch aufgerufen, um die Änderungen zu protokollieren. Hier ist der Auslöser:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Fügen wir einen neuen Datensatz in die Preistabelle ein:
INSERT INTO PriceVALUES (3, 400);
Nachdem wir einen Datensatz in die Preistabelle eingefügt haben, sollte auch ein Datensatz in die Price_Audit-Tabelle eingefügt werden. Dies ist das Ergebnis des Auslösers, den wir in der Preistabelle erstellt haben. Lassen Sie uns dies überprüfen:
SELECT * FROM Price_Audits;
Dies gibt Folgendes zurück:
Der Trigger hat erfolgreich funktioniert.
Listing Trigger
Alle Trigger, die Sie in PostgreSQL erstellen, werden in der Tabelle pg_trigger gespeichert. Um die Liste der Trigger in der Datenbank anzuzeigen, fragen Sie die Tabelle ab, indem Sie den Befehl SELECT wie folgt ausführen:
SELECT tgname FROM pg_trigger;
Dies gibt Folgendes zurück:
Die Spalte tgname der Tabelle pg_trigger gibt den Namen des Triggers an.
Auslöser fallen lassen
Um einen PostgreSQL-Trigger zu löschen, verwenden wir die Anweisung DROP TRIGGER mit der folgenden Syntax:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Der Trigger-Name-Parameter gibt den Namen des Triggers an, der gelöscht werden soll.
Der Tabellenname bezeichnet den Namen der Tabelle, aus der der Trigger gelöscht werden soll.
Die IF EXISTS-Klausel versucht, einen vorhandenen Trigger zu löschen. Wenn Sie versuchen, einen nicht vorhandenen Trigger ohne Verwendung der IF EXISTS-Klausel zu löschen, wird eine Fehlermeldung angezeigt.
Mit der Option CASCADE können Sie alle vom Trigger abhängigen Objekte automatisch löschen.
Wenn Sie die Option RESTRICT verwenden, wird der Trigger nicht gelöscht, wenn Objekte davon abhängen.
Zum Beispiel:
Um den Trigger mit dem Namen example_trigger in der Tabelle Price zu löschen, führen Sie den folgenden Befehl aus:
Führen Sie den folgenden Befehl aus, um den Trigger mit dem Namen example_trigger in der Tabelle Company abzulegen:
DROP TRIGGER example_trigger IF EXISTSON Company;
Verwenden von pgAdmin
Nun wollen wir sehen, wie alle drei Aktionen mit pgAdmin ausgeführt wurden.
Trigger erstellen
Gehen Sie folgendermaßen vor, um dasselbe mit pgAdmin zu erreichen:
Schritt 1) Melden Sie sich bei Ihrem pgAdmin-Konto an.
Schritt 2)
- Klicken Sie in der Navigationsleiste links auf Datenbanken.
- Klicken Sie auf Demo.
Schritt 3) Um die Tabelle Price_Audits zu erstellen, geben Sie den Abfrageeditor ein:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Schritt 4) Klicken Sie auf die Schaltfläche Ausführen.
Schritt 5) Führen Sie den folgenden Code aus, um die Funktion auditfunc zu definieren:
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
Schritt 6) Führen Sie den folgenden Code aus, um den Trigger price_trigger zu erstellen:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Schritt 7)
- Führen Sie den folgenden Befehl aus, um einen neuen Datensatz in die Preistabelle einzufügen:
INSERT INTO PriceVALUES (3, 400)
- Führen Sie den folgenden Befehl aus, um zu überprüfen, ob ein Datensatz in die Tabelle Price_Audits eingefügt wurde:
SELECT * FROM Price_Audits
Dies sollte Folgendes zurückgeben:
Schritt 8) Lassen Sie uns den Inhalt der Price_Audits-Tabelle überprüfen:
Listing Trigger
Schritt 1) Führen Sie den folgenden Befehl aus, um die Trigger in Ihrer Datenbank zu überprüfen:
SELECT tgname FROM pg_trigger
Dies gibt Folgendes zurück:
Trigger fallen lassen
Führen Sie den folgenden Befehl aus, um den Trigger mit dem Namen example_trigger in der Tabelle Company abzulegen:
DROP TRIGGER example_trigger IF EXISTSON Company
Zusammenfassung:
- Ein PostgreSQL-Trigger bezieht sich auf eine Funktion, die automatisch ausgelöst wird, wenn ein Datenbankereignis für ein Datenbankobjekt wie eine Tabelle auftritt.
- Beispiele für solche Datenbankereignisse sind INSERT, UPDATE, DELETE usw.
- Ein Trigger ist nur während der Lebensdauer des Datenbankobjekts vorhanden, für das es erstellt wurde.
- Wenn das Datenbankobjekt gelöscht wird, wird auch der Trigger gelöscht.
- PostgreSQL-Trigger werden mit der Anweisung CREATE TRIGGER erstellt.
- Jeder Trigger ist einer Funktion zugeordnet, die angibt, was der Trigger beim Aufrufen tut.
Laden Sie die in diesem Tutorial verwendete Datenbank herunter