表空间是物理上存储数据的地方,在操作系统表现上就是一个目录。可以有多个表空间。一个数据库的对象可以存放于多个表空间,一个表空间也可以存放多个数据库的对象。
1.系统默认的表空间
每个数据库都有一个表空间,如果未明确指定,默认为pg_default,对应于操作系统上的PGDATA/base目录。pg_global表空间用于存放系统目录中全局对象,全局对象不属于任何一个数据库,属于整个集群,例如pg_database,对应操作系统上的global目录。
查询系统中的表空间
mydb=# \db+
mydb=# select oid,spcname from pg_tablespace;
2.用户自定义表空间
用户自定义的表空间可以位于任何目录,postgresql会在PGDATA/pg_tblspc创建一个软链接指向表空间目录。
创建一个表空间
mydb=# create tablespace myqtbs owner myq location '/var/postgres/myqtbs';
表空间的所在的目录必须提前创建好,否则会报路径不存在错误,且目录属主必须为运行pg的用户。
创建目录后再次创建表空间
pg所有的数据文件的入口为PGDATA目录,因此自定义的表空间会自动在PGDATA/pg_tblspc创建一个软链接指向表空间目录。
24587为表空间的OID,及对象标识符。操作系统上并非是以对象名创建目录,而是以对象的OID为目录名。
也可以通过内置函数查询表空间在操作系统上的路径