วิธีสร้างการสำรองข้อมูลของตารางเดียวในฐานข้อมูล postgres


160

มีวิธีสร้างการสำรองข้อมูลของตารางเดียวภายในฐานข้อมูลโดยใช้ postgres หรือไม่? แล้วยังไง? สิ่งนี้ใช้ได้กับคำสั่ง pg_dump ด้วยหรือไม่

คำตอบ:


211

ใช้--tableเพื่อบอกpg_dumpตารางที่มีการสำรองข้อมูล:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
และวิธีการกู้คืนไฟล์ Backup นั้น (.backup) ฉันใช้pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"แต่มันออกมา:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares

13
psql -U username -d database -1 -f your_dump.sql
rnaud

5
คุณหมายถึงอะไร: abstract_file_path
bandungeuy

3
ฉันไม่แน่ใจว่าทำไมคำตอบนี้ถึงได้รับการโหวตคนคลิก +1 โดยไม่ตรวจสอบสิ่งต่างๆด้วยตนเองหรือลอง ปัญหาเกี่ยวกับคำตอบนี้ทำให้ไร้ประโยชน์โดยสิ้นเชิงนั่นคือคำตอบ / คำสั่งที่กำหนดอย่าส่งออกลำดับที่สร้างบนตาราง (คีย์หลัก) และการนำเข้าล้มเหลว ฉันไม่ทราบว่ามีฐานข้อมูล PG ผลิตเดียวที่ใดก็ตามที่ไม่ได้ใช้คีย์หลักที่มีลำดับ มันเป็นครึ่งคำตอบล้มเหลวในการตอบคำถามอย่างละเอียดและต้องทำงานเพิ่มเติมเพื่อส่งออก / นำเข้าตารางเดียว
user10664542

1
กับบิด sudo แตกต่างกันเล็กน้อยนี้ฉันจบลงด้วยข้อผิดพลาดได้รับอนุญาตในการถ่ายโอนข้อมูลไฟล์ (พอตรรกะตั้งแต่ postgres ผู้ใช้ไม่สามารถเข้าถึงการเขียนในไดเรกทอรีของฉัน) --ignore-versionและผมก็มีข้อผิดพลาดที่ไม่รู้จักสำหรับธง คำตอบของ Prashant Kumar ซึ่งง่ายกว่าสำหรับฉัน
JL Peyret

84

ถ้าคุณอยู่บน Ubuntu

  1. เข้าสู่ระบบผู้ใช้ postgres ของคุณ sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

ตรวจสอบให้แน่ใจว่าคุณกำลังดำเนินการคำสั่งที่postgresผู้ใช้มีสิทธิ์ในการเขียน (ตัวอย่าง: /tmp)

แก้ไข

หากคุณต้องการดัมพ์. sql ในคอมพิวเตอร์เครื่องอื่นคุณอาจต้องพิจารณาข้ามข้อมูลเจ้าของที่ได้รับการบันทึกลงในไฟล์. sql

คุณสามารถใช้ได้ pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
ถ้าคุณต้องการตารางทั้งหมดโดยไม่ต้องระบุชื่อของแต่ละคนล่ะ
shekeine

3
เพียงลบตัวเลือก -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala

4
ฉันไม่รู้ว่าทำไม แต่ตัวเลือก -d ไม่ถูกต้องสำหรับ psql9.3 และคำสั่งที่กำหนดไม่ได้สำหรับฉัน หนึ่งในการทำงานเป็นpg_dump -U ชื่อผู้ใช้ db_name -t table_name> ชื่อไฟล์
serkan kucukbay

pg_dump -t <table_name> <database_name> > file.sql
ศรีราม

@ user10664542: โปรดอ่านคู่มือโดยเฉพาะอย่างยิ่งในส่วนนี้: "เพื่อจุดประสงค์นี้" ตาราง "รวมถึงมุมมองมุมมองที่ปรากฏขึ้นลำดับและตารางต่างประเทศ"
Frank Heikens

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

