PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PER OGNI DICHIARAZIONE esempio di trigger

OLD e NEW sono nulli o non definiti in un trigger a livello di istruzione. Per documentazione:

Enfasi in grassetto la mia.

Fino a Postgres 10 questa lettura era leggermente diversa, con lo stesso effetto, però:

Sebbene queste variabili di record non siano ancora utili per i trigger a livello di istruzione, una novità assoluta è:

Tabelle di transizione in Postgres 10+

Postgres 10 ha introdotto le tabelle di transizione. Quelli consentono l'accesso all'intero set di righe interessate. Il manuale:

Segui il link al manuale per esempi di codice.

Esempio di trigger a livello di istruzione senza tabelle di transizione

Prima dell'avvento delle tabelle di transizione, queste erano ancora meno comuni. Un esempio utile è inviare notifiche dopo alcuni comandi DML.
Ecco una versione base di ciò che uso:

-- 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();

Per Postgres 11 o versioni successive usa la sintassi equivalente e meno confusa:

...
EXECUTE FUNCTION trg_notify_after();

Vedi: