重命名PostgreSQL 9.2中的hstore键[英] Renaming hstore key in PostgreSQL 9.2

本文是小编为大家收集整理的关于重命名PostgreSQL 9.2中的hstore键的处理方法,想解了重命名PostgreSQL 9.2中的hstore键的问题怎么解决?重命名PostgreSQL 9.2中的hstore键问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我一直在评估 PostgreSQL 的 hstore 功能 (9.2) 和唯一的 很好的手册 没有明确说明如何重命名键.例如,如何将键 c 重命名为 ai_count?

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

我认为没有直接的方法可以做到这一点,它涉及将 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 中,那么您最终会在 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"

本文地址:https://www.itbaoku.cn/post/1763739.html