sql >> Database teknologi >  >> RDS >> PostgreSQL

Omdøbning af hstore-nøgle i PostgreSQL 9.2

Jeg tror, ​​du har ret i, at du skal trække det gamle par ud og sætte det nye par (med den omdøbte nøgle) ind igen.

Du kunne gøre det med en one-liner:

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

hvor h er hstore, from_key er den nøgle, du vil ændre, og to_key er det, du vil ændre det til. Det vil returnere en ny hstore med den ønskede ændring, men det antager, at from_key er i h; hvis from_key er ikke i h så ender du med en to_key -> NULL i din hstore. Hvis du, som alle fornuftige mennesker, ikke vil have den omstrejfende NULL, så ville jeg pakke logikken ind i en simpel funktion for at gøre det nemmere at tilføje et eksistenstjek; noget som dette:

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;
 

Så kan du sige begge disse og få de forventede resultater:

=> 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 ERROR 1064 (42000):Du har en fejl i din SQL-syntaks;

  2. MySQL den rigtige syntaks at bruge nær '' ved linje 1 fejl

  3. Indsæt afkrydsningsfeltdata til mysql

  4. SQLite Node.js