ปิดใช้งานข้อ จำกัด ก่อนใช้ pg_restore.exe


16

เมื่อฉันพยายามเรียกใช้pg_restore.exeงานไฟล์ดัมพ์จากฐานข้อมูลมันก็จะพ่นข้อผิดพลาดออกมาหลายสิบข้อทั้งหมดเหมือนกัน:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

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

มีวิธีปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศทั้งหมดสำหรับตารางทั้งหมดก่อนที่ฉันจะโทรpg_restore.exeและหลังจากนั้นเปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศอีกครั้ง

ดังนั้นในการที่ฉันได้พบสิ่งที่น่าสนใจ: ชะลอการ จำกัด การตรวจสอบเพื่อกระทำเวลา แต่ฉันไม่คิดว่าฉันสามารถโทรpg_restore.exeจากภายในได้psql.exeหลังจากชะลอข้อ จำกัด

นอกจากนี้ยังมีโพสต์นี้ย้อนหลังไปเมื่อ 10 ปีก่อนแนะนำให้วางแล้วเพิ่มข้อ จำกัด อีกครั้ง หรือเปลี่ยนค่าของ pg_class reltriggers เป็น 0 และนั่นอาจเป็นไปได้สำหรับข้อ จำกัด ... แต่ฉันเกรงว่ามันแฮ็คมากกว่าการฝึกฝนที่ดี ...

คุณแนะนำอะไรแนวทางปฏิบัติที่ดีที่สุดในกรณีนี้คืออะไร การใช้pg_dump.exe กับ-cleanแฟล็กจะสร้างดัมพ์ที่ข้ามข้อ จำกัด การตรวจสอบเมื่อกู้คืนฐานข้อมูลหรือไม่?


ข้ามการโพสต์ที่นี่ในกรณีที่ทุกคนพบสิ่งนี้ในภายหลัง: stackoverflow.com/questions/12093654/…
Craig Ringer

คำตอบ:


28

คุณลอง--disable-triggersตัวเลือกนี้แล้วpg_restoreหรือ ยัง

ตามเอกสาร: ใช้สิ่งนี้หากคุณมีการตรวจสอบความสมบูรณ์ของการอ้างอิงหรือทริกเกอร์อื่น ๆ ในตารางที่คุณไม่ต้องการเรียกใช้ในระหว่างการโหลดข้อมูล

โปรดทราบว่านี่เป็นเพียงการ--data-onlyคืนค่าและต้องการ--superuser=usernameตัวเลือกที่จะผ่านเช่นกัน


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