pg_dump và ERROR: thiếu số chunk 0 cho giá trị bánh mì nướng


10

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ở đâ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_classbảng để tìm đúng pg_toast_XXXXXXgiá 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_dumpmà không có lỗi.

Những gì pg_toastvà 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).


Tôi đã tìm thấy ý tưởng này . Bạn có thể kiểm tra xem trường hợp của bạn có giống nhau không?
dezso

Điều này cũng có thể giúp stackoverflow.com/questions/48533639/ từ
papanito

Câu trả lời:


6

Cho rằng những gì bạn đã làm là một reindex, điều có lẽ đã xảy ra là nó đã sử dụng quét chỉ mục để cố gắng xác định vị trí các giá trị được nướng trong bảng và không thể tìm thấy. Điều này nghe có vẻ như một chỉ số bị hỏng. Phân tích chân không làm thay đổi bảng nhưng reindex thì không và những thay đổi là rất nhỏ.

Cách nghĩ về điều này là các thuộc tính TOASTed thực sự được chia thành các khối có kích thước khoảng 4k và chúng được lưu trữ trong các hàng. Chúng được tra cứu và sắp xếp / kết nối lại với hàng chính tại thời điểm truy vấn. Có vẻ như một chỉ mục được sử dụng ở đây đã bị hỏng và do đó, reindex đã giải quyết vấn đề.

Tôi đã tìm thấy các chỉ mục bị hỏng thường là một dấu hiệu cho thấy một cái gì đó không tốt với máy chủ. Thật tốt khi kiểm tra và đảm bảo bộ nhớ, CPU và ổ cứng đều hài lòng và không báo cáo sự cố. Tôi đã tìm thấy các máy chủ quá nóng đặc biệt dễ bị hỏng chỉ mục và nếu các chỉ mục có thể bị hỏng, người ta phải lo lắng về việc dữ liệu cũng bị hỏng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.