Como criar um backup de uma única tabela em um banco de dados postgres?

160

Existe uma maneira de criar um backup de uma única tabela dentro de um banco de dados usando o postgres? E como? Isso também funciona com o comando pg_dump?

Elitmiar
fonte

Respostas:

212

Use --tablepara dizer pg_dumpqual tabela ele deve fazer backup:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Frank Heikens
fonte
9
E como restaurar esse arquivo de backup. (.backup), eu usei, pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"mas ele saiu:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares
13
psql -U username -d database -1 -f your_dump.sql
precisa saber é
5
o que você quis dizer: abstract_file_path?
Bandungeuy 22/09/18
3
Não sei por que essa resposta foi votada, as pessoas clicam em +1 sem inspecionar as próprias coisas ou tentar. O problema com esta resposta, que a torna totalmente inútil, é que a solução / comandos fornecidos não exportam sequências criadas na tabela (chave primária) e, portanto, a importação falha. Não conheço um único banco de dados PG de produção em qualquer lugar que não use chaves primárias com sequências. É meia resposta, falha em responder completamente à pergunta e requer trabalho adicional para exportar / importar uma única tabela.
user10664542
1
com um toque sudo um pouco diferente, acabei com um erro de permissão no despejo de arquivos (lógico o suficiente, pois o usuário postgres não tem acesso de gravação nos meus diretórios) e tive um erro de sinalização desconhecido --ignore-version. A resposta de Prashant Kumar, que é mais simples, funcionou para mim.
JL Peyret
84

Se você estiver no Ubuntu,

  1. Entre no seu usuário do postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Certifique-se de que você está executando o comando onde o postgresusuário tem permissões de gravação (Exemplo: /tmp)

Editar

Se você quiser despejar o .sql em outro computador, considere ignorar as informações do proprietário que serão salvas no arquivo .sql.

Você pode usar pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

Sri Harsha Kappala
fonte
1
E se você quiser todas as tabelas, sem precisar especificar o nome de cada uma?
23415 shekeine
3
Basta remover a opção -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala
4
Não sei por que, mas a opção -d não é válida para o psql9.3 e o comando fornecido não funciona para mim. Um deles é pg_dump -U nome do usuário db_name -t table_name> fileName .
kucukbay serkan
pg_dump -t <table_name> <database_name> > file.sql
Sriram
@ user10664542: Por favor, leia o manual, especialmente esta seção: "Para este propósito," tabela "inclui visualizações, visualizações materializadas, sequências e tabelas estrangeiras".
quer
42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t minha_tabela> backup.sql

Você pode fazer o backup de uma única tabela, mas eu sugiro que faça o backup de todo o banco de dados e restaure a tabela que você precisar. É sempre bom ter backup de todo o banco de dados.

9 maneiras de usar o pg_dump

Prashant Kumar
fonte
Não sei por que essa resposta foi votada, as pessoas clicam em +1 sem inspecionar as próprias coisas ou tentar. O problema com esta resposta, que a torna totalmente inútil, é que a solução / comandos fornecidos não exportam sequências criadas na tabela (chave primária) e, portanto, a importação falha. Não conheço um único banco de dados PG de produção em qualquer lugar que não use chaves primárias com sequências. É meia resposta, falha em responder completamente à pergunta e requer trabalho adicional para exportar / importar uma única tabela.
user10664542
como observado acima, tenho uma forte suspeita de que o usuário10664542, sem nenhuma resposta do SO postgres ao seu nome, esteja fora de profundidade aqui. Embora a sequência traga complicações adicionais, há votos suficientes nas respostas semelhantes que as pessoas provavelmente os fizeram funcionar, mesmo que precisassem ajustar a sequência após o fato. se eu tivesse que restaurar meu despejo, procuraria maneiras de atualizar o último ID da sequência de um max(id)na minha mesa. esta é a resposta que funcionou e estou confiante, olhando o sql gerado, que poderia ter restaurado.
JL Peyret
9

Se você preferir uma interface gráfica do usuário, poderá usar o pgAdmin III (Linux / Windows / OS X). Simplesmente clique com o botão direito do mouse na tabela de sua escolha e depois em "backup". Isso criará um pg_dumpcomando para você.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Franck Dernoncourt
fonte
2

Como complemento à resposta de Frank Heiken, se você deseja usar INSERTdeclarações em vez de copy from stdin, deve especificar a --insertsbandeira

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Observe que eu deixei de fora a --ignore-versionbandeira, porque está obsoleta.

user3207874
fonte
Não sei por que essa resposta foi votada, as pessoas clicam em +1 sem inspecionar as próprias coisas ou tentar. O problema com esta resposta, que a torna totalmente inútil, é que a solução / comandos fornecidos não exportam sequências criadas na tabela (chave primária) e, portanto, a importação falha. Não conheço um único banco de dados PG de produção em qualquer lugar que não use chaves primárias com sequências. É meia resposta, falha em responder completamente à pergunta e requer trabalho adicional para exportar / importar uma única tabela.
user10664542