Recuperar banco de dados PostgreSQL do backup do sistema de arquivos

Recuperar banco de dados PostgreSQL do backup do sistema de arquivos

Eu tenho um backup de diretório de dados do PostgreSQL 8.3. Preciso copiar um banco de dados deste backup para uma nova instância do PostgreSQL. Devido a problemas com o servidor antigo não consigo fazer um pg_dump do banco de dados.

Eu descobri qual diretório é para o banco de dados em questão. No MySQL, por exemplo, tudo o que você normalmente faria é desligar o servidor, copiar o diretório e reiniciá-lo e o banco de dados estaria disponível. Agora, isso não funciona com PostgreSQL e suspeito que seja porque o banco de dados não está listado no arquivo global/pg_database. Este arquivo parece ser gerado automaticamente quando o PostgreSQL é iniciado, então como posso informar ao sistema que o banco de dados está lá?

Responder1

Esteja ciente de que no PostgreSQL, o diretório de dados do cluster é uma unidade independente que não pode ser restaurada em partes de maneira confiável, conforme a documentaçãoaqui.

Sua melhor esperança é usar o diretório de dados completo do servidor antigo e iniciar um servidor nele e, em seguida, restaurar a partir de um dump do banco de dados obtido a partir daí:

  1. Obtenha um postgresql.conf que se ajuste à configuração do novo host (oriente-se pelos arquivos no antigo - que você altera aqui - e nos novos diretórios de dados)
  2. Descubra o nome de usuário do superusuário PostgreSQL da instalação antiga - provavelmente postgres.
  3. Crie este nome de usuário (usuário UNIX) no novo host, a menos que já esteja lá.
  4. Forneça (chown) o diretório de dados antigo para esse usuário, a menos que o uid corresponda ao do servidor antigo.
  5. Configure pg_hba.conf no diretório de dados antigo para permitir conexões de usuários locais com o mesmo nome de usuário postgres (normalmente é o padrão, mas verifique).
  6. Execute o cluster de banco de dados antigo como o usuário UNIX com o mesmo nome do superusuário do diretório de dados antigo, por exemplo, para o usuário postgres:
    sudo -u postgres postgres -D old_data_directory
    # or with su:
    su postgres
    postgres -D old_data_directory
    
  7. despeje o banco de dados antigo, novamente com o nome de usuário usual, postgres:
    sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql
    # becoming postgres with su analogous to above
    
  8. adapte o dump_file.sql aos nomes de usuário do novo servidor, etc; crie o banco de dados vazio com a propriedade apropriada
  9. digitalize o banco de dados para o novo servidor:
    sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name
    # once again, getting postgres privileges using su analogous to above
    

Isso deve ajudar você a se preparar ou, pelo menos, mostrar um bom caminho para chegar lá.

informação relacionada