Saya menggunakan PostgreSQL 8.4.15. Saat menjalankan pg_dump
untuk 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_class
tabel 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_dump
tanpa kesalahan.
Apa pg_toast
dan 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).