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