পোস্টগ্রাইএসকিউএল সূচক নাম
- একক ডাটাবেস স্কিমা জুড়ে সূচকের নামগুলি অনন্য।
- সূচির নামগুলি একই স্কিমায় অন্য কোনও সূচক, (বিদেশী) সারণী, (উপাদানযুক্ত) দর্শন, অনুক্রম বা ব্যবহারকারী-সংজ্ঞায়িত সংমিশ্রণের মতো হতে পারে।
- একই স্কিমায় দুটি টেবিলের একই নামের সূচক থাকতে পারে না। (যৌক্তিকভাবে অনুসরণ করে))
আপনি যদি সূচকের নামটি যত্ন না করে থাকেন তবে পোস্টগ্রিসের এটির স্বয়ংক্রিয় নাম রাখুন:
CREATE INDEX ON tbl1 (col1);
(প্রায়) একই:
CREATE INDEX tbl1_col1_idx ON tbl1 USING btree (col1);
পোস্টগ্র্রেস নামকরণের সংঘর্ষ এড়াতে এবং পরবর্তী বিনামূল্যে নামটি স্বয়ংক্রিয়ভাবে বেছে নেবে:
tbl1_col1_idx
tbl1_col1_idx2
tbl1_col1_idx3
...
এটা চেষ্টা করুন. তবে, স্পষ্টতই, আপনি একাধিক রিন্ডান্ট ইনডেক্স তৈরি করতে চান না । সুতরাং অন্ধভাবে একটি নতুন তৈরি করা ভাল ধারণা হবে না।
অস্তিত্বের জন্য পরীক্ষা
9.3 বা তার বেশি বয়সীদের পোস্টগ্র্যাগ করে
পরীক্ষার একটি খুব সহজ উপায় হ'ল এখানে স্কিমা-যোগ্য নামটি কাস্ট করা regclass
:
SELECT 'myschema.myname'::regclass;
যদি এটি একটি ব্যতিক্রম ছুঁড়ে দেয় তবে নামটি বিনামূল্যে।
বা, কোনও DO
বিবৃতিতে ব্যবহৃত ব্যতিক্রম নিক্ষেপ না করে একই পরীক্ষা করতে :
DO
$$
BEGIN
IF NOT EXISTS (
SELECT
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = 'mytable_mycolumn_idx'
AND n.nspname = 'myschema'
) THEN
CREATE INDEX mytable_mycolumn_idx ON myschema.mytable (mycolumn);
END IF;
END
$$;
এটি এর জন্য কার্যকর হয় না CREATE INDEX CONCURRENTLY
, যেহেতু var রূপটি বাইরের লেনদেনে মোড়ানো যায় না। নীচে @ গ্রেগরি দ্বারা মন্তব্য দেখুন ।
DO
বিবৃতি Postgres 9.0 সঙ্গে চালু করা হয়। পূর্ববর্তী সংস্করণগুলিতে আপনাকে একই কাজ করতে একটি ফাংশন তৈরি করতে হবে। ম্যানুয়াল
সম্পর্কে বিশদ । ম্যানুয়ালটিতে সূচী
সম্পর্কে মূল কথা ।pg_class
পোস্টগ্রাগেস 9.4
আপনি to_regclass()
কোনও ব্যতিক্রম না ছুড়ে চেক করতে নতুন ফাংশনটি ব্যবহার করতে পারেন :
DO
$$
BEGIN
IF to_regclass('myschema.mytable_mycolumn_idx') IS NULL THEN
CREATE INDEX mytable_mycolumn_idx ON myschema.mytable (mycolumn);
END IF;
END
$$;
সেই নামের কোনও সূচক (বা অন্য কোনও বস্তু) উপস্থিত না থাকলে NULL প্রদান করে। দেখা:
পোস্টগ্র্যাস 9.5
এখন উপলভ্য:
CREATE INDEX IF NOT EXISTS ...
যে এছাড়াও জন্য কাজ করে CREATE INDEX CONCURRENTLY IF NOT EXISTS
।
তবে ম্যানুয়ালটি সতর্ক করে দিয়েছে :
মনে রাখবেন যে বিদ্যমান সূচকটি তৈরি করা হয়েছে এমন কিছু হওয়ার কোনও গ্যারান্টি নেই।
এটি বস্তুর নামের জন্য একটি সরল চেক। এখানে সমস্ত বৈকল্পিকের জন্য প্রযোজ্য।