Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页
编辑页面

一条 SQL 语句执行出错后,事务还能否继续?

问题描述

我们经常会在一个事务块中执行一系列的 SQL 语句,如果这些 SQL 语句中某一条 SQL 执行出现错误,后续的其他 SQL 语句还可以继续执行吗?

问题解答

事务中的 SQL 语句执行出错后,可以继续执行其他的 SQL 语句。

Redrock Postgres 支持语句级原子性,未成功的语句不会导致丢失当前事务中该语句之前的任何工作。

问题验证

在下面的例子中,我们需要创建一个表,表的名称是随机生成的,在开始使用这个表名创建这个表之前,通过尝试查询这个表检查这个表名是否已被使用。

BEGIN;

SELECT * FROM temp_ktmwq_1258 LIMIT 1;
ERROR:  relation "temp_ktmwq_1258" does not exist

CREATE TABLE temp_ktmwq_1258 (id integer, name text);

INSERT INTO temp_ktmwq_1258 (id, name) VALUES (1, 'dummy');

COMMIT;

从上面的测试结果来看,即使我们在查询一个不存在的表时发生了错误,我们依然可以在事务中继续执行其他的 SQL 语句。