142 votes

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

Je cherche un moyen d'obtenir toutes les lignes en tant que INSERT à partir d'une table spécifique dans une base de données en utilisant pg_dump dans PostgreSQL.

Par exemple, j'ai une table A et j'ai besoin de toutes les lignes de la table A en tant que INSERT il devrait également transférer ces instructions dans un fichier.

Est-ce possible ?

279voto

psmears Points 7809

Si version < 8.4.0

pg_dump -D -t <table> <database>

Ajouter -a avant le -t si vous ne voulez que les INSERTS, sans le CREATE TABLE etc. pour créer la table en premier lieu.

version >= 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>

64 votes

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>

1 votes

Le site -d , -a y -t Les versions courtes sont toujours présentes, cependant. Vérifié avec PG11.

0 votes

--inserts est une autre option ; elle restaure un peu plus rapidement mais ne tolère pas les changements d'ordre des colonnes.

44voto

James111 Points 948

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

  1. cd à l'endroit où vous voulez .sql le fichier à localiser
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Notez le > my_dump.sql commandement. Cela va tout mettre dans un fichier sql nommé mon_dump

5voto

Lenon Tolfo Points 151

Juste au cas où vous utilisez un accès à distance et que vous voulez 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 va créer un dump avec toutes les données de la base et utiliser

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

3voto

Philippe Gachoud Points 209

Mis dans un script J'aime bien quelque chose comme ça :

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

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

1voto

suhail Points 2520

Pour postgres 12, cela a fonctionné pour moi :

pg_dump -d <database> -t <table> > DATA.dump

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X