すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:時間列の自動更新

最終更新日:Feb 22, 2025

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

  1. 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+08
  2. test テーブルのデータを更新します。

    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) は更新されていません。

  3. 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}
  4. 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 列は自動的に更新されます。