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

Задействане на задействане при актуализиране на колона A или ColumnB или ColumnC

Това е недоразумение. WHEN клаузата на дефиницията на тригера очаква boolean израз и можете да използвате OR оператори в него. Това просто трябва да работи (като се има предвид, че всички колони действително съществуват в таблицата account_details ). Аз самият използвам подобни тригери:

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

Оценяването на израза има малка цена, но това вероятно е по-надеждно отколкото алтернативата:

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

Защото според документация:

Специфичен за колона тригер (дефиниран с помощта на UPDATE OF column_name синтаксис) ще се задейства, когато някоя от колоните му е изброена като цели вUPDATE SET на командата списък. Възможно е стойността на колона да се промени дори когато тригерът не се задейства, тъй като промените, направени в съдържанието на реда от BEFORE UPDATE тригерите не се разглеждат. Обратно, команда като UPDATE ... SET x = x ... ще задейства атригер в колона x, въпреки че стойността на колоната не се е променила.

ROW Синтаксисът на типа е по-кратък за проверка на много колони (прави същото):

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

Или, за да проверите за всеки видима потребителска колона в реда:

...
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. Завръщането на XFS в Linux

  2. Как да конфигурирам postgresql за първи път?

  3. Как мога да импортирам JSON файл в PostgreSQL?

  4. разлика между localhost и postgres за хост в docker

  5. Разширено съвпадение на дялове за присъединяване по дял