PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyzwalacz pożaru przy aktualizacji kolumny A, kolumny B lub kolumny C

To nieporozumienie. WHEN klauzula definicji wyzwalacza oczekuje boolean wyrażenie i możesz użyć OR operatorów w nim. To powinno po prostu działać (biorąc pod uwagę, że wszystkie kolumny faktycznie istnieją w tabeli account_details ). Sam używam podobnych wyzwalaczy:

CREATE TRIGGER trigger_update_account_details
AFTER UPDATE ON account_details
FOR EACH ROW
WHEN (OLD.email    IS DISTINCT FROM NEW.email
   OR OLD.username IS DISTINCT FROM NEW.username
   OR OLD.password IS DISTINCT FROM NEW.password) 
EXECUTE PROCEDURE notify_insert_account_details();

Ocena wyrażenia ma niewielki koszt, ale jest to prawdopodobnie bardziej wiarygodne niż alternatywa:

CREATE TRIGGER ... AFTER UPDATE OF email, username, password ...

Ponieważ zgodnie z dokumentacją:

Wyzwalacz specyficzny dla kolumny (zdefiniowany za pomocą UPDATE OF column_name składnia) zostanie uruchomiony, gdy którakolwiek z jego kolumn zostanie wymieniona jako cele w UPDATE SET polecenia lista. Możliwe jest, że wartość kolumny zmieni się, nawet gdy wyzwalacz nie zostanie uruchomiony, ponieważ zmiany wprowadzone w zawartości wiersza przez BEFORE UPDATE wyzwalacze nie są brane pod uwagę. I odwrotnie, polecenie takie jak UPDATE ... SET x = x ... uruchomi wyzwalacz w kolumnie x, nawet jeśli wartość kolumny nie uległa zmianie.

ROW składnia typu jest krótsza, aby sprawdzić wiele kolumn (robi to samo):

CREATE TRIGGER trigger_update_account_details
AFTER UPDATE ON account_details
FOR EACH ROW
WHEN ((OLD.email, OLD.username, OLD.password, ...)
       IS DISTINCT FROM
      (NEW.email, NEW.username, NEW.password, ...))
EXECUTE PROCEDURE notify_insert_account_details();

Lub, aby sprawdzić wszystkie widoczna kolumna użytkownika w wierszu:

...
WHEN (OLD IS DISTINCT FROM 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. Najnowsze trendy PostgreSQL:najbardziej czasochłonne zadania i ważne wskaźniki do śledzenia

  2. Alias ​​odniesienia w klauzuli WHERE

  3. Czy w Postgresie możesz ustawić domyślne formatowanie znacznika czasu, według sesji czy globalnie?

  4. Psycopg2 zużywa pamięć przy dużym zapytaniu wybierającym

  5. Wygeneruj losową liczbę z zakresu 1 - 10