初始化数据库集群时,将自动创建两个表空间。pg_global表空间用于共享系统目录。pg_default表空间是template1和template0数据库的默认表空间(因此,也将是其他数据库的默认表空间,除非被CREATE DATABASE中的TABLESPACE子句覆盖)
创建表空间
create tablespace space2 location '/tmp/space2';
创建对象
大多数“ CREATE” SQL命令都带有“ TABLESPACE”选项,您可以使用该选项指定在其中创建该SQL对象的表空间
create database foo tablespace space2
create table footab1 (a int);
create table footab2 (a int) tablespace space2;
create table footab3 (a int) tablespace pg_default;
这是发生了什么:
- 我们在表空间“ space2”中创建了一个名为“ foo”的数据库。数据库中所有对象的默认表空间也变为space2。
- 表“ footab1”和“ footab2”在space2中创建。您可以为表显式指定表空间,或使用数据库的默认表空间。
- 表“ footab3”是在pg_default表空间中创建的。可能在另一个表空间中只有一些对象。
移动物体
您还可以将现有对象从现有数据库移动到其他表空间中。这是我们将一个表移动到另一个表空间的方法
alter table footab2 set tablespace pg_default;
alter table all in tablespace space2 set tablespace pg_default;
查看数据库大小
SELECT pg_size_pretty(pg_database_size('20170916_ugc_ugc2'));
参考:
https://pgdash.io/blog/tablespaces-postgres.html