一条 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 语句。