การสร้างดัมพ์ฐานข้อมูลสำหรับตารางและรายการเฉพาะ Postgres


95

ฉันมีฐานข้อมูลที่มีตารางหลายร้อยตารางสิ่งที่ฉันต้องทำคือส่งออกตารางที่ระบุและแทรกคำสั่งสำหรับข้อมูลลงในไฟล์ sql หนึ่งไฟล์

คำพูดเดียวที่ฉันรู้ว่าสามารถบรรลุได้คือ

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

ฉันควรเรียกใช้คำสั่งนี้สำหรับแต่ละตารางหรือมีวิธีเรียกใช้คำสั่งที่คล้ายกันเพื่อส่งออกตารางที่เลือกทั้งหมดเป็น big sql ขนาดใหญ่ pg_dump ด้านบนไม่ได้ส่งออกสคีมาของตารางเท่านั้นฉันต้องการทั้งสองอย่าง

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม.

คำตอบ:


161

จากคู่มือ : " สามารถเลือกตารางหลายตารางได้โดยการเขียนสวิตช์หลาย -t "

ดังนั้นคุณต้องแสดงรายการตารางทั้งหมดของคุณ

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

โปรดทราบว่าหากคุณมีหลายตารางที่มีคำนำหน้า (หรือคำต่อท้าย) เหมือนกันคุณยังสามารถใช้สัญลักษณ์แทนเพื่อเลือกด้วย-tพารามิเตอร์:

" นอกจากนี้พารามิเตอร์ตารางยังตีความเป็นรูปแบบตามกฎเดียวกันกับที่ใช้โดยคำสั่ง \ d ของ psql "


21
สวิตช์ -T เป็นวิธีเดียวกัน แต่ใช้เพื่อยกเว้นตาราง อาจเป็นประโยชน์หากคุณต้องการโต๊ะทั้งหมดยกเว้นหนึ่งหรือสองโต๊ะเป็นต้น
Scott Marlowe

4
-Dตัวเลือกที่ดูเหมือนจะหายไปใน PG 9.1 เป็นต้นไป
Epigene

5
-Dตัวเลือกที่ถูกลบออกในรุ่น 8.4 คุณต้องใช้--column-insertsตอนนี้แทน
mlovic

1
ลองใช้ pg_dump - โฮสต์ 127.0.0.1 - พอร์ต 5432 - ชื่อผู้ใช้ "<username>" --column-inserts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "" <tablename> "
Tharindu Jayasuriya

22

หากตารางเฉพาะเหล่านั้นตรงกับ regex คุณสามารถใช้ตัวเลือก regex in -t ใน pg_dump

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

ตัวอย่างเช่นในการถ่ายโอนข้อมูลตารางที่เริ่มต้นด้วย "ทดสอบ" คุณสามารถใช้

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
ถ้ามันเป็น regex ไม่ควรจะเป็น^test.*แทน^test*?
msrd0

5
ไม่ใช่ regex แต่ใช้ "รูปแบบ" ของ postgres ดังนั้นจึงควรเป็น"test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

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