回答

收藏

如何检查PostgreSQL公共模式是否存在?

技术问答 技术问答 240 人阅读 | 0 人回复 | 2023-09-12

以下操作查询:6 x3 r( H* R2 O0 L2 W$ q
SELECT exists  SELECT        schema_name     FROM        information_schema.schemata     WHERE        schema_name = 'public') AS schema_exists;FALSE即使有公共模式,我也总是得到提示。8 l, s2 }9 J( {" H# S
如何检查这个架构是否存在?
+ F8 _4 g* c$ O0 ]编辑2 [: K5 s% j8 x5 O7 k' p
我正在使用PostgreSQL 8.4版4 Y4 v, ~/ v& U1 c6 R
                                                               
( s/ R$ Y8 {; E$ j4 J    解决方案:                                                               
0 J  T" x( ~( B( M! D- v                                                                来自的信息information_schema.schemata这取决于你连接的角色,所以,一般来说,它不是为了找到正确的视图。6 c4 T6 }/ ^5 S9 \
9.3中的文档information_schema.schemata说:
$ p: n' Z( F4 q, n视图架构包括当前数据库中使用的角色所拥有的所有架构。
: y9 q( \/ Y7 @6 y/ c0 ]+ J但是,仅从那句话还不清楚(至少对我来说),为什么看不见呢?public。
% L: P6 U' i0 z: V# _0 q' I4 i汤姆在邮件列表中·莱恩(Tom Lane)进一步解释:
1 K& J# t! G1 S$ f/ j0 A7 A请参阅http://www.postgresql.org/message-& v' C/ C( ~, U
id/11650.1357782995@sss.pgh.pa.us1 F( G) y' V! g) G. x) e
他的结论是:
! R5 J/ B' i/ L+ A5 |( \从目前的情况来看,非超级用户不会看到 public”,“ pg_catalog”甚至“
: y0 j; ^' O9 i3 J5 I1 Oinformation_schema本身,这似乎有点愚蠢。+ v8 R1 b9 v7 @- E* `$ r5 U8 v
看起来完全像这个问题。
* j& f) y$ |6 h1 \; U底线:用pg_namespace代替information_schema.schemata
$ `8 Q/ C3 G' n+ u9.为了满足用户的期望,修订了4版。在当前文档中说:4 j* m' M4 L9 ]& u  R; R* k: z; l* ?4 N
视图模式包括当前数据库中当前用户有权访问的所有模式(通过成为所有者或拥有某些特权)。4 @! d* T! S# e) d( d
USAGE 模式的特权现在足以从该视图中获取它。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则