重要说明:避免阻止获取的并发事务 来自相同序列的数字,从不滚动nextval操作 背部;也就是说,一旦获取了一个值,就会被认为是使用过的, 即使稍后执行nextval的事务也会中止。这意味着 中止的事务可能会在序列中留下未使用的“漏洞” 分配值。 setval操作也永远不会回滚。
那么,如何创建一个具有相同行为的PL \ PgSQL函数:“操作永远不会回滚”?
在这样的调用中,无论函数更改什么都不会回滚:
BEGIN;
SELECT composite_nextval(...);
ROLLBACK;
答案 0 :(得分:1)
选择composite_nextval
后,您可以使用保存点。然后,只需回滚到保存点并提交其余部分。
这样的事情:
BEGIN;
SELECT composite_nextval(...);
SAVEPOINT my_savepoint;
INSERT INTO some_table(a) VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
COMMIT;
这样,select composite_nextval(...)
将被提交,但insert into some_table
将不会。