pg_restore

Nome

pg_restore --  restaura um banco de dados do PostgreSQL a partir de um arquivo criado pelo pg_dump

Sinopse

pg_restore [opção...] [nome_da_cópia_de_segurança]

Descrição

O pg_restore é um utilitário para restaurar um banco de dados do PostgreSQL, a partir de uma cópia de segurança criada pelo pg_dump em um dos formatos não-texto-puro. São executados os comandos necessários para reconstruir o banco de dados, no estado em que este se encontrava na hora em que foi salvo. Os arquivos de cópia de segurança também permitem ao pg_restore selecionar o que será restaurado, ou mesmo reordenar os itens antes de serem restaurados. Os arquivos de cópia de segurança são projetados para serem portáveis entre arquiteturas diferentes.

O pg_restore pode operar de dois modos: Se o nome do banco de dados for especificado, a cópia de segurança é restaurada diretamente no banco de dados (Os objetos grandes só podem ser restaurados utilizando uma conexão direta com o banco de dados como esta). Senão, é criado um script, no formato texto-puro, contendo os comandos SQL necessários para reconstruir o banco de dados (escrito em um arquivo ou na saída padrão), semelhante aos scripts criados pelo pg_dump. Algumas das opções que controlam a criação do script são, portanto, análogas às opções do pg_dump.

Obviamente, o pg_restore não pode restaurar informações que não estejam presentes no arquivo de cópia de segurança. Por exemplo, se a cópia de segurança for gerada usando a opção "salvar dados como comandos INSERT", o pg_restore não poderá restaurar os dados usando comandos COPY.

Opções

O pg_restore aceita os seguintes argumentos de linha de comando.

nome_da_cópia_de_segurança
Especifica a localização do arquivo de cópia de segurança a ser restaurado. Se não for especificado, é usada a entrada padrão.
-a
--data-only
Salva somente os dados, não salva o esquema (definições de dado).
-c
--clean
Remove (drop) os objetos do banco de dados antes de criá-los.
-C
--create
Cria o banco de dados antes de restaurá-lo (Quando esta opção é utilizada, o banco de dados especificado na opção -d é usado apenas para executar o comando CREATE DATABASE inicial. Todos os dados são restaurados no banco de dados cujo nome aparece na cópia de segurança).
-d nome_do_banco_de_dados
--dbname=nome_do_banco_de_dados
Conecta ao banco de dados nome_do_banco_de_dados e restaura diretamente neste banco de dados.
-f arquivo_de_saída
--file=arquivo_de_saída
Especifica o arquivo de saída para o script gerado, ou para conter a listagem quando for utilizada a opção -l. Por padrão a saída padrão.
-F formato
--format=formato
Especifica o formato do arquivo da cópia de segurança. Não é necessário especificar o formato, porque o pg_restore determina o formato automaticamente. Se for especificado, pode ser um dos seguintes:
t
A cópia de segurança é um arquivo tar. Este formato de cópia de segurança permite reordenar e/ou excluir elementos do esquema ao restaurar o banco de dados. Também permite limitar quais dados são recarregados ao restaurar.
c
A cópia de segurança está no formato personalizado do pg_dump. Este é o formato mais flexível, porque permite reordenar a restauração dos dados e dos elementos do esquema. Também, este formato é comprimido por padrão.

