运行以下查询:
SELECT exists (
SELECT
schema_name
FROM
information_schema.schemata
WHERE
schema_name = 'public'
) AS schema_exists;
我总是越来越FALSE
,即使公共模式存在。
我应该如何检查这个模式是否存在?
EDIT
我使用的是 PostgreSQL 版本 8.4
信息来自information_schema.schemata
取决于您所连接的角色,因此它实际上并不是查询以发现一般模式的正确视图。
The doc on information_schema.schemata in 9.3 http://www.postgresql.org/docs/9.3/static/infoschema-schemata.html says:
视图模式包含当前数据库中的所有模式
由当前启用的角色拥有。
然而,从这句话中还不太清楚(至少对我来说),为什么你看不到public
.
在邮件列表帖子中,Tom Lane 做了更进一步的解释:
See http://www.postgresql.org/message-id/[电子邮件受保护] http://www.postgresql.org/message-id/11650.1357782995@sss.pgh.pa.us
他的结论是:
就目前情况而言,非超级用户不会看到“public”、“pg_catalog”,也不会看到
甚至“information_schema”本身在这个视图中,这似乎有点
愚蠢的。
这看起来与这个问题完全一样。
底线:使用pg_namespace
代替information_schema.schemata
这在 9.4 版本中进行了修改,以符合用户的期望。这当前文档 http://www.postgresql.org/docs/current/static/infoschema-schemata.html says:
视图模式包含当前数据库中的所有模式
当前用户有权访问(通过成为所有者或拥有
一些特权)。
USAGE
现在,模式上的特权足以从该视图中获取它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)