pg_dump

pg_dump — exporta um banco de dados do PostgreSQL como um script SQL ou para outros formatos.

Sinopse

pg_dump [opção_de_conexão...] [opção...] [nome_do_banco_de_dados]

Descrição

Figura 6. Exportação/Importação no PostgreSQL


O pg_dump é um utilitário para exportar um banco de dados do PostgreSQL. Faz exportações consistentes, mesmo se o banco de dados estiver sendo usado simultaneamente por outros usuários. O pg_dump não bloqueia o acesso de outros usuários ao banco de dados (leitura ou escrita). Note, no entanto, que, exceto em casos simples, o pg_dump geralmente não é a escolha indicada para fazer cópias de segurança regulares de bancos de dados de produção. Veja Backup and Restore para obter mais informações.

O pg_dump exporta apenas um único banco de dados. Para exportar toda a instância, ou exportar objetos globais comuns a todos os bancos de dados de uma instância (como funções de banco de dados/roles e espaços de tabelas), deve ser usado o pg_dumpall.

As exportações podem ser geradas no formato de script, ou em outros formatos alternativos de exportação. As exportações no formato de script são arquivos de texto-puro, contendo os comandos SQL necessários para reconstruir o banco de dados para o estado em que se encontrava no momento em que foi exportado. Para restaurar a partir desse script, deve ser usado o psql. Os arquivos de script podem ser usados para reconstruir o banco de dados mesmo em outras máquinas e outras arquiteturas; e com algumas modificações, até mesmo em outros produtos de banco de dados SQL.

Os formatos alternativos de exportação devem ser usados com o utilitário pg_restore para reconstruir o banco de dados. Eles permitem que o pg_restore seja seletivo sobre o que vai ser restaurado, ou até mesmo para reordenar os itens antes de serem restaurados. Os formatos alternativos de exportação são projetados para serem portáveis entre arquiteturas diferentes.

Quando usado com um dos formatos alternativos de exportação, e combinado com o pg_restore, o pg_dump fornece um mecanismo flexível de exportação e transferência. O pg_dump pode ser usado para exportar todo o banco de dados, podendo depois ser usado o utilitário pg_restore para examinar a exportação, e/ou selecionar quais partes do banco de dados devem ser restauradas. Os formatos de exportação com a saída mais flexível são o formato personalizado (-Fc) e o formato diretório (-Fd). Eles permitem a seleção e reordenação de todos os itens da exportação, oferecem suporte à restauração paralela, e são comprimidos por padrão. O formato diretório é o único formato que oferece suporte a exportações paralelas.

Ao executar o pg_dump, deve-se examinar a saída procurando por qualquer advertência (escrita na saída de erro padrão), especialmente levando em conta as limitações listadas abaixo.

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

Opções

As seguintes opções de linha de comando controlam o conteúdo e o formato da saída.

nome_do_banco_de_dados

Especifica o nome do banco de dados a ser exportado. Se não for especificado, será usada a variável de ambiente PGDATABASE. Se esta variável não estiver definida, será usado o nome de usuário especificado para a conexão.

-a
--data-only

Exporta somente os dados, não exporta o esquema (definições de dados). Os dados das tabelas, objetos grandes e valores de sequência são incluídos.

Esta opção é semelhante, mas não idêntica por razões históricas, a especificar --section=data.

-b
--large-objects
--blobs (obsoleto)

Inclui objetos grandes na exportação. Este é o comportamento padrão, exceto quando é especificado --schema, --table ou --schema-only. A opção -b é, portanto, útil apenas para adicionar objetos grandes a exportações onde foi especificado um determinado esquema ou tabela. Note que os objetos grandes binários (blobs) são considerados dados e, portanto, serão incluídos quando for usada a opção --data-only, mas não quando for usada a opção --schema-only.

-B
--no-large-objects
--no-blobs (obsoleto)

Exclui os objetos grandes da exportação.

Quando são especificadas as duas opções -b e -B, o comportamento é incluir os objetos grandes quando os dados estão sendo exportados. Veja a documentação de -b .

-c
--clean

Gera comandos para excluir (DROP) todos os objetos de banco de dados exportados antes de gerar os comandos para criá-los. Esta opção é útil quando a importação envolve a sobrescrita de um banco de dados existente. Se algum dos objetos não existir no banco de dados de destino, ​​ serão mostradas mensagens de erro ignoráveis durante a importação, a menos que também seja especificada a opção --if-exists.

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

