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?

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>

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


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.