PostgreSQL Auslöser: Erstellen, Auflisten und Löschen mit Beispiel

⚡ Intelligente Zusammenfassung

PostgreSQL Trigger sind Funktionen, die automatisch ausgeführt werden, wenn ein INSERT-, UPDATE- oder DELETE-Ereignis auf einer Tabelle ausgelöst wird. Dadurch kann die Datenbank Regeln durchsetzen, Änderungen protokollieren und Daten prüfen, ohne dass zusätzlicher Anwendungscode erforderlich ist.

  • Definition: Ein Trigger ist eine Funktion, die bei einem Datenbankereignis wie INSERT, UPDATE oder DELETE automatisch aufgerufen wird.
  • 🔁 Umfang: FOR EACH ROW führt den Trigger einmal pro betroffener Zeile aus, während FOR EACH STATEMENT ihn einmal pro Operation ausführt.
  • Erstellen: CREATE TRIGGER bindet eine Funktion an eine Tabelle und legt den Zeitpunkt für BEFORE, AFTER oder INSTEAD OF fest.
  • 📋 Liste: Führen Sie eine Abfrage des pg_trigger-Katalogs mit SELECT tgname durch, um alle Trigger in der Datenbank anzuzeigen.
  • 🗑️ Drop: DROP TRIGGER entfernt einen Trigger, und IF EXISTS verhindert einen Fehler, wenn dieser fehlt.
  • 🤖 KI-Hilfe: KI-Assistenten generieren Auslösefunktionen und schlagen VORHER- oder NACHHER-Zeitpunkte anhand einer Anfrage in einfacher Sprache vor.

PostgreSQL Auslöser

Was ist Trigger? PostgreSQL?

A PostgreSQL Auslösen Ein Trigger ist eine Funktion, die automatisch ausgelöst wird, wenn ein Datenbankereignis an einem Datenbankobjekt, beispielsweise einer Tabelle, auftritt. Beispiele für solche Ereignisse sind INSERT, UPDATE, DELETE usw. Wenn Sie einen Trigger für eine Tabelle erstellen, wird dieser automatisch entfernt, sobald die Tabelle gelöscht wird.

Wie Trigger verwendet wird PostgreSQL?

Ein Trigger kann bei seiner Erstellung mit dem Operator FOR EACH ROW gekennzeichnet werden. Ein solcher Trigger wird für jede durch die Operation geänderte Zeile einmal aufgerufen. Alternativ kann ein Trigger bei seiner Erstellung auch mit dem Operator FOR EACH STATEMENT gekennzeichnet werden. Dieser Trigger wird für eine bestimmte Operation nur einmal ausgeführt.

PostgreSQL erstellen Auslöser

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 Spaltenname-Parameter ON hinzufügen.

Die folgende Syntax veranschaulicht dies:

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

PostgreSQL Erstellen Sie ein Trigger-Beispiel

Wir verwenden die unten angegebene Preistabelle:

Preis:

PostgreSQL erstellen Auslöser

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.

Nachdem wir die Triggerfunktion erstellt haben, binden wir sie an unsere Preistabelle. 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 Trigger:

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 einen Datensatz in die Tabelle „Price“ eingefügt haben, sollte aufgrund des von uns erstellten Triggers auch ein Datensatz in die Tabelle „Price_Audits“ eingefügt werden. Überprüfen wir dies:

SELECT * FROM Price_Audits;

Dies gibt Folgendes zurück:

PostgreSQL erstellen Auslöser

Der Auslöser hat erfolgreich funktioniert.

PostgreSQL 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ück:

PostgreSQL Listenauslöser

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

PostgreSQL Auslöser fallen lassen

Wenn ein Auslöser nicht mehr benötigt wird, kann er genauso einfach entfernt werden. PostgreSQL Trigger verwenden wir die DROP TRIGGER-Anweisung mit der folgenden 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 in der Tabelle Company abzulegen, führen Sie den folgenden Befehl aus:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Verwenden von pgAdmin

