Verwenden von pg_dump, um nur Einfügeanweisungen aus einer Tabelle in der Datenbank abzurufen

121

Ich suche nach einer Möglichkeit, INSERTmit pg_dumpPostgreSQL alle Zeilen als Anweisungen aus einer bestimmten Tabelle in einer Datenbank abzurufen.

ZB habe ich Tabelle A und alle Zeilen in Tabelle AI müssen als INSERTAnweisungen, es sollte auch diese Anweisungen in eine Datei sichern.

Ist das möglich?

Elitmiar
quelle

Antworten:

229

wenn Version <8.4.0

pg_dump -D -t <table> <database>

Fügen Sie -avor dem hinzu, -twenn Sie nur die INSERTs möchten, ohne dass CREATE TABLE usw. die Tabelle überhaupt erst einrichten.

version> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
quelle
58
Die Optionen -d und -D wurden aus PostgreSQL 8.4 entfernt (siehe Versionshinweise zu 8.4.0). Sie müssen jetzt die "langen" Namen verwenden: pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Die -d,, -aund -tKurzversionen sind jedoch noch vorhanden. Mit PG11 überprüft.
Demisx
--insertsist eine andere Option; Es wird etwas schneller wiederhergestellt, kann jedoch Änderungen der Spaltenreihenfolge nicht tolerieren
Andy
34

Wenn Sie Ihre Einfügungen in eine .sql- Datei DUMPEN möchten :

  1. cdan den Ort, den Sie wollen .sqlDatei zu lokalisierenden
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Beachten Sie den > my_dump.sqlBefehl. Dadurch wird alles in eine SQL-Datei mit dem Namen my_dump eingefügt

James111
quelle
2

In ein Skript schreiben Ich mag so etwas:

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

Nur für den Fall, dass Sie einen Remotezugriff verwenden und alle Datenbankdaten sichern möchten, können Sie Folgendes verwenden:

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

Es wird ein Speicherauszug mit allen Datenbankdaten erstellt und verwendet

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

um dieselben Daten in Ihre Datenbank einzufügen, wenn Sie dieselbe Struktur haben

Lenon Tolfo
quelle