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

Dodawanie klucza do pustej kolumny hstore

Myślę, że problem polega na tym, że hstore, który masz, ma wartość null, a null LUB jakiś hstore ma wartość null.

Najlepszym rozwiązaniem, które mam, a które prawdopodobnie nie jest najlepszym rozwiązaniem, jest utworzenie tabeli z domyślnym pustym hstore zamiast zezwalania na wartość null. Następnie Twoje przykłady działają tak, jak chcesz:

postgres=# create table htest (t text, h hstore default hstore(array[]::varchar[]));
CREATE TABLE
postgres=# insert into htest (t) values ('key');
INSERT 0 1
postgres=# update htest set h = h || ('foo'=>'bar') where t='key';
UPDATE 1
postgres=# select * from htest;
  t  |      h       
-----+--------------
 key | "foo"=>"bar"
(1 row)

Niestety nie widzę czystszego sposobu na utworzenie pustego hstore niż hstore(array[]::varchar[]) ale to nie znaczy, że nie ma lepszego sposobu. Możesz włączyć to do swojej aktualizacji hstore w ten sposób:

update htest set h = coalesce(h, hstore(array[]::varchar[])) || ('foo'=>'bar') where t='key';

W ten sposób nie musisz ponownie tworzyć tabeli. Uważam, że to dość obrzydliwe. Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę uzyskać hash całej tabeli w postgresql?

  2. jak używać zmiennych w skrypcie psql

  3. Jak dynamicznie utworzyć funkcję wyzwalacza w pgsql?

  4. Zapytanie zagnieżdżone w squeel

  5. Maksymalny rozmiar transakcji w PostgreSQL