PgSQL 表空间
有时我们需要把不同的表放到不同的存储介质或文件系统下,这时就需要用到表空间,在PostgreSQL中,表空间实际上是为表指定一个存储目录。在创建数据库时可以为其指定默认的表空间。创建表、创建索引的时候可以指定表空间,这样表、索引就可以存储到表空间对应的目录下了。
创建表空间的语法如下:
1 | CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' |
创建数据库时可以指定默认的表空间,这样以后在此数据库中创建表、索引时就可以自动存储到表空间指定的目录下:
1 | create database db01 tablespace tbs_data; |
改变数据库的默认表空间的语法如下:
1 | ALTER DATABASE db01 set TABLESPACE tbs_data; |
注意,在执行该操作时,不能有用户连接到这个数据库上,否则会报错误。
另外,改变数据库的默认表空间时,数据库中已有表的表空间不会改变。
创建表时也可以指定表空间,命令如下:
1 | create table test01(id int, note text) tablespace tbs_data; |
创建索引时同样可以指定表空间,命令如下:
1 | create index idx_test01_id on test01(id) tablespace tbs_data; |
创建唯一约束时可指定约束索引的表空间,命令如下:
1 | ALTER TABLE test01 ADD CONSTRAINT unique_test01_id unique(id) USING INDEX TABLESPACE tbs_data; |
增加主键时也可以指定主键索引的表空间,命令如下:
1 | ALTER TABLE test01 ADD CONSTRAINT pk_test01_id primary key(id) USING INDEX TABLESPACE tbs_data; |
把表从一个表空间移到另一个表空间的命令如下:
1 | alter table test01 set tablespace pg_default; |
注意,在移动表的时候表会被锁定,对此表的所有操作都将无法执行,包括SELECT操作,所以请考虑在合适的时机做这个操作。