การใช้ pg_dump เพื่อรับคำสั่งแทรกจากตารางเดียวภายในฐานข้อมูล


121

ฉันกำลังมองหาวิธีรับแถวทั้งหมดเป็นINSERTคำสั่งจากตารางเฉพาะหนึ่งตารางภายในฐานข้อมูลโดยใช้pg_dumpใน PostgreSQL

เช่นฉันมีตาราง A และแถวทั้งหมดในตาราง AI ต้องการเป็นINSERTคำสั่งก็ควรถ่ายโอนข้อความเหล่านั้นไปยังไฟล์ด้วย

เป็นไปได้หรือไม่

คำตอบ:


230

ถ้าเวอร์ชัน <8.4.0

pg_dump -D -t <table> <database>

เพิ่ม-aก่อน-tถ้าคุณต้องการเฉพาะ INSERTs โดยไม่ต้องสร้างตาราง ฯลฯ เพื่อตั้งค่าตารางตั้งแต่แรก

เวอร์ชัน> = 8.4.0

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

58
อ็อพชัน -d และ -D ถูกลบออกจาก PostgreSQL 8.4 (ดูบันทึกย่อประจำรุ่น 8.4.0) ตอนนี้คุณต้องใช้ชื่อ "แบบยาว": pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood

1
-d, -aและ-tสั้นรุ่นที่ยังคงอยู่แม้ว่า ตรวจสอบด้วย PG11
demisx

--insertsเป็นอีกทางเลือกหนึ่ง มันคืนค่าเร็วขึ้นเล็กน้อย แต่ไม่สามารถทนต่อการเปลี่ยนแปลงลำดับคอลัมน์ได้
Andy

34

หากคุณต้องการ DUMP ส่วนแทรกของคุณลงในไฟล์. sql :

  1. cdไปยังตำแหน่งที่คุณต้องการตั้ง.sqlไฟล์
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

สังเกต> my_dump.sqlคำสั่ง สิ่งนี้จะใส่ทุกอย่างลงในไฟล์ sql ชื่อmy_dump


2

ใส่ลงในสคริปต์ฉันชอบอะไรทำนองนั้น:

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

ในกรณีที่คุณใช้การเข้าถึงระยะไกลและต้องการถ่ายโอนข้อมูลฐานข้อมูลทั้งหมดคุณสามารถใช้:

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

มันจะสร้างดัมพ์พร้อมข้อมูลฐานข้อมูลทั้งหมดและใช้

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

เพื่อแทรกข้อมูลเดียวกันในฐานข้อมูลของคุณโดยพิจารณาว่าคุณมีโครงสร้างเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.