ฉันได้รับดัมพ์ของฐานข้อมูล PostgreSQL ของฉันด้วย:
pg_dump -U user-name -d db-name -f dumpfile
ซึ่งฉันแล้วดำเนินการคืนค่าในฐานข้อมูลอื่นด้วย:
psql X -U postgres -d db-name-b -f dumpfile
ปัญหาของฉันคือฐานข้อมูลมีข้อ จำกัด การอ้างอิงการตรวจสอบและทริกเกอร์และข้อผิดพลาดบางอย่าง (การตรวจสอบโดยเฉพาะอย่างยิ่งดูเหมือนจะเกิดขึ้น) ในระหว่างการกู้คืนเนื่องจากข้อมูลไม่ถูกโหลดตามลำดับที่จะทำให้การตรวจสอบเหล่านั้นได้รับเกียรติ ยกตัวอย่างเช่นการแทรกแถวในตารางอาจจะเกี่ยวข้องกับการCHECK
ที่เรียกplpgsql
ฟังก์ชั่นที่ตรวจสอบไม่ว่าจะเป็นสภาพที่ถือในตารางที่ไม่เกี่ยวข้องอื่น ๆ หากตารางหลังนั้นไม่โหลดpsql
ก่อนก่อนจะเกิดข้อผิดพลาด
ต่อไปนี้เป็น SSCCE ที่สร้างฐานข้อมูลดังกล่าวซึ่งเมื่อทิ้งด้วยpg_dump
ไม่สามารถกู้คืนได้:
CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$
SELECT EXISTS (SELECT 1 FROM b)
$$ LANGUAGE SQL;
CREATE TABLE IF NOT EXISTS a (
i INTEGER NOT NULL
);
INSERT INTO a(i) VALUES (0),(1);
CREATE TABLE IF NOT EXISTS b (
i INTEGER NOT NULL
);
INSERT INTO b(i) VALUES (0);
ALTER TABLE a ADD CONSTRAINT a_constr_1 CHECK (fail_if_b_empty());
มีวิธีการปิดการใช้งาน (จากบรรทัดคำสั่ง) ข้อ จำกัด ดังกล่าวทั้งหมดในระหว่างการคืนค่าการถ่ายโอนข้อมูลและเปิดใช้งานพวกเขากลับมาอีกครั้งในภายหลัง? ฉันกำลังใช้งาน PostgreSQL 9.1
CHECK
ข้อ จำกัด การรับประกันทั้งหมดจะเป็นโมฆะเพราะมันไม่ได้รับการสนับสนุนอย่างเป็นทางการเพียงแค่ยอมรับ แต่การประกาศCHECK
ข้อ จำกัดNOT VALID
ทำให้ฉันใช้ได้ทุกประการ อาจมีหลายมุมที่ฉันไม่เคยสัมผัส ...
-X
และตัวเลือกสำหรับการ-d
ผลิตการถ่ายโอนข้อมูลที่เป็น restorable ใน DB ที่ว่างเปล่าpg_dump
pg_dump