PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/10/2018 18:08:23

duple
Membre

pg_clog : impossible lecture : Input/output error

Bonjour,

Je rencontre l'erreur suivant lors d'un dump sur une base de données particulière sur une table contenant des données binaire (ex: image, pdf,...) de type bytea.
Voici l'erreur en question:
pg_dump: Error message from server: ERROR:  could not access status of transaction 256212738
DETAIL:  Could not read from file "pg_clog/00F4" at offset 81920: Input/output error.

En regardant dans PGDATA/pg_clog le fichier 00F4 existe bien mais ne peut être lu.
Ex: un less pg_clog/00F4 renvoie l'erreur : read error

Environnement sous linux, version postgresql 9.3.5.

Sachant qu'il n'y a pas de sauvegarde dump à restaurer, est ce qu'il existe un moyen pour corriger le problème svp ?

Hors ligne

#2 11/10/2018 09:05:22

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

Petite rectification : postgresql 9.4.5 mais non 9.3.5
Personne une solution ?

Hors ligne

#3 11/10/2018 09:33:15

gleu
Administrateur

Re : pg_clog : impossible lecture : Input/output error

Il n'y a pas de solution simple. Les fichiers CLOG contiennent les informations de statut des transactions. Sans eux, PostgreSQL ne sait pas quels lignes sont visibles et quels lignes sont invisibles. Le seul truc à tester est de renommer 00F4 puis de créer un fichier 00F4 de la bonne taille et rempli d'octets nuls. Vous devriez pouvoir faire un dump mais vous ne retrouverez pas toutes les données. Il est même tout à fait possible que le dump ne soit pas complètement restaurable en cas de violation de certaines contraintes.

Et du coup, il va falloir vérifier ce disque et probablement à coup sûr le remplacer.


Guillaume.

Hors ligne

#4 11/10/2018 10:39:50

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

gleu > Merci pour ta réponse Guillaume.

En parcourant une à une les enregistrement de la table en question, on connait maintenant la ligne (1 champs dans cette ligne) qui pose problème.
Si je fais un DELETE de cette ligne et que je lance ensuite un VACUUM FULL sur la table, est ce que cela pourrait résoudre le problème ?

Hors ligne

#5 11/10/2018 11:38:10

gleu
Administrateur

Re : pg_clog : impossible lecture : Input/output error

Vous ne pourrez pas faire un DELETE de la ligne et un VACUUM FULL ne changera rien à ma connaissance. Dans ce cas, le mieux est de sauvegarder toute la base, sauf la table problématique, puis sauvegarder la table avec un COPY (SELECT... WHERE filtrant la ligne qui pose problème). Comme ça, vous aurez un dump propre. Il serait bien de tester que vous pouvez restaurer ce dump. Puis remplacement du disque, création d'une instance PostgreSQL et restauration du dump.


Guillaume.

Hors ligne

#6 11/10/2018 12:23:00

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

Je ne peux même pas faire un select * from table_corrompu where id <> id_corrompu ni un select * from table_corrompu where id > id_corrompu.
Il doit faire un fullscan le truc et çà pête.

donc la seule solution est elle remplacer 00f4 évoquait plus haut ? Comment cré t-on ce fichier de remplacement ?

Hors ligne

#7 11/10/2018 12:30:01

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

ah une autre idée faire un select en specifiant carrément la clé, donc de prendre le max(id) et select where id in (id_corrompu+1,  id_corrompu+2, .. max(id)) je teste

Hors ligne

#8 11/10/2018 12:49:46

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

Ca ne le fait pas il existe egalement d'autre id corrompu.
Je reprend : donc la seule solution est elle remplacer 00f4 évoquait plus haut ? Comment cré t-on ce fichier de remplacement ?

Hors ligne

#9 11/10/2018 22:19:36

gleu
Administrateur

Re : pg_clog : impossible lecture : Input/output error

Je n'en vois pas d'autres mais c'est difficile à dire sans accéder à la machine et y passer un peu de temps. Pour créer ce fichier, je vois bien cette commande :

dd if=/dev/zero of=00F4 count=1 bs=8192

Faites d'abord une copie intégrale de vos fichiers PostgreSQL (donc le PGDATA et les tablespaces).


Guillaume.

Hors ligne

#10 12/10/2018 15:59:00

duple
Membre

Re : pg_clog : impossible lecture : Input/output error

Merci , en fin de compte on a restauré la table sans les lignes corrompues.
Merci à tous

Hors ligne

Pied de page des forums