在平时的数据库操作编程中我们会时不时会遇到ERROR: current transaction is aborted, commands ignored until end of transaction blockp这样的错误。该怎么解决呢?一般我们都是直接上网查找。如果英文好一点的人的话的从错误信息就能知道大概是那个地方出错了。不过如果经验不是很丰富的话,还是上网查找比较方便。最基本错误信息可以从官方文档中查看(
http://www.postgresql.org/docs/8.4/interactive/errcodes-appendix.html
)。
出现上面的错误是事务控制不恰当的原因,两种不当写法如下。
不当写法1:
连接OPEN。
try {
try {
数据库操作A。
} catch (Exception e) {
log.error("do something");
数据库操作B。
//此次数据操作有可能出现上面的错误。
事务提交commit。
} catch (Exception ex) {
事务回滚rollback。
} finally {
关闭连接。
不当写法2:
连接OPEN。
try {
数据库操作A。
数据库操作B。
事务提交commit。
} catch (Exception ex) {
数据库操作C。
//此次数据操作有可能出现上面的错误。
事务提交commit。
} finally {
关闭连接。
Postgres数据库中,同一事务中如果某次数据库操作中出错的话,那这个事务以后的数据库都会出错。
因此不当写法1中如果数据库操作A中出错,那个同一个的数据库操作B执行的时候就会报错。不当写法2中如果数据库操作A或者数据库操作B中出错,那个同一个的数据库操作C执行的时候就会报错。
为了避免错误,有人在用重新OPEN方法,这样做的话实际是把前面的操作都抛弃掉了(不是自动提交的场合),并且重新开启增加了系统开销,不建议这样修改。
根据出错的原因我们可以把可能出错之前的处理作为一个事务。然后把出错之后的处理作为一个事务,具体怎样做要看具体的逻辑。这样就可以避免出错了。
这样我们可以把不当写法1的修改为
try {
数据库操作A。
} catch (Exception e) {
事务回滚或者提交;
log.error("do something");
数据库操作B。
这样我们可以把不当写法2的修改为
} catch (Exception ex) {
事务回滚或者提交;
数据库操作C。
事务提交commit。
} finally {
关闭连接。
PostgreSQL错误解决:ERROR: current transaction is aborted, commands ignored until end of transaction blockp
在平时的数据库操作编程中我们会时不时会遇到ERROR: current transaction is aborted, commands ignored until end of transaction blockp这样的错误。该怎么解决呢?一般我们都是直接上网查找。如果英文好一点的人的话的从错误信息就能知道大概是那个地方出错了。不过如果经验不是很丰富的话,还是上网查找比较方便。最基本错误
def fieldbyname(self, namestr):
self.env.cr.execute("SELECT "+namestr+" FROM dzjl_muoban WHERE id=%s",
[self.id])
c_id = self.env.cr.fetchone()
# print(c_id)
# print(namestr)
return c_id.
我们在PG
数据库
,关闭了事务的自动提交的情况下,会经常的遇到这样的问题
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
为什么会造成了这样的问题,原因是
Postgres
数据库
中,同一事务中如果某次
数据库
操作中出错的话,那这个事务以后的
数据库
都会出错。
我们举个很
我们在PG
数据库
,关闭了事务的自动提交的情况下,会经常的遇到这样的问题
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
为什么会造成了这样的问题,原因是
Postgres
数据库
中,同一事务中如果某次
数据库
操作中出错的话,那这个事务以后的
数据库
都会出错。
我们举个很简单的例子
test=# select * from test1;
ERROR
: relat
ion
"tes
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
bloc
错误
原因:
出现这个
错误
的原因是:在一个事务中,第一个SQL查询失败,并且你忽略了该失败并继续后面的代码。当你使用同样的连接(
TRAN
SAC
psql相关的事务模式变量
ON_
ERROR
_ROLLBACK, ON_
ERROR
_STOP
postgres=# \set ON_
ERROR
_ROLLBACK on如果开启ON_
ERROR
_ROLLBACK, 会在每一句SQL前设置隐形的savepoint, 可以继续下面的SQL, 而不用全部回滚
先举例说明该参数的效果:
postgres=# \set ON_
ERROR
_ROLLBACK on
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
bl
odoo开发过程中遇到上面问题
翻译一下:
当前事务中止,直到事务结束BL被忽略的命令
问题
解决
之后,总结原因:
sql语法
错误
导致
请仔细的检查你的sql
我犯的
错误
是:
1、没有注意到pg字段名不支持大写查询
2、查询字段链...
错误
出现:
含有
错误
的查询后,选中insert语句无法执行,报错
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
事务中含有
错误
,再执行DML时,事务无法正常进行。
我们在PG
数据库
,关闭了事务的自动提交的情况下,会经常的遇到这样的问题
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of tr...
SQL报错:
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
1、报错快照:
Cause: com.kingbase8.util.KSQL
Exception
:
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
2、原因:
会话中只要有一个sql执行报错了,这个
使用 DBeaver 手动提交模式 查询 postgres
数据库
时出现报错:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
block
查看历史SQL发现在提交了某个SQL后出现此报错,可能是此条SQL不对,任务没有真正提交,每次都卡在这条SQL上。
回滚 或者 提交 刚才提交的SQL,清空任务栏中的任务后,再次查看,OK!
PSQL
Exception
:
ERROR
:
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
sac
t
ion
bloc
这是个查询接口
场景:我在插入的时候如果遇到了唯一约束冲突,DuplicateKey
Exception
,catch里面执行这个查询接口,查出来获取主键ID ,再通过主键ID去更改这条数据
//伪代码
mapper.insertRecord(entity);
}catch(Dupl.
python操作PG
数据库
出现
current
tran
sac
t
ion
is
abort
ed
,
command
s
ignore
d until
end
of
tran
aact
block
出现这个问题的原因是sql代码在执行时出现
错误
,由于PG事务自身的保护机制,所以PG本身会将为锁定,这个时候如果需要跳过当前的
错误
继续执行,则按PG的规则,需要处理掉当前的
错误
。可以选择在
数据库
中直接处理掉当前出现的问题,然后重新执行Python脚本,但是这样的做法不是很推荐,如果数据量少且数据质量好的话,这个方式也只能说是可