pg_dumpall — exporta o agrupamento de bancos de dados de uma instância do PostgreSQL para um arquivo de script
pg_dumpall [opção_de_conexão...] [opção...]
Figura 7. Estrutura lógica hierárquica do PostgreSQL
O pg_dumpall é um utilitário para exportar (“dump”) todos os bancos de dados (“cluster”) de uma instância do PostgreSQL em um único arquivo de script. O arquivo de script contém comandos SQL que podem ser usados como entrada para o psql importar os bancos de dados. A exportação é feita chamando o utilitário pg_dump para cada banco de dados presente na instância. O pg_dumpall também exporta objetos globais comuns a todos os bancos de dados, como funções de banco de dados (roles), espaços de tabelas e concessões de privilégios para parâmetros de configuração. (O pg_dump não exporta estes objetos.)
Uma vez que o utilitário pg_dumpall lê tabelas de todos os bancos de dados, provavelmente será necessário se conectar como superusuário do banco de dados para gerar uma exportação completa. Também será necessário ter privilégios de superusuário para executar o script exportado, para poder criar funções de banco de dados e bancos de dados.
O script SQL é escrito na saída padrão.
Deve ser usada a opção -f/--file,
ou operadores do interpretador de comandos
(shell), para redirecionar a saída
para um arquivo.
O utilitário pg_dumpall precisa se conectar
várias vezes ao servidor PostgreSQL
(uma vez por banco de dados).
Se for usado autenticação por senha, a senha será solicitada a cada
nova conexão.
É conveniente haver um arquivo ~/.pgpass nesses
casos.
Veja O arquivo de senhas para obter mais informações.
Restaurar uma exportação faz com que o destino execute um código arbitrário escolhido pelos superusuários de origem. As exportações parciais 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. Note que o cliente que executa a exportação e importação não precisa confiar nos superusuários de origem ou de destino.
As opções de linha de comando a seguir controlam o conteúdo e o formato da saída:
-a--data-onlyExporta apenas os dados, não o esquema (definições de dados) ou as estatísticas.
-c--clean
Gera comandos SQL para excluir
(DROP) todos os bancos de dados,
funções de banco de dados e espaços de tabela exportados
antes de recriá-los.
Esta opção é útil quando a importação visa sobrescrever um
agrupamento de bancos de dados existente.
Se não existir algum dos objetos no agrupamento de destino,
serão relatadas mensagens de erro ignoráveis durante a
importação, a menos que também seja especificada a opção
--if-exists.
-E codificação--encoding=codificação
Cria a exportação na codificação de conjunto de caracteres
especificada.
Por padrão, a exportação é criada na codificação do banco de dados.
(Outra maneira de obter o mesmo resultado é definir a variável
de ambiente PGCLIENTENCODING para a codificação
de exportação desejada.)
-f nome_do_arquivo--file=nome_do_arquivoEnvia a saída para o arquivo especificado. Se for omitido, será usada a saída padrão.
-g--globals-onlyExporta apenas os objetos globais (funções de banco de dados e espaços de tabela), sem os bancos de dados.
-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_dumpall escreve
instruções ALTER OWNER, ou
SET SESSION AUTHORIZATION, para definir o
dono dos elementos do esquema criado.
Estas instruções irão falhar quando o script for executado,
a menos que seja executado por um superusuário
(ou o mesmo usuário que possui todos os objetos no script).
Para produzir um script que permite a restauração por qualquer
usuário, tornando este usuário o dono de todos os objetos,
deve ser especificada a opção -O.
-r--roles-onlyExporta apenas as funções de banco de dados, não os bancos de dados ou espaços de tabelas.
-s--schema-onlyExporta apenas as definições dos objetos (esquema), não os dados.
-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.
Esta opção é relevante somente se também for usada a opção
--disable-triggers.
(Normalmente, é melhor não usar esta opção e, em vez disso,
executar o script resultante como um superusuário.)
-t--tablespaces-onlyExporta apenas os espaços de tabelas, não os bancos de dados ou funções de banco de dados.
-v--verboseEspecifica o modo verboso. Faz com que o pg_dumpall escreva as horas de início/fim no arquivo de exportação, e as mensagens de progresso na saída de erro padrão. Repetir esta opção faz com que apareçam mensagens adicionais no nível de depuração na saída de erro padrão. Esta opção também é passada para o pg_dump.
-V--versionMostra a versão do pg_dumpall, e termina.
-x--no-privileges--no-acl
Impede exportar os privilégios de acesso
(comandos GRANT e REVOKE).
--binary-upgradeEsta opção é para uso por utilitários de atualização in-loco. Seu uso para outros fins não é recomendado ou tem suporte. O comportamento dessa opção pode mudar em versões futuras sem aviso prévio.
--column-inserts--attribute-inserts
Exporta os dados como comandos INSERT com
nomes de coluna explícitos
(INSERT INTO ).
Isto torna a restauração muito lenta;
serve principalmente para fazer exportações que podem ser
importadas em outros bancos de dados diferentes do
PostgreSQL.
tabela
(coluna, ...) VALUES ...
--disable-dollar-quotingEsta opção desativa o uso de delimitação por cifrão para os corpos de função, forçando com que sejam delimitados usando a sintaxe de cadeia de caracteres do padrão SQL.
--disable-triggersEsta opção é relevante apenas ao criar uma exportação com dados e sem esquema. Instrui o pg_dumpall a incluir 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 deseja chamar durante a restauração dos dados.
No momento, os comandos gerados para
--disable-triggers devem ser executados como
um superusuário.
Portanto, também é necessário especificar um nome de superusuário
com a opção -S ou, de preferência, ter o cuidado
de executar o script resultante como um superusuário.
--exclude-database=padrão
Não exporta bancos de dados cujo nome corresponde ao
padrão.
Podem ser especificados vários padrões, escrevendo várias vezes
a opção --exclude-database.
O parâmetro padrão
é interpretado como um padrão segundo as mesmas regras
usadas pelos meta-comandos \d do
psql
(veja Padrões), portanto, também
podem não ser exportados vários bancos de dados escrevendo
caracteres curinga no padrão.
Ao usar caracteres curinga, deve-se ter o cuidado de delimitar
o padrão, se necessário, para evitar a expansão do caractere
curinga pelo interpretador de comandos.
--extra-float-digits=ndigits
Usa o valor especificado por extra_float_digits
ao exportar os números de ponto flutuante, em vez da precisão
máxima disponível.
As exportações de rotina feitos para fins de cópia de segurança
não devem usar esta opção.
--filter=nome_do_arquivo
Especifica um nome de arquivo a partir do qual serão lidos os
padrões para bancos de dados excluídos da exportação.
Os padrões são interpretados segundo as mesmas regras usadas em
--exclude-database.
Para ler da STDIN, deve ser usado
- como nome do arquivo.
A opção --filter pode ser especificada em
conjunto com --exclude-database para excluir
bancos de dados, 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:
exclude database PADRÃO
Linhas que começam com # são consideradas
comentários e são ignoradas.
Os comentários também podem ser colocados 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.
--inserts
Exporta os dados como comandos INSERT
(em vez de COPY).
Isto torna a restauração muito lenta;
serve principalmente para fazer exportações que podem ser
importadas em outros bancos de dados diferentes do
PostgreSQL.
Note que a restauração poderá falhar inteiramente,
se a ordem das colunas tiver sido reorganizada.
A opção --column-inserts é mais segura,
embora ainda mais lenta.
--load-via-partition-root
Ao exportar os dados para uma partição da tabela, deve ser feito
com que as instruções COPY ou
INSERT tenham como alvo a raiz da hierarquia
de particionamento que os contém, em vez da própria partição.
Isto faz com que a partição apropriada seja determinada
novamente para cada linha, quando os dados são importados.
Serve para restaurar os dados em um servidor onde as linhas
nem sempre caem nas mesmas partições do servidor original.
Isto poderá acontecer, por exemplo, se a coluna de particionamento
for do tipo de dados texto, e os dois sistemas tiverem definições
diferentes de ordenação usado para classificar a coluna de
particionamento.
--lock-wait-timeout=timeout
Não aguarda para sempre para adquirir bloqueios de tabela
compartilhada no início da exportação.
Em vez disso, falha se não conseguir bloquear uma tabela dentro
do tempo especificado por
timeout.
O tempo limite pode ser especificado em qualquer um dos formatos
aceitos pelo comando SET statement_timeout.
--no-comments
Não exporta comandos COMMENT.
--no-dataNão exporta dados.
--no-policiesNão exporta políticas de segurança de linha.
--no-publicationsNão exporta publicações.
--no-role-passwords
Não exporta senhas das funções de banco de dados
(roles).
Quando restauradas, as funções de banco de dados terão uma senha
nula, e a autenticação por senha sempre irá falhar até que uma
senha seja definida.
Como não são necessários os valores das senhas quando esta opção
é especificada, as informações da função de banco de dados são
lidas na visão do catálogo pg_roles,
em vez de pg_authid.
Portanto, esta opção também ajuda se o acesso a
pg_authid estiver restringido por
alguma política de segurança.
--no-schemaNão exporta esquemas (definições de dados).
--no-security-labelsNão exporta rótulos de segurança.
--no-statisticsNão exporta estatísticas. Este é padrão.
--no-subscriptionsNão exporta subscrições.
--no-sync
Por padrão, o pg_dumpall aguarda até que todos
os arquivos sejam escritos com segurança no disco.
Esta opção faz com que o pg_dumpall retorne
sem aguardar, o que é mais rápido, mas significa que uma falha
subsequente do sistema operacional pode deixar a exportação
corrompida.
Geralmente, esta opção é útil para testes, mas não deve ser
usada ao exportar os dados de uma instalação de produção.
--no-table-access-methodNão gera 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 importação.
--no-tablespacesNão gera comandos para selecionar os espaços de tabelas. Com esta opção, todos os objetos serão criados em qualquer espaço de tabelas que for o padrão durante a restauração.
--no-toast-compressionNão gera comandos para definir os métodos de compressão TOAST. Com esta opção, todas as colunas serão restauradas com a configuração de compressão padrão.
--no-unlogged-table-dataNão exporta o conteúdo de tabelas sem registro de transações (unlogged). Esta opção não tem efeito sobre se as definições de tabela e sequência (esquema) serão ou não exportadas; esta opção apenas suprime a exportação dos dados da tabela e da sequência.
--on-conflict-do-nothing
Adiciona a cláusula ON CONFLICT DO NOTHING
aos comandos INSERT.
Esta opção não é válida, a menos que também seja especificado
--inserts ou --column-inserts,
--quote-all-identifiers
Força a delimitação de todos os identificadores.
Esta opção é recomendada ao exportar um banco de dados de um
servidor cuja versão principal do
PostgreSQL é diferente da versão do
pg_dumpall, ou quando a saída deverá
ser restaurada em um servidor com uma versão principal diferente.
Por padrão, o pg_dumpall delimita
apenas os identificadores que são palavras reservadas em sua
própria versão principal.
Às vezes, isto resulta em problemas de compatibilidade ao lidar
com servidores de outras versões, que podem ter conjuntos de
palavras reservadas ligeiramente diferentes.
Usar --quote-all-identifiers evita estes
problemas, ao custo de um script de exportação difícil de ser lido.
--restrict-key=restrict_key
Usa a cadeia de caracteres fornecida como a chave
\restrict do psql
na saída da exportação.
Só pode ser especificado para exportações de texto-puro,
ou seja, quando --format é definido como
plain ou a opção--format
é omitida.
Se não for especificada nenhuma chave de restrição, o
pg_dumpall 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.
--rows-per-insert=nrows
Exporta os dados como comandos INSERT
(em vez de COPY).
Controla o número máximo de linhas por comando
INSERT.
O valor especificado deve ser um número maior que zero.
Qualquer erro durante a restauração fará com que apenas as linhas
que fazem parte do comando INSERT com problema
sejam perdidas, em vez de todo o conteúdo da tabela.
--statisticsExporta estatísticas do otimizador.
--statistics-onlyExporta apenas as estatísticas, não o esquema (definições de dados) ou os dados em si. São exportadas as estatísticas do otimizador para tabelas, visões materializadas, tabelas estrangeiras e índices.
--sequence-data
Inclui os dados de sequência no arquivo de exportação.
Este é o comportamento padrão, exceto quando é especificado.
--no-data, --schema-only ou
--statistics-only.
--use-set-session-authorization
Gera comandos SET SESSION AUTHORIZATION
no padrão SQL, em vez de comandos
ALTER OWNER para especificar o dono de um objeto.
Isto torna a exportação mais compatível com os padrões, mas,
dependendo do histórico dos objetos na exportação, pode não
ser importado corretamente.
-?--helpMostra a ajuda sobre os argumentos de linha de comando do pg_dump, e termina.
As opções de linha de comando a seguir controlam os parâmetros de conexão com o banco de dados.
-d cadeia_de_caracteres_de_conexão--dbname=cadeia_de_caracteres_de_conexãoEspecifica os parâmetros usados para conectar ao servidor, como uma cadeia de caracteres de conexão; os parâmetros da cadeia de caracteres de conexão têm precedência sobre quaisquer opções de linha de comando conflitantes.
Esta opção se chama --dbname para manter
a consistência com outras aplicações cliente, mas como o
pg_dumpall precisa se conectar
a muitos bancos de dados, o nome do banco de dados na
cadeia de caracteres de conexão será ignorado.
Deve ser usada a opção -l para especificar
o nome do banco de dados usado para a conexão inicial, que irá
exportar os objetos globais e descobrir quais outros bancos de
dados devem ser exportados.
-h hospedeiro--host=hospedeiro
Especifica o nome do 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.
-l nome_do_banco_de_dados--database=nome_do_banco_de_dados
Especifica o nome do banco de dados ao qual se conectar para
exportar os objetos globais, e descobrir quais outros bancos
de dados devem ser exportados.
Se não for especificado, será usado o banco de dados
postgres e, se este não existir, será usado
o banco de dados template1.
-p porta--port=porta
Especifica a porta TCP, ou extensão de
arquivo de soquete de domínio
Unix local,
na qual o servidor está aguardando conexões.
O padrão é usar a variável de ambiente PGPORT,
se estiver 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 irá 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_dumpall solicitar a senha antes de conectar ao banco de dados.
Esta opção nunca é essencial, porque o
pg_dumpall solicita automaticamente
a senha se o servidor exigir autenticação por senha.
No entanto, o pg_dumpall 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.
Note que o pedido de senha ocorrerá novamente para cada banco
de dados a ser exportado.
Normalmente, é melhor configurar o arquivo
~/.pgpass do que depender da entrada
manual da senha.
Veja O arquivo de senhas para obter mais informações.
--role=nome_da_role
Especifica o nome de função de banco de dados
(role) a ser usado para criar
a cópia de segurança.
Esta opção faz com que o pg_dumpall
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 por
-U) não possui os privilégios necessários para
o pg_dumpall, mas pode alternar para
uma função de banco de dados com os direitos necessários.
Algumas instalações têm uma política 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).
Como o pg_dumpall chama o pg_dump internamente, algumas mensagens de diagnóstico irão se referir ao pg_dump.
A opção --clean pode ser útil, mesmo quando a
intenção for restaurar o script de exportação em uma nova instância.
O uso da opção --clean permite que o script exclua
e recrie os bancos de dados postgres e
template1 nativos, assegurando que estes bancos
de dados manterão as mesmas propriedades (por exemplo,
localidade e codificação) que tinham na instância de origem.
Sem esta opção, estes bancos de dados manterão suas propriedades
existentes no nível do banco de dados, bem como qualquer conteúdo
pré-existente.
Quando é especificada a opção --statistics, o
pg_dumpall irá incluir a maioria das estatísticas
do otimizador no arquivo de exportação resultante.
Isto não inclui todas as estatísticas, como aquelas criadas
explicitamente com CREATE STATISTICS,
estatísticas personalizadas adicionadas por uma extensão,
ou estatísticas coletadas pelo sistema de estatísticas cumulativas.
Portanto, ainda pode ser útil executar o comando
ANALYZE em cada banco de dados após a importação
a partir de um arquivo de exportação para garantir o desempenho ideal;
Também pode ser executado o comando vacuumdb -a -z
para analisar todos os bancos de dados.
Não se deve esperar que o script de exportação seja executado
inteiramente sem erros.
Em particular, como o script irá executar o comando
CREATE ROLE para cada função de banco de dados
existente na instância de origem, é certo que irá acontecer o erro
“a função de banco de dados já existe”
(role already exists) para o
superusuário inicial, a menos que a instância de destino tenha
sido inicializada com um nome de superusuário inicial diferente.
Este erro é inofensivo, devendo ser ignorado.
O uso da opção --clean provavelmente produzirá
mensagens de erro inofensivas adicionais sobre objetos inexistentes,
embora se possa minimizá-las adicionando a opção
--if-exists.
O pg_dumpall requer que todos os diretórios de espaços de tabela necessários existam antes da restauração; caso contrário, a criação do banco de dados irá falhar para bancos de dados em locais diferentes do padrão.
Geralmente, recomenda-se usar a opção -X
(--no-psqlrc) ao importar um banco de dados a
partir de um script gerado pelo pg_dumpall,
para garantir um processo de importação limpo e evitar possíveis
conflitos com configurações personalizadas do psql.
Além disso, como o script gerado pelo utilitário
pg_dumpall pode incluir metacomandos
do psql, este script poderá ser
incompatível com clientes que não sejam o psql.
Para exportar todos os bancos de dados:
$pg_dumpall > db.out
Para importar o(s) banco(s) de dados desse arquivo, pode ser usado:
$psql -X -f db.out -d postgres
Não é importante em qual banco de dados se conectar aqui, porque o
arquivo de script criado pelo pg_dumpall
conterá os comandos apropriados para criar e se conectar aos bancos
de dados exportados.
Uma exceção é que se for especificado --clean,
será necessário se conectar ao banco de dados postgres
inicialmente; o script irá tentar excluir os outros bancos de dados
imediatamente, e isto irá falhar no banco de dados ao qual se está
conectado.
Veja o comando pg_dump para obter detalhes sobre possíveis condições de erro.