列表Postgres ENUMtypes
build议查询列出ENUMtypes是很好的。 但是,它只是列出了schema
和typestypname
。 如何列出实际的ENUM值? 例如,在上面的链接的答案,我想要以下结果
schema type values ------------- -------- ------- communication channels 'text_message','email','phone_call','broadcast'
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 enum_range(enum_first(null::province),null::province);
我总是忘记如何做到这一点。 根据其他答案和评论,这里是以逗号分隔的列表。 我喜欢复制粘贴片段。 谢谢您的帮助。
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
@dpb:
如果你想为此创build一个永久性的简单访问方法,你总是可以创build一个视图
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;
然后,您可以为插入命令创build一个触发器。
上面将把这个存储在数据库中以备将来参考。
如果你有表和列的名字,(但不是types名称)使用这个:
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
(与在types上使用它的其他答案相反),它将返回存在的每一行的数据,这不是你想要的。 所以用上面的查询来代替。