sql >> Base de Datos >  >> RDS >> PostgreSQL

Agregar una clave a una columna hstore vacía

Creo que el problema aquí es que el hstore que tienes es nulo y nulo O algún hstore es nulo.

La mejor solución que tengo, que probablemente no sea la mejor solución, es hacer que la tabla tenga un hstore vacío predeterminado en lugar de permitir un valor nulo. Entonces tus ejemplos funcionan como te gustaría:

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)

Desafortunadamente, no veo una forma más limpia de crear un hstore vacío que hstore(array[]::varchar[]) pero eso no significa que no haya una mejor manera. Podrías incorporar esto en tu actualización de hstore desde antes así:

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

De esta manera, no necesita volver a crear la tabla. Aunque lo encuentro bastante asqueroso. Espero que esto ayude.