अनुक्रमणिका अनुपलब्ध हैं जो PostGIS तालिकाएँ ढूँढना?


10

हाल ही में मैं चारों ओर देख रहा था pg_stat_user_tablesऔर अपने कुछ स्थानिक तालिकाओं पर अनुक्रमिक स्कैन की उच्च संख्या देखकर आश्चर्यचकित था। निश्चित रूप से पर्याप्त है, इन तालिकाओं में स्थानिक सूचकांक गायब थे।

मैं एक गैर-अनुक्रमित ज्यामिति कॉलम के साथ सभी तालिकाओं को कैसे ढूंढ सकता हूं?


रेफरी के लिए pg_stat_user_tables के लिए धन्यवाद। खुशी है कि आपका कोई जानकार ऐसी गलतियों को स्वीकार करता है। काम करने वाले युवा लोगों के लिए, मैं हमेशा कहता हूं: यदि प्राथमिक कुंजी के लिए कोई प्राकृतिक उम्मीदवार नहीं है, तो एक सीरियल कॉलम जोड़ें। हमेशा SRID और ज्यामिति प्रकार को परिभाषित करें। हमेशा एक स्थानिक सूचकांक जोड़ें। क्योंकि अनुक्रम स्कैन एक लाख पंक्तियों के साथ काम कर सकता है, लेकिन, एक बिंदु आता है ..... जैसा कि मैंने कहा था, जैसा मैंने किया था: डी।
जॉन पॉवेल

जवाबों:


9

सिस्टम तालिकाओं को क्वेरी करके गायब स्थानिक अनुक्रमित तालिकाओं को पाया जा सकता है:

SELECT g.* 
FROM 
  (SELECT 
     n.nspname, 
     c.relname, 
     c.oid AS relid, 
     a.attname, 
     a.attnum 
   FROM pg_attribute a 
   INNER JOIN pg_class c ON (a.attrelid=c.oid)
   INNER JOIN pg_type t ON (a.atttypid=t.oid)
   INNER JOIN pg_namespace n ON (c.relnamespace=n.oid) 
   WHERE t.typname='geometry' 
   AND   c.relkind='r'
 ) g 
LEFT JOIN pg_index i ON (g.relid = i.indrelid AND g.attnum = ANY(i.indkey)) 
WHERE i IS NULL;

क्या यह और भी बेहतर हो सकता है WHERE t.typname IN ('geometry', 'geography') AND t.typtype='b'? Trac.osgeo.org/gdal/ticket/6896 देखें ।
user30184

@ user30184 क्या आप उस t.typtype = 'b'टुकड़े को समझा सकते हैं ?
dbaston

1
यह वास्तव में बेकार टुकड़ा है। GDAL में कोड परिवर्तन एक दुर्लभ स्थिति से निपटने के लिए था जब मानक PostgreSQL डेटाबेस में "ज्यामिति" नामक एक तालिका होती है। इसमें भी pg_type की प्रविष्टि है लेकिन typtype = 'c' के साथ। हालाँकि, यदि आपने PostGIS स्थापित किया है, तो ऐसी स्थिति को समाप्त करना संभव नहीं है। create table "geometry" (foo text);देता हैERROR: type "geometry" already exists HINT: A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type.
user30184

6

मैंने एक फंक्शन बनाया है जो सभी गुम इंडेक्सों को स्वचालित रूप से बना सकता है। एक "अनुकरण" पैरामीटर लापता स्थानिक इंडेक्स की सूची प्राप्त करने की अनुमति देता है, लेकिन क्रिएट इंडेक्स नहीं करता है

Https://gist.github.com/mdouchin/cfa0e37058bcf102ed490bc59d762042 देखें

लापता अनुक्रमणिकाओं की सूची प्राप्त करने के लिए, दौड़ें:

SELECT * FROM create_missing_spatial_indexes(True)

आवश्यक अनुक्रमित बनाने के लिए, चलाएं:

SELECT * FROM create_missing_spatial_indexes()

या

SELECT * FROM create_missing_spatial_indexes(False)

एक जादू की तरह काम किया! महान उपकरण।
रयानकाल्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.