PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

postgresql - gatilho, atualização timestamp na atualização do campo


Contanto que você esteja apenas fazendo alterações na linha que disparou o gatilho, é muito mais simples (e mais barato) usar um BEFORE UPDATE gatilho, que pode fazer alterações em new.complete_flag antes de ser salvo na tabela, em vez de ter que executar um UPDATE declaração depois de já estar lá.

Você também pode limitar o gatilho a atualizações de um campo específico com o UPDATE OF <column> cláusula do CREATE TRIGGER declaração.

O resultado final ficaria mais ou menos assim:
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();