PostgreSQL是否可以使用“生成列”自动更新包含“current_timestamp”的列?

8

在PostgreSQL中,使用“生成列”可以自动将列更新为"current_timestamp"。只要该行得到更新,就会发生这种情况。

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

ALTER TABLE test ADD COLUMN last_update_date timestamp without time zone 
GENERATED ALWAYS AS (current_timestamp) STORED;

修改列时出现错误

ERROR: generation expression is not immutable
1个回答

10

不行,出现错误的原因已经在错误信息中指明。

在生成列中使用的函数必须始终针对相同的参数返回相同的值,也就是说只能依赖于当前数据库行,current_timestamp 显然不属于这种类型。

如果 PostgreSQL 允许在生成列中使用此类函数,则例如从 pg_dump 还原数据库时,该列的值会发生更改。

请使用 BEFORE INSERT OR UPDATE 触发器来实现此目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接