2021/11/18
POSTGRESQLで行更新時に自動で更新日時を設定する
よくある、(マスターレコードなどに設定すると便利な)DBのレコードで自動更新時の時刻を保持するやつです。
前提事項
- postgresqlのバージョンは14です。
詳細
- 行更新時に自動でupdated_atに現在時刻を設定する関数を定義(名前は
last_updated_at
とかlast_updated_time
とかなんでも良いです。) - updated_atをもつテーブルを定義
- テーブルにトリガーを設定
-- triggerを定義します。
-- 行が更新された時に、updated_atに現在時刻を設定します。
CREATE FUNCTION set_updated_at() RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
NEW.updated_at := now();
return NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
-- updated_atをもったtestsテーブルを作成します。
CREATE TABLE tests (
id serial primary key,
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
UNIQUE(block_height)
);
-- testsテーブル更新時に自動でupdated_atが更新されるようにトリガーを設定します。
CREATE TRIGGER trg_tests_updated_at BEFORE UPDATE ON tests FOR EACH ROW EXECUTE PROCEDURE set_updated_at();
以上です。
関連する記事

psqlコマンドを使い、SQLファイルを実行して、csv/tsvに結果を出力する
postgresqldbサーバーにログインして、SQLファイルを実行して結果をcsv/tsvに出力する方法です。

[Rust][Psql]Dieselのよくやる使い方まとめ
Rust Dieselのよくやる使い方をまとめてみました

POSTGRESQLで行更新時に自動で更新日時を設定する
TRIGGERを使って、行更新時に更新日時を特定のフィールドに設定できるようにしました

Rust dieselでpostgresqlのjson型を使う
dieselでpostgresqlのjson型のフィールドに対するクエリができるようにしました