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
为此目的使用触发器。