列出 Postgres ENUM 类型

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

schema         type      values
-------------  --------  -------
communication  channels  'text_message','email','phone_call','broadcast'
112928 次浏览
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;

我总是忘记怎么做。根据另一个答案和注释,这里是一个逗号分隔的列表。我喜欢复制粘贴片段。谢谢你的帮助:

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;
select enum_range(null::my_enum)

其中 my_enum是枚举类型名称。

文件: http://www.postgresql.org/docs/9.5/static/functions-enum.html

@ dpb:

如果您想为此创建一个永久的轻松访问方法,始终可以创建一个视图

CREATE OR REPLACE VIEW oublic.enumz AS
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_namespace n ON n.oid = t.typnamespace;

然后您可以为 insert 命令创建一个触发器。

以上内容将存储在数据库中,以备将来参考。

如果有表名和列名(但没有类型名) ,请使用:

SELECT pg_enum.enumlabel
FROM pg_type
JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
JOIN information_schema.columns ON information_schema.columns.udt_name =
pg_type.typname
WHERE pg_type.typtype = 'e' AND
table_name = $1 AND column_name = $2 ORDER BY pg_enum.enumsortorder

如果在列上使用 enum_range(与在类型上使用它的其他答案不同) ,它将返回存在的每一行的数据,这不是您想要的。因此,请改用上面的查询。

这列出了所有枚举类型的 柱子及其潜在值:

SELECT
table_schema || '.' || table_name || '.' || column_name as field_name,
pg_enum.enumlabel as value
FROM pg_type
JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
JOIN pg_namespace on pg_type.typnamespace = pg_namespace.oid
JOIN information_schema.columns ON (information_schema.columns.udt_name = pg_type.typname AND information_schema.columns.udt_schema = pg_namespace.nspname)
WHERE pg_type.typtype = 'e'
ORDER BY field_name, pg_enum.enumsortorder;

您可以通过以下方式列出数据类型

\dT+ channels

Https://www.postgresql.org/docs/current/static/app-psql.html#app-psql-meta-commands

添加顺序

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
ORDER BY
enum_name,
e.enumsortorder;

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

选择 enum _ range (NULL: : myenum)