Postgres:变量说明我选择的模式

时间:2012-04-10 14:55:00

标签: postgresql select

我创建了一个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

2 个答案:

答案 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';