Tôi đang sử dụng PostgreSQL 8.4.15. Trong khi chạy pg_dump
để sao lưu cơ sở dữ liệu, tôi đã gặp lỗi sau:
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 ...)
Khi tìm kiếm thông báo lỗi này, tôi đã tìm thấy một vài tài liệu tham khảo ( ở đây và ở đây ) đề nghị reindex bảng. (Trong các cuộc thảo luận này, có một tham chiếu đến việc truy vấn pg_class
bảng để tìm đúng pg_toast_XXXXXX
giá trị, nhưng có vẻ như đó là do nó không được hiển thị trong thông báo lỗi của họ. Tôi đã bỏ qua phần này vì tôi có một giá trị được hiển thị trong thông báo lỗi . Tôi đoán nó có thể là một sự tiện lợi do phiên bản mới hơn của PostgreSQL.)
Tôi đã chạy như sau:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Bây giờ tôi có thể sử dụng pg_dump
mà không có lỗi.
Những gì pg_toast
và những gì các lệnh thực sự đã làm gì? Đây chỉ là về dọn dẹp đơn giản hay họ có thể đã thoát khỏi một số hàng trong bảng đó? Điều gì có thể đã gây ra vấn đề ở nơi đầu tiên?
Có khoảng 300000 hàng trong bảng này, nhưng tôi hy vọng sẽ chỉ có khoảng 250 hàng mới kể từ lần sao lưu thành công trước đó (bảng này chỉ được sử dụng cho INSERT / SELECT, không CẬP NHẬT).