1

レコードが挿入されたときにデフォルト値を NOW() 関数に設定するのと同じように、テーブルの定義でレコードが更新された時刻を設定する方法はありますか?

4

1 に答える 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 に答える