您可能会遇到如下所示的错误消息。
ERROR: current transaction is aborted, commands ignored until end of transaction block
在 Redrock Postgres 中,通常情况下,如果SQL语句在执行过程中出现错误,该语句中的所有影响都将被回滚。此操作是一个语句级回滚。
当我们执行
ALTER CONSTRAINT
constraint_name
INITIALLY IMMEDIATE
命令,要将延迟检查的约束设置为
IMMEDIATE
时,会立即对该约束进行检查,需要追溯整个事务执行过的操作是否满足约束检查。此时如果检查出现错误,该SQL语句产生的错误是不能被恢复的,会让事务进入中止的状态。
如果我们处于中止的事务中,Postgres 会拒绝除
ROLLBACK
/
ABORT
之外的所有命令。
这通常是由于应用程序未正确处理事务中的错误,并保持事务打开而不是回滚而导致的。这可能还有其他意外情况,因此强烈建议修复应用程序代码以正确响应事务中的异常。