【发布时间】:2010-12-09 14:57:15
【问题描述】:
Postgresql 前段时间获得了枚举支持。
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
如何通过查询获取枚举中指定的所有值?
【问题讨论】:
标签: postgresql enums
Postgresql 前段时间获得了枚举支持。
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
如何通过查询获取枚举中指定的所有值?
【问题讨论】:
标签: postgresql enums
如果你想要一个数组:
SELECT enum_range(NULL::myenum)
如果您想为枚举中的每个项目单独记录:
SELECT unnest(enum_range(NULL::myenum))
即使您的枚举不在默认架构中,此解决方案也会按预期工作。例如,将myenum 替换为myschema.myenum。
上述查询返回记录的数据类型为myenum。根据您的操作,您可能需要转换为文本。例如
SELECT unnest(enum_range(NULL::myenum))::text
如果要指定列名,可以附加AS my_col_name。
感谢 Justin Ohms 指出了一些额外的提示,我将这些提示纳入我的回答中。
【讨论】:
NULL::是什么意思?
SELECT enum_range(myenum)?投null是什么意思?
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
这将返回枚举“your_enum”内容的单列结果集,其中有一列名为“your_column”,类型为文本。
【讨论】:
您可以使用以下查询获取枚举的所有枚举值。该查询还允许您选择枚举所在的命名空间(如果枚举在多个命名空间中定义,则需要这样做;否则您可以省略该部分查询)。
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'))
【讨论】:
试试:
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 将新值插入枚举类型,则枚举值很可能会出现乱序。