De acuerdo con la documentación de Postgres, se agrega una clave a una columna hstore de la siguiente manera:Adición de una clave a una columna vacía hstore
UPDATE tab SET h = h || ('c' => '3');
Pero parece que funciona sólo si el campo hstore no está vacío. Por ejemplo:
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)
La actualización fue correcta, pero el hstore no se actualizó. Sin embargo:
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)
¿Hay una manera de agregar una clave atómicamente a un hstore sin comprobar previamente si el hstore está vacía?
Gracias! Me di cuenta de que mi tienda era nula, pero no sabía que eso fuera diferente de una tienda vacía. – janr
¡Buenas cosas, gracias Daniel! –
Puede ser una nota útil para alguien en el futuro. Estoy usando 8.4 y creo el hstore vacío con hstore ('') en lugar de hstore (array [] :: varchar []) – trex005