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

Postgres spoušť po vložení přístupu NOVÉ

Z jemného manuálu:

36.1. Přehled spouštěcího chování
[...]
U spouštěče na úrovni řádku zahrnují vstupní data také NEW řádek pro INSERT a UPDATE spouštěče a/nebo OLD řádek pro UPDATE a DELETE spouštěče. Spouštěče na úrovni příkazů v současnosti nemají žádný způsob, jak prozkoumat jednotlivé řádky upravené příkazem.

A z Spouštěcích procedur:

NEW
Typ dat RECORD; proměnná obsahující nový řádek databáze pro INSERT /UPDATE operace ve spouštěčích na úrovni řádků. Tato proměnná je NULL ve spouštěčích na úrovni příkazů a pro DELETE operace.

Všimněte si, co říká o spouštěčích na úrovni řádků a spouštěčích na úrovni příkazů.

Máte spouštěč na úrovni příkazu:

...
FOR EACH STATEMENT
EXECUTE PROCEDURE f_log_datei();

Spouštěče na úrovni příkazu se spouštějí jednou za příkaz a příkaz lze použít na více řádků, takže pojem dotčený řádek (což je to, co NEW a OLD are about) jednoduše neplatí.

Pokud chcete použít NEW (nebo OLD ) ve spouštěči, pak chcete, aby se spouštěč spustil pro každý ovlivněný řádek, a to znamená, že chcete spouštěč na úrovni řádku:

CREATE TRIGGER log_datei AFTER INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH ROW
EXECUTE PROCEDURE f_log_datei();

Právě jsem změnil FOR EACH STATEMENTFOR EACH ROW .

Váš spouštěč by měl také něco vracet:

Spouštěcí funkce musí vracet buď NULL nebo hodnota záznamu/řádku, která má přesně strukturu tabulky, pro kterou bylo pravidlo spuštěno.
[...]
Vrácená hodnota pravidla na úrovni řádku spuštěna AFTER nebo spouštěč na úrovni příkazu spuštěný BEFORE nebo AFTER je vždy ignorováno; může to být i nulové. Kterýkoli z těchto typů spouštěčů však může přerušit celou operaci vyvoláním chyby.

Měli byste tedy RETURN NEW; nebo RETURN NULL; ve vaší spoušti. Máte spoušť AFTER, takže nezáleží na tom, který RETURN použijete, ale já bych zvolil RETURN NEW; .




  1. Jak zkontrolovat uživatelská oprávnění v MySQL Workbench pomocí GUI

  2. pghoard Alternativy - PostgreSQL Backup Management s ClusterControl

  3. Funkce DECODE() na serveru SQL Server

  4. Odhad spojení SQL Server pomocí hrubého zarovnání histogramu