PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thêm khóa vào cột hstore trống

Tôi nghĩ vấn đề ở đây là hstore bạn có là null và null HOẶC một số hstore là null.

Giải pháp tốt nhất mà tôi có, có lẽ không phải là giải pháp tốt nhất, là tạo bảng với một hstore trống mặc định thay vì cho phép null. Sau đó, các ví dụ của bạn hoạt động như bạn muốn:

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)

Rất tiếc, tôi không thấy cách nào rõ ràng hơn để tạo một hstore trống hơn là hstore(array[]::varchar[]) nhưng điều đó không có nghĩa là không có cách nào tốt hơn. Bạn có thể kết hợp điều này vào bản cập nhật hstore của mình từ trước như vậy:

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

Bằng cách này, bạn không cần tạo lại bảng. Tôi thấy điều đó khá thô thiển. Hy vọng điều này sẽ hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề về Django DateRangeField

  2. Có gì mới trong PgBouncer 1.6

  3. Làm cách nào để tách mảng 2d thành mảng 1d một cách nhanh chóng trong PostgreSQL?

  4. Cách current_date hoạt động trong PostgreSQL

  5. Ví dụ về trình kích hoạt CHO MỖI STATEMENT