PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmiana nazwy klucza hstore w PostgreSQL 9.2

Myślę, że masz rację, że musisz wyciągnąć starą parę i włożyć nową parę (z kluczem o zmienionej nazwie).

Możesz to zrobić za pomocą jednej linijki:

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

gdzie h jest hstore, from_key to klucz, który chcesz zmienić i to_key jest tym, na co chcesz go zmienić. To zwróci nowy hstore z pożądaną zmianą, ale zakłada, że ​​from_key jest w h; jeśli from_key nie znajduje się w h wtedy otrzymasz to_key -> NULL w Twoim hstore. Jeśli ty, jak wszyscy rozsądni ludzie, nie chcesz zabłąkanej wartości NULL, to zapakowałbym logikę w prostą funkcję, aby ułatwić dodanie sprawdzenia istnienia; coś takiego:

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;

Następnie możesz powiedzieć oba te słowa i uzyskać oczekiwane rezultaty:

=> 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompilacja PL/Proxy z PostgresPlus Advance Server 9.1

  2. jak zapobiegać duplikatom za pomocą wewnętrznego zapytania sprzężenia (Postgres)

  3. Jak radzić sobie z ewolucją bazy danych Play Framework 2 w środowisku produkcyjnym

  4. Postgres — pobierz kopię całej bazy danych ze zdalnego serwera na lokalną maszynę deweloperską

  5. Postgres:zdefiniować domyślną wartość dla niepowodzeń CAST?