gpt4 book ai didi

postgresql - postgresql 中的动态更新

转载 作者:行者123 更新时间:2023-11-29 14:12:55 24 4
gpt4 key购买 nike

我有这个 upsert 函数,它允许我修改一行的 fill_rate 列。

CREATE FUNCTION upsert_fillrate_alarming(integer, boolean) RETURNS VOID AS '
DECLARE
num ALIAS FOR $1;
dat ALIAS FOR $2;

BEGIN
LOOP
-- First try to update.
UPDATE alarming SET fill_rate = dat WHERE equipid = num;
IF FOUND THEN
RETURN;
END IF;
-- Since its not there we try to insert the key
-- Notice if we had a concurent key insertion we would error
BEGIN
INSERT INTO alarming (equipid, fill_rate) VALUES (num, dat);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- Loop and try the update again
END;
END LOOP;
END;
' LANGUAGE 'plpgsql';

是否可以修改此函数以也采用列参数?如果有修改函数取列取表的方法,额外加分。

最佳答案

作为替代方法,您可以通过使用带有 where 子句的插入 + 更新来执行 不带 函数的更新插入,使它们仅在正确的情况下成功。例如

update mytable set col1='value1' where (col2 = 'myId');
insert into mytable select 'value1', 'myId' where not exists (select 1 from mytable where col2='myId');

这将避免大量自定义 postgres 特定函数。

关于postgresql - postgresql 中的动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991198/

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