web-dev-qa-db-ja.com

PostgreSQLで行が更新されたときにタイムスタンプを更新する

MySQLでは、行が変更されるたびに列changetimestampを更新する場所でこれを実行できます。

create table ab (
  id int, 
  changetimestamp timestamp 
    NOT NULL 
    default CURRENT_TIMESTAMP 
    on update CURRENT_TIMESTAMP 
);

PostgreSQLで上記を行うのに似た何かがありますか?

63
bichonfrise74

次のように、テーブルのchangetimestamp列を更新する関数を作成します。

CREATE OR REPLACE FUNCTION update_changetimestamp_column()
RETURNS TRIGGER AS $$
BEGIN
   NEW.changetimestamp = now(); 
   RETURN NEW;
END;
$$ language 'plpgsql';

次のように更新が発生するたびにupdate_changetimestamp_column()関数を呼び出すトリガーをテーブルに作成します。

    CREATE TRIGGER update_ab_changetimestamp BEFORE UPDATE
    ON ab FOR EACH ROW EXECUTE PROCEDURE 
    update_changetimestamp_column();
103
Charles Ma