मुझे लगता है कि आप सही कह रहे हैं कि आपको पुरानी जोड़ी को बाहर निकालना होगा और नई जोड़ी (बदली हुई कुंजी के साथ) को वापस अंदर रखना होगा।
आप इसे एक-लाइनर के साथ कर सकते हैं:
(h - from_key) || hstore(to_key, h -> from_key)
जहां h
hstore है, from_key
वह कुंजी है जिसे आप बदलना चाहते हैं और to_key
वह है जिसे आप इसे बदलना चाहते हैं। यह वांछित परिवर्तन के साथ एक नया hstore लौटाएगा लेकिन यह मानता है कि from_key
h
. में है; अगर from_key
h
में नहीं है तो आपके पास एक 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"