有没有一种方法可以在表的定义中设置记录更新的时间,就像在插入记录时使用将默认值设置为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)

08-06 16:18