首页 > 解决方案 > 如何在 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了,但无济于事。

标签: postgresqltransactionspsql

解决方案


没有办法自动psql发出问题ROLLBACK

但是一个中止的事务(一个有错误并且没有保存点的事务)会立即释放所有的锁,所以它永远不会阻塞其他任何人。

事务中剩余的语句将很快完成,它们中的每一个都会导致

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

做你建议的事情实际上是非常危险的:那样事务的一部分(错误之后的语句)将在不同的事务中执行,并且整个事务的原子性将丢失。


推荐阅读