Como mover um espaço de tabela do PostgreSQL?

12

Existe uma maneira de mover fisicamente um espaço de tabela do PostgreSQL 9.3 de /old/dirpara /new/dir? Gostaria apenas mvdo diretório e dizer ao PostgreSQL que o espaço de tabela agora está localizado /new/dir. Parece que ALTER TABLESPACEapenas permite renomear.

Eu gostaria de evitar criar um novo espaço de tabela e mover o banco de dados para ele. Suponho que seria um processo lento de cópia que requer muito tempo e espaço em disco. Eu também quero evitar o link simbólico /old/dirpara /new/dir.

kontextify
fonte
mova / old / dir para veryold / dir, monte new / dir para old / dir, copie dados de ver_old dir para old / dir?
simplexio 16/02

Respostas:

12

Presumo que o nome do seu espaço de tabela seja tblspc.

  1. Obtenha Oid do seu espaço de tabela
teste = # SELECT oid, spcname FROM pg_tablespace WHERE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 tblspc
(1 linha)
  1. Parar postgres
Parada $ pg_ctl -D $ PGDATA
  1. Mover diretório do antigo para o novo
$ mv / old / dir / new / dir

ou

$ cp -r / old / dir / new / dir
$ rm -rf / antigo / dir
  1. Alterar o link do espaço de tabela para o novo diretório
$ cd $ PGDATA / pg_tblspc
$ rm 24580
$ ln -s / novo / dir 24580
  1. Iniciar o postgres
$ pg_ctl -D $ PGDATA start

Então, você pode ver que o diretório do espaço de tabela foi alterado.

teste = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / novo / dir
(1 linha)
shx
fonte