sql >> Databasteknik >  >> RDS >> PostgreSQL

Lägga till en nyckel till en tom hstore-kolumn

Jag tror att problemet här är att hstore du har är null och null ELLER någon hstore är null.

Den bästa lösningen jag har, som förmodligen inte är den bästa lösningen, är att göra tabellen med en standardtom hstore istället för att tillåta null. Då fungerar dina exempel som du vill:

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)

Jag ser tyvärr inte ett renare sätt att skapa en tom hstore än hstore(array[]::varchar[]) men det betyder inte att det inte finns ett bättre sätt. Du kan infoga detta i din hstore-uppdatering från tidigare så här:

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

På så sätt behöver du inte återskapa tabellen. Jag tycker att det är ganska grovt dock. Hoppas detta hjälper.



  1. Hur man hämtar data från överordnad och underordnad tabell på basis av status där främmande nyckel har olika status för varje rad

  2. Dataanalysguide:Det är dags att utmärka sig genom att använda Excel!

  3. Mysql Like + Wild Card vs Equals Operator

  4. Oracle Advanced Queue i Java