PostgreSQL-Trigger: Erstellen, Auflisten und Löschen mit Beispiel

Was ist Trigger in PostgreSQL?

A PostgreSQL-Trigger ist eine Funktion, die automatisch ausgelöst wird, wenn ein Datenbankereignis für ein Datenbankobjekt auftritt. Zum Beispiel ein Tisch. Beispiele für Datenbankereignisse, die einen Trigger aktivieren können, sind INSERT, UPDATE, DELETE usw. Wenn Sie außerdem einen Trigger für eine Tabelle erstellen, wird der Trigger automatisch gelöscht, wenn diese Tabelle gelöscht wird.

Wie wird Trigger in PostgreSQL verwendet?

Ein Trigger kann während seiner Erstellung mit dem FOR EACH ROW-Operator markiert werden. Ein solcher Trigger wird einmal für jede durch die Operation geänderte Zeile aufgerufen. Ein Trigger kann bei seiner Erstellung auch mit dem FOR EACH STATEMENT-Operator markiert werden. Dieser Trigger wird nur einmal für einen bestimmten Vorgang ausgeführt.

PostgreSQL-Erstellungstrigger

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-name  
ON 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, das den Auslöser auslöst. Das kann sein INSERT, AKTUALISIEREN, LÖSCHEN usw.

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 für den Spaltennamen hinzufügen.

Die folgendenwing Die Syntax zeigt dies:

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

Beispiel für einen PostgreSQL-Trigger erstellen

Wir verwenden die unten angegebene Preistabelle:

Preis:

PostgreSQL-Erstellungstrigger

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$
   BEGIN
      INSERT 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 wurde.

Da wir nun 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 Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Fügen wir einen neuen Datensatz in die Preistabelle ein:

INSERT INTO Price 
VALUES (3, 400);

Nachdem wir nun einen Datensatz in die Tabelle „Price“ eingefügt haben, sollte auch ein Datensatz in die Tabelle „Price_Audit“ eingefügt werden. Dies ist auf den Auslöser zurückzuführen, den wir in der Preistabelle erstellt haben. Lassen Sie uns Folgendes überprüfen:

SELECT * FROM Price_Audits;

Dies wird Folgendes zurückgebenwing:

PostgreSQL-Erstellungstrigger

Der Auslöser hat erfolgreich funktioniert.

Postgres-Listenauslöser

Alle Trigger, die Sie erstellen PostgreSQL werden in der pg_trigger-Tabelle gespeichert. Um die Liste der Trigger anzuzeigen, die Sie haben Datenbank, fragen Sie die Tabelle ab, indem Sie den SELECT-Befehl wie unten gezeigt ausführen:

SELECT tgname FROM pg_trigger;

Dies gibt Folgendes zurückwing:

Postgres-Listenauslöser

Die tgname-Spalte der pg_trigger-Tabelle gibt den Namen des Triggers an.

Postgres-Drop-Trigger

Um einen PostgreSQL-Trigger zu löschen, verwenden wir die DROP TRIGGER-Anweisung mit folgendem Befehlwing Syntax:

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

Der Parameter trigger-name gibt den Namen des Triggers an, der gelöscht werden soll.

Der Tabellenname gibt den Namen der Tabelle an, aus der der Trigger gelöscht werden soll.

Die IF EXISTS-Klausel versucht, einen vorhandenen Trigger zu löschen. Wenn Sie versuchen, einen Trigger zu löschen, der nicht vorhanden ist, ohne die IF EXISTS-Klausel zu verwenden, erhalten Sie eine Fehlermeldung.

Mit der CASCADE-Option können Sie alle Objekte, die vom Auslöser abhängen, automatisch löschen.

Wenn Sie die Option RESTRICT verwenden, wird der Trigger nicht gelöscht, wenn Objekte davon abhängig sind.

Zum Beispiel:

Um den Trigger mit dem Namen example_trigger für die Tabelle Price zu löschen, führen wir Folgendes auswing Befehl:

Um den Trigger mit dem Namen example_trigger in der Tabelle Company abzulegen, führen Sie Folgendes auswing Befehl:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Verwenden von pgAdmin

Sehen wir uns nun an, wie alle drei Aktionen mit pgAdmin ausgeführt wurden.

So erstellen Sie einen Trigger in PostgreSQL mit pgAdmin

So können Sie mit pgAdmin einen Trigger in Postgres erstellen:

Schritt 1) ​​Melden Sie sich bei Ihrem pgAdmin-Konto an

Öffnen Sie pgAdmin und melden Sie sich mit Ihren Anmeldeinformationen bei Ihrem Konto an

Schritt 2) Erstellen Sie eine Demo-Datenbank

  1. Klicken Sie in der Navigationsleiste links auf Datenbanken.
  2. Klicken Sie auf Demo.

Erstellen Sie einen Trigger in PostgreSQL mit pgAdmin

Schritt 3) Geben Sie die Abfrage ein

Um die Tabelle Price_Audits zu erstellen, geben Sie die Abfrage im Editor ein:

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

Schritt 4) Führen Sie die Abfrage aus

Klicken Sie auf die Schaltfläche „Ausführen“.

Erstellen Sie einen Trigger in PostgreSQL mit pgAdmin

Schritt 5) Führen Sie den Code für auditfunc aus

Führen Sie Folgendes auswing Code zum Definieren der Funktion 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

Schritt 6) Führen Sie den Code aus, um einen Trigger zu erstellen

Führen Sie Folgendes auswing Code zum Erstellen des Triggers price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Schritt 7) Fügen Sie einen neuen Datensatz ein

  1. Führen Sie Folgendes auswing Befehl zum Einfügen eines neuen Datensatzes in die Preistabelle:
    INSERT INTO Price
    VALUES (3, 400)
  2. Führen Sie Folgendes auswing Befehl zum Überprüfen, ob ein Datensatz in die Tabelle Price_Audits eingefügt wurde:
    SELECT * FROM Price_Audits

    Dies sollte Folgendes zurückgebenwing:

Erstellen Sie einen Trigger in PostgreSQL mit pgAdmin

Schritt 8) Überprüfen Sie den Tabelleninhalt

Lassen Sie uns den Inhalt der Tabelle Price_Audits überprüfen:

Auflisten von Triggern mit pgAdmin

Schritt 1) Führen Sie Folgendes auswing Befehl zum Überprüfen der Trigger in Ihrer Datenbank:

SELECT tgname FROM pg_trigger

Dies gibt Folgendes zurückwing:

Auflisten von Triggern mit pgAdmin

Löschen von Triggern mit pgAdmin

Um den Trigger mit dem Namen example_trigger in der Tabelle Company abzulegen, führen Sie Folgendes auswing Befehl:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Zusammenfassung

  • Ein PostgreSQL-Trigger bezieht sich auf eine Funktion, die automatisch ausgelöst wird, wenn ein Datenbankereignis für ein Datenbankobjekt, beispielsweise eine Tabelle, auftritt.
  • Beispiele für solche Datenbankereignisse sind INSERT, UPDATE, DELETE usw.
  • Ein Trigger existiert nur während der Lebensdauer des Datenbankobjekts, für das er erstellt wurde.
  • Wenn das Datenbankobjekt gelöscht wird, wird auch der Trigger gelöscht.
  • PostgreSQL-Trigger werden mit der CREATE TRIGGER-Anweisung erstellt.
  • Jeder Trigger ist mit einer Funktion verknüpft, die angibt, was der Trigger tun wird, wenn er aufgerufen wird.

Laden Sie die in diesem Tutorial verwendete Datenbank herunter