PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Renommer la clé hstore dans PostgreSQL 9.2

Je pense que vous avez raison de retirer l'ancienne paire et de remettre la nouvelle paire (avec la clé renommée).

Vous pourriez le faire avec un one-liner :

(h - from_key) || hstore(to_key, h -> from_key)

h est le hstore, from_key est la clé que vous souhaitez modifier et to_key est ce que vous voulez changer. Cela renverra un nouveau hstore avec le changement souhaité mais cela suppose que from_key est en h; si from_key n'est pas dans h alors vous vous retrouverez avec un to_key -> NULL dans votre hstore. Si vous, comme toutes les personnes saines d'esprit, ne voulez pas le NULL parasite, j'envelopperais la logique dans une fonction simple pour faciliter l'ajout d'une vérification d'existence; quelque chose comme ça :

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;

Ensuite, vous pouvez dire les deux et obtenir les résultats attendus :

=> 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"