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

m2xkgtsf  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(5)|浏览(239)

Postgresql不久前得到了enum支持。

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

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

5lwkijsr

5lwkijsr1#

如果你想要一个数组:

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

drnojrws

drnojrws2#

尝试:

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

vddsk6oq3#

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

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

thtygnil

thtygnil4#

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

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

fzwojiic5#

如果有人正在寻找psql的方式,那么它是
/dT+ <your enum>

相关问题