SQL查询来获得一个枚举可以有的所有值

Postgresql在一段时间之前得到了enum的支持。

CREATE TYPE myenum AS ENUM ( 'value1', 'value2', ); 

如何使用查询获取在枚举中指定的所有值?

如果你想要一个数组:

 SELECT enum_range(NULL::myenum) 

如果你想在枚举中的每个项目单独的logging:

 SELECT unnest(enum_range(NULL::myenum)) 

附加信息

即使您的枚举不在默认模式下,该解决scheme也能按预期工作。 例如,将myenumreplace为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的列。