运行以下查询:
SELECT exists ( SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'public' ) AS schema_exists;
FALSE即使公共模式存在,我也总是会得到提示。
FALSE
我应如何检查此架构是否存在?
编辑
我正在使用PostgreSQL 8.4版
来自的信息information_schema.schemata取决于您所连接的角色,因此,一般而言,它不是查询以发现架构的正确视图。
information_schema.schemata
9.3中的文档information_schema.schemata说:
视图架构包含当前数据库中由当前启用的角色拥有的所有架构。
但是,仅从那句话还不清楚(至少对我而言),为什么看不到public。
public
在邮件列表中,汤姆·莱恩(Tom Lane)进行了进一步的解释: 请参阅http://www.postgresql.org/message- id/11650.1357782995@sss.pgh.pa.us
他的结论是:
从目前的情况来看,在这种观点下,非超级用户不会看到“ public”,“ pg_catalog”甚至“ information_schema”本身,这似乎有点愚蠢。
看起来完全像这个问题中的问题。
底线:用pg_namespace代替information_schema.schemata
pg_namespace
9.4版对此进行了修订,以符合用户的期望。在当前文档说:
视图模式包含当前数据库中当前用户有权访问的所有模式(通过成为所有者或具有某些特权)。
USAGE 模式的特权现在足以从该视图中获取它。
USAGE