sql >> Databáze >  >> RDS >> PostgreSQL

PRO KAŽDÝ VÝKAZ příklad spuštění

OLD a NEW jsou nulové nebo nejsou definovány ve spouštěči na úrovni příkazu. Podle dokumentace:

Odvážný důraz můj.

Až do Postgres 10 to vypadalo trochu jinak, ale se stejným efektem:

I když se tyto proměnné záznamu stále nedají použít pro spouštěče na úrovni příkazů, nová funkce zní:

Přechodové tabulky v Postgres 10+

Postgres 10 představil přechodové tabulky. Ty umožňují přístup k celé sadě ovlivněných řádků. Příručka:

Následujte odkaz na příručku pro příklady kódu.

Příklad pravidla na úrovni příkazu bez tabulek přechodů

Před příchodem přechodových tabulek to bylo ještě méně obvyklé. Užitečným příkladem je zasílání upozornění po určitých DML příkazech.
Zde je základní verze toho, co používám:

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

Pro Postgres 11 nebo novější použijte ekvivalentní, méně matoucí syntaxi:

...
EXECUTE FUNCTION trg_notify_after();

Viz:




  1. MySQL vynechává řádky, které uživatel již viděl při kontrole viděné tabulky

  2. Zobrazení odlišných hodnot s agregáty

  3. MYSQL, velmi pomalé řazení

  4. Získejte záznamy z jedné tabulky, kde v jiné není žádný záznam