Schauen wir uns nun an, wie alle drei Aktionen mit pgAdmin durchgeführt werden.

So erstellen Sie einen Trigger in PostgreSQL mit pgAdmin

So erstellen Sie einen Trigger in PostgreSQL mit pgAdmin:

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

Öffnen Sie pgAdmin und melden Sie sich mit Ihren Zugangsdaten in Ihrem Konto an.

Schritt 2) Erstellen Sie eine Demo-Datenbank

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

Trigger erstellen 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“.

Trigger erstellen in PostgreSQL mit pgAdmin

Schritt 5) ​​Führen Sie das aus Code für die Prüffunktion

Führen Sie den folgenden Code aus, um die Funktion auditfunc zu 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

Schritt 6) ​​Führen Sie das aus Code Auslöser erstellen

Führen Sie den folgenden Code aus, um den Trigger price_trigger zu erstellen:

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 den folgenden Befehl aus, um einen neuen Datensatz in die Preistabelle einzufügen:
INSERT INTO Price
VALUES (3, 400)
  1. 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:

Trigger erstellen 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 den folgenden Befehl aus, um die Trigger in Ihrer Datenbank zu überprüfen:

SELECT tgname FROM pg_trigger

Dies gibt Folgendes zurück:

Auflisten von Triggern mit pgAdmin

Dropping Trigger mit pgAdmin

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

DROP TRIGGER example_trigger IF EXISTS
ON Company

Laden Sie die in diesem Tutorial verwendete Datenbank herunter

Häufig gestellte Fragen

Ein BEFORE-Trigger wird ausgeführt, bevor die Zeilenänderung geschrieben wird, sodass er die Zeile ändern oder ablehnen kann. Ein AFTER-Trigger wird ausgeführt, nachdem die Änderung gespeichert wurde, und eignet sich für Protokollierungs- und Prüfaufgaben.

Ein INSTEAD OF-Trigger wird für eine Sicht, nicht für eine Tabelle, definiert. Er ersetzt die INSERT-, UPDATE- oder DELETE-Anweisungen durch benutzerdefinierte Logik und macht so eine schreibgeschützte Sicht beschreibbar.

Triggerfunktionen werden üblicherweise in PL/pgSQL geschrieben. PostgreSQL unterstützt auch PL/Python, PL/Perl, PL/Tcl und C, sodass Sie die Sprache auswählen können, die am besten zu Ihrer Logik passt.

Verwenden Sie ALTER TABLE Tabellenname DISABLE TRIGGER Auslösername, um den Auslöser zu deaktivieren, und ENABLE TRIGGER, um ihn wieder zu aktivieren. Dadurch wird ein Datenverlust vermieden.ping und die Wiederherstellung des Auslösers bei Massenladevorgängen.

Ja. Jeder Trigger erhöht den Aufwand für jede betroffene Zeile oder Anweisung, daher kann eine komplexe Triggerlogik Schreibvorgänge verlangsamen. Halten Sie Triggerfunktionen kurz und indizieren Sie alle abgefragten Spalten.

Ja. Wenn ein Trigger eine andere Tabelle ändert, die ebenfalls Trigger enthält, werden auch diese ausgelöst, wodurch kaskadierende Trigger entstehen. PostgreSQL Die Verschachtelungstiefe wird begrenzt, um Endlosschleifen zu verhindern.

KI-Codierungsassistenten wandeln eine Anfrage in einfacher Sprache in eine vollständige CREATE TRIGGER-Anweisung und eine Triggerfunktion um, schlagen BEFORE- oder AFTER-Zeitpunkte vor und erläutern den generierten PL/pgSQL-Code zur schnellen Überprüfung.

Ja. Tools wie pgai und GPT-basierte Assistenten übersetzen eine beschriebene Regel in Trigger-SQL und können INSERT-Trigger erstellen, die neue Daten automatisch kennzeichnen oder validieren, sobald sie eintreffen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: