postgresql - 如何在 psql 的交互模式下自动回滚事务?
问题描述
让我们假设文件的以下内容erroneous-query.sql
:
BEGIN;
SELECT 1/0;
COMMIT;
当我\i erroneous-query.sql
在 psql 的交互模式下说,我得到这个:
BEGIN
psql:erroneous-query.sql:2: ERROR: division by zero
但我需要ROLLBACK;
手动说 - 否则,事务将挂起(并阻止其他所有内容)。
如何配置 psql 为我自动回滚此事务?我试过\set ON_ERROR_ROLLBACK off
了,但无济于事。
解决方案
没有办法自动psql
发出问题ROLLBACK
。
但是一个中止的事务(一个有错误并且没有保存点的事务)会立即释放所有的锁,所以它永远不会阻塞其他任何人。
事务中剩余的语句将很快完成,它们中的每一个都会导致
ERROR: current transaction is aborted, commands ignored until end of transaction block
做你建议的事情实际上是非常危险的:那样事务的一部分(错误之后的语句)将在不同的事务中执行,并且整个事务的原子性将丢失。
推荐阅读
- javascript - 方法未定义js
- cassandra - 聚类键列必须与 CLUSTERING ORDER BY 指令 Cassandra 中的列完全匹配
- javascript - 如何在firestore的文档中获取集合
- github-actions - 如何缓存使用 ruby/setup-ruby 之类的源代码下载和安装软件的 github 操作?
- reactjs - 使用 react scoll 混合平滑滚动并链接到组件
- python - 如何找到每个城市的平均销售额?
- javascript - 如何在不更改 JQuery 中的内部元素的情况下设置文本?
- latex - 如何在 Latex 中绘制正弦曲线
- javascript - 如何以 1 开始项目索引
- amazon-web-services - 如何通过 API 检查 AWS 服务的运行状态