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?

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>

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


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.