8.3.4. Cópia de segurança dos dados PostgreSQL
Para fazer o backup dos dados PostgreSQL, use uma das seguintes abordagens:
- Lixeira SQL
- Backup em nível de sistema de arquivos
- Arquivamento contínuo
8.3.4.1. Backing up de dados PostgreSQL com um dump SQL
8.3.4.1.1. Execução de um despejo SQL
O método SQL dump é baseado na geração de um arquivo com comandos SQL. Quando este arquivo é carregado de volta ao servidor de banco de dados, ele recria o banco de dados no mesmo estado em que se encontrava no momento da descarga. O despejo SQL é garantido pelo método pg_dump que é uma aplicação do cliente PostgreSQL. O uso básico do comando pg_dump
é tal que o comando escreve seu resultado na saída padrão:
pg_dump dbname > dumpfile
O arquivo SQL resultante pode ser em formato de texto ou em outros formatos diferentes, o que permite o paralelismo e um controle mais detalhado da restauração de objetos.
Você pode realizar o dump SQL a partir de qualquer host remoto que tenha acesso ao banco de dados. O pg_dump não opera com permissões especiais, mas deve ter acesso lido a todas as tabelas que você deseja fazer backup. Para fazer o backup de todo o banco de dados, você deve executá-lo como um superusuário do banco de dados.
Para especificar qual servidor de banco de dados pg_dump entrará em contato, use as seguintes opções de linha de comando:
A opção
-h
para definir o anfitrião.O anfitrião padrão é o anfitrião local ou o que é especificado pela variável de ambiente
PGHOST
.A opção
-p
para definir o porto.A porta padrão é indicada pela variável de ambiente
PGPORT
ou pela variável compilada por padrão.
Note que pg_dump despeja apenas um único banco de dados. Ele não descarta informações sobre papéis ou espaços de tabela porque tais informações são de todo o cluster.
Para fazer backup de cada banco de dados em um determinado cluster e para preservar dados em todo o cluster, tais como definições de funções e espaço de tabela, use o comando pg_dumpall
:
pg_dumpall > arquivo dump
8.3.4.1.2. Restauração de banco de dados a partir de um dump SQL
Para restaurar um banco de dados a partir de uma lixeira SQL:
Criar um novo banco de dados (dbname):
criadob
dbname
Certifique-se de que todos os usuários que possuem objetos ou receberam permissões sobre objetos no banco de dados despejados já existam.
Se tais usuários não existirem, a restauração não consegue recriar os objetos com a propriedade e as permissões originais.
Execute o psql para restaurar um arquivo de texto criado pelo pg_dump utilidade:
psql dbname < dumpfile
onde dumpfile
é a saída do comando pg_dump
.
Se você quiser restaurar uma lixeira de arquivos sem texto, use o utilitário pg_restore
:
pg_restore non-plain-text-file
8.3.4.1.2.1. Restaurando um banco de dados em outro servidor
O despejo de um banco de dados diretamente de um servidor para outro é possível porque pg_dump e psql pode escrever e ler a partir de tubos.
Para descarregar um banco de dados de um servidor para outro, execute:
pg_dump -h host1 dbname | psql -h host2 dbname
8.3.4.1.2.2. Manuseio de erros SQL durante a restauração
Por padrão, psql continua a ser executado se ocorrer um erro SQL. Conseqüentemente, o banco de dados é restaurado apenas parcialmente.
Se você quiser mudar este comportamento padrão, use uma das seguintes abordagens:
Faça psql sair com um status de saída de 3 se ocorrer um erro SQL, definindo a variável
ON_ERROR_STOP
:psql --set ON_ERROR_STOP=onome dbname < dumpfile
Especificar que toda a lixeira é restaurada como uma única transação para que a restauração seja totalmente concluída ou cancelada usando
psql
com uma das seguintes opções:psql -1
ou
psql --transação única
Note que ao utilizar esta abordagem, mesmo um erro menor pode cancelar uma operação de restauração que já tenha funcionado por muitas horas.
8.3.4.1.3. Vantagens e desvantagens de uma lixeira SQL
Uma lixeira SQL tem as seguintes vantagens em comparação com outros métodos de backup PostgreSQL:
- Um dump SQL é o único método de backup PostgreSQL que não é específico para uma versão de servidor. A saída do pg_dump pode ser recarregado em versões posteriores de PostgreSQL, o que não é possível para backups em nível de sistema de arquivos ou arquivamento contínuo.
- Um dump SQL é o único método que funciona ao transferir um banco de dados para uma arquitetura de máquina diferente, como ir de um servidor de 32 bits para um de 64 bits.
- Um lixão SQL fornece lixões internamente consistentes. Um depósito de lixo representa um instantâneo do banco de dados no momento em que o pg_dump começou a funcionar.
- O pg_dump não bloqueia outras operações no banco de dados quando ele está em funcionamento.
Uma desvantagem de um despejo SQL é que leva mais tempo em comparação com o backup em nível de sistema de arquivos.
8.3.4.1.4. Recursos adicionais
Para mais informações sobre o dump SQL, consulte a Documentação do PostgreSQL.