-C
--create

Começa a saída com um comando para criar o próprio banco de dados, e reconectar ao banco de dados criado. (Com um script assim não importa em que banco de dados na instalação de destino se está conectado antes de executar o script.) Se também for especificada a opção --clean, o script exclui e recria o banco de dados de destino antes de se reconectar a ele.

Com a opção --create, a saída também inclui o comentário do banco de dados, se houver, e quaisquer definiçõ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 próprio banco de dados também são exportados, a menos que seja especificada a opção --no-acl.

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

-e padrão
--extension=padrão

Exporta apenas as extensões que correspondem ao padrão. Quando esta opção não for especificada, serão exportadas todas as extensões no banco de dados de destino que não são do sistema. Podem ser selecionadas várias extensões escrevendo várias opções -e. O parâmetro padrão é interpretado segundo as mesmas regras usadas pelos comandos \d do psql (veja Padrões), assim, várias extensões também podem ser selecionadas 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 que o interpretador de comandos expanda os curingas.

Qualquer relação de configuração registrada por pg_extension_config_dump será incluída na exportação se sua extensão for especificada por --extension.

Nota

Quando é especificada a opção -e, o pg_dump não faz nenhuma tentativa de exportar quaisquer outros objetos de banco de dados dos quais a(s) extensão(ões) selecionada(s) possa(m) depender. Portanto, não há garantia de que os resultados da exportação de uma determinada extensão específica possam ser restaurados com êxito por si só em um banco de dados vazio.

-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.) As codificações com suporte estão descritas em Conjuntos de caracteres com suporte.

-f arquivo
--file=arquivo

Envia a saída para o arquivo especificado. Este parâmetro pode ser omitido para os formatos de saída baseados em arquivo, caso em que é usada a saída padrão. Entretanto, deve ser fornecido para o formato de saída de diretório, onde especifica o diretório de destino em vez de um arquivo. Neste caso, o diretório é criado por pg_dump, não devendo já existir.

-F formato
--format=formato

Seleciona o formato da saída. O formato pode ser um dos seguintes:

p
plain

Gera um arquivo de script SQL de texto-puro (o padrão).

c
custom

Gera um arquivo com formato personalizado, adequado para servir de entrada para o pg_restore. Juntamente com o formato de saída diretório, este é o formato de saída mais flexível, porque permite a seleção manual e a reordenação dos itens exportados durante a restauração. Este formato também é comprimido por padrão.

d
directory

Gera uma saída no formato diretório, adequado para servir de entrada para o pg_restore. Será criado um diretório com um arquivo para cada tabela e objeto grande binário (blob) que está sendo exportado, além de um arquivo chamado Table of Contents (tabela de conteúdo) descrevendo os objetos exportados em um formato legível por máquina que pg_restore pode ler. A exportação no formato diretório pode ser tratada pelas ferramentas Unix padrão; por exemplo, os arquivos em uma exportação não comprimida podem ser comprimidos usando as ferramentas gzip, lz4 ou zstd. Este formato é comprimido por padrão usando o gzip, e também oferece suporte a exportações paralelas.

t
tar

Gera um arquivo no formato tar, adequado para dar entrada no pg_restore. O formato tar é compatível com o formato diretório: a extração de um arquivo no formato tar produz uma coleção de arquivos no formato diretório válido. Entretanto, o formato tar não oferece suporte à compressão. Além disso, ao usar o formato tar, a ordem relativa dos itens de dados da tabela não pode ser alterada durante a restauração.

-j njobs
--jobs=njobs

Executa a exportação em paralelo exportando njobs tabelas simultaneamente. Esta opção pode reduzir o tempo necessário para realizar a exportação, mas também aumenta a carga no servidor de banco de dados. Esta opção só pode ser usada com o formato de saída diretório, porque este é o único formato de saída em que vários processos podem escrever seus dados ao mesmo tempo.

O pg_dump irá abrir njobs + 1 conexões com o servidor de banco de dados, portanto, deve-se ter certeza de que o parâmetro de configuração max_connections seja alto o suficiente para acomodar todas as conexões.

