繁体   English   中英

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

[英]SQL query to get all values a enum can have

Postgresql前段时间获得了enum支持。

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

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

如果你想要一个数组:

SELECT enum_range(NULL::myenum)

如果你想为枚举中的每个项目单独记录:

SELECT unnest(enum_range(NULL::myenum))  

附加信息

即使您的枚举不在默认架构中,此解决方案仍可按预期工作。 例如,用myschema.myenum替换myenum

上述查询中返回记录的数据类型为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 unnest(enum_range(NULL::your_enum))::text AS your_column

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

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

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'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM