当前位置:  开发笔记 > 编程语言 > 正文

postgresql 8.2中的嵌套事务?

如何解决《postgresql8.2中的嵌套事务?》经验,为你挑选了1个好方法。

我正在处理应用数据库架构更新的脚本.我使用start transaction/commit设置了所有SQL更新脚本.我在命令行上将这些脚本传递给psql.

我现在需要在一个事务中同时应用多个脚本.到目前为止,我提出的唯一解决方案是从原始脚本集中删除启动事务/提交,然后在新的启动事务/提交块中将它们一起阻塞.我正在编写perl脚本来动态执行此操作.

实际上我想要嵌套事务,我无法弄清楚如何在postgresql中做.

有没有办法为此目的做或模拟嵌套事务?我有设置为自动纾困任何错误,所以如果任何较低的错误失败,我不需要继续在顶级交易.



1> 小智..:

那么你有可能使用SavePoints在postgresql中使用嵌套事务.

以此代码示例为例:

CREATE TABLE t1 (a integer PRIMARY KEY);

CREATE FUNCTION test_exception() RETURNS boolean LANGUAGE plpgsql AS
$$BEGIN
   INSERT INTO t1 (a) VALUES (1);
   INSERT INTO t1 (a) VALUES (2);
   INSERT INTO t1 (a) VALUES (1);
   INSERT INTO t1 (a) VALUES (3);
   RETURN TRUE;
EXCEPTION
   WHEN integrity_constraint_violation THEN
      RAISE NOTICE 'Rollback to savepoint';
      RETURN FALSE;
END;$$;

BEGIN;

SELECT test_exception();
NOTICE:  Rollback to savepoint
 test_exception 
----------------
 f
(1 row)

COMMIT;

SELECT count(*) FROM t1;
 count 
-------
     0
(1 row)

也许这会帮助你一点点.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有