Usando o pg_dump para obter apenas instruções de inserção de uma tabela dentro do banco de dados

121

Estou procurando uma maneira de obter todas as linhas como INSERTdeclarações de uma tabela específica dentro de um banco de dados usando pg_dumpPostgreSQL.

Por exemplo, eu tenho a tabela A e todas as linhas da tabela AI precisam como INSERTinstruções, ela também deve despejar essas instruções em um arquivo.

Isso é possível?

Elitmiar
fonte

Respostas:

229

se a versão <8.4.0

pg_dump -D -t <table> <database>

Adicione -aantes de -tse você quiser apenas os INSERTs, sem o CREATE TABLE etc para configurar a tabela em primeiro lugar.

versão> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
fonte
58
As opções -d e -D foram removidas do PostgreSQL 8.4 (consulte as notas de versão 8.4.0). Agora você deve usar os nomes "longos": pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Os -d, -ae -tcurtas versões ainda estão presentes, no entanto. Verificado com PG11.
demisx
--insertsé outra opção; restaura um pouco mais rápido, mas não pode tolerar alterações na ordem das colunas
Andy
34

Se você deseja DUMP suas inserções em um arquivo .sql :

  1. cdpara o local que você deseja que o .sqlarquivo seja localizado
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Observe o > my_dump.sqlcomando. Isso colocará tudo em um arquivo sql chamado my_dump

James111
fonte
2

Colocado em um script, gosto de algo assim:

#!/bin/bash
set -o xtrace # remove me after debug
TABLE=charge_unit
DB_NAME=prod_sit_entities_db

BASE_DIR=/var/backups/someDir
LOCATION="${BASE_DIR}/myApp_$(date +%Y%m%d_%H%M%S)"
FNAME="${LOCATION}_${DB_NAME}_${TABLE}.sql"

# Create backups directory if not exists
if [[ ! -e $BASE_DIR ]];then
|       mkdir $BASE_DIR
|       chown -R postgres:postgres $BASE_DIR
fi

sudo -H -u postgres pg_dump --column-inserts --data-only --table=$TABLE $DB_NAME > $FNAME
sudo gzip $FNAME
Pipo
fonte
1

caso você esteja usando um acesso remoto e queira despejar todos os dados do banco de dados, você pode usar:

pg_dump -a -h your_host -U your_user -W -Fc your_database > DATA.dump

ele irá criar um dump com todos os dados do banco de dados e usar

pg_restore -a -h your_host -U your_user -W -Fc your_database < DATA.dump

inserir os mesmos dados em sua base de dados considerando que você tem a mesma estrutura

Lenon Tolfo
fonte