什么是模式
模式是数据库中的一个概念,可以理解为一个命名空间或目录,不同的模式下可以有相同的表、函数等对象而不产生冲突。模式的提出是为了便于管理,只要有权限,各个模式中的对象可以互相调用。在PostgreSQL中,一个数据库可以包含一个或多个模式。
- PostgreSQL:不能同时访问不同数据库中的对象,当要访问另一个数据库中的表或其他对象时,需要重新连接到这个数据库
- MySQL:可以同时访问多个数据库中的对象,与PostgreSQL中可以同时访问多个Schema中的对象是一样的
- Oracle:一个用户对应一个Schema
模式的使用
- 创建模式
testdb=> create schema gavin; CREATE SCHEMA
- 查看模式
testdb=> \dn List of schemas Name | Owner -------+------- gavin | gavin (1 row)
- 删除模式
testdb=> drop schema gavin; DROP SCHEMA
- 修改模式
testdb=> alter schema gavin rename to whh; -- 修改模式名 ALTER SCHEMA testdb=> alter schema whh owner to whh; -- 修改模式属主 ALTER SCHEMA
公共模式
通常情况下,创建和访问表都不用指定模式,实际上这时候访问的都是public模式。每当我们创建一个数据库时,PostrgreSQL会自动为我们创建一个名为public的模式。当登录数据库时,如果没有特意指定,都是以public模式操作各种数据库对象。建议不要使用甚至是删除public模式。
模式的搜索路径
- 在搜索路径中第一个被找到的表被当做选定的表,如果搜索路径中没有匹配的表就会报错,即使匹配表的名称在数据库其他的模式中也会如此。
- 搜索路径的第一个模式叫当前模式。除了是搜索的第一个模式之外,它还是在CREATE TABLE没有声明模式名时新建表所属的模式。
- 显示当前搜索模式
testdb=> show search_path ; search_path ----------------- "$user", public (1 row)
- 修改搜索模式
testdb=> set search_path="$user", public, whh; SET
模式的权限
- 需要赋予USAGE权限,用户才能访问模式中的对象。如果要使用模式中的对象,可能还需要赋予适合该对象的额外权限
- 模式情况下每个人在public模式下都有CREATE和USAGE权限,可以用以下语句插销这个权限
testdb=> revoke create on schema public from PUBLIC; REVOKE
模式的可移植性
- 为每个用户创建一个与用户名相同的模式,那么就能与Oracle兼容
- 如果MySQL中有3个数据库,在移植到PostgreSQL中时,应创建3个模式与MySQL中的3个数据库对应,而不是在PostgreSQL中创建3个数据库与之对应
总结
- 删除public模式
- 为每个用户创建一个与用户名相同的模式
标签:数据库,gavin,testdb,模式,public,schema From: https://www.cnblogs.com/gavin-zheng/p/18344183