SQL查询来获得一个枚举可以有的所有值
Postgresql在一段时间之前得到了enum的支持。
CREATE TYPE myenum AS ENUM ( 'value1', 'value2', );
如何使用查询获取在枚举中指定的所有值?
如果你想要一个数组:
SELECT enum_range(NULL::myenum)
如果你想在枚举中的每个项目单独的logging:
SELECT unnest(enum_range(NULL::myenum))
附加信息
即使您的枚举不在默认模式下,该解决scheme也能按预期工作。 例如,将myenum
replace为myschema.myenum
。
上述查询中返回logging的数据types为myenum
。 根据你在做什么,你可能需要投到文本。 例如
SELECT unnest(enum_range(NULL::myenum))::text
如果要指定列名称,可以附加AS my_col_name
。
感谢Justin Ohms指出了一些额外的提示,这些提示被纳入到我的答案中。
尝试:
SELECT e.enumlabel FROM pg_enum e JOIN pg_type t ON e.enumtypid = t.oid WHERE t.typname = 'myenum'
您可以使用以下查询获取枚举的所有枚举值。 查询可以让你select枚举所在的命名空间(如果枚举是在多个命名空间中定义的,则这是必需的,否则可以忽略该部分查询)。
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 unnest(enum_range(NULL::your_enum))::text AS your_column
这将返回枚举“your_enum”的内容的单列结果集与名为“your_column”types为text的列。