সূচকগুলি অনুপস্থিত রয়েছে এমন PostGIS সারণীগুলি সন্ধান করছেন?


10

সম্প্রতি আমি চারপাশে pg_stat_user_tablesতাকাচ্ছিলাম এবং আমার কয়েকটি স্থানীয় টেবিলগুলিতে সিক্যুয়ালি স্ক্যানগুলির উচ্চ সংখ্যা দেখে অবাক হয়েছি। নিশ্চিতভাবেই, এই টেবিলগুলিতে স্থানিক সূচকগুলি অনুপস্থিত ছিল।

আন-ইনডেক্সেড জ্যামিতি কলাম সহ আমি কীভাবে সমস্ত টেবিল সন্ধান করতে পারি?


Pg_stat_user_tables রেফের জন্য ধন্যবাদ। এটি আপনার হৃদয়ঙ্গমকর বিষয় যে আপনার জ্ঞানের কেউ এই জাতীয় ভুলগুলি স্বীকার করেছেন। আমি যে পরামর্শদাতাকে কাজ করছি সেই যুবকদের কাছে আমি সর্বদা বলি: প্রাথমিক কীয়ের জন্য যদি কোনও প্রাকৃতিক প্রার্থী না থাকে তবে একটি সিরিয়াল কলাম যুক্ত করুন। সর্বদা এসআরআইডি এবং জ্যামিতির ধরণের সংজ্ঞা দিন। সর্বদা একটি স্থানিক সূচক যুক্ত করুন। কারণ সিক্যুয়েন্স স্ক্যানগুলি মিলিয়ন সারি নিয়ে কাজ করতে পারে, তবে, একটি পয়েন্ট আসে ..... আমি যা বলেছি তার চেয়ে বরং করুন: ডি।
জন পাওয়েল

উত্তর:


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 দেখুন ।
ব্যবহারকারী 30184

@ user30184 আপনি কি এর t.typtype = 'b'অংশটি ব্যাখ্যা করতে পারেন ?
dbaston

1
এটি আসলে অকেজো টুকরা। জিডিএল-তে কোড পরিবর্তনটি একটি বিরল পরিস্থিতির সাথে মোকাবিলা করার জন্য ছিল যখন স্ট্যান্ডার্ড পোস্টগ্রিসকিউএল ডাটাবেসটিতে "জ্যামিতি" নামে একটি সারণী রয়েছে। এর pg_type এ প্রবেশ রয়েছে তবে টাইপটাইপ = 'সি' দিয়ে। তবে আপনি যদি পোস্টজিআইএস ইনস্টল করেন তবে এ জাতীয় অবস্থার অবসান সম্ভব নয়। 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.
ব্যবহারকারী 30184

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)

মোহন মত কাজ! দুর্দান্ত সরঞ্জাম
রায়ানকডালটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.