1

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

我已将选择放入视图中,因此每次我想调用它时都不必编写它。唯一困扰我的是,如果我重命名架构或在另一个架构中使用它,我必须手动重写架构的名称,请检查代码的第 6 行:

    WHERE t.typtype = 'e' AND n.nspname = 'public'

公众在那里是硬排版的。在 postgres 中选择时,是否有一个“全局”变量说明您从哪个模式中选择?我找不到任何东西。

谢谢

PS:我使用postgres 8.4

4

2 回答 2

4

可以使用函数检索当前模式current_schema()

http://www.postgresql.org/docs/current/static/functions-info.html

于 2012-04-10T14:57:20.277 回答
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';
于 2012-04-10T22:13:10.440 回答