是否可以使用“生成的列”在 PostgreSQL 中用“current_timestamp”更新列(自动)?

Thi*_*mal 8 postgresql calculated-columns

每当行更新时,是否可以使用“生成的列”在 PostgreSQL 中使用“current_timestamp”(自动)更新列?

目前我正在使用触发器来更新审计字段last_update_date。但我打算切换到生成的列

ALTER TABLE test ADD COLUMN last_update_date timestamp without time zone 
GENERATED ALWAYS AS (current_timestamp) STORED;
Run Code Online (Sandbox Code Playgroud)

更改列时出现错误

ERROR: generation expression is not immutable
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 10

不,由于错误中指定的原因,这不起作用。

生成列中使用的函数必须始终为相同的参数返回相同的值,即只依赖于当前数据库行。current_timestamp显然不是那样的。

pg_dump例如,如果 PostgreSQL 确实允许在生成的列中使用此类函数,那么当数据库从 a 恢复时,该列的值将会更改。

BEFORE INSERT OR UPDATE为此目的使用触发器。