我一直在评估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"
原文地址:https://www.jb51.cc/postgresql/191731.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。