pg_dump — exporta um banco de dados do PostgreSQL como um script SQL ou para outros formatos.
pg_dump [opção_de_conexão...] [opção...] [nome_do_banco_de_dados]
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.
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.
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-onlyExporta 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.
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:
pplainGera um arquivo de script SQL de texto-puro (o padrão).
ccustomGera 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.
ddirectory
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.
ttar
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.
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.
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-reconnectEsta opção está obsoleta, mas é ainda aceita para manter a compatibilidade com versões anteriores.
-s--schema-onlyExporta 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.
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--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. 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--versionMostra 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-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 bancos de
dados não PostgreSQL.
Qualquer erro ocorrido durante a restauração fará com que apenas
as linhas que fazem parte do tabela
(coluna, ...) VALUES ...INSERT com
problema sejam perdidas, em vez de todo o conteúdo da tabela.
--disable-dollar-quotingEsta 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-triggersEsta 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-securityEsta 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.
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.
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-dataNão exporta dados.
--no-policiesNão exporta políticas de segurança de linha.
--no-publicationsNão exporta publicações.
--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_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-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.
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-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.
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-compressionNã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-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. 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âneoUsa 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.
--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.
--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.
-?--helpMostra 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árioNome 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--passwordForç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.
PGDATABASEPGHOSTPGOPTIONSPGPORTPGUSERParâ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).
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.
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.
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