sql >> Databáze >  >> RDS >> PostgreSQL

Přidání klíče do prázdného sloupce hstore

Myslím, že problém je v tom, že hstore, který máte, je null a null NEBO nějaký hstore je null.

Nejlepší řešení, které mám, což pravděpodobně není nejlepší řešení, je vytvořit tabulku s výchozím prázdným hstore, nikoli povolit null. Potom vaše příklady fungují, jak byste chtěli:

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)

Bohužel nevidím čistší způsob, jak vytvořit prázdný hstore než hstore(array[]::varchar[]) ale to neznamená, že neexistuje lepší způsob. Můžete to začlenit do své aktualizace hstore z dřívějška takto:

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

Tímto způsobem nemusíte znovu vytvářet stůl. I když mi to přijde docela hnusné. Doufám, že to pomůže.



  1. Alternativa k FIND_IN_SET v SQLite?

  2. Získejte celkový rekordní růst v průběhu času v mysql

  3. Přeskočte nebo ignorujte definice v Mysqldump

  4. Dynamické kontingenční sloupce v SQL Server