PostgreSQL 428C9: generated_always 报错 故障修复 远程处理
文档解释
428C9: generated_always
“generated_always”错误指的是在PostgreSQL中给不允许修改的列设置值的情况,该错误一般可在副本中查看;
错误说明:
当某一列被定义为具有“GENERATED ALWAYS”选项时,就会发生“generated_always”错误。当插入或更新表时,PostgreSQL会假定该列不应该被用户更新,而且应该由PostgreSQL自行决定,如果用户确实更新该列,就会返回错误消息“generated always”。
常见案例
一个常见的情况是有一个列名为“created_date”,类型为timestamp with time zone,并具有“GENERATED ALWAYS AS CURRENT_TIMESTAMP”的列。在插入新行时,字段“created_date”的值是由PostgreSQL自动分配的,不允许用户更改,如果用户试图更改,则会导致“generated_always”错误。
解决方法:
要解决“generated_always”错误,最简单的方法就是不尝试更新/插入该列的值。更好的做法是将生成的值设置为空,而不是不尝试更新。例如,您可以使用设置“ created_date = null”而不是“ created_date = value”(value 是您要更新的任何值)。这样插入/更新操作就不会导致“generated_always”错误。