Solicitar bloqueios exclusivos em objetos de banco de dados durante a execução da exportação em paralelo pode fazer com que a exportação falhe. O motivo é que o processo líder pg_dump solicita bloqueios compartilhados (ACCESS SHARE) nos objetos que os processos trabalhadores irão exportar posteriormente, para garantir que ninguém os exclua e os faça desaparecer enquanto a exportação estiver em andamento. Se outro cliente solicitar um bloqueio exclusivo em uma tabela, este bloqueio não será concedido, mas ficará na fila aguardando a liberação do bloqueio compartilhado do processo líder. Consequentemente, qualquer outro acesso à tabela também não será concedido, ficando na fila após a solicitação do bloqueio exclusivo. Isto inclui o processo trabalhador que está tentando exportar a tabela. Sem quaisquer precauções, esta seria uma situação clássica de impasse (deadlock). Para detectar este conflito, o processo trabalhador pg_dump solicita outro bloqueio compartilhado usando a opção NOWAIT. Se o processo trabalhador não obtiver este bloqueio compartilhado, outra pessoa deve ter solicitado um bloqueio exclusivo neste meio tempo, não havendo como continuar com a exportação, então o pg_dump não tem escolha a não ser interromper a exportação.

Para realizar uma exportação em paralelo, o servidor de banco de dados precisa dar suporte a instantâneos sincronizados, um recurso introduzido na versão 9.2 do PostgreSQL para servidores primários, e na versão 10 para servidores em-espera (standby). Com este recurso, os clientes de banco de dados podem garantir que verão o mesmo conjunto de dados, mesmo usando conexões diferentes. A opção pg_dump -j usa várias conexões de banco de dados; se conecta ao banco de dados uma vez com o processo líder, e mais uma vez para cada processo trabalhador. Sem o recurso de instantâneo sincronizado, não seria garantido que os diferentes processos trabalhadores veriam os mesmos dados em cada conexão, o que poderia levar a uma exportação inconsistente.

-n padrão
--schema=padrão

Exporta apenas os esquemas que correspondem ao padrão; isto seleciona o próprio esquema e todos os objetos contidos nele. Quando esta opção não é especificada, são exportados todos os esquemas não pertencentes ao sistema no banco de dados de destino. Podem ser selecionados vários esquemas escrevendo várias opções -n. O parâmetro padrão é interpretado segundo as mesmas regras usadas pelos comandos \d do psql (veja Padrões), portanto, podem ser selecionados vários esquemas 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 que o interpretador de comandos expanda os curingas; veja Exemplos abaixo.

Nota

Quando é especificada a opção -n, o pg_dump não faz nenhuma tentativa de exportar quaisquer outros objetos de banco de dados dos quais o(s) esquema(s) selecionado(s) possa(m) depender. Portanto, não há garantia de que os resultados da exportação de um determinado esquema específico possam ser restaurados com êxito por si só em um banco de dados vazio.

Nota

Objetos que não fazem parte do esquema, como objetos grandes, não são exportados quando é especificada a opção -n. Pode-se adicionar objetos grandes de volta à exportação usando a opção --large-objects.

-N padrão
--exclude-schema=padrão

Não exporta esquemas que correspondem ao padrão. O padrão é interpretado segundo as mesmas regras usadas para a opção -n. A opção -N pode ser usada mais de uma vez para excluir esquemas que correspondem a qualquer um dos vários padrões.

Quando são fornecidas as duas opções -n e -N, o comportamento é exportar apenas os esquemas que correspondem a pelo menos uma opção -n, mas não a nenhuma opção -N. Se for fornecida a opção -N, mas não a opção -n, os esquemas que correspondem a -N serão excluídos do que, de outra forma, seria uma exportação normal.

-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_dump gera instruções ALTER OWNER ou SET SESSION AUTHORIZATION para definir o dono dos objetos de banco de dados criados. 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 criar 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.

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

-R
--no-reconnect

Esta opção está obsoleta, mas é ainda aceita para manter a compatibilidade com versões anteriores.

-s
--schema-only

Exporta apenas as definições dos objetos (esquema), mas não os dados ou as estatísticas.

Esta opção não pode ser usada juntamente com as opções --data-only ou --statistics-only. Esta opção é semelhante, mas por razões históricas não é idêntica, a especificar --section=pre-data --section=post-data.

(Não confunda esta opção com a opção --schema, que usa a palavra esquema com um significado diferente.)

Para excluir dados de tabelas apenas para um subconjunto de tabelas no banco de dados, veja a opção --exclude-table-data.

-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 padrão
--table=padrão

