Postgresql ได้รับการสนับสนุน enum บางเวลาที่ผ่านมา
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
ฉันจะรับค่าทั้งหมดที่ระบุใน enum ด้วยแบบสอบถามได้อย่างไร
Postgresql ได้รับการสนับสนุน enum บางเวลาที่ผ่านมา
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
ฉันจะรับค่าทั้งหมดที่ระบุใน enum ด้วยแบบสอบถามได้อย่างไร
คำตอบ:
ถ้าคุณต้องการอาร์เรย์:
SELECT enum_range(NULL::myenum)
หากคุณต้องการบันทึกแยกต่างหากสำหรับแต่ละรายการใน enum:
SELECT unnest(enum_range(NULL::myenum))
โซลูชันนี้ทำงานได้ตามที่คาดไว้แม้ว่า enum ของคุณจะไม่อยู่ในสคีมาเริ่มต้น ยกตัวอย่างเช่นแทนที่ด้วยmyenum
myschema.myenum
myenum
ชนิดข้อมูลของระเบียนที่ส่งคืนในแบบสอบถามดังกล่าวข้างต้นจะเป็น ขึ้นอยู่กับสิ่งที่คุณกำลังทำคุณอาจต้องส่งข้อความ เช่น
SELECT unnest(enum_range(NULL::myenum))::text
AS my_col_name
หากคุณต้องการที่จะระบุชื่อคอลัมน์คุณสามารถผนวก
ให้เครดิตกับ Justin Ohms สำหรับการชี้เคล็ดลับเพิ่มเติมซึ่งฉันได้รวมไว้ในคำตอบของฉัน
NULL::
อะไร
SELECT enum_range(myenum)
ไม่ได้ ความหมายของการคัดเลือกนักแสดงnull
คืออะไร?
ลอง:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
เข้ากับแบบสอบถาม ค่าแจกแจงส่วนใหญ่มีแนวโน้มที่จะออกคำสั่งถ้าค่าใหม่ที่ถูกใส่เข้าไปในประเภทการแจงนับโดยใช้หรือBEFORE
AFTER
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
สิ่งนี้จะส่งคืนชุดผลลัพธ์คอลัมน์เดี่ยวของเนื้อหาของ enum "your_enum" พร้อมคอลัมน์ชื่อ "your_column" ของข้อความชนิด
คุณสามารถรับค่า enum ทั้งหมดสำหรับ enum โดยใช้เคียวรีต่อไปนี้ เคียวรีช่วยให้คุณสามารถเลือกเนมสเปซที่ enum อาศัยอยู่ได้ด้วย (ซึ่งจำเป็นหากกำหนด enum ในเนมสเปซหลาย ๆ มิฉะนั้นคุณสามารถละเว้นส่วนนั้นของเคียวรีได้)
SELECT enumlabel
FROM pg_enum
WHERE enumtypid=(SELECT typelem
FROM pg_type
WHERE typname='_myenum' AND
typnamespace=(SELECT oid
FROM pg_namespace
WHERE nspname='myschema'))