कोई भी देख सकता है कि यह क्यों काम नहीं करता है? मैनुअल के section 9.15 के अनुसार, ->
ऑपरेटर को JSON डेटा प्रकार के तत्वों तक पहुंच प्राप्त करनी चाहिए। ऐसा लगता है कि हालांकि जानकारी स्कीमा कहते स्तंभ टाइप 'json' यह अभी भी वास्तव में एक अदिश स्ट्रिंग है मेरे लिए लग रहा हैJSG टाइप किए गए कॉलम पर JSON ऑपरेटरों का उपयोग कैसे करें postgresql 9.3
postgres=# create table jtest (id serial, data json);
CREATE TABLE
postgres=# select column_name, data_type from information_schema.columns where table_name = 'jtest';
column_name | data_type
-------------+-----------
id | integer
data | json
(2 rows)
postgres=# insert into jtest (data) values (to_json('{"k1": 1, "k2": "two"}'::text));
INSERT 0 1
postgres=# select * from jtest;
id | data
----+--------------------------------
1 | "{\"k1\": 1, \"k2\": \"two\"}"
(1 row)
postgres=# select data->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# select data::json->'k1' from jtest;
ERROR: cannot extract element from a scalar
postgres=# \q
$ pg_ctl --version
pg_ctl (PostgreSQL) 9.3beta2
अद्यतन (ध्यान दें उद्धरण जब यह प्रदर्शित होता है।):
मैं इन दो पदों को here और here पाया गया है जो इंगित करता है कि यह ठीक उसी तरह काम करना चाहिए जैसा मैं कर रहा हूं।
postgres=# select * from jtest where data ->> 'k2' = 'two';
ERROR: cannot extract element from a scalar
वहाँ एक निर्माण विकल्प या योगदान मॉड्यूल मैं JSON कार्यक्षमता प्राप्त करने की आवश्यकता है: बस सुनिश्चित करें कि मैं इस कोशिश की जा करने के लिए?
पोस्ट के लिए धन्यवाद; एक json कॉलम में कनवर्ट करने के लिए to_json का उपयोग करने की भी एक ही समस्या थी। मैं वापस गया और सीएएसटी (फ़ील्ड_नाम जेसन के रूप में) का इस्तेमाल किया और सब कुछ अपेक्षित के रूप में काम किया। –