Saya menggunakan PostgreSQL 8.4.15. Saat menjalankan pg_dumpuntuk membuat cadangan database, saya mendapatkan kesalahan berikut:
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 ...)
Saat mencari pesan kesalahan ini, saya menemukan beberapa referensi (di sini dan di sini ) yang menyarankan untuk mengindeks ulang tabel. (Dalam diskusi ini, ada referensi ke kueri pg_classtabel untuk menemukan nilai yang tepat pg_toast_XXXXXX, tetapi sepertinya itu karena tidak ditampilkan dalam pesan kesalahan mereka. Saya melewatkan bagian ini karena saya memiliki nilai yang ditampilkan dalam pesan kesalahan Saya kira itu mungkin kenyamanan karena versi PostgreSQL yang lebih baru.)
Saya menjalankan yang berikut:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Saya sekarang dapat menggunakan pg_dumptanpa kesalahan.
Apa pg_toastdan apa yang sebenarnya dilakukan perintah ini? Apakah ini hanya tentang pembersihan sederhana atau bisakah mereka menyingkirkan beberapa baris di meja itu? Apa yang bisa menyebabkan masalah sejak awal?
Ada sekitar 300.000 baris dalam tabel ini, tetapi saya berharap hanya ada sekitar 250 baris baru sejak cadangan berhasil sebelumnya (tabel ini hanya digunakan untuk INSERT / SELECT, tidak ada UPDATE).