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

postgresql - задействане, актуализиране на времеви печат при актуализация на полето

Докато правите промени само в реда, който е задействал тригера, много по-лесно (и по-евтино) е да използвате BEFORE UPDATE тригер, който може да прави промени в new.complete_flag преди да бъде записан в таблицата, вместо да се налага да стартирате UPDATE изявление, след като вече е там.

Можете също така да ограничите тригера до актуализации на конкретно поле с UPDATE OF <column> клауза на CREATE TRIGGER изявление.

Крайният резултат ще изглежда така:

CREATE FUNCTION completed_timestamp() RETURNS trigger AS $$
   LANGUAGE plpgsql
BEGIN
  IF new.complete_flag = 1 and old.completed_flag = 0 THEN
    new.complete_time := current_timestamp;
  END IF;
  RETURN new;
END;
$$;

CREATE TRIGGER update_timestamp
BEFORE UPDATE OF completed_flag ON tbl_pXXXX
FOR EACH ROW 
EXECUTE PROCEDURE completed_timestamp();



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

  2. Агрегирани функции на множество обединени таблици

  3. Добавяне на свойство към обект, който се връща от Sequelize FindOne

  4. Липсваща таблица при материализиран изглед

  5. рекурсивно изравняване на вложен jsonb в postgres без неизвестна дълбочина и неизвестни ключови полета