ApsaraDB RDS for PostgreSQL インスタンスの on_update_set_default パラメーターを構成して、トリガーを使用せずに指定された時間列を自動的に更新できます。
前提条件
RDS インスタンスで PostgreSQL 15 以降が実行されている。
RDS インスタンスでマイナーエンジンバージョン 20241230 以降が実行されている。
説明インスタンスのマイナーエンジンバージョンのアップグレード方法の詳細については、「マイナーエンジンバージョンを更新する」をご参照ください。
概要
アプリケーションによっては、時間列が文で明示的に定義されているかどうかに関係なく、テーブルのデータ行を更新するときに、テーブルの時間列の自動更新メカニズムが必要になる場合があります。ネイティブ PostgreSQL では、トリガーを構成することによってのみ、この目標を達成できます。RDS for PostgreSQL では、on_update_set_default パラメーターを構成して、トリガーを使用せずに指定された時間列を自動的に更新できます。
この機能は、TIMESTAMP、TIMESTAMPTZ、DATE、TIME、TIMETZ、および INTERVAL の各タイプのデータを格納する時間列の更新をサポートしています。
指定された時間列の自動更新を有効にする
on_update_set_default パラメーターを true に設定することにより、次の構文を使用して、指定された時間列の自動更新を有効にできます。
ALTER TABLE <test> ALTER COLUMN <update_time> SET(on_update_set_default=true);例
test という名前のテーブルを作成し、テストデータの行をテーブルに挿入します。
CREATE TABLE test (id INT, create_time TIMESTAMPTZ DEFAULT now(), update_time TIMESTAMPTZ DEFAULT now()); INSERT INTO test VALUES(1); SELECT * FROM test;結果の例:
id | create_time | update_time ----+-------------------------------+------------------------------- 1 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:07:48.481879+08test テーブルのデータを更新します。
UPDATE test SET id=2; SELECT * FROM test;結果の例:
id | create_time | update_time ----+-------------------------------+------------------------------- 2 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:07:48.481879+08結果に示すように、時間列 (update_time) は更新されていません。
test テーブルの update_time 列の on_update_set_default パラメーターを true に設定して、列の自動更新を有効にします。
ALTER TABLE test ALTER COLUMN update_time SET(on_update_set_default=true); SELECT attoptions FROM pg_attribute WHERE attname='update_time';結果の例:
attoptions ------------------------------ {on_update_set_default=true}test テーブルのデータを更新します。
UPDATE test SET id=3; SELECT * FROM test;結果の例:
id | create_time | update_time ----+-------------------------------+------------------------------- 3 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:08:39.601701+08結果に示すように、update_time 列は自動的に更新されます。