Exporta apenas as tabelas com nomes que correspondem ao padrão. Podem ser selecionadas várias tabelas escrevendo várias opções -t. O parâmetro padrão é interpretado segundo as mesmas regras usadas pelos comandos \d do psql (veja Padrões), assim várias tabelas também podem ser selecionadas 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 que o interpretador de comandos expanda os curingas; veja Exemplos abaixo.

Assim como para as tabelas, esta opção pode ser usada para exportar a definição de visões, visões materializadas, tabelas estrangeiras e sequências correspondentes. Esta opção não exporta o conteúdo de visões ou visões materializadas, e o conteúdo de tabelas estrangeiras só será exportado se o servidor estrangeiro correspondente for especificado com a opção --include-foreign-data.

As opções -n e -N não têm efeito quando a opção -t é usada, porque as tabelas selecionadas por -t serão exportadas independentemente dessas opções, e os objetos que não são de tabela não serão exportados.

Nota

Quando é especificada a opção -t, o pg_dump não faz nenhuma tentativa de exportar 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 os resultados da exportação de uma determinada tabela específica possam ser restaurados com êxito por si só em um banco de dados vazio.

-T padrão
--exclude-table=padrão

Não exporta nenhuma tabela que corresponda ao padrão. O padrão é interpretado segundo as mesmas regras usadas para a opção -t. A opção -T pode ser especificada mais de uma vez para excluir as tabelas que correspondem a qualquer um dos vários padrões.

Quando são especificadas as duas opções -t e -T, o comportamento é exportar apenas as tabelas que correspondem a pelo menos uma opção -t, mas não correspondem a nenhuma opção -T. Se for especificada a opção -T, mas não a opção -t, então as tabelas que correspondem a -T serão excluídas do que, de outra forma, seria uma exportação normal.

-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. e mensagens de progresso para a saída de erro padrão. Repetir a opção faz com que mensagens adicionais no nível de depuração apareçam na saída de erro padrão.

-V
--version

Mostra a versão do pg_dump e termina.

-x
--no-privileges
--no-acl

Impede a exportação dos privilégios de acesso (comandos GRANT/REVOKE).

-Z nível
-Z método[:detalhe]
--compress=nível
--compress=método[:detalhe]

Especifica o método de compressão e/ou o nível de compressão a ser usado. O método de compressão pode ser definido como gzip, lz4, zstd ou none para nenhuma compressão. Opcionalmente, pode-se especificar uma cadeia de caracteres contendo detalhes da compressão. Se a cadeia de caracteres de detalhes for um número inteiro, ela irá especificar o nível de compressão. Caso contrário, deve ser uma lista de itens separados por vírgulas, cada um com a forma palavra-chave ou palavra-chave=valor. No momento, as palavras-chave com suporte são level e long.

Se não for especificado nenhum nível de compressão, será usado o nível de compressão padrão. Se for especificado apenas o nível sem mencionar o algoritmo, então será usada a compressão gzip se o nível for maior que 0, e não será usada nenhuma compressão se o nível for 0.

Para os formatos de arquivo personalizado e diretório, esta opção especifica a compressão de segmentos individuais de dados de tabela, e o padrão é comprimir usando o gzip em um nível moderado. Para saída em texto-puro, definir um nível de compressão diferente de zero faz com que todo o arquivo de saída seja comprimido, como se tivesse sido processado pelo gzip, lz4 ou zstd; mas o padrão é não comprimir. Com a compressão zstd, o modo long pode melhorar a taxa de compressão, ao custo de maior uso de memória.

No momento o formato de arquivo tar não tem suporte para compressão.

--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 bancos de dados não PostgreSQL. Qualquer erro ocorrido durante a restauração fará com que apenas as linhas que fazem parte do INSERT com problema sejam perdidas, em vez de todo o conteúdo da tabela.

--disable-dollar-quoting

Esta opção desativa o uso de delimitação por cifrão para 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 que inclua os dados, mas não inclua o esquema. Ela instrui o pg_dump 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 a opção --disable-triggers devem ser executados como superusuário. Portanto, também deve ser especificado um nome de superusuário com a opção -S ou, de preferência, ter o cuidado de executar o script gerado como um superusuário.

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

--enable-row-security

Esta opção é relevante apenas ao exportar o conteúdo de uma tabela que possui segurança de linha. Por padrão, pg_dump define row_security como desativado, para garantir que todos os dados da tabela sejam exportados. 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_dump a definir row_security como ativado, permitindo ao usuário exportar as partes do conteúdo da tabela à qual ele tem acesso.

