Vous n'êtes pas identifié(e).
Bonjour,
Je suis confronté à un problème que je n'avais jamais rencontré jusqu'alors et que j'espère vous allez pouvoir m'aider à résoudre.
J'ai une table A qui contient un champ a de type character varying(14).
J'ai été alerté par un utilisateur qu'une requête sur cette table lui retournait une erreur de ce type :
"n'a pas pu lire le bloc 5287 de la relation base/177867/522031 : a lu seulement 0 octets", semble indiqué que le disque dur doit en avoir un coup !
la requête est : select a from A where a = '34121227200056'
cependant en faisant select a from A where a like '3412122720005%' cela fonctionne correctement.
Je tente avec un autre jeu de donnée : 34121227200049 (avec la première requête) et là seconde surprise j'obtiens bien la ligne avec la chaîne 34121227200049 mais aussi une ligne avec la chaîne 06950303500011
qui vous en conviendrez avec moi n'a rien à voir. Encore plus étrange si je modifie un peu la requête avec :
select a from A where CAST(a as decimal) = cast('34121227200049' as decimal) et bien j’obtiens que ma ligne en question.
Merci d'avance de vos lumières
HadanMarv
Hors ligne
C'est probablement au niveau de l'index qu'il y a une corruption… Ce qui serait intéressant pour en être sûr, c'est d'avoir un explain de chacune des requêtes, pour voir à quoi il accède… ou alors savoir à quoi correspond l'objet 522031 (select relname from pg_class where relfilenode=522031 )
Marc.
Hors ligne
Effectivement l'index devait être corrompu, en mettant à jour l'index (reindex table A) tout est rentré dans l'ordre.
L'objet 522031 correspondait à la table en question.
Merci de votre aide.
Hors ligne