模式与模式的权限
概念
在Postgresql中模式与在MysqL中完全不同,在MysqL中模式是指数据库,但是在Postgresql中模式是指命名空间或者目录,和在高级编程语言中的命名空间一直,命名空间的存在使得在不同命名空间中相同的对象访问不会发生冲突,该特性完全与高级编程语言中的命名空间一致。
创建模式
$ select * from pg_namespace; -- 该命令访问系统表pg_namespace,显示出所有的模式
$ \dn+ -- 该命令也会显示所有的模式
- 创建模式
$ create schema schema_name [authorization user_name] $ create schema authorization user_name -- 创建于用户名相同的模式名 $ \h create schema -- 查看create schema的详细用法
模式搜索路径
当存在模式之后,也就是在所有的数据库对象中都有了命令空间,这样我们在访问一个数据库对象例如要访问一张表时,就需要显示的指定数据库的模式(也就是命名空间),这样显得十分的繁琐,怎样才能使得我们只去写要访问的对象而不需要使用schame_name.object_name这样的写法呢?Postgresql给我们提供了模式搜索路径,下面对该变量进行操作。
$ show search_path ; -- 显示所有在搜索路径中的模式名
$ set search_path to 模式名1,模式名2,... -- 在模式名处依次写上在数据库中存在模式,并且在搜索模式名时是按照顺序进行搜索的,也就是说你要搜索的数据库对象如果在模式名1中就不会搜索之后的模式,直接返回结果,一定要注意模式的先后顺序
对psql中命令的影响
如果在不同的模式中有相同的数据库对象,比如在模式postgres和模式public中都有表jpzhu,那么使用\d命令只能列出搜索路径中第一个指定模式名中的表jpzhu,也就是说假设show search_path之后显示’postgres,public’,那么\d命令只会显示postgres中的表jpzhu。对其他的命令也是如此,在使用的时候要注意这个问题。
模式的权限
用户、角色、权限三者在Postgresql中具有特殊的意义,三者在Postgresql中三者等价,只是在角色和用户上稍微有一点的不同,创建用户直接具有login权限,但是创建角色天生不具有login权限,必须手动的赋予这些权限。
create user '用户名' with option -- option都是在初始化用户时的赋予用户的权限 create role '角色名' with option -- option都是在初始化用户时的赋予用户的权限 alter role '角色名' with option -- 主要目的是为了追加角色或者用户权限 \h grant -- 查看grant命令的使用方法 \h revoke -- 查看revoke命令的使用方法 grant [select update delete insert connect create table ...] on table_name to '角色' revoke [select update delete insert connect create table ...] on table_name from '角色'