मुझे लगता है कि यहां समस्या यह है कि आपके पास जो स्टोर है वह शून्य है, और शून्य है या कुछ hstore शून्य है।
मेरे पास सबसे अच्छा समाधान है, जो शायद सबसे अच्छा समाधान नहीं है, तालिका को शून्य की अनुमति देने के बजाय डिफ़ॉल्ट खाली hstore के साथ बनाना है। तब आपके उदाहरण काम करते हैं जैसे आप चाहेंगे:
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(array[]::varchar[])
की तुलना में एक खाली hstore बनाने का एक क्लीनर तरीका नहीं दिख रहा है लेकिन इसका मतलब यह नहीं है कि कोई बेहतर तरीका नहीं है। आप इसे पहले से ही अपने hstore अपडेट में शामिल कर सकते हैं:
update htest set h = coalesce(h, hstore(array[]::varchar[])) || ('foo'=>'bar') where t='key';
इस तरह आपको तालिका को फिर से बनाने की आवश्यकता नहीं है। हालांकि मुझे यह काफी स्थूल लगता है। आशा है कि यह मदद करता है।