sql >> Database >  >> RDS >> PostgreSQL

Een sleutel toevoegen aan een lege hstore-kolom

Ik denk dat het probleem hier is dat de hstore die je hebt null is, en null OF een hstore is null.

De beste oplossing die ik heb, wat waarschijnlijk niet de beste oplossing is, is om de tabel te maken met een standaard lege hstore in plaats van null toe te staan. Dan werken je voorbeelden zoals je zou willen:

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)

Ik zie helaas geen schonere manier om een ​​lege hstore te maken dan hstore(array[]::varchar[]) maar dat betekent niet dat er geen betere manier is. Je zou dit als volgt in je hstore-update van vroeger kunnen opnemen:

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

Zo hoef je de tafel niet opnieuw te maken. Dat vind ik toch wel behoorlijk vies. Ik hoop dat dit helpt.



  1. Hoe cluster-40926 uit mijn dataroot in moodle te verwijderen

  2. Dynamische query-opbouw voor PDO

  3. Verschil tussen PDO->query() en PDO->exec()

  4. Wat is beter:mysql_connect of mysql_pconnect