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"