type uuid
आपके डीडीएल स्टेटमेंट में SET DATA TYPE uuid
. के लिए शॉर्टहैंड है . मैनुअल:
varchar_pattern_ops
एक ऑपरेटर वर्ग है
यदि आपके पास uuid
. है तो आपके त्रुटि संदेश में इसका उल्लेख किया जाएगा किसी भी अनुक्रमणिका में इस ऑपरेटर वर्ग का उपयोग करना। आमतौर पर तेज़ सॉर्टिंग, पैटर्न मिलान और श्रेणी स्थितियों को सक्षम करने के लिए।
ठीक करने के लिए, परस्पर विरोधी अनुक्रमणिकाएँ छोड़ें, डेटा प्रकार बदलें और फिर विशेष ऑपरेटर वर्ग के बिना अनुक्रमणिकाएँ फिर से बनाएँ - if आपको अभी भी उनकी आवश्यकता है।
हालांकि, कुछ सामान्य प्रश्न जो varchar_pattern_ops
. का उपयोग करते हैं इंडेक्स डेटा प्रकार के साथ काम करना बंद कर देगा uuid
varchar
. के बजाय . पैटर्न-मिलान की तरह:
ऐसी किसी भी क्वेरी को ठीक करना भी सुनिश्चित करें।
@fl0cke ने बताया एक संबंधित उत्तर:
मैं थोड़ा अलग मार्ग सुझाता हूं। इंडेक्स को गिराना, डेटा प्रकार बदलना और फिर . सस्ता है एक नई अनुक्रमणिका बनाएं - यदि यह अभी भी उपयोगी है।
DROP INDEX tbl_guid_varchar_pattern_ops_idx;
ALTER TABLE tbl ALTER COLUMN guid TYPE uuid USING guid::uuid;
CREATE INDEX tbl_guid_idx ON tbl (guid);
अपमानजनक इंडेक्स कैसे खोजें?
Postgres के आधुनिक संस्करणों में आपको \d tbl
. के साथ तालिका के लिए मौजूदा अनुक्रमणिकाएँ मिलती हैं psql में।
सभी को पूरा करने के लिए CREATE INDEX
दी गई तालिका के लिए कथन:
SELECT pg_get_indexdef(indexrelid) || ';' AS idx
FROM pg_index
WHERE indrelid = 'public.tbl'::regclass; -- optionally schema-qualified
varchar_pattern_ops
. का उपयोग करके केवल वही प्राप्त करने के लिए :
SELECT pg_get_indexdef(i.indexrelid) || ';' AS idx
FROM pg_index i
JOIN pg_opclass o ON o.oid = ANY (i.indclass)
WHERE i.indrelid = 'public.big'::regclass
AND o.opcname = 'varchar_pattern_ops';
विवरण:
- इंडेक्स को एक टेबल से दूसरी टेबल पर कॉपी करें
- मैं Postgres में तालिका के सभी अनुक्रमित कैसे छोड़ सकता हूँ?