加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – 我可以要求Postgresql忽略事务中的错误

发布时间:2020-12-12 08:39:45 所属栏目:MsSql教程 来源:网络整理
导读:我使用 Postgresql与PostGIS扩展进行自组织空间分析.我通常在psql中手工构造和发出SQL查询.我总是在事务中包装一个分析会话,所以如果我发出一个破坏性的查询,我可以回滚. 但是,当我发出包含错误的查询时,它将取消该事务.任何进一步的查询都会引发以下警告: E
我使用 Postgresql与PostGIS扩展进行自组织空间分析.我通常在psql中手工构造和发出SQL查询.我总是在事务中包装一个分析会话,所以如果我发出一个破坏性的查询,我可以回滚.

但是,当我发出包含错误的查询时,它将取消该事务.任何进一步的查询都会引发以下警告:

ERROR: current transaction is
aborted,commands ignored until end of
transaction block

有没有办法把这个行为关掉?回滚事务是很麻烦的,并且每次打错时重新运行以前的查询.

解决方法

(更新:不用手动这个,我在postgresql邮件列表中询问,而且这个行为已经实现了,由psql客户端中的 ON_ERROR_ROLLBACK设置)

要详细说明Simon的答案(1),在您的方案中,您可以在每次交互式查询后通常添加一个保存点,始终使用相同的名称(如果查询是成功的,它会覆盖前一个).在出现错误的情况下,您可以返回上一次保存的,并从那里继续.

这个工作模式的一个例子:

db=# select * from test_gral ;
 i |  t   |  n
---+------+------
 1 | text | 10.0
(1 row)

db=# begin;
BEGIN
db=#  insert into test_gral values (2,'xx',20); savepoint sp;
INSERT 0 1
SAVEPOINT
db=#  insert into test_gral values (3,30); savepoint sp;
INSERT 0 1
SAVEPOINT
db=#  insert into test_gralxx values (4,40); savepoint sp;
ERROR:  relation "test_gralxx" does not exist
LINE 1: insert into test_gralxx values (4,40);
                    ^
ERROR:  current transaction is aborted,commands ignored until end of transaction block
db=# ROLLBACK TO SAVEPOINT sp;
ROLLBACK
db=#  insert into test_gral values (4,40); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# commit;
COMMIT
db=# select * from test_gral ;
 i |  t   |  n
---+------+------
 1 | text | 10.0
 2 | xx   |   20
 3 | xx   |   30
 4 | xx   |   40
(4 rows)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读