Utilisation de pg_dump pour obtenir uniquement les instructions d'insertion d'une table dans la base de données

121

Je cherche un moyen d'obtenir toutes les lignes sous forme d' INSERTinstructions à partir d'une table spécifique dans une base de données en utilisant pg_dumpPostgreSQL.

Par exemple, j'ai la table A et toutes les lignes de la table AI ont besoin de INSERTdéclarations, il devrait également vider ces déclarations dans un fichier.

Est-ce possible?

Elitmiar
la source

Réponses:

230

si version <8.4.0

pg_dump -D -t <table> <database>

Ajoutez -aavant le -tsi vous voulez seulement que les INSERTs, sans le CREATE TABLE, etc. pour configurer la table en premier lieu.

version> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
la source
58
Les options -d et -D ont été supprimées de PostgreSQL 8.4 (voir les notes de version 8.4.0). Vous devez maintenant utiliser les noms "longs": pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Les -d, -aet -tversions courtes sont toujours présentes, cependant. Vérifié avec PG11.
demisx
--insertsest une autre option; il restaure légèrement plus vite mais ne peut pas tolérer les changements d'ordre des colonnes
Andy
34

Si vous souhaitez vider vos insertions dans un fichier .sql :

  1. cdà l'emplacement que vous souhaitez .sqldéposer
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Notez la > my_dump.sqlcommande. Cela mettra tout dans un fichier sql nommé my_dump

James111
la source
2

Mettez dans un script que j'aime quelque chose comme ça:

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

juste au cas où vous utilisez un accès distant et souhaitez vider toutes les données de la base de données, vous pouvez utiliser:

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

il créera un vidage avec toutes les données de la base de données et utilisera

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

d'insérer les mêmes données dans votre base de données en considérant que vous avez la même structure

Lenon Tolfo
la source