Movendo dados do postgresql para uma unidade diferente

20

Estou usando a AWS como meu ambiente de nuvem. Instalei o PostgreSQL na mesma unidade que o volume da minha instância raiz. Anexei e montei a segunda unidade na minha instância. Agora eu quero mover todos os meus dados do PostgreSQL para a unidade diferente. Ainda estou no modo de desenvolvimento para poder excluir os dados antigos, se isso facilitar a transferência neste momento. Qual é a melhor maneira de fazer isso?

O espaço de tabela do PostgreSQL é algo que eu deveria examinar?

codecool
fonte
1
Os espaços de tabela seriam o caminho a seguir se você desejasse mover parte do (s) banco (s) de dados para uma unidade separada.
precisa
Esta resposta sugere que NÃOtablespaces deve entrar em um disco rígido externo: dba.stackexchange.com/a/62037/41823 Não tenho certeza se entendi o risco se você já estiver colocando os dados em um disco externo?
Statwonk

Respostas:

19

O seguinte deve fazer isso:

  1. Encerre o PostgreSQL
  2. Verifique se o PostgreSQL não roda mais
  3. Verifique se o PostgreSQL está realmente parado
  4. Copiar o diretório de dados antigo para a nova unidade.
    Isso geralmente é definido por meio de um parâmetro de linha de comando ( -D) para o seu serviço ou por PGDATAmeio da variável de ambiente.
  5. Atualize sua configuração do PostgreSQL (service, environment var) para apontar para o novo diretório de dados.
  6. Se você copiou os dados, renomeie o diretório de dados antigo para garantir que o PostgreSQL não possa mais encontrá-lo. Dessa forma, você receberá uma mensagem de erro se não acertar a configuração.
  7. Iniciar o serviço
  8. Se tudo estiver funcionando bem, você pode excluir o diretório antigo.
um cavalo sem nome
fonte
No quarto ponto, o que você quer dizer com 'Isso geralmente é definido através de um parâmetro de linha de comando ...'?
Codecool
@ codecool: existem várias maneiras diferentes de como isso pode ser definido. Geralmente faz parte da definição de serviço. Mas isso depende do seu sistema operacional, distribuição e alterações pessoais.
a_horse_with_no_name
Isso funcionou, mas eu usei o regedit em vez da linha de comando para o Windows. Ufa. Meu disco estava prestes a ficar sem espaço, mas agora eu o tenho operando com segurança em outro lugar, com espaço suficiente.
trincheira
Aqui é bom passo-a-passo blog com detalhes específicos, up-to-date para ubuntu típico e versão 9.5 DB: digitalocean.com/community/tutorials/...
JaakL
4
  1. Parar o serviço postgresql
  2. cp -um diretório_da_data de origem diretório_de_dados de destino
  3. chown -R postgres_user / destination_data_directory
  4. exportar PGDATA = destination_data_directory
  5. Alterando o diretório de dados para destination_data_directory no postgresql.conf
  6. pg_ctl start
adi
fonte
Que bom que você se lembrou do chowncomando da nova pasta.
RolandoMySQLDBA
0

Aqui está uma descrição de como mover um banco de dados PostgreSQL existente para um novo local (pasta, partição), no Arch Linux (este procedimento deve ser semelhante a outras distribuições Linux).

pg_dumpallé um utilitário para gravar (despejar) todos os bancos de dados PostgreSQL de um cluster em um arquivo de script. ... Isso é feito chamando pg_dumpcada banco de dados no cluster. ...

Por exemplo:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Você precisa:

  • pg_dumpallbanco de dados export ( )
  • crie um novo diretório VAZIO
  • editar arquivo postgresql.conf
  • reinicie o serviço do servidor postgres
  • carregar dados antigos do arquivo de despejo no novo banco de dados

Resumo dos comandos

Estou deixando minhas solicitações de shell (nome do host ...) para esclarecer em que shell estou enquanto prossigo.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Exemplo

Veja minha postagem no blog, Como mover um banco de dados PostgreSQL existente no Arch Linux , para obter código e saída comentados .---


Referências

Victoria Stuart
fonte