Menggunakan pg_dump untuk hanya mendapatkan pernyataan insert dari satu tabel dalam database

121

Saya mencari cara untuk mendapatkan semua baris sebagai INSERTpernyataan dari satu tabel tertentu dalam database menggunakan pg_dumpdi PostgreSQL.

Misalnya, saya memiliki tabel A dan semua baris dalam tabel AI perlu sebagai INSERTpernyataan, itu juga harus membuang pernyataan tersebut ke file.

Apakah ini mungkin?

Elitmiar
sumber

Jawaban:

230

jika versi <8.4.0

pg_dump -D -t <table> <database>

Tambahkan -asebelum -tjika Anda hanya ingin INSERT, tanpa CREATE TABLE dll untuk menyiapkan tabel di tempat pertama.

versi> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
sumber
58
Opsi -d dan -D telah dihapus dari PostgreSQL 8.4 (lihat catatan rilis 8.4.0). Anda sekarang harus menggunakan nama "panjang": pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Versi -d,, -adan -tpendek masih ada. Diperiksa dengan PG11.
demisx
--insertsadalah pilihan lain; itu memulihkan sedikit lebih cepat tetapi tidak dapat mentolerir perubahan urutan kolom
Andy
34

Jika Anda ingin DUMP sisipan Anda ke dalam file .sql :

  1. cdke lokasi tempat Anda ingin menyimpan .sqlfile
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Perhatikan > my_dump.sqlperintahnya. Ini akan memasukkan semuanya ke dalam file sql bernama my_dump

Yakobus111
sumber
2

Masukkan ke dalam skrip yang saya suka seperti itu:

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

jika Anda menggunakan akses jarak jauh dan ingin membuang semua data database, Anda dapat menggunakan:

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

itu akan membuat dump dengan semua data database dan penggunaan

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

untuk memasukkan data yang sama ke dalam basis data Anda mengingat Anda memiliki struktur yang sama

Lenon Tolfo
sumber