-i
--ignore-version
Ignora a verificação da versão do banco de dados.
-I nome_do_índice
--index=nome_do_índice
Restaura apenas a definição do índice especificado.
-l
--list
Lista o conteúdo da cópia de segurança. A saída desta operação pode ser usada com a opção -L para restringir e reordenar os itens a serem restaurados.
-L arquivo_da_listagem
--use-list=arquivo_da_listagem
Restaura apenas os elementos presentes no arquivo_da_listagem, e na ordem que aparecem neste arquivo. As linhas podem ser movidas e, também, podem virar comentário colocando um ; no seu início (Veja os exemplos abaixo).
-N
--orig-order
Restaura os itens na ordem original gerada pela aplicação pg_dump. Esta opção não possui nenhuma utilidade prática conhecida, uma vez que a aplicação pg_dump gera os itens em uma ordem conveniente para a mesma, que provavelmente não é uma ordem segura para restaurá-los (Esta não é a ordem na qual os itens estão listados na tabela de conteúdo da cópia de segurança). Veja também -r.
-o
--oid-order
Restaura os itens na ordem de OID. Esta opção possui utilidade prática limitada, uma vez que o OID é somente uma indicação aproximada da ordem original de criação. Esta opção prevalece sobre -N se ambas forem especificadas. Veja também -r.
-O
--no-owner
Não gera comandos para definir os donos dos objetos correspondendo aos donos destes objetos no banco de dados de origem. Por padrão, o pg_restore executa o comando SET SESSION AUTHORIZATION para definir os donos dos elementos criados no esquema. Estes comando não são bem-sucedidos a menos que a conexão inicial com o banco de dados seja feita por um superusuário (ou o mesmo usuário que possui todos os objetos presentes no script). Usando a opção -O, pode ser utilizado qualquer nome de usuário na conexão inicial, e este usuário será o dono de todos objetos criados.
-P nome_da_função(tipo_do_argumento [, ...])
--function=nome_da_função(tipo_do_argumento [, ...])
Restaura apenas a função especificada. Tome cuidado para escrever o nome da função e os argumentos exatamente como estes aparecem na tabela de conteúdo da cópia de segurança.
-r
--rearrange
Rearruma os itens por tipo do objeto (ocorre após a ordenação especificada por -N ou -o, se fornecido). Esta rearrumação tem por finalidade produzir o melhor desempenho possível para a restauração. Quando nem -N, nem -o e nem -r aparecem, o pg_restore restaura os itens na ordem em que aparecem na tabela de conteúdo (índice) da cópia de segurança, ou na ordem em que aparecem no arquivo_da_listagem se -L for especificado. A combinação de -o com -r duplica a ordenação feita pela aplicação pg_dump antes de criar a tabela de conteúdo da cópia de segurança e, portanto, normalmente não é necessário especificar.
-R
--no-reconnect
Esta opção está obsoleta, mas ainda é aceita para manter a compatibilidade com as versões anteriores.
-s
--schema-only
Restaura somente o esquema (definições de dados), não os dados. Os valores das seqüências são reiniciados.
-S nome_de_usuário
--superuser=nome_de_usuário
Especifica o nome de usuário do superusuário a ser usado para desabilitar os gatilhos. Somente é relevante quando é usada a opção --disable-triggers.
-t tabela
--table=tabela
Restaura apenas a definição e/ou dados da tabela especificada.
-T gatilho
--trigger=gatilho
Restaura apenas o gatilho especificado.
-v
--verbose
Especifica o modo verboso.
-x
--no-privileges
--no-acl
Impede restaurar os privilégios de acessos (comandos GRANT/REVOKE).
-X use-set-session-authorization
--use-set-session-authorization
Esta opção está obsoleta, mas ainda é aceita para manter compatibilidade com as versões anteriores. O pg_restore agora sempre se comporta da maneira anteriormente selecionada por esta opção.
-X disable-triggers
--disable-triggers
Esta opção é relevante apenas quando se restaura somente os dados. Faz com que o pg_restore execute comandos para desabilitar, temporariamente, os gatilhos das tabelas de destino enquanto os dados são recarregados. Deve ser utilizado quando existem verificações de integridade referencial, ou outros gatilhos nas tabelas, que não se deseja que sejam chamados durante a recarga dos dados. Atualmente, os comandos emitidos para a opção --disable-triggers devem ser executados por superusuários. Portanto, também deve ser especificado o nome de um superusuário com a opção -S ou, de preferência, executar, com cuidado, o script produzido como um superusuário.

O pg_restore também aceita os seguintes argumentos de linha de comando para os parâmetros de conexão:

-h hospedeiro
--host=hospedeiro
Especifica o nome de hospedeiro da máquina onde o servidor está executando. Se o nome iniciar por uma barra (/) é usado como o diretório do soquete do domínio Unix. O padrão é obter o nome a partir da variável de ambiente PGHOST, se esta estiver definida, senão tentar uma conexão pelo soquete do domínio Unix.
-p porta
--port=porta
Especifica a porta TCP, ou a extensão de arquivo do soquete do domínio Unix local, onde o servidor está escutando as conexões. O padrão é obter a partir da variável de ambiente PGPORT, se esta estiver definida, senão o padrão compilado.
-U nome_do_usuário
Conectar como o usuário especificado.
-W
Força a solicitação da senha, o que deve acontecer automaticamente quando o servidor requer autenticação por senha.

Ambiente

PGHOST
PGPORT
PGUSER
Parâmetros de conexão padrão.

Diagnósticos

Quando a conexão direta com o banco de dados é especificada usando a opção -d, o pg_restore executa internamente comandos SQL. Se acontecerem problemas ao executar o pg_restore, deve-se ter certeza que é possível selecionar informações no banco de dados utilizando, por exemplo, o utilitário psql .

Observações

Se o agrupamento de bancos de dados tiver alguma adição local ao banco de dados template1, deve-se ter o cuidado de restaurar a saída do pg_restore em um banco de dados totalmente vazio; senão, podem acontecer erros devido à duplicidade de definição dos objetos adicionados. Para criar um banco de dados vazio, sem nenhuma adição local, deve-se fazê-lo partir de template0, e não de template1 como, por exemplo:

CREATE DATABASE foo WITH TEMPLATE template0;

As limitações do pg_restore estão descritas abaixo.

Veja também a documentação do pg_dump para obter os detalhes de suas limitações.

Uma vez restaurado, é aconselhável executar o comando ANALYZE em todas as tabelas restauradas para que o otimizador possua estatísticas úteis.

Exemplos

Para gerar uma cópia de segurança do banco de dados meu_bd, que contém objetos grandes, em um arquivo tar:

$ pg_dump -Ft -b meu_bd > db.tar

Para restaurar este banco de dados (com os objetos grandes) no banco de dados chamado novo_bd:

$ pg_restore -d novo_bd db.tar

Para reordenar os itens do banco de dados, primeiro é necessário criar um arquivo contendo a tabela de conteúdo (índice) da cópia de segurança:

$ pg_restore -l copia_de_seguranca.arquivo > copia_de_seguranca.list

O arquivo de listagem consiste de um cabeçalho e uma linha para cada item como, por exemplo,

;
; Archive created at Fri Jul 28 22:28:36 2000
;     dbname: birds
;     TOC Entries: 74
;     Compression: 0
;     Dump Version: 1.4-0
;     Format: CUSTOM
;
;
; Selected TOC Entries:
;
2; 145344 TABLE species postgres
3; 145344 ACL species
4; 145359 TABLE nt_header postgres
5; 145359 ACL nt_header
6; 145402 TABLE species_records postgres
7; 145402 ACL species_records
8; 145416 TABLE ss_old postgres
9; 145416 ACL ss_old
10; 145433 TABLE map_resolutions postgres
11; 145433 ACL map_resolutions
12; 145443 TABLE hs_old postgres
13; 145443 ACL hs_old

Ponto-e-vírgula inicia um comentário, e os números no início das linhas referem-se aos identificadores internos da cópia de segurança atribuídos a cada item.

As linhas do arquivo podem ser transformadas em comentário, excluídas e reordenadas. Por exemplo

10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres

poderia ser usado como entrada do pg_restore e somente restauraria os itens 10 e 6, nesta ordem.

$ pg_restore -L copia_de_seguranca.list copia_de_seguranca.arquivo

Histórico

O utilitário pg_restore apareceu pela primeira vez no PostgreSQL 7.1.

Veja também

pg_dump , pg_dumpall , psql
SourceForge.net Logo