Предположим, у вас есть table
с двумя полями timestamptz, created
и updated
.
table
имеет триггер, подобный следующему:
CREATE TRIGGER trig_table_on_update
BEFORE UPDATE ON table
FOR EACH ROW EXECUTE PROCEDURE func_table_on_update();
func_table_on_update
определяется следующим образом:
CREATE OR REPLACE FUNCTION func_table_on_update()
RETURNS trigger AS
$$
BEGIN
NEW.updated = current_timestamp;
RETURN NEW;
END;
$$
Как я могу установить created := updated
из другой функции? Проблема в том, что created
устанавливается в OLD.updated
, а затем при фиксации OLD.updated
перезаписывается current_timestamp
. Мне нужно поддерживать равенство между двумя после коммита, но они не могут всегда быть установлены в одно и то же время.
Например,
Исходное состояние:
created |updated |
-------------------|-------------------|
2018-10-09 15:59:23|2018-11-12 16:00:22|
После обновления:
created |updated |
-------------------|-------------------|
2018-11-12 16:00:22|2019-01-09 16:00:22|
Желаемое состояние:
created |updated |
-------------------|-------------------|
2018-11-12 16:00:22|2018-11-12 16:00:22|