我有一个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]
答案 0 :(得分:1)
劳伦斯在评论中指出,
您可以使用dblink
打开与同一数据库的另一个连接,并在那里执行INSERT
。然后它可以单独提交。
但也许你可以找到一种方法将功能分成两部分并在中间提交,这可能更清洁,更便宜