获取枚举可以具有的所有值的SQL查询

PostgreSQL在一段时间前获得了ENUM支持。

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

如何通过查询获取枚举中指定的所有值?

118318 次浏览

尝试:

SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'

您可以使用以下查询获取枚举的所有枚举值。该查询还允许您选择枚举位于哪个名称空间中(如果枚举在多个名称空间中定义,则需要选择)。否则,您可以省略查询的该部分)。

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 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)指出了一些额外的建议,我将其纳入了我的回答中。

SELECT unnest(enum_range(NULL::your_enum))::text AS your_column

这将返回枚举“您的_枚举”的内容的单列结果集,其中包含一个名为“您的_列”的文本类型列。