मैं json
PostgreSQL 9.3 में प्रकार का परीक्षण करने की कोशिश कर रहा हूं ।
मेरे पास एक json
स्तंभ है जिसे data
एक तालिका में बुलाया जाता है reports
। JSON कुछ इस तरह दिखता है:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
मैं उन सभी रिपोर्टों के लिए तालिका को क्वेरी करना चाहूंगा जो 'ऑब्जेक्ट्स' एरे में 'src' मान से मेल खाती हैं। उदाहरण के लिए, क्या उन सभी रिपोर्टों के लिए DB को क्वेरी करना संभव है जो मेल खाते हैं 'src' = 'foo.png'
? मैंने सफलतापूर्वक एक क्वेरी लिखी है जो मेल कर सकती है "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
लेकिन चूंकि "objects"
मानों की एक सरणी है, इसलिए मैं कुछ ऐसा नहीं लिख सकता जो काम करता है। क्या मैच से संबंधित सभी रिपोर्टों के लिए DB को क्वेरी करना संभव है 'src' = 'foo.png'
? मैंने इन स्रोतों को देखा है लेकिन फिर भी इसे प्राप्त नहीं कर सकता:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- मैं नए PostgreSQL JSON डेटाटाइप के अंदर फ़ील्ड का उपयोग करके क्वेरी कैसे कर सकता हूं?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
मैंने भी इस तरह की चीजों की कोशिश की है लेकिन कोई फायदा नहीं हुआ:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
मैं एक SQL विशेषज्ञ नहीं हूं, इसलिए मुझे नहीं पता कि मैं क्या गलत कर रहा हूं।
jsonb
/ pg 9.4 के लिए एक अपडेट जोड़ा । एक तरफ: साधारण मामले (घोंसले के शिकार के स्तर) के लिए,->
ऑपरेटरjson
9.3 पीजी के लिए चाल भी करता है ।