我创建了一个SQL SELECT来获取模式中的所有枚举及其值:
SELECT
t.typname, array_agg(e.enumlabel)
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typtype = 'e' AND n.nspname = 'public'
GROUP BY typname
我已将select放入视图中,所以每次我想调用它时都不必编写它。唯一困扰我的是,如果我重命名架构或在另一个架构中使用它,我必须手动重写架构的名称,检查代码的第6行:
WHERE t.typtype = 'e' AND n.nspname = 'public'
公众在那里很难受。在postgres中选择时,是否有一个“全局”变量说明您选择的模式?我找不到任何东西。
由于
PS:我使用postgres 8.4
答案 0 :(得分:4)
可以使用函数current_schema()
http://www.postgresql.org/docs/current/static/functions-info.html
答案 1 :(得分:0)
除了连接架构或使用current_schema()查找架构之外,您还可以按架构制作视图组,然后在视图上选择。
create or replace view enum_vw as
SELECT
n.nspname, t.typname, array_agg(e.enumlabel)
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typtype = 'e'
GROUP BY n.nspname, t.typname;
select * from enum_vw where nspname = 'public';