我正在使用pg-promise来运行我的 SQL 查询。查询本身存储在外部 .sql 文件中。
当我执行事务时,如果发生错误(如预期的那样),Postgres 将中止事务。我遇到的问题是我在事务中止后尝试运行的任何单独查询都没有运行,而是收到以下消息: "current transaction is aborted, commands ignored until end of transaction block"。如果查询是在 psql 控制台中运行的,我可以通过在查询失败后发出 ROLLBACK 来解决这个问题。我不认为这是一个选项,因为我的应用程序使用的 SQL 位于外部文件中。我也不认为保存点是一种选择,因为如果出现故障,整个事务都应该被丢弃。
如果发生此错误,我将如何回滚 SQL 文件?
这是供参考的SQL:
BEGIN;
DELETE
FROM tournament_tossup_values
WHERE tournament_id = $1 AND
NOT EXISTS
(
SELECT id
FROM tournament_match
WHERE tournament_id = $1
);
UPDATE tournament
SET bonus_point_value = $5, parts_per_bonus = $6
WHERE id = $1 AND NOT EXISTS (
SELECT id
FROM tournament_match
WHERE tournament_id = $1
)
RETURNING bonus_point_value, parts_per_bonus; <-- Any subsequent accesses to the database by the application fail if this transaction fails
COMMIT; <-- I want to rollback everything if this fails
先感谢您!