3

假设我有桌子

create table foo (
    insert_current timestamp default now(),
    insert_previous timestamp,
    bar int primary key,
    baz varchar(10)
);

当新批次到达时,数据将不时被替换。我想跟踪上一批插入的时间以及当前时间戳。什么是这样做的好方法?

4

2 回答 2

3

更新行时,复制insert_currentto的值insert_previous并设置insert_current为当前时间戳:

UPDATE foo
   SET baz = 'whatever',
       insert_previous = insert_current,
       insert_current  = NOW()
 WHERE bar = 1;
于 2012-05-24T04:50:54.763 回答
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();
于 2012-05-24T07:04:26.930 回答