J'utilise PostgreSQL 8.4.15. Lors de l'exécution pg_dump
pour sauvegarder une base de données, j'ai eu l'erreur suivante:
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 ...)
Lors de la recherche de ce message d'erreur, j'ai trouvé quelques références ( ici et ici ) qui suggéraient de réindexer la table. (Dans ces discussions, il y avait une référence à l'interrogation de la pg_class
table pour trouver la bonne pg_toast_XXXXXX
valeur, mais il semblait que c'était parce qu'elle n'était pas affichée dans leurs messages d'erreur. J'ai ignoré cette partie car j'avais une valeur affichée dans le message d'erreur . Je suppose que cela pourrait être pratique en raison d'une version ultérieure de PostgreSQL.)
J'ai couru ce qui suit:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Je peux maintenant utiliser pg_dump
sans erreurs.
Que font pg_toast
et que font réellement ces commandes? S'agit-il simplement d'un simple nettoyage ou auraient-ils pu supprimer certaines lignes de ce tableau? Qu'est-ce qui aurait pu causer le problème en premier lieu?
Il y a environ 300 000 lignes dans cette table, mais je m'attends à ce qu'il n'y ait que 250 nouvelles lignes depuis la sauvegarde réussie précédente (cette table n'est utilisée que pour INSERT / SELECT, pas de MISE À JOUR).