Usando pg_dump para obtener solo declaraciones de inserción de una tabla dentro de la base de datos

121

Estoy buscando una forma de obtener todas las filas como INSERTdeclaraciones de una tabla específica dentro de una base de datos usando pg_dumpPostgreSQL.

Por ejemplo, tengo la tabla A y todas las filas de la tabla AI necesitan como INSERTdeclaraciones, también debería volcar esas declaraciones en un archivo.

es posible?

Elitmiar
fuente

Respuestas:

229

si la versión <8.4.0

pg_dump -D -t <table> <database>

Agregue -aantes de -tsi solo desea los INSERT, sin CREATE TABLE, etc.para configurar la tabla en primer lugar.

versión> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
fuente
58
Las opciones -d y -D se eliminaron de PostgreSQL 8.4 (consulte las notas de la versión 8.4.0). Ahora debe usar los nombres "largos": pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Los -d, -ay -tcortos versiones todavía están presentes, sin embargo. Comprobado con PG11.
demisx
--insertses otra opción; se restaura un poco más rápido pero no puede tolerar cambios en el orden de las columnas
Andy
34

Si desea volcar sus inserciones en un archivo .sql :

  1. cda la ubicación que desea .sqlpresentar para que se encuentre
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Tenga en cuenta el > my_dump.sqlcomando. Esto pondrá todo en un archivo sql llamado my_dump

James111
fuente
2

Ponga en un guión que me guste algo así:

#!/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
fuente
1

en caso de que esté utilizando un acceso remoto y desee volcar todos los datos de la base de datos, puede usar:

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

creará un volcado con todos los datos de la base de datos y usará

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

para insertar los mismos datos en su base de datos considerando que tiene la misma estructura

Lenon Tolfo
fuente