【发布时间】:2018-06-19 12:13:01
【问题描述】:
我有一个 PostgreSQL 函数,大约需要 30 分钟才能完成。运行该函数时,我想在函数开始处向名为 running_status 的单独表中插入一行,并在完成函数后更新该记录。
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;
$$;
但问题是,由于函数是在事务块(BEGIN、END 块)中定义的,它将作为事务执行。所以这个状态记录在整个块完成之前不会插入到数据库中。
所以我的问题是如何在启动函数体之前将这条记录插入数据库?
Start Function -> insert record to db -> commit -> run function body -> commit -> End function
【问题讨论】:
-
看看 SO - 已回答。例如可以使用 dblink hack
-
dblink hack 是什么意思?
-
您可以使用 dblink 打开另一个到同一个数据库的连接并在那里执行
INSERT。然后可以单独提交。但也许你可以找到一种方法将函数分成两部分并在两者之间提交,这可能更清洁且成本更低。
标签: postgresql plpgsql