PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

FOR EACH STATEMENT-Trigger-Beispiel

OLD und NEW sind null oder nicht in einem Trigger auf Anweisungsebene definiert. Pro Dokumentation:

Fettdruck von mir.

Bis Postgres 10 las sich das etwas anders, aber mit dem gleichen Effekt:

Während diese Datensatzvariablen für Auslöser auf Anweisungsebene immer noch nutzlos sind, ist eine sehr neue Funktion:

Übergangstabellen in Postgres 10+

Postgres 10 hat Übergangstabellen eingeführt. Diese ermöglichen den Zugriff auf den gesamten Satz betroffener Zeilen. Das Handbuch:

Folgen Sie dem Link zum Handbuch für Codebeispiele.

Beispiel-Trigger auf Anweisungsebene ohne Übergangstabellen

Vor dem Aufkommen von Übergangstabellen waren diese noch seltener. Ein nützliches Beispiel ist das Senden von Benachrichtigungen nach bestimmten DML-Befehlen.
Hier ist eine grundlegende Version dessen, was ich verwende:

-- Generic trigger function, can be used for multiple triggers:
CREATE OR REPLACE FUNCTION trg_notify_after()
  RETURNS trigger
  LANGUAGE plpgsql AS
$func$
BEGIN
   PERFORM pg_notify(TG_TABLE_NAME, TG_OP);
   RETURN NULL;
END
$func$;

-- Trigger
CREATE TRIGGER notify_after
AFTER INSERT OR UPDATE OR DELETE ON my_tbl
FOR EACH STATEMENT
EXECUTE PROCEDURE trg_notify_after();

Verwenden Sie für Postgres 11 oder höher die äquivalente, weniger verwirrende Syntax:

...
EXECUTE FUNCTION trg_notify_after();

Siehe: