PostgreSQL:如何获取先前的插入时间戳

3
假设我有一个表格:
create table foo (
    insert_current timestamp default now(),
    insert_previous timestamp,
    bar int primary key,
    baz varchar(10)
);

当新的批次到达时,数据将会被替换。我想要跟踪之前批次的插入时间以及当前时间戳。有什么好的方法可以做到这一点?

2个回答

3

当您更新一行时,请将insert_current的值复制到insert_previous并将insert_current设置为当前时间戳:

UPDATE foo
   SET baz = 'whatever',
       insert_previous = insert_current,
       insert_current  = NOW()
 WHERE bar = 1;

3
我会创建一个触发器,自动在UPDATE语句上设置insert_current和insert_previous。
首先,创建触发器函数:
CREATE OR REPLACE FUNCTION do_update() RETURNS "trigger"
AS $$
BEGIN
    NEW.insert_previous := OLD.insert_current;
    NEW.insert_current := NOW();
    return NEW;
END;
$$
LANGUAGE plpgsql;

然后将触发器添加到您的表中:
CREATE TRIGGER do_update
BEFORE UPDATE ON foo
FOR EACH ROW
EXECUTE PROCEDURE do_update();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接