Zgodnie z dokumentacją postgres, po dodaniu klucza do kolumny hstore następująco:Dodawanie klucza do pustej kolumnie hstore
UPDATE tab SET h = h || ('c' => '3');
Ale wydaje działają tylko wtedy, gdy pole hstore nie jest pusta. Na przykład:
postgres=# create table htest (t text, h hstore);
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 |
(1 row)
Aktualizacja przebiegła pomyślnie, ale hstore nie został zaktualizowany. Jednakże:
postgres=# update htest set h = ('foo'=>'bar') where t='key';
UPDATE 1
postgres=# select * from htest;
t | h
-----+--------------
key | "foo"=>"bar"
(1 row)
postgres=# update htest set h = h || ('bar'=>'foo') where t='key';
UPDATE 1
postgres=# select * from htest;
t | h
-----+----------------------------
key | "bar"=>"foo", "foo"=>"bar"
(1 row)
Czy istnieje sposób atomowo dodać klucz do hstore bez uprzedniego sprawdzenia, czy hstore jest pusty?
Dzięki! Zdałem sobie sprawę, że mój hstore był nieważny, ale nie wiedziałem, że to coś innego niż pusty hstore. – janr
Dobre rzeczy, dzięki Daniel! –
Może być pomocne dla kogoś w przyszłości. Używam 8.4 i tworzę pusty hstore z hstore ('') zamiast hstore (array [] :: varchar []) – trex005