レコードが挿入されたときにデフォルト値を NOW() 関数に設定するのと同じように、テーブルの定義でレコードが更新された時刻を設定する方法はありますか?
質問する
107 次
1 に答える
1
ここでの最良のオプションはトリガーです。自己完結型の簡単なオプションを次に示します。
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)
于 2013-02-17T01:33:38.843 に答える