Siempre que solo realice cambios en la fila que activó el activador, es mucho más simple (y económico) usar un BEFORE UPDATE
activador, que puede realizar cambios en new.complete_flag
antes de que se guarde en la tabla, en lugar de tener que ejecutar UPDATE
declaración después de que ya está allí.
También puede limitar el activador a las actualizaciones de un campo en particular con UPDATE OF <column>
cláusula de CREATE TRIGGER
declaración.
El resultado final se vería así:
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();