Как мне переместить табличное пространство PostgreSQL?

12

Есть ли способ физически переместить табличное пространство PostgreSQL 9.3 из /old/dirв /new/dir? Я хотел бы просто mvкаталог и сказать PostgreSQL, что табличное пространство теперь находится в /new/dir. Похоже, ALTER TABLESPACEтолько позволяет переименовать.

Я бы хотел избежать создания нового табличного пространства и перемещения в него базы данных. Я предполагаю, что это будет медленный процесс копирования, который требует много времени и места на диске. Я также хочу избежать символической ссылки /old/dirна /new/dir.

kontextify
источник
переместить / old / dir в veryold / dir, смонтировать новый / dir в old / dir, скопировать данные из ver_old dir в old / dir?
симплексио

Ответы:

12

Я предполагаю, что ваше имя табличного пространства tblspc.

  1. Получить Oid вашего табличного пространства
test = # SELECT oid, spcname FROM pg_tablespace WHERE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 ряд)
  1. Стоп постгрес
$ pg_ctl -D $ PGDATA stop
  1. Переместить каталог из старого в новый
$ mv / old / dir / new / dir

или же

$ cp -r / old / dir / new / dir
$ rm -rf / old / dir
  1. Изменить ссылку табличного пространства на новый каталог
$ cd $ PGDATA / pg_tblspc
24580 долларов США
$ ln -s / new / dir 24580
  1. Начать postgres
$ pg_ctl -D $ PGDATA start

Затем вы можете увидеть, что каталог табличного пространства изменился.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / Новый / реж
(1 ряд)
SHX
источник