在一个PostgreSQL函数中运行两个单独的事务

时间:2018-01-10 10:39:05

标签: postgresql plpgsql

我有一个PostgreSQL函数,大约需要30分钟才能完成。运行该函数时,我想在函数开头向一个名为CREATE OR REPLACE FUNCTION fun1(arg1 numeric, arg2 numeric) RETURNS numeric LANGUAGE plpgsql AS $$ DECLARE -- <declare variabls> BEGIN BEGIN -- <insert status record> END; -- <function body> BEGIN -- <update status record> END; END; $$; 的单独表中插入一行,并在完成该函数后更新该记录。

Start Function -> insert record to db -> commit -> run function body -> commit -> End function

但问题是,由于函数是在事务块(BEGIN,END块)中定义的,因此它将作为事务执行。因此,在整个块完成之前,不会将此状态记录插入到数据库中。

所以我的问题是如何在启动函数体之前将此记录插入数据库?

[buddypresswcamp_show_visits]

1 个答案:

答案 0 :(得分:1)

劳伦斯在评论中指出,

您可以使用dblink打开与同一数据库的另一个连接,并在那里执行INSERT。然后它可以单独提交。

但也许你可以找到一种方法将功能分成两部分并在中间提交,这可能更清洁,更便宜