在pg数据库实际使用过程中,随着业务数据的不断累积,会导致磁盘的可用空间越来越小,尤其是在linux下,没办法将原来的磁盘进行扩容,只能够通过加载新的磁盘来进行扩容。如果原来的pg数据库是一个簇,那么可以很好处理,一种是将数据库簇一部分挪走,另一种就是本文讲到的表空间迁移的方式。
pg数据库一般默认安装完后有两个表空间,pg_default和pg_golebal。这两个表空间的物理位置都默认在data目录下。如果不进行其他配置的话,那么所有的数据都会存在pg_default中。pg数据库是可以让用户自己创建表空间的,同时指定物理位置。这样的好处就是可以让频繁使用的数据库使用性能好的ssd挂载盘,其他可以放在hdd中,充分考虑到业务的需求。当然也可以进行数据迁移,也就是下面介绍的。
工作在linux系统中的主从pg数据库在不断存储数据过程中,挂载在/data1下的数据库pgdata占用空间越来越大,磁盘监控发出报警,为了保证业务的不中断,现在需要将数据进行迁移。
解决:
mkfs.ext4 /dev/sdc
mount /data2 /dev/sdc
mkdir /data2/pg_tbs1
chown -R postgres.postgres /data2/pg_tbs1
chmod 700 /data2/pg_tbs1
postgres=# create tablespace tbs_data location '/data2/pg_tbs1';
CREATE TABLESPACE
postgres=# \db+
List of tablespaces
Name | Owner | Location | Access privileges | Options | Size | Description
------------+----------+----------------+-------------------+---------+---------+-------------
pg_default | postgres | | | | 15 GB |
pg_global | postgres | | | | 521 kB |
tbs_data | postgres | /data2/pg_tbs1 | | | 0 bytes |
(3 rows)
迁移数据库TEST的表空间
alter database TEST set tablespace tbs_data;
postgres=# \db+
List of tablespaces
Name | Owner | Location | Access privileges | Options | Size | Description
------------+----------+----------------+-------------------+---------+---------+-------------
pg_default | postgres | | | | 3043 MB |
pg_global | postgres | | | | 521 kB |
tbs_data | postgres | /data2/pg_tbs1 | | | 12 GB |
(3 rows)
总体来说,这种方法还是非常简便的,比直接分离出数据库的方法要容易实现。
原文:https://www.cnblogs.com/easonbook/p/11660987.html