gpt4 book ai didi

PostgreSQL 更新触发器比较 Hstore 值

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

我正在 PostgresSQL 中创建触发器。在更新时,我想比较 Hstore 列中的所有值并更新我的镜像表中的更改。我设法在变量 k 中获取我的列的名称,但我无法使用它从 NEWOLD 获取值。

CREATE OR REPLACE FUNCTION function_replication() RETURNS TRIGGER AS
$BODY$
DECLARE
k text;
BEGIN
FOR k IN SELECT key FROM EACH(hstore(NEW)) LOOP
IF NEW.k != OLD.k THEN
EXECUTE 'UPDATE ' || TG_TABLE_NAME || '_2' || 'SET ' || k || '=' || new.k || ' WHERE ID=$1.ID;' USING OLD;
END IF;
END LOOP;
RETURN NEW;
END;
$BODY$
language plpgsql;

最佳答案

您应该对记录 newold 的 hstore 表示进行操作。另外,使用 format()更好的控制和可读性的功能。

create or replace function function_replication() 
returns trigger as
$body$
declare
newh hstore = hstore(new);
oldh hstore = hstore(old);
key text;
begin
foreach key in array akeys(newh) loop
if newh->key != oldh->key then
execute format(
'update %s_2 set %s = %L where id = %s',
tg_table_name, key, newh->key, oldh->'id');
end if;
end loop;
return new;
end;
$body$
language plpgsql;

关于PostgreSQL 更新触发器比较 Hstore 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467257/

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