sql >> Databasteknik >  >> RDS >> PostgreSQL

FÖR VARJE UTTALANDE triggerexempel

OLD och NEW är null eller inte definierade i en utlösare på satsnivå. Per dokumentation:

Djärv betoning min.

Fram till Postgres 10 läser detta något annorlunda, med ungefär samma effekt, dock:

Även om dessa postvariabler fortfarande inte är till någon nytta för utlösare på påståendenivå, är en ny funktion i allra högsta grad:

Övergångstabeller i Postgres 10+

Postgres 10 introducerade övergångstabeller. Dessa ger åtkomst till hela uppsättningen av berörda rader. Manualen:

Följ länken till manualen för kodexempel.

Exempel på statement-level trigger utan övergångstabeller

Före tillkomsten av övergångstabeller var dessa ännu mindre vanliga. Ett användbart exempel är att skicka aviseringar efter vissa DML-kommandon.
Här är en grundläggande version av vad jag använder:

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

För Postgres 11 eller senare använd motsvarande, mindre förvirrande syntax:

...
EXECUTE FUNCTION trg_notify_after();

Se:




  1. Data trunkerade för kolumn 'profile_pic' på rad 1 im mysql

  2. Oracle SQL*Plus ACCEPT-uttalanden

  3. Kontrollera databasen om den finns med Laravel

  4. Oracle:exporterar endast schema