2011-08-28 20 views
10

का उपयोग कर एक ऐरे की क्वेरी मैं psql का उपयोग कर पोस्टग्रेज़ में डेटाबेस से पूछताछ कर रहा हूं।पोस्टग्रेस LIKE

select count(*) from planet_osm_ways where 'highway' = ANY(tags); 

मैं अब एक प्रश्न है कि किसी भी शब्द शुरुआती के लिए टैग क्षेत्रों खोज बनाने की जरूरत: मैं एक क्षेत्र कहा जाता टैग पाठ की एक सरणी है कि के रूप में यह डेटा प्रकार है खोज करने के लिए निम्न क्वेरी का इस्तेमाल किया है पत्र 'ए' के ​​साथ। मैंने निम्नलिखित कोशिश की:

select count(*) from planet_osm_ways where 'A%' LIKE ANY(tags); 

यह मुझे एक वाक्यविन्यास त्रुटि देता है। टेक्स्ट की सरणी के साथ LIKE का उपयोग करने के तरीके पर कोई सुझाव?

उत्तर

15

पंक्तियों का समूह को unnest() फ़ंक्शन का उपयोग सरणी परिवर्तित करने के लिए:

SELECT count(distinct id) 
FROM (
    SELECT id, unnest(tags) tag 
    FROM planet_osm_ways) x 
WHERE tag LIKE 'A%' 

count(dictinct id)planet_osm_ways मेज से अद्वितीय प्रविष्टियों की गणना करनी चाहिए, बस अपने प्राथमिक कुंजी के नाम के साथ id बदलें।

कहा जा रहा है कि आपको planet_osm_ways के साथ कई से एक रिश्ते के साथ टैग को अलग-अलग तालिका में संग्रहीत करने के बारे में सोचना चाहिए, या टैग के लिए एक अलग तालिका बनाएं जिसमें planet_osm_ways के साथ कई से अधिक रिश्तों होंगे। जिस तरह से आप टैग स्टोर करते हैं, अब टैग की खोज करते समय इंडेक्स का उपयोग करना असंभव हो जाता है, जिसका अर्थ है कि प्रत्येक खोज एक पूर्ण टेबल स्कैन करती है।