加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在PostgreSQL 9.2中重命名hstore密钥

发布时间:2020-12-13 16:32:38 所属栏目:百科 来源:网络整理
导读:我一直在评估PostgreSQL的hstore功能(9.2),而 fine manual唯一不明确的是如何重命名密钥.例如,我如何将密钥c重命名为ai_count? “c”=“3”,“ai_voltage”=“3”,“ai_temperature”= 我认为没有直接的方法来做到这一点,它涉及将c键复制到ai_count键,然后
我一直在评估PostgreSQL的hstore功能(9.2),而 fine manual唯一不明确的是如何重命名密钥.例如,我如何将密钥c重命名为ai_count?

“c”=>“3”,“ai_voltage”=>“3”,“ai_temperature”=&

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

我想你是对的,你必须拉出旧的对,把新的对(重命名的键)重新插入.

你可以用一个单行:

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

其中h是hstore,from_key是您要更改的密钥,而to_key是您要更改的密钥.这将返回一个新的hstore与所需的变化,但它假定from_key是在h;如果from_key不在h,那么你最终会得到一个to_key – >在你的hstore中为空.如果你像所有理智的人一样,不想要偏离空值,那么我将逻辑包装在一个简单的函数中,以便更容易地添加一个存在检查;这样的:

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,'pancakes','X');
      change_hstore_key       
------------------------------
 "a"=>"1","b"=>"2","c"=>"3"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读