MySQLでは、これを実行してchangetimestamp
、行が変更されるたびに列を更新できます。
create table ab (
id int,
changetimestamp timestamp
NOT NULL
default CURRENT_TIMESTAMP
on update CURRENT_TIMESTAMP
);
PostgreSQLで上記と同様のことはありますか?
MySQLでは、これを実行してchangetimestamp
、行が変更されるたびに列を更新できます。
create table ab (
id int,
changetimestamp timestamp
NOT NULL
default CURRENT_TIMESTAMP
on update CURRENT_TIMESTAMP
);
PostgreSQLで上記と同様のことはありますか?
timestamp
バージョンと設定に応じて、列に対していくつかの「特別な処理」がありますが、(幸いなことに!)Postgresでは再現できません。特定のコンステレーションでの入力時に0
、timestamp
列を許可したりNULL
、現在のタイムスタンプに変換したりするようなものです。MySQLとPostgresの微妙な違いに注意するために、両方のRDBMSのマニュアルを必ず調べてください。
回答:
次のように、テーブルの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();
update_changetimestamp_column
か?