Note que, no momento, se esta opção for usada provavelmente também irá se desejar que a exportação esteja no formato INSERT, porque o COPY FROM durante a restauração não oferece suporte à segurança de linha.

--exclude-extension=padrão

Não exporta nenhuma extensão que corresponda ao padrão. O padrão é interpretado segundo as mesmas regras da opção -e. A opção --exclude-extension pode ser fornecida mais de uma vez para excluir extensões que correspondem a qualquer um dos vários padrões.

Quando são fornecidas as duas opções -e e --exclude-extension, o comportamento consiste em exportar apenas as extensões que correspondem a pelo menos uma opção -e, mas não correspondem a nenhuma opção --exclude-extension. Se for fornecida a opção --exclude-extension, mas não a opção -e, então as extensões que correspondem à opção --exclude-extension serão excluídas do que, de outra forma, seria uma exportação normal.

--exclude-table-and-children=padrão

Esta opção é semelhante à opção -T/--exclude-table, exceto por também excluir quaisquer partições ou tabelas filhas de herança da(s) tabela(s) que correspondem ao padrão.

--exclude-table-data=padrão

Não exporta dados de nenhuma tabela que corresponda ao padrão. O padrão é interpretado segundo as mesmas regras usadas para a opção -t. A opção --exclude-table-data pode ser usada mais de uma vez para excluir tabelas que correspondem a qualquer um dos vários padrões. Esta opção é útil quando é necessária a definição de uma determinada tabela específica, mesmo que não se precise dos dados dela.

Para excluir dados de todas as tabelas do banco de dados, veja --schema-only ou --statistics-only.

--exclude-table-data-and-children=padrão

Esta opção é semelhante à opção --exclude-table-data, exceto por também excluir dados de quaisquer partições ou tabelas filhas de herança da(s) tabela(s) que correspondem ao padrão.

--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 feitas 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 objetos a serem incluídos ou excluídos da exportação. Os padrões são interpretados segundo as mesmas regras das opções correspondentes: -t/--table, --table-and-children, -T/--exclude-table e --exclude-table-and-children para tabelas, -n/--schema e -N/--exclude-schema para esquemas, --include-foreign-data para dados em servidores estrangeiros, --exclude-table-data e --exclude-table-data-and-children para dados de tabela, e -e/--extension e --exclude-extension para extensões. 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 especificado mais de uma vez para indicar vários arquivos de filtro.

O arquivo lista um padrão de objeto por linha, com o seguinte formato:

{ include | exclude } { extension
                      | foreign_data
                      | table
                      | table_and_children
                      | table_data
                      | table_data_and_children
                      | schema
                      } 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:

  • extension: extensões. Funciona como a opção -e/--extension ou --exclude-extension.

  • foreign_data: dados em servidores estrangeiros. Funciona como a opção --include-foreign-data. Esta palavra-chave só pode ser usada com a palavra-chave include.

  • table: tabelas. Funciona como a opção -t/--table ou -T/--exclude-table.

  • table_and_children: tabelas, incluindo quaisquer partições ou tabelas filhas de herança. Funciona como a opção --table-and-children ou --exclude-table-and-children.

  • table_data: dados de tabela de quaisquer tabelas que correspondem ao padrão. Funciona como a opção --exclude-table-data. Esta palavra-chave só pode ser usada com a palavra-chave exclude.

  • table_data_and_children: dados de tabela de quaisquer tabelas que correspondam ao padrão assim como quaisquer partições ou tabelas filhas de herança da(s) tabela(s). Funciona como a opção --exclude-table-data-and-children. Esta palavra-chave só pode ser usada com a palavra-chave exclude.

  • schema: esquemas. Funciona como a opção -n/--schema ou -N/--exclude-schema.

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.

Os arquivos de exemplo estão listados abaixo na seção Exemplos.

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

--include-foreign-data=servidor_estrangeiro

Exporta os dados de qualquer tabela estrangeira no servidor estrangeiro correspondente ao padrão servidor_estrangeiro. Podem ser selecionados vários servidores estrangeiros escrevendo a opção --include-foreign-data várias vezes. Além disso, o parâmetro servidor_estrangeiro é interpretado como um padrão segundo as mesmas regras usadas pelos comandos \d do psql (veja Padrões), portanto, também podem ser selecionados vários servidores estrangeiros 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 que o interpretador de comandos expanda os curingas; veja Exemplos abaixo. A única exceção é que não é permitido um padrão vazio.

