sql >> Database >  >> RDS >> PostgreSQL

VOOR ELKE STATEMENT trigger voorbeeld

OLD en NEW zijn null of niet gedefinieerd in een trigger op instructieniveau. Per documentatie:

Vetgedrukte nadruk van mij.

Tot Postgres 10 las dit iets anders, maar grotendeels met hetzelfde effect:

Hoewel die recordvariabelen nog steeds geen zin hebben voor triggers op instructieniveau, is er een nieuwe functie:

Overgangstabellen in Postgres 10+

Postgres 10 introduceerde overgangstabellen. Die geven toegang tot de hele reeks betrokken rijen. De handleiding:

Volg de link naar de handleiding voor codevoorbeelden.

Voorbeeld trigger op statement-niveau zonder transitietabellen

Vóór de komst van overgangstabellen waren die nog minder gebruikelijk. Een handig voorbeeld is het verzenden van meldingen na bepaalde DML-opdrachten.
Hier is een basisversie van wat ik gebruik:

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

Gebruik voor Postgres 11 of hoger de equivalente, minder verwarrende syntaxis:

...
EXECUTE FUNCTION trg_notify_after();

Zie:




  1. SQL artikelfrequentie berekenen met meerdere / afhankelijke kolommen?

  2. SQL Server-machtigingen op opgeslagen processen met dynamische SQL

  3. Hoe door de gebruiker gedefinieerde mysql-functie te debuggen?

  4. Hoe MySQL 5.7 volledig van Windows te verwijderen