gpt4 book ai didi

锁定表,更新值并返回行的 Postgresql 函数

转载 作者:行者123 更新时间:2023-11-29 12:43:07 27 4
gpt4 key购买 nike

对于我的 Hi/Lo 实现,我需要一个函数来获取独占表锁、更新值和选择一行。我想出了以下代码:

CREATE OR REPLACE FUNCTION bb_next_hi(tbl varchar(35))  
RETURNS setof record AS
$$
LOCK TABLE hilo IN ACCESS EXCLUSIVE MODE;
OPEN ref FOR SELECT hi as "Hi", lo as "Lo", "table" as "Table" FROM hilo WHERE "table" = $1;
UPDATE hilo SET hi = hi + 1 WHERE "table" = $1
RETURN ref;

$$ LANGUAGE plpgsql;

但是,调用该函数时,返回的不是一行,而是一列,内容类似于“无名传送门3”。我想我应该迭代返回的 ref(但如何迭代)?

我可以使用的另一种方法是使用 UPDATE RETURNING 语句,但我不确定在这种情况下是否会出现竞争条件。任何帮助,将不胜感激。谢谢

最佳答案

这对我来说似乎简单得多:

CREATE OR REPLACE FUNCTION bb_next_hi(tbl varchar(35))  
RETURNS setof record AS
$$
BEGIN
LOCK TABLE hilo IN ACCESS EXCLUSIVE MODE;
RETURN QUERY UPDATE hilo SET hi = hi + 1 WHERE "table" = $1
RETURNING hi as "Hi", lo as "Lo", "table" as "Table";
END;
$$ LANGUAGE plpgsql;

我通常还定义 RETURNS TABLE (col1 varchar, col2 varchar...) 而不是 RETURNS setof record

关于锁定表,更新值并返回行的 Postgresql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209454/

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