RDS PostgreSQL支援通過設定列層級參數on_update_set_default,在不使用觸發器的情況下,自動更新指定時間列。
前提條件
執行個體大版本為PostgreSQL 15及以上。
執行個體核心小版本為20241230及以上。
說明如需升級核心小版本,請參見升級核心小版本。
功能簡介
在某些業務情境中,應用程式希望在更新表中某一行時,即使未顯式指定時間列,也能自動更新該列。在原生PostgreSQL中,僅能通過觸發器實現此功能。RDS PostgreSQL支援通過設定列層級參數on_update_set_default,在不使用觸發器的情況下自動更新指定時間列。
該功能目前支援六種時間類型:TIMESTAMP、TIMESTAMPTZ、DATE、TIME、TIMETZ和INTERVAL。
開啟指定時間列的on_update_set_default參數
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+08更新測試表資料。
UPDATE test SET id=2; SELECT * FROM test;返回結果,update_time列內容未更新:
id | create_time | update_time ----+-------------------------------+------------------------------- 2 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:07:48.481879+08修改測試表update_time列的on_update_set_default參數值,以啟用自動更新時間列的功能。
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}更新測試表資料。
UPDATE test SET id=3; SELECT * FROM test;返回結果,update_time列內容自動更新:
id | create_time | update_time ----+-------------------------------+------------------------------- 3 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:08:39.601701+08