如何解决在PostgreSQL中创建一个永不回滚的存储过程?
| 从PostgreSQL 9.0手册: 重要提示:为避免阻塞获得的并发事务 来自相同序列的数字,nextval操作永远不会滚动 背部;也就是说,一旦获取了值,就将其视为已使用, 即使执行nextval的事务稍后中止。这表示 中止的事务可能会在序列中留下未使用的“漏洞” 分配值。 setval操作也不会回滚。 因此,如何创建具有以下行为的PL \\ PgSQL函数:“操作永不回滚”? 在这样的调用中,无论函数更改如何,都不会回滚:BEGIN;
SELECT composite_nextval(...);
ROLLBACK;
解决方法
选择
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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。