在PG中用户对象的集合叫做模式。
比如 postgres下有t1,t2,t3表,还有视图,索引等等,这些对象的集合就叫做模式。
postgres下所有对象的集合就叫做postgres模式。
不同的schema下可以有相同名字的对象。
在PG中一个用户可以拥有多个模式,一个模式只能属于一个用户。这与oracle不同,oracle中用户与模式是一一对应的。
比如:
创建一个用户u1

使用u1登录数据库

这里与oracle不同的:oracle创建一个用户默认没有任何的权限,在oracle中创建一个用户之后无法login和建表,但在PG中 新创建的一个用户默认有login和建表的权限,在PG中role没有login和建表的权限。
模式的管理方式:
1.默认管理方式
PG中创建一个表之后
比如:create table t1(......);那么该表属于public模式。

2.创建一个与用户名相同的模式,把所有的对象放在该模式下。
即用户名=模式名。这与oracle中模式的管理方式相同。
3.自行分类,按需求创建模式进行分类

在以后建表可以把对象放在不同的模式中方便分类。

授权某个模式下的对象访问权限给其它用户,则需要先授权访问该模式的权限给其它用户。
比如:
授权gaozhong模式下的qinghuagaozhong表给u2 可以这样写:

但u2在查询qinghuagaozhong表时还不能查询:

需要先把这个模式授权给其它用户:

这样u2用户就能查询 gaozhong模式下的qinggaohuazhong表了。
4.public模式
数据库初始化的时候会自动创建一个public模式,作用是我们创建一个对象的时候没有指定模式,会默认放在public模式下。

5.搜索路径
我们在自己创建的模式下面创建表,用\d命令看不见这张表,是因为我们的搜索路径不包括这个模式:

把这些模式放到 search_path中,以后用\d命令就可以查到了

但是这里面是有一个问题的,如果我们在对象下搜索到了t1这个表,那么在public中就不会显示t1这张表了,所以,在搜索的时候建议按照数据字典搜索:
