存储空间和权限管理
存储空间 -> 表空间
1、表空间定义
- 表空间其实(基于文件系统的表目录)
表空间、数据库、数据库对象三者之间的关系是多对多
一个表空间可以包含多个数据库,一个对象可以在多个表空间上。
-
作用
- 空间管理
-
性能提升
根据数据库对象和使用场景划分不同的表空间使用,可以有效的优化性能
-
默认表空间(initdb时会自动创建两个表空间,pg_global和pg_default)
pg_default 存储系统目录对象,是template1和template0的缺省表空间,同理是其他数据库的缺省表空间。目录$PGDATA/base
pg_global 存放系统字典表。存储木库$PGDATA/global
-
创建表空间
create tablespace tablespace_name
- tablespace_name表空间名、不能和其它表空间重名,普通表空间不以pg为开头。
- OWNER,只有系统管理员动以创建表空间,可以通过OWNER子句把表空间所有权限赋予其他非管理员用户。
- LOCATION,指定表空间路径。系统管理员需有读写权限,且目录为空。
- RELATIVE。使用相对路径
- MAXSIZE.指定表空间最大值,支持的单位;K/M/G/T/P
- with option clause,可选参数:WITH ({filesystem= {'general'’ | “general" | general | random page_cost = (‘value ’| value } / seq_page_cost = {'value ’ | value )][….]),分别用于指定文件系统、指定随机读取 page的开销(0~1.79769e+308),顺序读取 page的开销(0~1.79769e+308)
2、表空间管理
-
权限
Vastbase表空间的创建必须由数据库超级用户完成,创建完之后之后普通数据库用户如需使用表空间,需授权。给数据库普通用户授予表空间上的CREATE权限。表、索引和整个数据库都可以被分配到特定的表空间。
-
常用命令
1、指定数据库默认表空间:
alter database database_name set tablespace tablespace_name;
这个过程将会迁移数据库的所有对象到新表空间:
表空间中不允许存在要更改的数据库对象,否则将报错:ERROR: some relations of database " newdb" are already in tablespace " tbs_space2"
要修改默认表空间的数据库不能有连接,否则将报错:ERROR: cannot change the tablespace of the currently open database
2、将表迁移表空间:
alter table table_name set tablespace new_tablespace;
**该操作会对表加锁,不要在业务时段操作。**
3、指定表空间创建对象:
要指定表空间创建对象(表或索引),可以在创建语句中直接使用tablespace关键字。或者使用default_tablespace参数。示例:
直接指定表空间:
create table tab_tbs_space3 (id number(8),name varchar2(20)) tablespace tbs_space3;
default_tablespace参数:
vastbase=# set default_tablespace=tbs_space4;
vastbase=# create table tab_tbs_space4(id number(8),name varchar2(20)) tablespace tbs_space4;
4、删除表空间:
如果表空间不需要了,在表空间没有对象的前提下可以将期删除:
vastbase=# drop tablespace tbs_space6;
DROP TABLESPACE
表空间信息查询
- \db和\db+
- oid2name 是一个帮助系统管理员检查被Vastbase使用的文件结构的工具程序