
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í:
- 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)
- Descubra o nome de usuário do superusuário PostgreSQL da instalação antiga - provavelmente postgres.
- Crie este nome de usuário (usuário UNIX) no novo host, a menos que já esteja lá.
- Forneça (chown) o diretório de dados antigo para esse usuário, a menos que o uid corresponda ao do servidor antigo.
- 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).
- 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
- 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
- adapte o dump_file.sql aos nomes de usuário do novo servidor, etc; crie o banco de dados vazio com a propriedade apropriada
- 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á.