Postgresql不久前得到了enum支持。
CREATE TYPE myenum AS ENUM ( 'value1', 'value2', );
如何通过查询获取枚举中指定的所有值?
5lwkijsr1#
如果你想要一个数组:
SELECT enum_range(NULL::myenum)
如果要为枚举中的每个项创建单独的记录:
SELECT unnest(enum_range(NULL::myenum))
即使枚举不在默认架构中,此解决方案也能按预期工作。例如,将myenum替换为myschema.myenum。在上面的查询中返回的记录的数据类型将是myenum。根据您正在执行的操作,您可能需要强制转换为文本。例如
myenum
myschema.myenum
SELECT unnest(enum_range(NULL::myenum))::text
如果要指定列名,可以追加AS my_col_name。感谢Justin Ohms指出了一些额外的提示,我将其纳入了我的回答中。
AS my_col_name
drnojrws2#
尝试:
SELECT e.enumlabel FROM pg_enum e JOIN pg_type t ON e.enumtypid = t.oid WHERE t.typname = 'myenum'
vddsk6oq3#
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
这将返回枚举“your_enum”内容的单列结果集,其中列名为“your_column”,类型为text。
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'))
fzwojiic5#
如果有人正在寻找psql的方式,那么它是/dT+ <your enum>
psql
/dT+ <your enum>
5条答案
按热度按时间5lwkijsr1#
如果你想要一个数组:
如果要为枚举中的每个项创建单独的记录:
其他信息
即使枚举不在默认架构中,此解决方案也能按预期工作。例如,将
myenum
替换为myschema.myenum
。在上面的查询中返回的记录的数据类型将是
myenum
。根据您正在执行的操作,您可能需要强制转换为文本。例如如果要指定列名,可以追加
AS my_col_name
。感谢Justin Ohms指出了一些额外的提示,我将其纳入了我的回答中。
drnojrws2#
尝试:
vddsk6oq3#
这将返回枚举“your_enum”内容的单列结果集,其中列名为“your_column”,类型为text。
thtygnil4#
可以使用以下查询获取枚举的所有枚举值。该查询还允许您选择枚举所在的名称空间(如果枚举在多个名称空间中定义,则需要这样做;否则可以省略查询的该部分)。
fzwojiic5#
如果有人正在寻找
psql
的方式,那么它是/dT+ <your enum>