PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Добавяне на ключ към празна колона hstore

Мисля, че проблемът тук е, че hstore, който имате, е null и null ИЛИ някой hstore е null.

Най-доброто решение, което имам, което вероятно не е най-доброто решение, е да направя таблицата с празен hstore по подразбиране, вместо да позволявам null. След това вашите примери работят както искате:

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)

За съжаление не виждам по-чист начин за създаване на празен hstore от hstore(array[]::varchar[]) но това не означава, че няма по-добър начин. Можете да включите това във вашата актуализация на hstore от преди, така:

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

По този начин не е необходимо да пресъздавате таблицата. Все пак намирам това за доста грубо. Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JOIN на ниво приложение с WHERE и ORDER BY на N postgresql шарда

  2. Защо този оператор ActiveRecord е неуспешен в сървъра, но не и в конзолата

  3. Как Cos() работи в PostgreSQL

  4. Заявките за тип SELECT ли са единственият тип, който може да бъде вложен?

  5. Оптимизирайте PostgreSQL за бързо тестване