PG中user与schema管理
schema概念
- 对象的集合叫做模式。比如A用户下有几张表和对应的索引,那么该用户下的所有对象的集合就叫作A模式。
- 可以把用户下拥有的对象根据业务分类,不同的对象存放在不同的模式下。
- 新建的数据库默认会创建不同的模式来管理对象,比如information_schema,pg_toast,pubilc等模式。
- 不同的schema下可以有相同的名字的表、函数等对象,互相之间是不冲突的。只要有权限,每个schema的对象死可以相互调用的。
用户与schema对应关系
- 一个用户可以创建与拥有多个模式。(oracle一个用户默认创建根用户名一样的模式,pg不会默认创建)
- 一个模式只能属于一个用户
- 普通用户创建模式时需要授权在指定的数据库下创建模式的权限
授权 grant create on database 数据库名 to 用户名
创建模式 create schema 模式名
oracle: select * form sport.basketball;其中sport是模式名,basketball是对象名(因为oracle用户名和模式名一样所以常会误会sport是用户名)
pg: form sport.basketball;其中sport是模式名,basketball是对象名
Public schema
- 初始化数据库时会自动创建一个public模式,共享给所有用户使用,任何用户都可以把创建在该模式下,由于PG中一个用户对应多个模式,创建用户时没有创建对应的默认模式,而对象都是基于模式管理的,所以创建一个公用的模式public
- 基于数据库安全考虑可以删除public模式
Schema管理
- 授权某个模式下的对象访问权限个其他用户,则需要先授权访问该模式的权限给其他用户。
授权模式权限:GRANT USAGE ON SCHEMA 模式名 TO 用户名
授权对象权限:GRANT SELECT ON 模式名.对象名 TO 用户名 - 删除模式。只能由其拥有者或者超级用户来删除
DROP SCHEMA 模式名;(需要先删掉该模式下的所有对象)
删除模式时同时删除所依赖的对象
DROP SCHEMA 模式名 CASCADE;
搜索路径
这一点与oracle是不一样的,oracle是根据字典表来搜索的
- 查看搜索路径
show search_path - 设置搜索路径
set search_path=" u s e r " , p u b l i c ; 其中 user",public; 其中 user",public;其中user是获取当前用户名,如果用户下存在相同名字的模式,则搜索路径也将会包含该模式。 - \d命令搜索规律
- 如果在前面的搜索路径中找到了对象则会放弃后面模式的搜索