Neste tutorial, você irá aprender como fazer backup e restore dos bancos de dados PostgreSQL usando a ferramenta pg_dump, pg_dumpall, psql e pg_restore.
Fazer backup de bancos de dados é uma das tarefas mais críticas na administração de banco de dados. Antes de fazer backup dos bancos de dados, você deve considerar os seguintes tipos de backup:
- Bancos de dados completos ou parciais
- Dados e estruturas, ou apenas estruturas
- Recuperação pontual
- Restaurar desempenho
O PostgreSQL vem com pg_dump e pg_dumpall que são ferramentas que ajudam a fazer backup fácil e eficaz.
Para quem deseja ver o comando para fazer backup de bancos de dados rapidamente, aqui está:
pg_dump -U username -W -F t database_name > /backup_file.tar
Na seção a seguir, você aprenderá passo a passo como fazer backup de todos os bancos de dados e apenas de objetos de banco de dados.
Como fazer backup de um banco de dados
Para fazer backup de um banco de dados, você pode usar a ferramenta pg_dump. O pg_dump despeja o conteúdo de todos os objetos de banco de dados em um único arquivo.
pg_dump -U postgres -W -F t bancoempresa > /pgbackup.tar
-U postgres: especifica o usuário para se conectar ao servidor de banco de dados PostgreSQL. Usamos o postgres neste exemplo.
-W: força pg_dump a solicitar a senha antes de conectar ao servidor de banco de dados PostgreSQL. Depois de clicar em Enter, pg_dump será solicitada a senha do usuário postgres.
-F : especifica o formato do arquivo de saída que pode ser um dos seguintes:
c: formato de arquivo de formato personalizado
d: arquivo em formato de diretório
t: tar
p: arquivo de script SQL de texto simples
Neste exemplo, usamos -F t para especificar o arquivo de saída como um arquivo tar.
bancoempresa: é o nome do banco de dados do qual deseja fazer backup.
Como fazer backup de todos os bancos de dados
Para fazer backup de todos os bancos de dados, você pode executar o comando pg_dump individual acima sequencialmente ou em paralelo, se desejar acelerar o processo de backup.
Primeiro, no psql, use o comando \list ou \l para listar todos os bancos de dados disponíveis em seu cluster
Em segundo lugar, faça backup de cada banco de dados individual usando o pg_dump conforme descrito na seção acima.
Além do pg_dump o PostgreSQL também oferece a pg_dumpall que permite fazer backup de todos os bancos de dados de uma vez. No entanto, não é recomendável usar essa ferramenta pelos seguintes motivos:
O pg_dumpall exporta todos os bancos de dados, um após o outro, em um único arquivo de script, o que impede que você execute a restauração paralela. Se você fizer backup de todos os bancos de dados dessa maneira, o processo de restauração levará mais tempo.
O processamento de restore de todos os bancos de dados leva mais tempo do que cada um, portanto, você não sabe qual seria o restore de cada banco de dados está relacionado a um determinado momento.
Se você tiver um bom motivo para usar o pg_dumpall para fazer backup de todos os bancos de dados, o seguinte é o comando:
pg_dumpall -U postgres > /pgbackup/all.sql
As opções do pg_dumpall são semelhantes às opções do pg_dump. Este comando omite opção -W de evitar a digitação da senha para cada banco de dados individual.
Como fazer backup de definições de objeto de banco de dados
Às vezes, você deseja fazer backup apenas das definições de objeto de banco de dados, não dos dados. Isso é útil na fase de teste, em que você não deseja mover os dados de teste para o sistema ativo.
Para fazer backup de objetos em todos os bancos de dados, incluindo funções, objetos, bancos de dados, esquemas, tabelas, índices, gatilhos, funções, restrições, visualizações, propriedades e privilégios, você usa o seguinte comando:
pg_dumpall --schema-only > /pgdump/definitiononly.sql
Se você deseja fazer backup apenas da roles, use o seguinte comando:
pg_dumpall --roles-only > /pgdump/allroles.sql
Se você deseja fazer backup da definição de tablespaces , use o seguinte comando:
pg_dumpall --tablespaces-only > /pgdump/allroles.sql
Agora você aprenderá como restaurar um banco de dados usando as ferramentas de restauração do PostgreSQL , incluindo pg_restore e psql.
Antes de restaurar um banco de dados, você precisa encerrar todas as conexões com esse banco de dados e preparar o arquivo de backup. No PostgreSQL, você pode restaurar um banco de dados de duas maneiras:
Usando psql para restaurar o arquivo de script SQL simples gerado por ferramentas pg_dump e pg_dumpall.
Utilizando o pg_restore para restaurar o arquivo tar e o formato do diretório criado pelo pg_dump.
Como restaurar bancos de dados usando psql
O psql permite que você restaure o arquivo de script SQL gerado pelo pg_dump, pg_dumpall ou quaisquer outras ferramentas que sejam compatível arquivos de backup. Ao usar o psql, você pode executar todo o script no arquivo de restore.
Para restaurar um backup completo e ignorar qualquer erro ocorrido durante o processo de restauração, você usa o seguinte comando:
psql -U username -f backupfile.sql
Se quiser parar de restaurar um banco de dados em caso de erros, adicione –set ON_ERROR_STOP=on option:
psql -U username --set ON_ERROR_STOP=on -f backupfile
Como restaurar bancos de dados usando o pg_restore
Além do psql, você pode usar o pg_restore para restaurar bancos de dados gerados pelas ferramentas pg_dump ou pg_dumpall. Com o pg_restore, você tem várias opções para restaurar bancos de dados, por exemplo:
- O
pg_restore
permite que você execute restaurações paralelas usando a opção-j
para especificar o número de threads para restauração. Cada thread restaura uma tabela separada simultaneamente, o que acelera drasticamente o processo. Atualmente opg_restore
é compatível com o único formato de arquivo personalizado. - O
pg_restore
também permite restaurar objetos de banco de dados específicos em um arquivo de backup que contém o banco de dados completo. - O
pg_restore
pode pegar um backup do banco de dados na versão mais antiga e restaurá-lo na versão mais recente.
Vamos fazer uma simulação
CREATE DATABASE bancoempresa;
Você pode restaurar o banco teste de dados no formato tar gerado pelo pg_dump no tutorial do banco de dados de backup PostgreSQL usando o seguinte comando:
pg_restore --dbname=teste --verbose /pgbackup/dvdrental.tar
Se você restaurar o banco de dados, que é o mesmo que fez o backup, poderá usar o seguinte comando:
pg_restore --dbname=bancoempresa --create --verbose /pgbackup/bancoempresa.tar
O PostgreSQL, você pode usar a opção –section para restaurar apenas a estrutura da tabela. Isso permite que você use o novo banco de dados como modelo para criar outros bancos de dados.
Primeiro, crie um novo banco de dados denominado bancoempresa.
pg_restore --dbname=bancoempresa --create --verbose /pgbackup/bancoempresa.tar
Em segundo lugar, restaure a estrutura da tabela apenas a partir do arquivo bancoempresa.tar de backup usando o seguinte comando:
pg_restore --dbname=bancoempresa --section=pre-data /pgbackup/bancoempresa.tar