如何移动PostgreSQL表空间?


12

有没有一种方法,以物理移动的PostgreSQL 9.3表/old/dir/new/dir?我只想mv目录,然后告诉PostgreSQL表空间现在位于/new/dir。看起来ALTER TABLESPACE只能让您重命名。

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


将/ old / dir移到veryold / dir,将new / dir挂载到old / dir,将数据从ver_old dir复制到old / dir?
simplexio

Answers:


12

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

  1. 获取您的表空间
test =#SELECT oid,spcname FROM pg_tablespace WHERE spcname ='tblspc';
  oid | 名称
------- + ---------
 24580 | tblspc
(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 /新/目录24580
  1. 开始postgres
$ pg_ctl -D $ PGDATA开始

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

test =#选择pg_tablespace_location(24580);
 pg_tablespace_location
------------------------
 /新/目录
(1列)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.