pg_dumpall

pg_dumpall — exporta o agrupamento de bancos de dados de uma instância do PostgreSQL para um arquivo de script

Sinopse

pg_dumpall [opção_de_conexão...] [opção...]

Organização

Figura 7. Estrutura lógica hierárquica do PostgreSQL


Descrição

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.

Atenção

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.

Opções

As opções de linha de comando a seguir controlam o conteúdo e o formato da saída:

-a
--data-only

Exporta 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_arquivo

Envia a saída para o arquivo especificado. Se for omitido, será usada a saída padrão.

-g
--globals-only

Exporta 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-only

Exporta apenas as funções de banco de dados, não os bancos de dados ou espaços de tabelas.

-s
--schema-only

Exporta 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-only

Exporta apenas os espaços de tabelas, não os bancos de dados ou funções de banco de dados.

-v
--verbose

Especifica 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
--version

Mostra 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-upgrade

Esta 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 tabela (coluna, ...) VALUES ...). 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.

--disable-dollar-quoting

Esta 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-triggers

Esta 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-data

Não exporta dados.

--no-policies

Não exporta políticas de segurança de linha.

--no-publications

Nã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-schema

Não exporta esquemas (definições de dados).

--no-security-labels

Não exporta rótulos de segurança.

--no-statistics

Não exporta estatísticas. Este é padrão.

--no-subscriptions

Nã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-method

Nã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-tablespaces

Nã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-compression

Nã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-data

Nã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.

--statistics

Exporta estatísticas do otimizador.

--statistics-only

Exporta 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.

-?
--help

Mostra 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ão

Especifica 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ário

Nome 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
--password

Forç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.

Variáveis de ambiente

PGHOST
PGOPTIONS
PGPORT
PGUSER

Parâ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).

Notas

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.

Exemplos

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 também

Veja o comando pg_dump para obter detalhes sobre possíveis condições de erro.