ฉันใช้ PostgreSQL 8.4.15 ขณะทำงานpg_dump
เพื่อสำรองฐานข้อมูลฉันได้รับข้อผิดพลาดดังต่อไปนี้:
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)
เมื่อค้นหาข้อความแสดงข้อผิดพลาดนี้ฉันพบการอ้างอิงสองสามรายการ ( ที่นี่และที่นี่ ) ที่แนะนำให้สร้างดัชนีตารางอีกครั้ง (ในการสนทนาเหล่านี้มีการอ้างอิงถึงการสืบค้นpg_class
ตารางเพื่อค้นหาpg_toast_XXXXXX
ค่าที่ถูกต้องแต่ดูเหมือนว่าเป็นเพราะมันไม่ได้แสดงในข้อความแสดงข้อผิดพลาดของพวกเขาฉันข้ามส่วนนี้เพราะฉันมีค่าที่แสดงในข้อความแสดงข้อผิดพลาด ฉันเดาว่ามันอาจจะสะดวกกว่าเนื่องจาก PostgreSQL รุ่นที่ใหม่กว่า)
ฉันวิ่งต่อไปนี้:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
ตอนนี้ฉันสามารถใช้งานได้pg_dump
โดยไม่มีข้อผิดพลาด
อะไรpg_toast
และสิ่งที่ไม่คำสั่งเหล่านี้จริงทำอย่างไร สิ่งเหล่านี้เกี่ยวกับการล้างข้อมูลอย่างง่ายหรือพวกเขาสามารถกำจัดแถวบางส่วนในตารางนั้นได้หรือไม่? สิ่งที่อาจทำให้เกิดปัญหาตั้งแต่แรก?
มีประมาณ 300,000 แถวในตารางนี้ แต่ฉันคาดว่าจะมีแถวใหม่ประมาณ 250 แถวเท่านั้นนับตั้งแต่การสำรองข้อมูลที่ประสบความสำเร็จก่อนหน้านี้ (ตารางนี้ใช้สำหรับ INSERT / SELECT เท่านั้นไม่มีการอัปเดต)