PostgreSQL এক্সক্লুড ব্যবহারের ত্রুটি: ডেটা টাইপ পূর্ণসংখ্যার কোনও ডিফল্ট অপারেটর শ্রেণি নেই


37

PostgreSQL 9.2.3 এ আমি এই সরলীকৃত টেবিলটি তৈরি করার চেষ্টা করছি:

CREATE TABLE test (
    user_id INTEGER,
    startend TSTZRANGE,
    EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);

তবে আমি এই ত্রুটিটি পেয়েছি:

ERROR:  data type integer has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define
       a default operator class for the data type.

পোস্টগ্রি ডক্স এই উদাহরণে ব্যবহার যা আমার জন্য কাজ করে না:

CREATE TABLE room_reservation (
    room text,
    during tsrange,
    EXCLUDE USING gist (room WITH =, during WITH &&)
);

একই ত্রুটি বার্তা।

এবং এইটি , যা আমার পক্ষেও কার্যকর হয় না:

CREATE TABLE zoo (
    cage   INTEGER,
    animal TEXT,
    EXCLUDE USING gist (cage WITH =, animal WITH <>)
);

একই ত্রুটি বার্তা।

আমি কোনও সমস্যা ছাড়াই এটি তৈরি করতে সক্ষম:

CREATE TABLE test (
    user_id INTEGER,
    startend TSTZRANGE,
    EXCLUDE USING gist (startend WITH &&)
);

এবং এই:

CREATE TABLE test (
    user_id INTEGER,
    startend TSTZRANGE,
    EXCLUDE USING btree (user_id WITH =)
);

এই কাজটি কীভাবে করা যায় তা নির্ধারণ করার জন্য, বা এটি কেন কাজ করবে না তা সন্ধান করার জন্য আমি বেশ কিছুটা সময় ব্যয় করেছি। কোন ধারনা?


9
+1 এখানে দেখুন, লোকেরা! এভাবেই শেষ হয়েছে। প্রশ্নটিতে তার প্রয়োজনীয় সমস্ত কিছু রয়েছে: আরডিবিএমএস এবং সংস্করণ, উদাহরণ কোড, ত্রুটি বার্তা, সমস্যার স্পষ্ট সংজ্ঞা, লিঙ্কগুলি, ওপি কী চেষ্টা করেছে তার একটি প্রদর্শন। কাজগুলো. শব্দ কোরো না. এবং এটি প্রথমবারের ব্যবহারকারীর কাছ থেকে! Chapeau। আরও কাছাকাছি দেখার জন্য আমাকে তত্ক্ষণাত্ সন্তুষ্ট করল।
এরউইন ব্র্যান্ডসেটেটার

উত্তর:


29

btree_gistম্যানুয়ালটিতে উল্লিখিত অতিরিক্ত মডিউলটি আপনি যে জায়গাতে লিঙ্ক করেছেন সেটি ইনস্টল করুন :

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

আধুনিক পোস্টগ্রিজ এসকিউএল এ আপনাকে কেবল চালানো দরকার (প্রতি ডাটাবেস একবার):

CREATE EXTENSION btree_gist;

আপনার ওএসে প্রথমে আপনার "অবদান" প্যাকেজটি ইনস্টল করা দরকার। বিশদগুলি আপনার ওএস এবং ব্যবহৃত সফ্টওয়্যার সংগ্রহস্থলের উপর নির্ভর করে। ডেবিয়ান পরিবারের জন্য এটি সাধারণত postgresql-contrib-9.2(পোস্টগ্রিস 9.2 এর জন্য)। বা কেবল postgresql-contribরেড হাট পরিবারের জন্য। সম্পর্কিত সম্পর্কিত উত্তরটি বিবেচনা করুন:


1
এটি আসলে আমি প্রথমে চেষ্টা করেছি। এটা একটা অনেক বড় লিপিতে ছিল এবং এই ত্রুটি বার্তা আউটপুট মগ্ন করেছেন: ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory। আমি ধরে নিয়েছি এটি ইতিমধ্যে ইনস্টল করা হয়েছে কারণ ...EXCLUDE USING gist (startend WITH &&)...আমার আসল পোস্টে যেমন কাজ হয়েছে তেমন কাজ। এটি লক্ষ লক্ষ দেখুন করার জন্য ধন্যবাদ। এখন সেই ত্রুটিটি গবেষণা করার জন্য।
আয়ান টিমোথি

3
@ ডেনভারটাইমোথি: আমি মনে করি আমি এটিতেও সাহায্য করতে পারি। আপনাকে postgresql-contrib-9.2প্রথমে আপনার ওএসে অবদানের প্যাকেজটি ইনস্টল করতে হবে । আপনার ওএসের উপর নির্ভর করে। এই সম্পর্কিত উত্তর বিবেচনা করুন।
এরউইন ব্র্যান্ডসেটেটার

এছাড়াও, এটি লক্ষ্য করা সহায়ক হতে পারে যে এটি portসরঞ্জামের সাথে ইনস্টল করা ম্যাক ওএস 10.8.2 এ চলছে ।
ইয়ান তীমথিয়

@ ডেনভারটাইমোথি: আমি ম্যাক ব্যবহার করছি না, তবে প্রিন্সিপাল একই হওয়া উচিত। আপনি চালানোর আগে আপনার ওএসে প্যাকেজটি ইনস্টল করুন CREATE EXTENSION
এরউইন ব্র্যান্ডসেটেটার


2

যদি কেউ এটি ব্যবহার করতে না পারেন বা না চান:

CREATE EXTENSION btree_gist;

যেমনটি আমার ক্ষেত্রে ছিল, কারণ জ্যাঙ্গো 1.11 ওআরএম এই সূচকটি সমর্থন করে না এবং আমি জ্যাঙ্গোর বাইরে এসকিউএল লিখতে চাইনি। আমি এর মতো কিছু ব্যবহার করেছি:

EXCLUDE USING gist (
    int4range(userid, userid, '[]') WITH =,
    startend WITH && 
)

উভয় সীমা অন্তর্ভুক্ত কিনা তা নিশ্চিত করতে '[]' ব্যবহৃত হয়। পোস্টগ্রিস 9.6 এবং 10.5 এর সাথে পরীক্ষিত।

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