PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menambahkan kunci ke kolom hstore kosong

Saya pikir masalahnya di sini adalah bahwa hstore yang Anda miliki adalah null, dan null ATAU beberapa hstore adalah null.

Solusi terbaik yang saya miliki, yang mungkin bukan solusi terbaik, adalah membuat tabel dengan hstore kosong default daripada membiarkan nol. Kemudian contoh Anda berfungsi seperti yang Anda inginkan:

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)

Sayangnya saya tidak melihat cara yang lebih bersih untuk membuat hstore kosong daripada hstore(array[]::varchar[]) tapi itu tidak berarti tidak ada cara yang lebih baik. Anda dapat memasukkan ini ke dalam pembaruan hstore Anda dari sebelumnya seperti:

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

Dengan cara ini Anda tidak perlu membuat ulang tabel. Saya menemukan bahwa cukup kotor sekalipun. Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. regexp_split_to_table dan row_number

  2. Fungsi INSERT massal Postgres menggunakan argumen JSON

  3. Bagaimana saya bisa bergabung dengan tabel turunan?

  4. Cara menggunakan array_agg() untuk varchar[]

  5. Kombinasi unik dalam sebuah meja