Theo tài liệu Postgres, bạn thêm một chìa khóa để một cột hstore như sau:Thêm một chìa khóa để một cột hstore trống
UPDATE tab SET h = h || ('c' => '3');
Nhưng nó dường như chỉ có tác dụng nếu lĩnh vực hstore là không có sản phẩm nào. Ví dụ:
postgres=# create table htest (t text, h hstore);
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 |
(1 row)
Cập nhật thành công, nhưng hstore chưa được cập nhật. Tuy nhiên:
postgres=# update htest set h = ('foo'=>'bar') where t='key';
UPDATE 1
postgres=# select * from htest;
t | h
-----+--------------
key | "foo"=>"bar"
(1 row)
postgres=# update htest set h = h || ('bar'=>'foo') where t='key';
UPDATE 1
postgres=# select * from htest;
t | h
-----+----------------------------
key | "bar"=>"foo", "foo"=>"bar"
(1 row)
Có cách nào để thêm nguyên tử khóa vào hstore mà trước tiên không kiểm tra xem hstore có trống không?
Cảm ơn! Tôi nhận ra rằng hstore của tôi là vô giá trị, nhưng tôi đã không nhận ra rằng đó là bất kỳ khác nhau từ một hstore trống. – janr
Công cụ tốt, cảm ơn Daniel! –
Có thể là một lưu ý hữu ích cho một người nào đó trong tương lai. Tôi đang sử dụng 8.4 và tôi tạo hstore rỗng với hstore ('') thay vì hstore (array [] :: varchar []) – trex005