PostgreSQL 8.4.15 kullanıyorum. pg_dumpBir veritabanını yedeklemeye çalışırken , aşağıdaki hatayı aldım:
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 ...)
Bu hata iletisini ararken, tabloyu yeniden dizine almayı öneren birkaç başvuru ( burada ve burada ) buldum. (Bu tartışmalarda, pg_classdoğru pg_toast_XXXXXXdeğeri bulmak için tabloyu sorgulamaya bir başvuru vardı , ancak bunun hata iletilerinde görüntülenmediği için görünüyordu. Hata iletisinde görüntülenen bir değere sahip olduğum için bu bölümü atladım Sanırım PostgreSQL'in sonraki bir sürümü nedeniyle kolaylık olabilir.)
Aşağıdaki koştum:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Artık pg_dumphatasız kullanabiliyorum .
Ne var pg_toastve bu komutlar aslında ne yapmış? Bunlar sadece basit temizlik ile mi ilgili, yoksa bu tablodaki bazı satırlardan kurtulabilirler mi? İlk etapta soruna ne sebep olabilirdi?
Bu tabloda yaklaşık 300000 satır var, ancak önceki başarılı yedeklemeden bu yana sadece yaklaşık 250 yeni satır olmasını bekliyorum (bu tablo yalnızca INSERT / SELECT için kullanılır, UPDATE yok).