sql >> Databáze >  >> RDS >> PostgreSQL

Přejmenování klíče hstore v PostgreSQL 9.2

Myslím, že máte pravdu, že musíte vytáhnout starý pár a vložit nový pár (s přejmenovaným klíčem) zpět.

Mohli byste to udělat s jednovrstvou:

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

kde h je hstore, from_key je klíč, který chcete změnit, a to_key je to, na co to chcete změnit. To vrátí nový hstore s požadovanou změnou, ale předpokládá to from_key je v h; if from_key není v h pak skončíte s to_key -> NULL ve vašem hstore. Pokud jako všichni příčetní lidé nechcete zbloudilou NULL, pak bych logiku zabalil do jednoduché funkce, aby bylo snazší přidat kontrolu existence; něco takového:

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;

Pak můžete říci obojí a získat očekávané výsledky:

=> 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. Jak používat Memcached s PHP7?

  2. Jak najít (dekódovat) PostgreSQL dotaz ze souboru Wireshark?

  3. Jak funguje DAYOFMONTH() v MariaDB

  4. Jak změnit SADA ZNAKŮ (a COLLATION) v celé databázi?