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?

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>

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


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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.