有没有一种方法可以在表的定义中设置记录更新的时间,就像在插入记录时使用将默认值设置为NOW()函数一样?
最佳答案
你最好的选择就是扣动扳机。这里有一个简单的选项,自给自足:
CREATE TABLE triggertest (
id serial,
test text,
last_modified timestamp default now()
);
CREATE FUNCTION update_last_modified() RETURNS TRIGGER
LANGUAGE PLPGSQL AS
$$
BEGIN
NEW.last_modified := now();
RETURN NEW;
END;
$$;
CREATE TRIGGER update_timestamp BEFORE UPDATE ON triggertest
FOR EACH ROW EXECUTE PROCEDURE update_last_modified();
insert into triggertest (test) values ('test');
select * from triggertest;
这将返回:
id | test | last_modified
----+------+----------------------------
1 | test | 2013-02-16 17:30:41.678707
(1 row)
对于我们的更新测试:
update triggertest set test = 'another';
select * from triggertest;
这又回来了
id | test | last_modified
----+---------+--------------------------
1 | another | 2013-02-16 17:31:38.1126
(1 row)