PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Преименуване на ключ hstore в PostgreSQL 9.2

Мисля, че сте прав, че трябва да извадите стария чифт и да поставите новия чифт (с преименувания ключ) обратно.

Можете да го направите с един ред:

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

където h е hstore, from_key е ключът, който искате да промените, и to_key е това, на което искате да го промените. Това ще върне нов hstore с желаната промяна, но предполага, че from_key е в h; ако from_key не е в h тогава ще завършите с to_key -> NULL във вашия hstore. Ако вие, като всички здравомислещи хора, не искате бездомната NULL, тогава бих опаковал логиката в проста функция, за да улесня добавянето на проверка за съществуване; нещо подобно:

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;

След това можете да кажете и двете и да получите очакваните резултати:

=> 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. Как да направя запитване за дължината на Django ArrayField?

  2. Трябва ли хибернацията да използва уникални последователности за всяка таблица?

  3. Как да напиша ограничение относно максимален брой редове в postgresql?

  4. Параметри и нулеви стойности на Npgsql 4.0

  5. множество selectInput стойности създават неочаквано dplyr (postgres) поведение