表空间就是文件系统位置的一个目录,可以保存所有其他对象的容器,如表、索引等,有默认表空间、共享系统表表空间、自定义表空间
其主要用途分两个:
- 单独扩展表空间用,一旦磁盘或分区被耗尽,可以创建一个表空间到其他磁盘或分区上面。
- 区分不同对象的存储位置,比如可将索引放入较快磁盘的表空间上,而将固定不变的数据放入较慢磁盘的表空间上。
系统自带表空间:
- 表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/
- 表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/
基本命令:
CREATE TABLESPACE tablespace_name LOCATION 'location'
location必须是一个已有的空目录,并且属于postgreSQL操作系统用户
操作步骤:
- 创建目录: mkdir /home/highgo/pgdata
- 赋权限:chown highgo:highgo /home/pgdata
- 创建表空间:create tablespace tbs_data location '/home/highgo/pgdata'
- 创建表和索引时就可以指定表空间,这样,表、索引就可以存储到表空间对应的目录下了。
创建数据库时指定默认的表空间:create database db01 tablespace tbs_data;
改变一个数据库的默认表空间时的语法:alter database db01 set tablespace tbs_data;
注意:在做该操作时,必须没有人同时连接到这个数据库上,否则会报错。
另外,改变数据库的默认表空间时,数据库中已有表的表空间并不会改变。
创建表的时候也可以指定表空间:create table test01(id int, note text) tablespace tbs_data;
创建索引的时候同样可以指定表空间:create index idx_test01_id on test01(id) tablespace tbs_dasta;
建唯一约束时也可以指定约束索引的表空间:alter table test01 add constraint unique_test01_id unique(id) using index tablespace tbs_data;
增加主键时也可指定主键索引的表空间:alter table test01 add constraint pk_test01_id primary key(id) using index tablespace tbs_data;
把表从一个表空间移动到另一个表空间的命令:alter table test01 set tablespace pg_default;
注意:在移动表的时候会锁表,此时对该表的所有操作都将被阻塞,包括select操作,所以请考虑在合适的实际做这个操作。
其他相关命令:
\db 查看表空间的所有信息
查看所有表空间的集合:select * from pg_tablespace;
查看指定表空间下所有的表信息:select * from pg_tables where tablespace='tbs_data';
查看指定表空间下所有索引信息:select * from pg_indexes where tablespace='tbs_data';