Nota

O uso de caracteres curinga em --include-foreign-data pode resultar no acesso não esperado a servidores estrangeiros. Além disso, para usar esta opção com segurança, deve-se ter certeza que o servidor especificado tem um dono confiável.

Nota

Quando é especificado --include-foreign-data, o pg_dump não verifica se é possível escrever na tabela estrangeira. Portanto, não há garantia de que os resultados de uma exportação de tabela estrangeira possam ser importados com sucesso.

--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 bancos de dados não-PostgreSQL. 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. Note que a restauração poderá falhar inteiramente se a ordem das colunas das tabelas tiver sido reorganizada. A opção --column-inserts é segura contra alterações na ordem das colunas das tabelas, embora seja ainda mais lenta.

--load-via-partition-root

Ao exportar dados para uma partição de tabela, deve-se fazer 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 seja redeterminada a partição apropriada para cada linha quando os dados são restaurados. Pode ser útil ao restaurar 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 usada 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. (Os formatos permitidos variam dependendo da versão do servidor onde está sendo feita a exportação, mas um número inteiro de milissegundos é aceito por todas as versões.)

--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-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_dump aguarda até que todos os arquivos sejam escritos com segurança no disco. Esta opção faz com que o pg_dump 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.

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

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

Esta opção é ignorada ao gerar um arquivo de saída estruturado (não texto-puro). Para os formatos estruturados, pode-se especificar esta opção ao executar o utilitário pg_restore.

--no-toast-compression

Não gera comandos de saída 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. Os dados em tabelas e sequências sem registro são sempre excluídos ao realizar uma exportação a partir de um servidor em-espera.

--on-conflict-do-nothing

Adiciona a cláusula ON CONFLICT DO NOTHING nos comandos INSERT. Esta opção não é válida, a menos que também seja especificado --inserts, --column-inserts, ou --rows-per-insert.

--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 seja diferente da versão do pg_dump, ou quando a saída deve ser restaurada em um servidor com uma versão principal diferente. Por padrão, o pg_dump 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 a opção --quote-all-identifiers evita estes problemas, ao custo de um script de exportação difícil de ler.

--restrict-key=chave_de_restrição

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_dump 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=número_de_linhas

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.

--section=nome_da_seção

Exporta 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 é exportar todas as seções.

A seção de dados contém os dados reais das tabelas, o conteúdo de objetos grandes, os valores de sequência e as estatísticas para tabelas, visões materializadas e tabelas estrangeiras. Os itens de pós-dados incluem definições de índices, gatilhos, regras, estatísticas para índices e restrições que não sejam de verificação validade e restrições de não-nulo. Os itens de pré-dados incluem todos os outros itens de definição de dados.

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

--serializable-deferrable

Usa uma transação serializável para a exportação, para garantir que o instantâneo usado seja consistente com os estados posteriores do banco de dados; mas faz isto esperando por um ponto no fluxo de transações em que nenhuma anomalia possa estar presente, de modo que não haja risco de falha na exportação ou causando a interrupção de outras transações com serialization_failure. Veja Controle de concorrência para obter mais informações sobre isolamento de transação e controle de concorrência.

Esta opção não é benéfica para uma exportação que se destina apenas à recuperação de desastres. Pode ser útil para uma exportação usada para importar uma cópia do banco de dados para fins de geração de relatórios, ou outro compartilhamento de carga leitura-apenas, enquanto o banco de dados original continua sendo atualizado. Sem esta opção, a exportação pode refletir um estado que não é consistente com qualquer execução serial das transações eventualmente efetivadas. Por exemplo, se forem usadas técnicas de processamento em lote, um lote pode aparecer como fechado na exportação, sem que todos os itens presentes no lote estejam na exportação.

Esta opção não fará diferença se não houver transações de leitura/escrita ativas quando o pg_dump foi iniciado. Se transações de leitura e escrita estiverem ativas, o início da exportação poderá ser atrasado por um período de tempo indeterminado. Uma vez em execução, o desempenho com ou sem esta opção é o mesmo.

--snapshot=nome_do_instantâneo

Usa o instantâneo sincronizado indicado ao fazer a cópia de segurança do banco de dados (veja Tabela 9.100 para obter mais detalhes).

