sql >> Databasteknik >  >> RDS >> PostgreSQL

Byter namn på hstore-nyckel i PostgreSQL 9.2

Jag tror att du har rätt i att du måste dra ut det gamla paret och sätta in det nya paret (med den omdöpta nyckeln) igen.

Du kan göra det med en one-liner:

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

där h är hstore, from_key är nyckeln du vill ändra och to_key är vad du vill ändra det till. Det kommer att returnera en ny hstore med den önskade ändringen men det förutsätter att from_key är i h; om from_key finns inte i h då kommer du att få en to_key -> NULL i din hstore. Om du, som alla sansade människor, inte vill ha den herrelösa NULL så skulle jag slå in logiken i en enkel funktion för att göra det lättare att lägga till en existenskontroll; något sånt här:

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;

Då kan du säga båda dessa och få de förväntade resultaten:

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



  1. Hur använder man Alias ​​i Where-klausulen?

  2. Mysql decimal:golv istället för rund

  3. Snabb import av data till mysql i Java

  4. PostgreSQL:infoga från en annan tabell