列出Postgres ENUM类型

pun*_*ish 75 postgresql

列出ENUM类型建议查询很棒.但是,它只列出了schematypname.如何列出实际的ENUM值?例如,在上面的链接答案中,我希望得到以下结果

schema         type      values
-------------  --------  -------
communication  channels  'text_message','email','phone_call','broadcast'
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 107

select n.nspname as enum_schema,  
       t.typname as enum_name,  
       e.enumlabel as enum_value
from pg_type t 
   join pg_enum e on t.oid = e.enumtypid  
   join pg_catalog.pg_namespace n ON n.oid = t.typnamespace
Run Code Online (Sandbox Code Playgroud)

  • @dpb:您可以在psql命令行客户端中使用`\ dT +` (54认同)
  • 甜... ...甚至更好地使用`string_agg(e.enumlabel,',')作为enum_value`和适当的`GROUP BYs`.非常感谢. (3认同)
  • 这是荒唐的.为什么地球上没有速记?(谢谢你的解决方案!) (3认同)

小智 62

select enum_range(enum_first(null::province),null::province);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!根据文档,如果你想要整个范围`select enum_range(null :: my_enum)`,你不需要重复两次.http://www.postgresql.org/docs/9.5/static/functions-enum.html (12认同)
  • 使用`select unnest(enum_range(null,null :: name_of_enum_type));`每行获取一个值. (11认同)
  • 工作就像一个魅力,对于其他人来说,'省'是枚举类型的名字:) (8认同)

小智 17

这:SELECT unnest(enum_range(NULL::myenum))将枚举类型作为行返回。


Mic*_*ael 13

我总是忘记怎么做.根据其他答案和评论,这里是一个以逗号分隔的列表.我喜欢复制粘贴代码段.谢谢您的帮助:

select n.nspname as enum_schema,  
    t.typname as enum_name,
    string_agg(e.enumlabel, ', ') as enum_value
from pg_type t 
    join pg_enum e on t.oid = e.enumtypid  
    join pg_catalog.pg_namespace n ON n.oid = t.typnamespace
group by enum_schema, enum_name;
Run Code Online (Sandbox Code Playgroud)


小智 7

选择枚举范围(NULL::myenum)