数据库初始化后默认创建pg_default和pg_global表空间;
如果在创建表时没有指定表空间,默认存放在pg_default表空间;
在数据库集群层管理的表存放在pg_global表空间;
pg_default物理位置$PGDATA\base;
pg_global物理位置$PGDATA\global;
一个表空间可以被多个数据库使用,这时会在表空间文件夹下创建该数据库对应的子文件夹;
创建用户表空间会在$PGDATA\pg_tblspc文件夹下创建指向该用户表空间的链接。
创建/查询表空间
postgres=# -- postgres=# create tablespace mytbs01 location '/acdata/pgsql/11/tbs/mytbs01'; CREATE TABLESPACE postgres=# postgres=# select oid , * from pg_tablespace ; oid | spcname | spcowner | spcacl | spcoptions -------+------------+----------+--------+------------ 1663 | pg_default | 10 | | 1664 | pg_global | 10 | | 16391 | mytbs01 | 10 | |
$ ls -l /acdata/pgsql/11/data/pg_tblspc total 0 lrwxrwxrwx. 1 pgsql dba 28 May 17 16:36 16391 -> /acdata/pgsql/11/tbs/mytbs01
更改表所属的表空间
postgres=# alter table t1 set tablespace mytbs01 ; ALTER TABLE postgres=# postgres=# select relname,reltablespace from pg_class where relname = 't1';
更改表空间位置
$ /usr/pgsql-11/bin/pg_ctl -D /acdata/pgsql/11/data/ stop $ ls -l lrwxrwxrwx. 1 pgsql dba 28 May 17 16:36 16391 -> /acdata/pgsql/11/tbs/mytbs01 $ mv /acdata/pgsql/11/tbs/mytbs01 /acdata/pgsql/11/tbs/myts01 $ unlink 16391 $ ln -s /acdata/pgsql/11/tbs/myts01 16391 $ ls -l lrwxrwxrwx. 1 pgsql dba 27 May 17 17:19 16391 -> /acdata/pgsql/11/tbs/myts01 $ /usr/pgsql-11/bin/pg_ctl -D /acdata/pgsql/11/data/ -l /acdata/pgsql/11/logs/alert_pg.log start
临时表空间
--默认安装后,临时文件存放于$PGDATA/base/pgsql_temp --可以新建临时表空间 postgres=# create tablespace for_temp_files location '/tmp'; CREATE TABLESPACE postgres=# postgres=# alter system set temp_tablespace to '/tmp'; ALTER SYSTEM postgres=# postgres=# select pg_reload_conf(); postgres=# postgres=# show temp_tablespaces;