2021/11/18

POSTGRESQLで行更新時に自動で更新日時を設定する

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();

以上です。