आपकी क्वेरी करीब है। json_each()
प्रमुख कार्य है। या jsonb_each() jsonb . के लिए . कुछ सुधार:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
पुराना sqlfiddle
db<>fiddle यहां
-
json_each()json. के रूप में पहले से ही मान लौटाता है डेटा प्रकार। अतिरिक्त कलाकारों की आवश्यकता नहीं है। -
बेहतर है, फिर भी,
LATERALका उपयोग करेंEXISTS. में संदर्भ . यहSELECT. में सेट-रिटर्निंग फ़ंक्शन के साथ अननेस्टिंग की तुलना में कहीं अधिक स्वच्छ है सूची। संबंधित: -
ILIKEUse का प्रयोग करें (~~*) पैटर्न मैच के लिए। रेगुलर एक्सप्रेशन से मेल खाता है (~,~*) अधिक शक्तिशाली हैं, लेकिन अधिक महंगे भी हैं। तो बुनियादीLIKE. का उपयोग करें /ILKEजहां तुम कर सकते हो। विवरण:
JSON सरणी के साथ वैकल्पिक
आपने JSON सरणियों के लिए मेरा संबंधित उत्तर पहले ही देख लिया है:
जबकि नेस्टेड JSON ऑब्जेक्ट्स के लिए क्वेरी उतनी ही सरल लगती है, बेहतर इंडेक्स सपोर्ट . है सरणी के लिए:
Postgres 12 में SQL/JSON के साथ सरल/अधिक कुशल हो सकता है ...