sql >> Database >  >> RDS >> PostgreSQL

Hstore-sleutel hernoemen in PostgreSQL 9.2

Ik denk dat je gelijk hebt dat je het oude paar eruit moet halen en het nieuwe paar (met de hernoemde sleutel) er weer in moet steken.

Je zou het kunnen doen met een oneliner:

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

waar h is de hstore, from_key is de sleutel die u wilt wijzigen en to_key is waarnaar u het wilt veranderen. Dat levert een nieuwe hstore op met de gewenste wijziging, maar het gaat ervan uit dat from_key is in h; if from_key is niet in h dan krijg je een to_key -> NULL in uw winkel. Als jij, zoals alle verstandige mensen, de verdwaalde NULL niet wilt, dan zou ik de logica in een eenvoudige functie stoppen om het gemakkelijker te maken om een ​​bestaanscontrole toe te voegen; zoiets als dit:

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;

Dan kun je beide zeggen en de verwachte resultaten krijgen:

=> 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. MySQL alias steno?

  2. MySQL PRIMAIRE SLEUTELS:UUID / GUID vs BIGINT (tijdstempel + willekeurig)

  3. Selecteer records waarbij datum ==nu + 21 dagen (NIET tussen)

  4. SQL-query meerdere tabellen, met meerdere joins en kolomveld met door komma's gescheiden lijst