DBAtlas · 数据库运维图谱

25001: active_sql_transaction

PostgreSQL

含义

在事务处于活动状态时,调用了只能在事务之外或事务开始时运行的命令。某些命令不能在事务块中运行。

原因

SET TRANSACTION ISOLATION LEVEL 等设置必须在块中的第一个查询之前发出('SET TRANSACTION ISOLATION LEVEL must be called before any query')。同样,某些命令在已打开的 BEGIN/事务中会被拒绝。通常源于应用禁用了 autocommit 并在不知不觉中启动了事务。

解决方法

在事务的最开始、任何查询运行之前发出事务级设置:BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ... 检查客户端库是否会隐式打开事务(autocommit 设置)。对于不能在事务块中运行的命令,先用 COMMIT/ROLLBACK 结束当前事务。

在 DBAtlas 中打开 →

同一数据库的其他条目