คุณสามารถสำรองข้อมูลของตารางเดียว แต่ฉันอยากจะแนะนำให้สำรองข้อมูลของฐานข้อมูลทั้งหมดแล้วเรียกคืนตารางใดก็ตามที่คุณต้องการ มันเป็นการดีเสมอที่จะมีการสำรองฐานข้อมูลทั้งหมด

9 วิธีในการใช้ pg_dump


ฉันไม่แน่ใจว่าทำไมคำตอบนี้ถึงได้รับการโหวตคนคลิก +1 โดยไม่ตรวจสอบสิ่งต่างๆด้วยตนเองหรือลอง ปัญหาเกี่ยวกับคำตอบนี้ทำให้ไร้ประโยชน์โดยสิ้นเชิงนั่นคือคำตอบ / คำสั่งที่กำหนดอย่าส่งออกลำดับที่สร้างบนตาราง (คีย์หลัก) และการนำเข้าล้มเหลว ฉันไม่ทราบว่ามีฐานข้อมูล PG ผลิตเดียวที่ใดก็ตามที่ไม่ได้ใช้คีย์หลักที่มีลำดับ มันเป็นครึ่งคำตอบล้มเหลวในการตอบคำถามอย่างละเอียดและต้องทำงานเพิ่มเติมเพื่อส่งออก / นำเข้าตารางเดียว
user10664542

ดังที่กล่าวไว้ข้างต้นฉันมีความสงสัยอย่างมากต่อผู้ใช้งาน 10664542 โดยไม่มีคำตอบจาก postgres ของเขาเลย ในขณะที่ลำดับทำให้เกิดภาวะแทรกซ้อนเพิ่มเติมมี upvotes มากพอสำหรับคำตอบที่คล้ายกันซึ่งชาวบ้านอาจให้พวกเขาทำงานแม้ว่าพวกเขาจะต้องปรับลำดับหลังจากข้อเท็จจริง ถ้าฉันต้องกู้คืนการถ่ายโอนข้อมูลของฉันฉันจะหาวิธีที่จะปรับปรุงรหัสล่าสุดของลำดับจากmax(id)บนโต๊ะของฉัน นี่คือคำตอบที่ใช้งานได้และฉันมั่นใจดู sql ที่สร้างขึ้นซึ่งฉันสามารถกู้คืนได้
JL Peyret

9

หากคุณต้องการส่วนต่อประสานผู้ใช้แบบกราฟิกคุณสามารถใช้ pgAdmin III (Linux / Windows / OS X) เพียงคลิกขวาที่ตารางที่คุณเลือกจากนั้นเลือก "backup" มันจะสร้างpg_dumpคำสั่งให้คุณ

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


2

นอกเหนือจากคำตอบของ Frank Heiken หากคุณต้องการใช้INSERTคำสั่งแทนคุณcopy from stdinควรระบุการ--insertsตั้งค่าสถานะ

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

ขอให้สังเกตว่าฉันออกจาก--ignore-versionธงเพราะมันเลิก


ฉันไม่แน่ใจว่าทำไมคำตอบนี้ถึงได้รับการโหวตคนคลิก +1 โดยไม่ตรวจสอบสิ่งต่างๆด้วยตนเองหรือลอง ปัญหาเกี่ยวกับคำตอบนี้ทำให้ไร้ประโยชน์โดยสิ้นเชิงนั่นคือคำตอบ / คำสั่งที่กำหนดอย่าส่งออกลำดับที่สร้างบนตาราง (คีย์หลัก) และการนำเข้าล้มเหลว ฉันไม่ทราบว่ามีฐานข้อมูล PG ผลิตเดียวที่ใดก็ตามที่ไม่ได้ใช้คีย์หลักที่มีลำดับ มันเป็นครึ่งคำตอบล้มเหลวในการตอบคำถามอย่างละเอียดและต้องทำงานเพิ่มเติมเพื่อส่งออก / นำเข้าตารางเดียว
user10664542
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.