如何移动 PostgreSQL 表空间?

kon*_*ify 13 postgresql postgresql-9.3

有没有办法将 PostgreSQL 9.3 表空间从 物理移动/old/dir/new/dir?我只想找到mv目录并告诉 PostgreSQL 表空间现在位于/new/dir. 看起来ALTER TABLESPACE只能让你重命名。

我想避免创建一个新的表空间并将数据库移动到它。我认为这将是一个需要大量时间和磁盘空间的缓慢复制过程。我也想避免符号链接/old/dir/new/dir.

shx*_*shx 15

我假设您的表空间名称是tblspc.

  1. 获取表空间的 Oid
test=# SELECT oid,spcname FROM pg_tablespace WHERE spcname = 'tblspc';
  类 | 名称
-------+---------
 24580 | 表
(1 行)
  1. 停止 postgres
$ pg_ctl -D $PGDATA 停止
  1. 将旧目录移动到新目录
$ mv /旧/目录/新/目录

或者

$ cp -r /old/dir /new/dir
$ rm -rf /旧/目录
  1. 将表空间的链接更改为新目录
$ cd $PGDATA/pg_tblspc
$ rm 24580
$ ln -s /new/dir 24580
  1. 启动 postgres
$ pg_ctl -D $PGDATA 开始

然后,您可以看到表空间的目录已更改。

测试=# SELECT pg_tablespace_location(24580);
 pg_tablespace_location
------------------------
 /新/目录
(1 行)