Esta opção é útil quando é necessário sincronizar a cópia de segurança com um encaixe de replicação lógica (veja Logical Decoding) ou com uma sessão concorrente.

No caso de uma cópia de segurança paralela, é usado o nome do instantâneo indicado por esta opção, em vez de obter um novo instantâneo.

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

--strict-names

Requer que cada padrão de extensão (-e/--extension), esquema (-n/--schema) e tabela (-t/--table) corresponda a pelo menos uma extensão/esquema/tabela no banco de dados a ser exportado. Note que, se nenhum dos padrões de extensão/esquema/tabela encontrar alguma correspondência, o pg_dump irá gerar um erro mesmo sem a opção --strict-names.

Esta opção não tem efeito sobre --exclude-extension, -N/--exclude-schema, -T/--exclude-table ou --exclude-table-data. Um padrão de exclusão que não corresponda a nenhum objeto não é considerado um erro.

--sync-method=método

Quando definido como fsync, que é o padrão, o pg_dump --format=diretório irá abrir e sincronizar recursivamente todos os arquivos no diretório de exportação.

No Linux, pode ser usado o syncfs para solicitar ao sistema operacional que sincronize todo o sistema de arquivos que contém o diretório de exportação. Veja recovery_init_sync_method para obter informações sobre as precauções a serem tomadas ao usar o syncfs.

Esta opção não tem efeito quando é usada a opção --no-sync, ou quando --format não é definido como directory.

--table-and-children=padrão

Esta opção é semelhante à opção -t/--table, exceto por também incluir quaisquer partições ou tabelas filhas de herança da(s) tabela(s) que correspondem ao padrão.

--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. Além disso, uma exportação usando SET SESSION AUTHORIZATION certamente irá precisar de privilégios de superusuário para importar corretamente, enquanto o comando ALTER OWNER requer privilégios menores.

-?
--help

Mostra a ajuda sobre os argumentos de linha de comando do pg_dump, e termina.

As seguintes opções de linha de comando controlam os parâmetros de conexão com o banco de dados.

-d nome_do_banco_de_dados
--dbname=nome_do_banco_de_dados

Especifica o nome do banco de dados ao qual se conectar. Esta opção equivale a especificar o nome_do_banco_de_dados como o primeiro argumento não-opção na linha de comando. 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.

-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, uma conexão de soquete de domínio Unix é tentada.

-p porta
--port=porta

Especifica a porta TCP, ou a 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ário

Nome de usuário para se conectar como.

-w
--no-password

Nunca emita 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_dump solicitar a senha antes de conectar ao banco de dados.

Esta opção nunca é essencial, porque o pg_dump solicita automaticamente a senha se o servidor exigir autenticação por senha. No entanto, o pg_dump 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 criar a cópia de segurança. Esta opção faz com que o pg_dump 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_dump, mas pode mudar para uma função de banco de dados com os privilégios 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

PGDATABASE
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).

Diagnósticos

Internamente, o pg_dump executa comandos SELECT. Havendo problemas ao executar o pg_dump, 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.

A atividade de banco de dados do pg_dump é normalmente coletada pelo sistema de estatísticas cumulativas Se isto não for desejado, pode-se definir o parâmetro track_counts como falso por meio de PGOPTIONS, ou do comando ALTER USER.

Notas

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_dump 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 copiar de template0, e não de template1. Por exemplo:

CREATE DATABASE foo WITH TEMPLATE template0;

Quando é escolhida uma exportação sem esquema e é usada a opção --disable-triggers, o pg_dump emite comandos para desativar os gatilhos nas tabelas dos usuários antes da inserção dos dados e, em seguida, emite comandos para reativá-los após a inserção dos dados. Se a importação for interrompida no meio do processo, os catálogos do sistema poderão ficar em um estado incorreto.

Quando é especificada a opção --statistics, o pg_dump 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 após a importação a partir de um arquivo de exportação para garantir o desempenho ideal; veja Atualização das estatísticas do planejador e O processo de limpeza automática para obter mais informações.

