"3", -6ren">
gpt4 book ai didi

postgresql - 在 PostgreSQL 9.2 中重命名 hstore 键

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

我一直在评估 PostgreSQL 的 hstore 功能 (9.2) 和唯一的 fine manual没有明确说明如何重命名键。例如,如何将键 c 重命名为 ai_count

"c"=>"3", "ai_voltage"=>"3", "ai_temperature"=>"28"

我认为没有直接的方法可以做到这一点,它涉及将 c 键复制到 ai_count 键,然后删除 c 键。我该如何做到这一点,理想情况下是作为可应用于多条记录的一行?

最佳答案

我认为你是对的,你必须把旧的一对拉出来,然后把新的一对(带有重命名的 key )放回去。

你可以用一行代码来完成:

(h - from_key) || hstore(to_key, h -> from_key)

其中 h 是 hstore,from_key 是您要更改的键,to_key 是您要将其更改为的内容。这将返回一个具有所需更改的新 hstore,但它假定 from_keyh 中;如果 from_key 不在 h 中,那么您将在 hstore 中得到一个 to_key -> NULL。如果您像所有理智的人一样,不想要流浪的 NULL,那么我会将逻辑包装在一个简单的函数中,以便更容易添加存在性检查;像这样:

create or replace function
change_hstore_key(h hstore, from_key text, to_key text) returns hstore as $$
begin
if h ? from_key then
return (h - from_key) || hstore(to_key, h -> from_key);
end if;
return h;
end
$$ language plpgsql;

然后你可以说这两个并得到预期的结果:

=> select change_hstore_key('a=>1,b=>2,c=>3'::hstore, 'b', 'pancakes');
change_hstore_key
------------------------------
"pancakes"=>"2", "a"=>"1", "c"=>"3"

=> select change_hstore_key('a=>1,b=>2,c=>3'::hstore, 'pancakes', 'X');
change_hstore_key
------------------------------
"a"=>"1", "b"=>"2", "c"=>"3"

关于postgresql - 在 PostgreSQL 9.2 中重命名 hstore 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273667/

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