一个PostgreSQL数据库集簇中包含一个或多个命名的数据库。用户和用户组被整个集簇共享,但没有其他数据在数据库之间共享。任何给定客户端连接只能访问在连接中指定的数据库中的数据。一个数据库包含一个或多个命名模式,模式中包含着表。模式还包含其他类型的命名对象, 包括数据类型、函数和操作符。相同的对象名称可以被用于不同的模式中而不会出现冲突,例如schema1和myschema都可以包含名为mytable的表。和数据库不同,模式并不是被严格地 隔离:一个用户可以访问他们所连接的数据库中的所有模式内的对象,只要他们有足够的权限。
下面是一些使用模式的原因:
1、允许多个用户使用一个数据库且不会互相干扰
2、将数据库对象组织成逻辑组以便更容易管理
3、第三方应用的对象可以放在独立的模式中,这样他们就不会与其他对象的名称发生冲突。
注:
1、一个集簇的用户并不必拥有访问集簇中每个数据库的权限。用户名的共享意味着不可能在同一个集簇中出现重名的不同用户,例如两个数据库中都有叫 Alice 的用户,但系统可以配置只允许Alice访问某些数据库。
2、模式类似操作系统层的目录,但是模式不能嵌套。