Saya rasa Anda benar bahwa Anda harus menarik pasangan lama dan memasang kembali pasangan baru (dengan kunci yang telah diganti namanya).
Anda bisa melakukannya dengan satu kalimat:
(h - from_key) || hstore(to_key, h -> from_key)
dimana h
adalah hstore, from_key
adalah kunci yang ingin Anda ubah dan to_key
adalah apa yang Anda ingin mengubahnya. Itu akan mengembalikan hstore baru dengan perubahan yang diinginkan tetapi mengasumsikan bahwa from_key
ada di h
; jika from_key
tidak ada di h
maka Anda akan berakhir dengan to_key -> NULL
di hstore Anda. Jika Anda, seperti semua orang waras, tidak ingin NULL yang tersesat maka saya akan membungkus logika dalam fungsi sederhana untuk membuatnya lebih mudah untuk menambahkan pemeriksaan keberadaan; seperti ini:
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;
Kemudian Anda dapat mengatakan keduanya dan mendapatkan hasil yang diharapkan:
=> 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"