मुझे लगता है कि आपको PostgreSQL संस्करण की जांच करनी होगी और व्यवहार को उचित रूप से बदलना होगा, या SQL का उपयोग करना होगा जो ऑर्डरिंग निर्धारित करने के लिए कैटलॉग को स्पर्श नहीं करता है।
बाद के लिए एक विचार, दिए गए डमी एनम:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
ORDER BY
. है row_number
. का उपयोग करके एनम प्रकार के मानों के लिए एनम लेबल की कास्ट विंडो फ़ंक्शन 8.4 और नए में उपलब्ध है:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
यह आपको सॉर्ट कुंजी द्वारा ऑर्डर किए गए लेबल प्राप्त करता है। पुराने Pg संस्करणों में Pg केवल oid
. द्वारा क्रमबद्ध होगा एनम मूल्यों में से, नए संस्करणों में यह एनमसोर्टऑर्डर का उपयोग करेगा, लेकिन आपको किसी भी तरह की परवाह नहीं है, आपने अभी पोस्टग्रेएसक्यूएल को बताया है "कृपया इन्हें सही क्रम में क्रमबद्ध करें"।
या यदि आपको सर्वर द्वारा अपेक्षित क्रम में उनकी आवश्यकता है, तो लिखें:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum