pg_restore — restaura um banco de dados do PostgreSQL a partir de uma exportação criada pelo pg_dump
pg_restore [opção_de_conexão...] [opção...] [nome_do_arquivo]
Figura 10. Exportação/Importação no PostgreSQL
O pg_restore é um utilitário para restaurar um banco de dados do PostgreSQL a partir de exportações criadas pelo pg_dump em um dos formatos estruturados (não script/texto-puro). São executados os comandos necessários para reconstruir o banco de dados no estado em que este se encontrava no momento em que foi exportado. As exportações estruturadas também permitem que o pg_restore seja seletivo sobre o que será restaurado, ou até mesmo para reordenar os itens antes de serem restaurados. Estas exportações são projetadas para serem portáveis entre arquiteturas diferentes.
O pg_restore pode operar em dois modos. Se for especificado o nome do banco de dados, o pg_restore irá se conectar a este banco de dados e restaurar o conteúdo da exportação diretamente neste banco de dados. Caso contrário, é escrito em um arquivo, ou na saída padrão, um script contendo os comandos SQL necessários para restaurar o banco de dados. O script dessa saída é equivalente ao formato de exportação de texto-puro do pg_dump. Algumas das opções que controlam esta saída são, portanto, análogas às opções do pg_dump.
Obviamente, o pg_restore não pode
restaurar informações que não estão presentes na exportação.
Por exemplo, se a exportação foi criada usando a opção para
exportar os dados como comandos INSERT,
o pg_restore não poderá restaurar
os dados usando o comando COPY.
Restaurar uma exportação faz com que o destino execute um código
arbitrário escolhido pelos superusuários de origem.
As exportações e importações parciais não limitam isto.
Se os superusuários de origem não forem confiáveis, as instruções
SQL exportadas devem ser inspecionadas antes da
importação.
Os arquivos de exportação que não são de texto-puro podem ser
inspecionados usando a opção --file do
pg_restore.
Note que o cliente que executa a exportação e importação não
precisa confiar nos superusuários de origem ou de destino.
O pg_restore aceita os seguintes argumentos de linha de comando.
nome_do_arquivoEspecifica a localização do arquivo produzido pela exportação (ou diretório, no caso de uma exportação no formato diretório) a ser restaurado. Se este argumento não for especificado, será usada a entrada padrão.
-a--data-onlyRestaura apenas os dados, não restaura esquemas (definições de dados) nem estatísticas. São restaurados os dados das tabelas, objetos grandes e valores das sequências, se presentes na exportação.
Esta opção é semelhante, mas não idêntica por razões históricas,
a especificar --section=data.
-c--clean
Antes de restaurar os objetos do banco de dados, executa o
comando DROP para excluir todos os objetos
que serão restaurados.
Esta opção é útil para sobrescrever um banco de dados existente.
Se algum dos objetos não existir no banco de dados de destino,
serão mostradas mensagens de erro que podem ser ignoradas, a
menos que também seja especificado --if-exists.
-C--create
Cria o banco de dados antes de fazer a restauração.
Se também for especificado --clean, exclui e
recria o banco de dados de destino antes de se conectar a ele.
Com a opção --create, o
pg_restore também restaura o
comentário do banco de dados, se houver, e quaisquer
configurações de variáveis de configuração que sejam específicas
para este banco de dados, ou seja, qualquer comando
ALTER DATABASE ... SET ... e
ALTER ROLE ... IN DATABASE ... SET ...
que mencione este banco de dados.
Os privilégios de acesso para o banco de dados também são
restaurados, a menos que seja especificada a opção
--no-acl.
Quando esta opção é usada, o banco de dados especificado por
-d é usado apenas para executar os comandos
iniciais DROP DATABASE e
CREATE DATABASE.
Todos os dados são restaurados no banco de dados cujo nome
aparece na exportação.
-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.
O nome_do_banco_de_dados pode ser uma
cadeia de caracteres de conexão.
Neste caso, os parâmetros da cadeia de caracteres de conexão
prevalecem sobre quaisquer opções de linha de comando conflitantes.
-e--exit-on-errorTermina se for encontrado erro ao enviar comandos SQL para o banco de dados. O padrão é prosseguir e mostrar a totalização de erros ao final da restauração.
-f nome_do_arquivo--file=nome_do_arquivo
Especifica o arquivo de saída para o script gerado, ou para a
listagem, quando usado com -l.
Deve ser usado o caractere - para especificar
stdout.
-F formato--format=formatoEspecifica o formato da exportação. Não é necessário especificar o formato, porque o pg_restore determina o formato automaticamente. Se especificado, pode ser um dos seguintes:
ccustomO arquivo de saída produzido pela exportação está no formato personalizado do pg_dump.
ddirectoryA saída produzida pela exportação é um diretório.
ttar
O arquivo de saída produzido pela exportação está no formato
tar.
-I índice--index=índice
Restaura apenas a definição do índice indicado.
Podem ser especificados vários índices usando várias opções
-I.
-j número_de_processos_simultâneos--jobs=número_de_processos_simultâneos
Executa as etapas mais demoradas de
pg_restore — aquelas que
carregam os dados, criam índices ou criam restrições —
simultaneamente, usando até
número_de_processos_simultâneos
sessões simultâneas.
Esta opção pode reduzir drasticamente o tempo de restauração
de um banco de dados grande em um servidor executando em uma
máquina com vários processadores.
Esta opção é ignorada ao gerar um script em vez de se conectar
diretamente a um servidor de banco de dados.
Cada trabalho é um processo ou um encadeamento (thread), dependendo do sistema operacional, e usa uma conexão separada com o servidor.
O valor ideal para esta opção depende da configuração de hardware do servidor, do cliente e da rede. Os fatores incluem o número de núcleos da CPU e a configuração de disco. Um bom lugar para começar é o número de núcleos da CPU no servidor, mas valores maiores do que isto também podem levar a tempos de restauração mais rápidos em muitos casos. Evidentemente, valores muito altos levarão a uma diminuição do desempenho por conta da sobrecarga da memória.
Somente os formatos personalizado e de diretório têm suporte
com esta opção.
A entrada deve ser um arquivo ou diretório regular
(não, por exemplo, um pipe
ou a entrada padrão).
Além disso, múltiplos trabalhos não podem ser usados em conjunto
com a opção --single-transaction.
-l--list
Lista a tabela de conteúdo da exportação.
A saída dessa operação pode ser usada como entrada para a opção
-L.
Note que se forem usadas opções de filtragem como
-n ou -t com
-l, elas restringirão os itens listados.
-L arquivo_lista--use-list=arquivo_lista
Restaura apenas os elementos da exportação listados no
arquivo_lista,
restaurando na ordem em que aparecem no arquivo.
Note que se forem usadas opções de filtragem como
-n ou -t com
-L, elas restringirão os itens listados.
O arquivo_lista
é normalmente criado editando a saída de uma operação
-l anterior.
As linhas podem ser movidas ou removidas, e também podem virar
comentário colocando um ponto-e-vírgula (;)
no início da linha. Veja exemplos abaixo.
-n esquema--schema=esquema
Restaura apenas os objetos presentes no esquema indicado.
Podem ser especificados vários esquemas usando várias opções
-n.
Pode ser combinado com a opção -t para restaurar
apenas uma tabela específica.
-N esquema--exclude-schema=esquema
Não restaura objetos presentes no esquema indicado.
Podem ser especificados vários esquemas a serem excluídos usando
várias opções -N.
Quando são fornecidas as opções -n e
-N para o mesmo nome de esquema, a opção
-N tem precedência e o esquema é excluído.
-O--no-owner
Não gera comandos para definir o dono dos objetos para
corresponder ao banco de dados original.
Por padrão, o pg_restore gera
instruções ALTER OWNER ou
SET SESSION AUTHORIZATION para definir o dono
dos objetos do esquema criado.
Estas instruções falham, 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 no script).
Com a opção -O pode ser usado qualquer nome
de usuário para a conexão inicial, e este usuário será o dono
de todos os objetos criados.
-P nome_da_função(tipo_de_dados_do_argumento [, ...])--function=nome_da_função(tipo_de_dados_do_argumento [, ...])
Restaura apenas a função indicada.
Deve-se ter o cuidado de escrever o nome da função e os
argumentos exatamente como aparecem na listagem do arquivo de
exportação.
Podem ser especificadas várias funções usando várias opções
-P.
-R--no-reconnectEsta opção está obsoleta, mas ainda é aceita para manter a compatibilidade com versões anteriores.
-s--schema-onlyRestaura apenas o esquema (definições de dados), não os dados em si, desde que as entradas do esquema estejam presentes na exportação.
Esta opção não pode ser usada com
--data-only ou
--statistics-only.
Esta opção é semelhante, mas não idêntica por razões históricas,
a especificar
--section=pre-data --section=post-data --no-statistics.
(Não confunda esta opção com a opção --schema,
que usa a palavra “esquema” com um significado
diferente.)
-S nome_do_usuário--superuser=nome_do_usuário
Especifica o nome de usuário do superusuário a ser usado para
desativar os gatilhos.
Só é relevante se for usada a opção
--disable-triggers.
-t tabela--table=tabela
Restaura apenas a definição e/ou dados da tabela indicada.
Para este propósito, “tabela” inclui visões,
visões materializadas, sequências e tabelas estrangeiras.
Podem ser selecionadas várias tabelas escrevendo a opção
-t várias vezes.
Esta opção pode ser combinada com a opção -n
para especificar a(s) tabela(s) em um determinado esquema.
Quando é especificada a opção -t, o
pg_restore não faz nenhuma tentativa
de restaurar quaisquer outros objetos de banco de dados dos
quais a(s) tabela(s) selecionada(s) possa(m) depender.
Portanto, não há garantia de que a restauração de uma
determinada tabela específica em um banco de dados limpo será
bem-sucedida.
Esta opção não se comporta de forma idêntica à opção
-t do pg_dump.
Não há, no momento, nenhuma provisão para correspondência de
caractere curinga no pg_restore, nem
é possível incluir o nome do esquema em -t.
E, enquanto a opção -t do
pg_dump também exporta os objetos
correlacionados (como índices) da(s) tabela(s) selecionada(s),
a opção -t do
pg_restore não restaura os objetos
correlacionados.
Nas versões do PostgreSQL anteriores a 9.6, esta opção correspondia apenas a tabelas, e não a qualquer outro tipo de relação.
-T nome_do_gatilho--trigger=nome_do_gatilho
Restaura apenas o gatilho indicado.
Podem ser especificados vários gatilhos usando várias opções
-T.
-v--verboseEspecifica o modo verboso. Faz com que o pg_restore envie comentários detalhados do objeto e horários de início/fim para o arquivo de saída, e mensagens de progresso para a saída de erro padrão. A repetição dessa opção faz com que apareçam mensagens adicionais no nível de depuração na saída de erro padrão.
-V--versionMostra a versão do pg_restore e termina.
-x--no-privileges--no-acl
Impede a restauração dos privilégios de acesso (comandos
GRANT/REVOKE).
-1--single-transaction
Executa a restauração como uma única transação (ou seja,
envolta pelos comandos
BEGIN/COMMIT).
Esta opção garante que todos os comandos sejam concluídos com
êxito, ou que nenhuma alteração seja aplicada.
Implica, também, na opção --exit-on-error.
--disable-triggersEsta opção é relevante apenas ao realizar uma restauração sem esquema. Esta opção instrui o pg_restore a executar comandos para desativar temporariamente os gatilhos nas tabelas de destino enquanto os dados são restaurados. Deve ser usada se houver verificações de integridade referencial, ou outros gatilhos nas tabelas, que não se deseje chamar durante a restauração dos dados.
No momento, os comandos emitidos para
--disable-triggers devem ser executados como
superusuário.
Portanto, também é necessário especificar um nome de superusuário
com a opção -S ou, de preferência, executar o
pg_restore como um superusuário do
PostgreSQL.
--enable-row-securityEsta opção é relevante apenas ao restaurar o conteúdo de uma tabela que possui segurança de linha. Por padrão, o pg_restore define row_security como desativado, para garantir que todos os dados na tabela sejam restaurados. Se o usuário não tiver privilégios suficientes para ignorar a segurança de linha, será relatado um erro. Esta opção instrui o pg_restore a ativar row_security, permitindo que o usuário tente restaurar o conteúdo da tabela com segurança de linha ativa. Mesmo assim ainda pode falhar se o usuário não tiver o direito de inserir as linhas da exportação na tabela.
Note que no momento esta opção também requer que a exportação
esteja no formato INSERT, porque o comando
COPY FROM não oferece suporte à segurança
no nível de linha.
--filter=nome_do_arquivo
Especifica um nome de arquivo a partir do qual serão lidos os
padrões para objetos a serem incluídos ou excluídos da exportação.
Os padrões são interpretados segundo as mesmas regras de
-n/--schema
para incluir objetos em esquemas,
-N/--exclude-schema
para excluir objetos em esquemas,
-P/--function
para restaurar as funções indicadas,
-I/--index
para restaurar os índices indicados,
-t/--table
para restaurar tabelas indicadas, ou
-T/--trigger
para restaurar os gatilhos.
Para ler da STDIN deve ser usado
- como nome do arquivo.
A opção --filter pode ser especificada em
conjunto com as opções listadas acima para incluir ou excluir
objetos, e também pode ser especificada mais de uma vez para
indicar vários arquivos de filtro.
O arquivo lista um padrão de banco de dados por linha, com o seguinte formato:
{ include | exclude } { function
| index
| schema
| table
| trigger
} PADRÃO
A primeira palavra-chave especifica se os objetos que correspondem ao padrão devem ser incluídos ou excluídos. A segunda palavra-chave especifica o tipo de objeto a ser filtrado usando o padrão:
function: funções.
Funciona como a opção
-P/--function.
Esta palavra-chave só pode ser usada com a palavra-chave
include.
index: índices.
Funciona como a opção
-I/--indexes.
Esta palavra-chave só pode ser usada com a palavra-chave
include.
schema: esquemas.
Funciona como as opções
-n/--schema e
-N/--exclude-schema.
table: tabelas.
Funciona como a opção
-t/--table.
Esta palavra-chave só pode ser usada com a palavra-chave
include.
trigger: gatilhos.
Funciona como a opção
-T/--trigger.
Esta palavra-chave só pode ser usada com a palavra-chave
include.
Linhas que começam com # são consideradas
comentários e são ignoradas.
Também podem ser colocados comentários após uma linha de
padrão de objeto.
Linhas em branco também são ignoradas.
Veja Padrões
para saber como colocar delimitadores em padrões.
--if-exists
Usa comandos DROP ... IF EXISTS
para excluir objetos no modo --clean.
Esta opção suprime erros do tipo “... não existe”
que de outra forma poderiam ser relatados.
Esta opção não é válida, a menos que também seja especificada
a opção --clean.
--no-commentsNão emite comandos para restaurar os comentários, mesmo que a exportação os contenha.
--no-dataNão emite comandos para restaurar os dados, mesmo que a exportação os contenha.
--no-data-for-failed-tablesPor padrão, os dados da tabela são restaurados mesmo se o comando de criação da tabela tiver falhado (por exemplo, porque a tabela já existe). Com esta opção, os dados dessa tabela são ignorados. Este comportamento será útil se o banco de dados de destino já contiver o conteúdo de tabela desejado. Por exemplo, tabelas auxiliares para extensões do PostgreSQL, como o PostGIS, podem já estar carregadas no banco de dados de destino; especificar esta opção impede que sejam carregados dados duplicados ou obsoletos.
Esta opção só é eficaz ao restaurar diretamente em um banco de dados, não ao gerar saída de script SQL.
--no-policiesNão emite comandos para restaurar políticas de segurança de linha, mesmo que a exportação as contenha.
--no-publicationsNão emite comandos para restaurar as publicações, mesmo que a exportação as contenha.
--no-schemaNão emite comandos para restaurar os esquemas (definições de dados), mesmo que a exportação os contenha.
--no-security-labelsNão emite comandos para restaurar os rótulos de segurança, mesmo que a exportação os contenha.
--no-statisticsNão emite comandos para restaurar as estatísticas, mesmo que a exportação as contenha.
--no-subscriptionsNão emite comandos para restaurar as subscrições, mesmo que a exportação as contenha.
--no-table-access-methodNão emite comandos para selecionar métodos de acesso à tabela. Com esta opção, todos os objetos serão criados com o método de acesso à tabela que for o padrão durante a restauração.
--no-tablespacesNão emite comandos para selecionar espaços de tabelas. Com esta opção, todos os objetos serão criados no espaço de tabelas padrão durante a restauração.
--restrict-key=restrict_key
Usa a cadeia de caracteres fornecida como a chave
\restrict do psql
na saída da exportação.
Esta opção só pode ser especificada para a saída de script
SQL, ou seja, quando é usada a opção
--file.
Se não for especificada nenhuma chave de restrição, o
pg_restore irá gerar uma chave
aleatória conforme necessário.
As chaves podem conter apenas caracteres alfanuméricos.
Esta opção destina-se principalmente a fins de teste e outros cenários que exigem resultados repetíveis (por exemplo, comparar arquivos de exportação). Não é recomendado para uso geral, porque um servidor maldoso com conhecimento prévio da chave pode ser capaz de injetar código arbitrário que será executado na máquina que irá executar o psql usando a saída da exportação.
--section=nome_da_seção
Restaura apenas a seção indicada.
O nome da seção pode ser pre-data,
data, ou post-data.
Esta opção pode ser especificada mais de uma vez para
selecionar várias seções.
O padrão é restaurar todas as seções.
A seção de dados contém os dados reais das tabelas, bem como definições de objetos grandes. Os itens de pós-dados consistem em definições de índices, gatilhos, regras e restrições diferentes das restrições de verificação de validade. Os itens de pré-dados consistem em todos os outros itens de definição de dados.
--statisticsNão emite comandos para restaurar estatísticas, mesmo que a exportação as contenha. Este é o padrão.
--statistics-onlyRestaura apenas as estatísticas, não o esquema (definições de dados) ou os dados em si.
--strict-names
Requer que cada qualificador de
esquema (-n/--schema) e
tabela (-t/--table)
corresponda a pelo menos um esquema/tabela na exportação
a ser restaurada.
--transaction-size=N
Executa a restauração como uma série de transações, cada uma
processando até N
objetos de banco de dados.
Esta opção implica em --exit-on-error.
A opção --transaction-size oferece uma opção
intermediária entre o comportamento padrão
(uma transação por comando SQL) e
-1/--single-transaction
(uma única transação para todos os objetos restaurados).
Embora a opção --single-transaction produza a
menor sobrecarga, pode ser impraticável para grandes
bancos de dados, porque a transação irá bloquear cada objeto
restaurado, esgotando possivelmente o espaço da tabela de
bloqueios do servidor.
Usar --transaction-size com um tamanho de
alguns milhares de objetos, oferece praticamente os mesmos
benefícios de desempenho, limitando ao mesmo tempo a quantidade
de espaço necessário na tabela de bloqueio.
--use-set-session-authorization
Gera comandos SET SESSION AUTHORIZATION do
padrão SQL em vez de comandos
ALTER OWNER, para especificar o dono do objeto.
Esta opção torna a exportação mais compatível com o padrão, mas,
dependendo do histórico dos objetos na exportação, estes podem
não ser restaurados corretamente.
-?--helpMostra a ajuda sobre os argumentos de linha de comando do pg_restore e termina.
O pg_restore também aceita os seguintes argumentos de linha de comando para parâmetros de conexão:
-h hospedeiro--host=hospedeiro
Especifica o nome de hospedeiro da máquina na qual o servidor
está sendo executado.
Se começar com uma barra, será usado como o diretório para o
soquete de domínio Unix.
O padrão é obtido da variável de ambiente PGHOST,
se definida, caso contrário, é tentada uma conexão de soquete
de domínio Unix.
-p porta--port=porta
Especifica a porta TCP, ou extensão do
arquivo de soquete de domínio
Unix local,
na qual o servidor está aguardando conexões.
O padrão é a variável de ambiente PGPORT,
se definida, ou o padrão compilado.
-U nome_do_usuário--username=nome_do_usuárioNome de usuário para se conectar como.
-w--no-password
Nunca emite uma solicitação de senha.
Se o servidor exigir autenticação por senha, e uma senha não
estiver disponível por outros meios, como o arquivo
.pgpass, a tentativa de conexão falhará.
Esta opção pode ser útil em tarefas em lote e scripts nos quais
nenhum usuário está presente para inserir uma senha.
-W--passwordForça o pg_restore solicitar a senha antes de se conectar ao banco de dados.
Esta opção nunca é essencial, porque o
pg_restore solicita automaticamente
a senha se o servidor exigir autenticação por senha.
No entanto, o pg_restore irá
desperdiçar uma tentativa de conexão ao descobrir que o
servidor pede uma senha.
Em alguns casos vale a pena digitar -W para
evitar a tentativa extra de conexão.
--role=nome_da_role
Especifica o nome da função de banco de dados
(role) a ser usada para executar
a restauração.
Esta opção faz com que o pg_restore
emita o comando
SET ROLE nome_da_role
após a conexão com o banco de dados.
É útil quando o usuário autenticado (especificado pela opção
-U) não possui os privilégios necessários para
o pg_restore, mas pode alternar para
uma função de banco de dados com os privilégios necessários.
Algumas instalações têm uma política de segurança contra se conectar
diretamente como um superusuário, e o uso dessa opção permite
que sejam feitas cópias de segurança que não violam esta política.
PGHOSTPGOPTIONSPGPORTPGUSERParâmetros de conexão padrão.
PG_COLOR
Especifica se devem ser usadas cores nas mensagens de diagnóstico.
Os valores possíveis são always,
auto e never.
Este utilitário, como a maioria dos outros utilitários do
PostgreSQL, também usa as variáveis de
ambiente com suporte pela libpq
(veja Variáveis de ambiente).
Entretanto, não lê a variável de ambiente PGDATABASE
quando o nome do banco de dados não é fornecido.
Quando é especificada uma conexão direta com o banco de dados usando
a opção -d, o pg_restore
executa internamente as instruções SQL.
Havendo problemas ao executar o pg_restore,
pode ser usado o psql para garantir que é
possível selecionar as informações no banco de dados.
Além disso, todas as configurações de conexão padrão e variáveis de
ambiente usadas pela biblioteca cliente
libpq se aplicam.
Se a instância de banco 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 realmente vazio; caso contrário, é provável que surjam erros
devido a definições duplicadas dos objetos adicionados.
Para criar um banco de dados vazio sem nenhuma adição local, deve-se
clonar de template0, e não de
template1. Por exemplo:
CREATE DATABASE foo WITH TEMPLATE template0;
As limitações do pg_restore são detalhadas abaixo.
Ao restaurar dados para uma tabela pré-existente, e a
opção --disable-triggers é usada, o
pg_restore emite comandos para desativar
os gatilhos nas tabelas do usuário antes de inserir os dados e,
no final, emite comandos para reativá-los após a inserção dos dados.
Se a restauração for interrompida no meio, os catálogos do sistema
podem ser deixados em um estado errado.
O pg_restore não pode restaurar objetos
grandes seletivamente; por exemplo, apenas aqueles de uma
determinada tabela específica.
Se o arquivo contiver objetos grandes, todos os objetos grandes
serão restaurados, ou nenhum deles, se forem excluídos por meio de
-L, -t, ou outras opções.
Veja também a documentação do pg_dump para obter detalhes sobre as suas limitações.
Por padrão, o pg_restore irá restaurar as
estatísticas do otimizador se estiverem incluídas no arquivo de
exportação.
Se nem todas as estatísticas tiverem sido restauradas, poderá ser
útil executar o comando ANALYZE em cada tabela
restaurada para que o otimizador tenha estatísticas úteis;
veja Atualização das estatísticas do planejador e
O processo de limpeza automática para obter mais informações.
Supondo que foi exportado o banco de dados chamado
mydb em um arquivo de exportação no
formato personalizado usando os comandos:
$pg_dump -Fc mydb > db.dump
Para excluir o banco de dados e recriá-lo a partir da cópia de segurança são usados os comandos:
$dropdb mydb$pg_restore -C -d postgres db.dump
O banco de dados indicado na opção -d pode ser
qualquer banco de dados existente na instância; o
pg_restore só o usa para executar o comando
CREATE DATABASE para mydb.
Com a opção -C, os dados são sempre restaurados no
banco de dados cujo nome aparece no arquivo de exportação.
Para restaurar a expotação em um novo banco de dados chamado
newdb são usados os comandos:
$createdb -T template0 newdb$pg_restore -d newdb db.dump
Note que não é usada a opção -C e, em vez disso,
é feita uma conexão diretamente com o banco de dados a ser restaurado.
Note, também, que o novo banco de dados é clonado a partir de
template0, e não de template1,
para garantir que esteja inicialmente vazio.
Para reordenar os itens do banco de dados, primeiro é necessário escrever a tabela de conteúdo da exportação em um arquivo:
$pg_restore -l db.dump > db.list
O arquivo contendo a listagem consiste em um cabeçalho e uma linha para cada item. Por exemplo:
; ; Archive created at Mon Sep 14 13:55:39 2009 ; dbname: DBDEMOS ; TOC Entries: 81 ; Compression: 9 ; Dump Version: 1.10-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 8.3.5 ; Dumped by pg_dump version: 8.3.8 ; ; ; Selected TOC Entries: ; 3; 2615 2200 SCHEMA - public pasha 1861; 0 0 COMMENT - SCHEMA public pasha 1862; 0 0 ACL - public pasha 317; 1247 17715 TYPE public composite pasha 319; 1247 25899 DOMAIN public domain0 pasha
O ponto-e-vírgula inicia um comentário, e os números no início das linhas referem-se ao identificador interno do arquivo atribuído a cada item.
As linhas do arquivo podem ser comentadas, 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 pg_restore, restaurando apenas os itens 10 e 6, nesta ordem:
$pg_restore -L db.list db.dump