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

FOR HVER UDTALELSE trigger eksempel

OLD og NEW er null eller ikke defineret i en udløser på sætningsniveau. Pr. dokumentation:

Fed fremhævelse mine.

Op til Postgres 10 læste dette lidt anderledes, dog med meget samme effekt:

Selvom disse registreringsvariabler stadig ikke er til nogen nytte for udløsere på sætningsniveau, er en ny funktion i høj grad:

Overgangstabeller i Postgres 10+

Postgres 10 introducerede overgangstabeller. Disse giver adgang til hele sættet af berørte rækker. Manualen:

Følg linket til manualen for kodeeksempler.

Eksempel på statement-level trigger uden overgangstabeller

Før fremkomsten af ​​overgangstabeller var disse endnu mindre almindelige. Et nyttigt eksempel er at sende meddelelser efter visse DML-kommandoer.
Her er en grundlæggende version af, hvad jeg bruger:

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

For Postgres 11 eller nyere brug den tilsvarende, mindre forvirrende syntaks:

...
EXECUTE FUNCTION trg_notify_after();

Se:




  1. SQL Server-ækvivalent til substring_index-funktion i MySQL

  2. mysqldump problemer med gendannelsesfejl:'KASSER venligst tablespacet før IMPORT'

  3. Kan ikke åbne backup-enhed. Operativsystem fejl 5

  4. Oracle:Bottom-up sletning