sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar el nombre de la clave hstore en PostgreSQL 9.2

Creo que tienes razón en que tienes que sacar el par viejo y volver a colocar el par nuevo (con la clave renombrada).

Podrías hacerlo con una sola línea:

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

donde h es el hstore, from_key es la clave que desea cambiar y to_key es a lo que quieres cambiarlo. Eso devolverá un nuevo hstore con el cambio deseado pero asume que from_key está en h; si from_key no está en h entonces terminará con un to_key -> NULL en tu tienda. Si usted, como todas las personas cuerdas, no quiere el NULL extraviado, entonces envolvería la lógica en una función simple para que sea más fácil agregar una verificación de existencia; algo como esto:

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;

Luego puede decir ambas cosas y obtener los resultados esperados:

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