একটি সম্পূর্ণ স্কিমা পোস্টজিআইএস এ স্থানিক সূচক তৈরি করুন


9

আমি আমার পোস্টজিআইএস ডাটাবেসে এসপিআইটি (কিউজিআইএস প্লাগইন) ব্যবহার করে বেশ কয়েকটি শেফফাইল লোড করেছি। এই স্তরগুলির লোডিংয়ের পরে একটি স্পেশিয়াল সূচক তৈরি হয়নি। আমি ভাবছি যে প্রতিটি স্তরের জন্য কোয়েরি না লিখে স্কিমাতে প্রতিটি স্তরের জন্য স্পাটিয়াল সূচক তৈরির উপায় আছে কিনা? আমি কোনও ভাল পোস্টজিআইএস স্ক্রিপ্ট লেখক না, তাই কোনও সাহায্যের প্রশংসা করা হবে।

ধন্যবাদ

উত্তর:


8

আপনি যদি জ্যামিতি কলামগুলিতে ব্যাচ তৈরি সূচি তৈরি করতে চান, তবে আপনি এই plpgsql ফাংশনটি চেষ্টা করতে পারেন যা আমি সবেমাত্র নক করেছি:

CREATE OR REPLACE FUNCTION BatchIndex(sn text, tn text, cn text) RETURNS void AS $$
DECLARE i_exists integer;
DECLARE idxname text;
BEGIN
  idxname := 'idx_' || tn || '_' || cn;
  select into i_exists count(*) from pg_class where relname = idxname;

  IF i_exists = 0 THEN
    EXECUTE 'CREATE INDEX ' ||idxname || ' ON '
      || sn || '.' || tn
      || ' USING GIST(' || cn || ')';
  END IF;
END;
$$ LANGUAGE plpgsql;

আমি আমার ডাটাবেসে রাগ করে এটি চেষ্টা করি নি, তবে মনে হয় এটি কাজটি করে।

এটি ব্যবহার করতে, কেবল SELECTএই জাতীয় বিবৃতি চালান :

select BatchIndex('public', f_table_name, f_geometry_column) from geometry_columns where f_table_schema = 'public';

সমস্ত জ্যামিতি কলামে সূচি তৈরি করতে, আপনি এটি ব্যবহার করতে পারেন:

select BatchIndex(f_table_schema, f_table_name, f_geometry_column) from geometry_columns;

এরপরে, VACUUM ANALYZEসবকিছু পরিষ্কার করার জন্য একটি চালান ।


আপনাকে অনেক ধন্যবাদ, দুর্দান্ত দেখাচ্ছে। আমি এটি চালিয়েছি, তবে মনে হচ্ছে, এটি আমার স্ক্রিপ্টিংয়ের অভাব থেকে পারে an তবে যখন আমি নির্বাচন নির্বাচন করুন নীচের ত্রুটিটি পেয়েছি: ত্রুটি: ফাংশন ব্যাচিনডেক্স (অজানা, চরিত্রের ভিন্নতা, চরিত্রটি পৃথক) বিদ্যমান নেই লাইন 1: BatchIndex নির্বাচন করুন ('পাবলিক', f_table_name, f_geometry_colume) ... আমি নিশ্চিত নই যদি আমি ব্যাচটি পেতে কোনও কিছু যুক্ত করতে চাইছি বা যদি এটি অন্য কোনও কিছুর জন্য কেবল স্থানধারক হয়। ক্রিয়েট ক্যোয়ারী কোনও সমস্যা ছাড়াই চলেছিল তবে কোনও সূচি তৈরি করা হয়নি।
রায়ান গারনেট

হুম ... আমি নিশ্চিত নই সেখানে তখন কী ঘটছে। আপনি যে প্রথম প্যারামিটারটি দিয়ে যাচ্ছেন তা হ'ল এটি অ্যালার্মের ঘণ্টা বন্ধ unknownনা করে বরং টাইপ করার বিষয়টি মনে করে character varyingতবে এটি কোথায় আছে তা আমি দেখতে পাচ্ছি না। আমি এটিকে কিছু চিন্তা করব, এরই মধ্যে কোনও পোস্টগ্রিসএসকিউএল গুরু সেখানে অভিনবকে এড়িয়ে যাবেন? :)
MerseyViking

2

জ্যামিতির সাথে মতামত থাকলে শীর্ষের উত্তর কাজ করবে না। আপনি কোনও দৃশ্যে কোনও সূচক তৈরির চেষ্টা করছেন না তা যাচাই করার জন্য 'আইএফ' বিবৃতি পরিবর্তন করা এই সমস্যার সমাধান করে। আপনি যদি জ্যামিতির সাথে মতামত ব্যবহার করতে চান তবে এই লাইনটি প্রতিস্থাপন করুন:

IF i_exists = 0

এর সাথে:

IF i_exists = 0 AND tn IN (SELECT table_name, table_type FROM information_schema.tables WHERE table_type = 'BASE TABLE')

1

বলুন আপনার টেবিলটি 'বিল্ডিং', আপনি জিআইএসটি ব্যবহার করে সূচক করতে পারেন

CREATE INDEX building_gindx ON building USING GIST (geom);

যে আপনার জন্য খুঁজছেন?


ধন্যবাদ নরেশ, না আমি কোনও ব্যাচ সিস্টেমে স্কিমায় সমস্ত টেবিলের জন্য সূচী তৈরির উপায় খুঁজছি।
রায়ান গারনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.