PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Задействане на Postgres след вмъкване при достъп до НОВО

От финото ръководство:

36.1. Преглед на поведението на тригера
[...]
За тригер на ниво ред, входните данни включват също NEW ред за INSERT и UPDATE тригери и/или OLD ред за UPDATE и DELETE тригери. Задействанията на ниво оператор понастоящем нямат начин да проверят отделните редове, модифицирани от оператора.

И от Trigger Procedures:

NEW
Тип данни RECORD; променлива, съдържаща новия ред на базата данни за INSERT /UPDATE операции в тригери на ниво ред. Тази променлива е NULL в тригери на ниво израз и за DELETE операции.

Обърнете внимание какво казва за тригерите на ниво ред и задействанията на ниво израз.

Имате тригер на ниво оператор:

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

Тригерите на ниво израз се задействат веднъж на изявление и даден израз може да се прилага към множество реда, така че понятието засегнат ред (което е NEW и OLD са за) просто не се прилага.

Ако искате да използвате NEW (или OLD ) в задействане, тогава искате тригерът да се изпълни за всеки засегнат ред и това означава, че искате задействане на ниво ред:

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

Току-що промених FOR EACH STATEMENT към FOR EACH ROW .

Вашият тригер също трябва да връща нещо:

Функцията за задействане трябва да върне или NULL или стойност на запис/ред, имаща точно структурата на таблицата, за която е задействан тригерът.
[...]
Върнатата стойност на тригер на ниво ред, задействан AFTER или тригер на ниво израз, задействан BEFORE или AFTER винаги се игнорира; може и да е нула. Въпреки това, всеки от тези типове задействания все пак може да прекъсне цялата операция, като изведе грешка.

Така че трябва да RETURN NEW; или RETURN NULL; във вашия спусък. Имате спусък AFTER, така че няма значение кое RETURN използвате, но аз бих използвал RETURN NEW; .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групово/партидна актуализация/внасяне в PostgreSQL

  2. clojure.java.jdbc мързелива заявка

  3. PostgreSQL JOIN с тип масив с ред на елементите на масива, как да се приложи?

  4. Актуализации на инструментите за тестване на PostgreSQL с архив за сравнителни показатели

  5. psql - запазване на резултатите от командата във файл