pg_dump ve ERROR: tost değeri için 0 eksik sayı


10

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).


Bu fikri buldum . Vakanızın aynı olup olmadığını kontrol edebilir misiniz?
dezso

Yanıtlar:


6

Yaptığınız şeyin bir reindex olduğu göz önüne alındığında, muhtemelen olan şey, tablodaki kızarmış değerleri bulmaya çalışmak için bir dizin taraması kullanması ve bir tane bulamamasıydı. Bu bozuk bir dizin gibi geliyor. Vakum analizi tabloyu değiştirir, ancak reindex değişmez ve değişiklikler çok küçüktür.

Bunu düşünmenin yolu, TOASTed özniteliklerinin aslında yaklaşık 4k büyüklüğünde parçalara bölünmesi ve bunların satırlarda depolanmasıdır. Sorgu zamanında aranır ve ana satırla sıralanır / yeniden bağlanır. Burada kullanılan bir dizin bozulmuş gibi görünüyor ve böylece reindex sorunu çözdü.

Bozuk dizinler genellikle bir şey sunucu ile iyi olmayan bir işaret vardır bulduk. Bellek, CPU ve sabit sürücülerin mutlu olduğunu ve sorun bildirmediğinden emin olmak iyi bir şeydir. Ben aşırı ısınma sunucuları özellikle dizin bozulmasına eğilimli bulduk ve dizinler bozulabilir bir veri de bozulma hakkında endişe gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.