【发布时间】:2016-08-29 23:31:47
【问题描述】:
对于我的 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 语句,但我不确定在这种情况下是否会出现竞争条件。任何帮助,将不胜感激。谢谢
【问题讨论】:
-
如果只想锁定一行,为什么还要锁定整个表?
-
我想也没有其他方法可以锁定读者。也许我错了,误解了一些东西,如果是这样的话,我会很高兴的:)
标签: postgresql