gpt4 book ai didi

database - 我可以要求 Postgresql 忽略事务中的错误吗

转载 作者:太空狗 更新时间:2023-10-30 01:41:35 24 4
gpt4 key购买 nike

我将 Postgresql 与 PostGIS 扩展一起用于临时空间分析。我通常在 psql 中手动构造和发出 SQL 查询。我总是将分析 session 包装在事务中,因此如果我发出破坏性查询,我可以将其回滚。

但是,当我发出包含错误的查询时,它会取消交易。任何进一步的查询都会引发以下警告:

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,'xx',30); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# insert into test_gralxx values (4,'xx',40); savepoint sp;
ERROR: relation "test_gralxx" does not exist
LINE 1: insert into test_gralxx values (4,'xx',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,'xx',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)

关于database - 我可以要求 Postgresql 忽略事务中的错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com