O pg_restore é um utilitário para restaurar um banco de dados do PostgreSQL a partir de um arquivo gerado pelo pg_dump em um dos formatos não-texto-puro. São executados os comandos necessários para criar novamente todos os tipos, funções, tabelas, índices, agregações e operadores definidos pelo usuário, assim como os dados das tabelas.
Os arquivos de exportação contêm informações para o pg_restore reconstruir o banco de dados, mas também permitem ao pg_restore selecionar o que deve ser restaurado, ou mesmo reordenar a restauraração dos itens. Os arquivos de exportação são projetados para serem portáveis entre arquiteturas.
O pg_restore pode operar de dois modos: Se um nome de banco de dados for especificado, o arquivo de exportação é restaurado diretamente no banco de dados. Senão, um script contendo os comandos SQL necessários para reconstruir o banco de dados é criado (e escrito em um arquivo ou na saída padrão), semelhante aos scripts criados pelo pg_dump no formato texto-puro. 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 exportação; por exemplo, se o arquivo de exportação foi gerado usando a opção "exportar dados como INSERT", o pg_restore não poderá importar os dados usando o comando COPY.
O pg_restore aceita os seguintes argumentos de linha de comando (As formas longas das opções estão disponíveis em algumas plataformas apenas).
Especifica a localização do arquivo de exportação a ser restaurado. Se não for especificado, a entrada padrão é usada.
Importa somente os dados, não o esquema (definições dos dados).
Exclui (drop) os objetos do banco de dados antes de criá-los..
Cria o banco de dados antes de restaurá-lo (Quando esta opção está presente, o banco de dados designado por -d é usado apenas para executar o comando CREATE DATABASE inicial. Todos os dados são restaurados no banco de dados cujo nome aparece no arquivo de exportação).
Conecta ao nome_bd e restaura diretamente no banco de dados. Os objetos grandes somente podem ser restaurados usando uma conexão direta ao banco de dados.
Especifica o nome do arquivo contendo o script gerado, ou a listagem quando for utilizado com a opção -l. Por padrão a saída padrão.
Especifica o formato do arquivo de exportação. Não é necessário especificar o formato, porque o pg_restore reconhece o formato automaticamente. Se for especificado, poderá ser um dos seguintes:
O arquivo de exportação está no formato tar. Este formato de arquivo de exportação permite reordenar e/ou excluir elementos do esquema durante a importação. Também permite limitar quais dados são recarregados durante a importação.
O arquivo de exportação está no formato personalizado do pg_dump. Este é o formato mais flexível porque permite a reordenação da importação dos dados e dos elementos do esquema. Este formato também é comprimido por padrão.
Restaura a definição do índice para o índice especificado apenas.
Lista o conteúdo do arquivo de exportação. A saída deste comando pode ser usada com a opção -L para restringir e reordenar os itens que são restaurados.
Restaura apenas os elementos presentes no arquivo_da_listagem, e na ordem em que aparecem neste arquivo. As linhas podem ser movidas e, também, podem virar comentário colocando-se um ; no seu início.
Restaura os itens na ordem original de exportação. Por padrão, o pg_dump irá exportar os itens em uma ordem conveniente para o pg_dump, e depois salvar o arquivo de exportação em uma ordem de OID modificada. Esta opção substitui a da ordem de OID.
Restaura os itens na ordem de OID. Por padrão o pg_dump irá exportar exporta os itens em uma ordem conveniente para o pg_dump, e depois salvar o arquivo de exportação em uma ordem de OID modificada. Esta opção impõe a estrita ordem de OID.
Impede qualquer tentativa de restaurar o dono original do objeto. O dono dos objetos será o usuário conectado ao banco de dados.
Especifica o procedimento ou a função a ser restaurada.
Restaura os itens na ordem modificada de OID. Por padrão, o pg_dump irá exportar os itens em uma ordem conveniente para o pg_dump, e depois salvar o arquivo de exportação em uma ordem de OID modificada. A maior parte dos objetos é restaurada na ordem de OID, mas alguns elementos (por exemplo, regras e índices) são restaurados no fim do processo sem respeitar os OIDs. Esta é a opção padrão.
Durante a restauração do arquivo de exportação, o pg_restore usualmente necessita reconectar ao banco de dados vária vezes com nomes de usuário diferentes, para definir o dono correto dos objetos criados. Se isto não for desejável (por exemplo, se a intervenção manual for necessária para cada reconexão), esta opção proíbe o pg_restore requisitar reconexões (uma requisição de conexão em modo texto-puro, não conectado ao banco de dados, é feita emitindo o comando \connect do psql). Entretanto, esta opção é um instrumento bastante rudimentar, porque faz o pg_restore perder a informação sobre o dono, a menos que seja usada a opção -X use-set-session-authorization.
Restaura somente o esquema (definições dos dados), sem os dados. Os valores das seqüências são substituídos.
Especifica o nome do superusuário a ser usado para desativar os gatilhos e/ou definir o dono dos elementos do esquema. Por padrão, o pg_restore usa o nome do usuário corrente se este for um superusuário.
Restaurar o esquema/dados da tabela apenas.
Restaurar a definição do gatilho apenas.
Especifica o modo verboso.
Proíbe a restauração dos privilégios de acesso (comandos GRANT/REVOKE).
Normalmente, se ao restaurar um arquivo de exportação for necessário trocar o usuário corrente do banco de dados (por exemplo, para definir o dono correto do objeto), uma nova conexão ao banco de dados deve ser aberta, o que poderá requerer intervenção manual (por exemplo, senhas). Se for usada a opção -X use-set-session-authorization, então o pg_restore vai usar o comando SET SESSION AUTHORIZATION. Embora produza o mesmo efeito, requer que o usuário que for fazer a importação do banco de dados a partir do arquivo de exportação gerado seja um superusuário. Esta opção substitui a opção -R.
O pg_restore também aceita os seguintes argumentos de linha de comando para os parâmetros de conexão:
Especifica o nome da máquina onde o servidor está executando. Se o nome iniciar por uma barra (/), é considerado como sendo o diretório do soquete do domínio Unix.
Especifica a porta Internet TCP/IP, ou o soquete do domínio local Unix, onde o servidor está aguardando as conexões. O padrão para o número da porta é 5432, ou o valor da variável de ambiente PGPORT (se estiver definida).
Nome do usuário para se conectar.
Força a solicitação da senha. Deve acontecer automaticamente se o servidor requerer autenticação por senha.
Connection to database 'template1' failed.
connectDBStart() -- connect() failed: No such file or directory
Is the postmaster running locally
and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?O pg_restore não pôde se conectar ao processo postmaster usando o computador e a porta especificada. Se esta mensagem for recebida, deve-se garantir que o servidor está processando na máquina especificada e usando a porta especificada. Se a instalação usa um sistema de autenticação, assegure-se de ter obtido as credenciais de autenticação necessárias.
Note: Quando uma conexão direta ao banco de dados é especificada através da opção -d, o pg_restore executa internamente os comandos SQL. Se houver problema ao executar o pg_restore, deve-se ter certeza de poder consultar as informações no banco de dados usando, por exemplo, o psql.
Se na instalação houver 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 realmente vazio; de outra forma podem acontecer erros devido à duplicidade de definições dos objetos adicionados. Para criar um banco de dados vazio, sem nenhuma adição local, deve-se fazê-lo a partir do template0, e não do template1. Por exemplo:
CREATE DATABASE foo WITH TEMPLATE = template0;
As limitações do pg_restore estão descritas abaixo:
Ao se restaurar os dados para tabelas pré-existentes, o pg_restore emite comandos para desativar os gatilhos das tabelas dos usuários antes de inserir os dados, e comandos para reativá-los após os dados terem sido inseridos. Se a restauração for interrompida no meio, os catálogos do sistema podem ficar em um estado errado.
O pg_restore não restaura objetos grandes para uma única tabela. Se o arquivo de exportação contém objetos grandes, então todos os objetos grandes são restaurados.
Consulte a documentação do pg_dump para obter detalhes sobre as limitações do pg_dump.
Para exportar um banco de dados:
$ pg_dump meu_bd > bd.out
Para importar este banco de dados:
$ psql -d database -f bd.out
Para exportar um banco de dados chamado meu_bd que contém objetos grandes para um arquivo tar:
$ pg_dump -Ft -b meu_bd > bd.tar
Para importar este banco de dados (com os objetos grandes) para um banco de dados existente chamado bd_novo:
$ pg_restore -d bd_novo bd.tar
Para reordenar os itens do banco de dados, primeiro é necesário exportar a tabela de conteúdo (índice) do arquivo de exportação:
$ pg_restore -l arqexp.file > arqexp.list
O arquivo de listagem consiste do cabeçalho e de uma linha para cada item, como no exemplo abaixo:
; ; 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 são delimitadores de comentários, e os números no início das linhas referem-se aos identificadores interno do arquivo de exportação 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 para o pg_restore e somente restauraria os itens 10 e 6, nesta ordem.
$ pg_restore -L arqexp.list arqexp.file