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

Wie*_*zny 125 postgresql enums

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

CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*s L 230

如果你想要一个数组:

SELECT enum_range(NULL::myenum)
Run Code Online (Sandbox Code Playgroud)

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

SELECT unnest(enum_range(NULL::myenum))  
Run Code Online (Sandbox Code Playgroud)

附加信息

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

上述查询中返回记录的数据类型为myenum.根据您的操作,您可能需要转换为文本.例如

SELECT unnest(enum_range(NULL::myenum))::text
Run Code Online (Sandbox Code Playgroud)

如果要指定列名,可以追加AS my_col_name.


感谢Justin Ohms指出了一些额外的提示,我将其纳入了我的答案.

  • 最不合适的调用将返回类型为myenum的记录,列名为"myenum".您可能还希望将枚举转换为文本,并通过添加类似的内容来指定列名.:: text AS my_column (2认同)
  • `NULL::` 是什么意思? (2认同)
  • @ChrisL 谢谢。这似乎很奇怪。为什么我们不能做`SELECT enum_range(myenum)`?强制转换 `null` 是什么意思? (2认同)

Kev*_*Kev 28

尝试:

SELECT e.enumlabel
  FROM pg_enum e
  JOIN pg_type t ON e.enumtypid = t.oid
  WHERE t.typname = 'myenum'
Run Code Online (Sandbox Code Playgroud)


Sai*_*ifi 7

万一有人在找路,psql那就是

\dT+ <your enum>


Jus*_*hms 5

SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Run Code Online (Sandbox Code Playgroud)

这将返回包含“ your_enum”枚举内容的单列结果集,该列结果集的文本类型为“ your_column”。