psql交互模式下如何自动回滚一个事务?

How to automatically rollback a transaction in psql's interactive mode?

让我们假设文件 erroneous-query.sql 的以下内容:

BEGIN;
SELECT 1/0;
COMMIT;

当我在 psql 的交互模式下说 \i erroneous-query.sql 时,我得到这个:

BEGIN
psql:erroneous-query.sql:2: ERROR:  division by zero

但我需要手动说 ROLLBACK; - 否则,交易将挂起(并阻止其他一切)。

如何配置 psql 为我自动回滚此事务?我尝试了 \set ON_ERROR_ROLLBACK off,但无济于事。

无法使 psql 自动发出 ROLLBACK

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

事务中剩下的语句会很快完成,每一个都会引起[=13​​=]

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

按照你的建议去做其实是很危险的:那样一个事务的一部分(错误后的语句)会在不同的事务中执行,整个事务的原子性就会丢失。