假设我有桌子
create table foo (
insert_current timestamp default now(),
insert_previous timestamp,
bar int primary key,
baz varchar(10)
);
当新批次到达时,数据将不时被替换。我想跟踪上一批插入的时间以及当前时间戳。什么是这样做的好方法?
假设我有桌子
create table foo (
insert_current timestamp default now(),
insert_previous timestamp,
bar int primary key,
baz varchar(10)
);
当新批次到达时,数据将不时被替换。我想跟踪上一批插入的时间以及当前时间戳。什么是这样做的好方法?
更新行时,复制insert_current
to的值insert_previous
并设置insert_current
为当前时间戳:
UPDATE foo
SET baz = 'whatever',
insert_previous = insert_current,
insert_current = NOW()
WHERE bar = 1;
我将创建一个触发器,在 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();