Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.

Die folgenden wichtigen Punkte zu PostgreSQL−Triggern:

  • Der PostgreSQL-Trigger kann so angegeben werden, dass er ausgelöst wird

    • Bevor der Vorgang für eine Zeile versucht wird (bevor Einschränkungen überprüft werden und das EINFÜGEN, AKTUALISIEREN oder LÖSCHEN versucht wird)

    • Nachdem der Vorgang abgeschlossen ist (nachdem Einschränkungen überprüft werden und das EINFÜGEN, AKTUALISIEREN oder LÖSCHEN abgeschlossen ist)

    • Anstelle der Operation (im Falle von Einfügungen, Aktualisierungen oder Löschungen in einer Ansicht)

  • Ein Trigger, der FÜR JEDE ZEILE markiert ist, wird einmal für jede Zeile aufgerufen, die die Operation wird geändert. Im Gegensatz dazu wird ein Trigger, der FÜR JEDE ANWEISUNG markiert ist, nur einmal für eine bestimmte Operation ausgeführt, unabhängig davon, wie viele Zeilen er ändert.

  • Sowohl die WHEN-Klausel als auch die Trigger-Aktionen können auf Elemente der Zeile zugreifen, die mithilfe von Referenzen der Form NEW eingefügt, gelöscht oder aktualisiert werden.spalte-Name und ALT.spaltenname, wobei Spaltenname der Name einer Spalte aus der Tabelle ist, der der Trigger zugeordnet ist.

  • Wenn eine WHEN-Klausel angegeben wird, werden die angegebenen PostgreSQL-Anweisungen nur für Zeilen ausgeführt, für die die WHEN-Klausel wahr ist. Wenn keine WHEN-Klausel angegeben wird, werden die PostgreSQL-Anweisungen für alle Zeilen ausgeführt.

  • Wenn mehrere Trigger derselben Art für dasselbe Ereignis definiert sind, werden sie in alphabetischer Reihenfolge nach Namen ausgelöst.

  • Das Schlüsselwort BEFORE, AFTER oder INSTEAD OF bestimmt, wann die Trigger-Aktionen relativ zum Einfügen, Ändern oder Entfernen der zugeordneten Zeile ausgeführt werden.

  • Trigger werden automatisch gelöscht, wenn die Tabelle, der sie zugeordnet sind, gelöscht wird.

  • Die zu ändernde Tabelle muss in derselben Datenbank vorhanden sein wie die Tabelle oder Ansicht, an die der Trigger angehängt ist, und man muss nur tablename , nicht database .tabellenname.

  • Eine Einschränkungsoption, wenn angegeben, erstellt einen Einschränkungsauslöser. Dies ist das Gleiche wie bei einem regulären Trigger, außer dass der Zeitpunkt des Triggerauslösens mithilfe von SET-EINSCHRÄNKUNGEN angepasst werden kann. Es wird erwartet, dass Einschränkungsauslöser eine Ausnahme auslösen, wenn die von ihnen implementierten Einschränkungen verletzt werden.

  • Syntax

    Die grundlegende Syntax zum Erstellen eines Triggers lautet wie folgt:

    CREATE TRIGGER trigger_name event_nameON table_name;

    Hier könnte event_name sein Datenbankoperation für die erwähnte Tabelle table_name EINFÜGEN, LÖSCHEN, AKTUALISIEREN und ABSCHNEIDEN. Sie können optional für JEDE ZEILE nach dem Tabellennamen angeben.

    Das Folgende ist die Syntax zum Erstellen eines Triggers für eine Aktualisierungsoperation für eine oder mehrere angegebene Spalten einer Tabelle wie folgt −

    CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;

    Beispiel

    Betrachten wir einen Fall, in dem wir eine Prüfung für jeden Datensatz durchführen möchten, der in die Firmentabelle eingefügt wird, die wir wie folgt neu erstellen (Löschen Sie die Firmentabelle, wenn Sie sie bereits haben).

    testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);

    Um Audit trial zu halten, erstellen wir eine neue Tabelle namens AUDIT, in der Protokollnachrichten eingefügt werden, wenn in der Firmentabelle ein Eintrag für einen neuen Datensatz vorhanden ist −

    testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);

    Hier ist ID die AUDIT-Datensatz-ID und EMP_ID ist die ID, die aus der Firmentabelle stammt, und DATE behält den Zeitstempel bei, wenn der Datensatz in der Firmentabelle erstellt wird GESELLSCHAFT Tisch. Lassen Sie uns nun einen Trigger für die Tabelle COMPANY wie folgt erstellen −

    testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

    Wobei auditlogfunc() eine PostgreSQL−Prozedur ist und die folgende Definition hat –

    CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;

    Jetzt beginnen wir mit der eigentlichen Arbeit. Beginnen wir mit dem Einfügen eines Datensatzes in die Firmentabelle, wodurch ein Überwachungsprotokolldatensatz in der Überwachungstabelle erstellt werden sollte. Lassen Sie uns also einen Datensatz in der Firmentabelle wie folgt erstellen –

    testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );

    Dadurch wird ein Datensatz in der Firmentabelle wie folgt erstellt −

     id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000

    Gleichzeitig wird ein Datensatz in der AUDIT-Tabelle erstellt. Dieser Datensatz ist das Ergebnis eines Triggers, den wir beim EINFÜGEN in die Firmentabelle erstellt haben. Ebenso können Sie Ihre Trigger für AKTUALISIERUNGS- und Löschvorgänge basierend auf Ihren Anforderungen erstellen.

     emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)

    TRIGGER auflisten

    Sie können alle Trigger in der aktuellen Datenbank aus der Tabelle pg_trigger wie folgt auflisten −

    testdb=# SELECT * FROM pg_trigger;

    Die oben angegebene PostgreSQL-Anweisung listet alle Trigger auf.

    Wenn Sie die Trigger für eine bestimmte Tabelle auflisten möchten, verwenden Sie die AND−Klausel mit dem Tabellennamen wie folgt −

    testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

    Die oben angegebene PostgreSQL−Anweisung listet auch nur einen Eintrag wie folgt auf –

     tgname----------------- example_trigger(1 row)

    Dropping TRIGGER

    Im Folgenden finden Sie den DROP-Befehl, mit dem Sie ein vorhandener Trigger –

    testdb=# DROP TRIGGER trigger_name;
    Werbung

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.