如何在PostgreSQL中实现非自动提交

2025年05月04日 14:06
有1个网友回答
网友(1):

函数和触发器过程总是在一个由外层查询建立起来的事务里执行
--- 它们无法开始或者提交事务,因为 PostgreSQL 没有嵌套事务.

Test=# select * from test_main;
id | value
----+----------
1 | ONE1
2 | TWO1
4 | FOUR1
11 | ONEONE
12 | ONETWO
13 | ONETHREE
(6 行记录)

通过 BEGIN; 来开始一个事务, COMMIT; 结束一个.

Test=# BEGIN;
BEGIN
Test=# INSERT INTO test_main(id, value) VALUES (100, '100');
INSERT 0 1
Test=# INSERT INTO test_main(id, value) VALUES (100, '100');
错误: 重复键违反唯一约束"test_main_pkey"
描述: 键值"(id)=(100)" 已经存在
Test=# SELECT * FROM test_main;
错误: 当前事务被终止, 事务块结束之前的查询被忽略
Test=# ROLLBACK;
ROLLBACK
Test=# SELECT * FROM test_main;
id | value
----+----------
1 | ONE1
2 | TWO1
4 | FOUR1
11 | ONEONE
12 | ONETWO
13 | ONETHREE
(6 行记录)