Recuperar banco de dados PostgreSQL do backup do sistema de arquivos

3

Eu tenho um backup do diretório de dados do PostgreSQL 8.3. Eu preciso copiar um banco de dados desse 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 o 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 eu digo ao sistema que o banco de dados está lá?

    
por Sean Preston 04.06.2009 / 21:19

1 resposta

15

Por favor, esteja ciente que no PostgreSQL, seu diretório de dados de cluster é uma unidade independente que não pode ser restaurada de forma confiável em partes, conforme a documentação aqui .

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

  1. Pegue um postgresql.conf que se encaixa na configuração do novo host (orienta-se pelos arquivos no antigo - que você altera aqui - e novos diretórios de dados)
  2. Descubra o nome de usuário do superusuário do PostgreSQL da instalação antiga - provavelmente o postgres.
  3. Crie este nome de usuário (usuário UNIX) no novo host, a menos que já esteja lá.
  4. Conceda (chown) o diretório de dados antigo a esse usuário, a menos que o uid corresponda ao do servidor antigo.
  5. Configure o 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, isso é o padrão, mas verifique).
  6. Execute o antigo cluster de banco de dados como o usuário do UNIX com o mesmo nome do superusuário do diretório de dados antigo, por exemplo, para postgres de usuários:
    sudo -u postgres postgres -D old_data_directory
    
    

    or with su:

    su postgres postgres -D old_data_directory
  7. despejar o banco de dados antigo, novamente com o nome de usuário normal, 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; criar o banco de dados vazio com apropriação adequada lá
  9. varrer 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 definir o caminho ou, pelo menos, mostrar um bom caminho para chegar lá.

    
por 04.06.2009 / 23:08