Como o pg_dump é usado para transferir dados para versões mais recentes de PostgreSQL, pode-se esperar que a saída do pg_dump possa ser importada em versões mais recentes do servidor PostgreSQL do que a versão do pg_dump usada para realizar a exportação. O pg_dump também pode realizar exportação de um servidor PostgreSQL mais antigo do que a sua própria versão. (No momento, há suporte para servidores a partir da versão 9.2.) Entretanto, o pg_dump não pode realizar exportações de servidores PostgreSQL mais recentes que a sua própria versão principal; o pg_dump irá se recusar até mesmo a tentar, em vez de arriscar gerar uma exportação inválida. Além disso, não há garantia de que a saída do pg_dump possa ser importada em um servidor de uma versão principal mais antiga — nem mesmo se a exportação tiver sido obtida de um servidor dessa versão. A carga de um arquivo de exportação em um servidor mais antigo pode exigir a edição manual do arquivo para remover a sintaxe que o servidor não reconhece. Se recomenda o uso da opção --quote-all-identifiers em casos de versões cruzadas, porque esta opção pode evitar problemas decorrentes da variação de listas de palavras reservadas ​​em diferentes versões do PostgreSQL.

Ao exportar subscrições de replicação lógica,o pg_dump irá gerar comandos CREATE SUBSCRIPTION que usam a opção connect = false, para que a importação da subscrição não crie conexões remotas para a criação de um encaixe de replicação ou para a cópia inicial da tabela. Dessa forma, o arquivo de exportação pode ser importado sem a necessidade de acesso à rede dos servidores remotos. Caberá então ao usuário reativar as subscrições de forma adequada. Se os hospedeiros envolvidos tenham sido alterados, as informações de conexão podem precisar ser modificadas. Também pode ser apropriado truncar as tabelas de destino antes de iniciar uma nova cópia completa da tabela. Se os usuários pretendem copiar os dados iniciais durante a atualização, eles deverão criar o encaixe com two_phase = false. Após a sincronização inicial, a opção two_phase será ativada automaticamente pelo subscritor se a subscrição tiver sido originalmente criada com a opção two_phase = true.

Geralmente, recomenda-se usar a opção -X (--no-psqlrc) ao importar um banco de dados a partir de um script de texto-puro gerado pelo pg_dump, para garantir um processo de importação limpo e evitar possíveis conflitos com configurações personalizadas do psql.

Exemplos

Para exportar o banco de dados chamado mydb em um arquivo de script SQL:

$ pg_dump mydb > db.sql

Para importar este script em um banco de dados (recém-criado) chamado newdb:

$ psql -X -d newdb -f db.sql

Para exportar um banco de dados para um arquivo comprimido em formato personalizado:

$ pg_dump -Fc mydb > db.dump

Para exportar um banco de dados em uma exportação no formato diretório:

$ pg_dump -Fd mydb -f dumpdir

Para exportar um banco de dados em uma exportação em paralelo no formato diretório com 5 processos trabalhadores:

$ pg_dump -Fd mydb -j 5 -f dumpdir

Para importar uma exportação comprimida em um banco de dados (recém-criado) chamado newdb:

$ pg_restore -d newdb db.dump

Para importar uma exportação comprimida no mesmo banco de dados de onde foi extraída, descartando o conteúdo atual desse banco de dados:

$ pg_restore -d postgres --clean --create db.dump

Para exportar uma única tabela chamada mytab:

$ pg_dump -t mytab mydb > db.sql

Para exportar todas as tabelas cujos nomes começam com emp no esquema detroit, exceto a tabela chamada employee_log:

$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql

Para exportar todos os esquemas cujos nomes começam com east ou west e terminam por gsm, excluindo quaisquer esquemas cujos nomes contenham a palavra test:

$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql

A mesma coisa, usando notação de expressão regular para consolidar as opções:

$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql

Para exportar todos os objetos do banco de dados, exceto as tabelas cujos nomes começam com ts_:

$ pg_dump -T 'ts_*' mydb > db.sql

Para especificar um nome em letras maiúsculas ou com letras maiúsculas e minúsculas na opção -t, e nas opções relacionadas, é necessário colocar o nome entre aspas; caso contrário, o nome será convertido para letras minúsculas (veja Padrões). Mas as aspas são caracteres especiais para o interpretador de comandos, portanto, por sua vez, devem ser precedidas por um caractere de escape. Assim, para exportar uma única tabela com um nome que inclui letras maiúsculas e minúsculas, é necessário algo como:

$ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql

Para exportar todas as tabelas cujos nomes começam por mytable, exceto a tabela mytable2, pode ser especificado um arquivo de filtro chamado filter.txt, como:

include table mytable*
exclude table mytable2

$ pg_dump --filter=filter.txt mydb > db.sql

Veja também

pg_dumpall, pg_restore, psql