gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:16:57 25 4
gpt4 key购买 nike

我有一个 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;
$$;

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

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

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

最佳答案

正如 Laurenz 在评论中指出的那样,

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

但也许你可以找到一种方法将函数分成两部分并在两者之间提交,这可能更干净、成本更低

关于postgresql - 在一个 PostgreSQL 函数中运行两个单独的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48185485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com