Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 17/07/2013 19:18:33
- gom
- Membre
Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Bonjour,
Bon certes j'ai un peu abusé sur le sujet de ce post ... veuillez m'excuser. Mais vous allez voir c'est effectivement assez incroyable (du moins pour mon petit niveau sur PostgreSQL) !!!
Le résultat de ce SQL contient une autre liste d'identifiants, que ceux contenus dans le "in ()" de ma requête SQL !?
Pour corriger cette anomalie grave (je suis sur l'environnement de Prod ...), j'ai fait un REINDEX de la PK de cette table et hop ... zéro résultat pour cette requête SQL ce qui était l'objectif.
Pour info cette table ne possède pas d'autres contraintes et/ou index. J'ai essayé de faire un VACUUM ANALYZE => rien ; un VACUUM FULL => PgAdmin me conseillait de faire un REINDEX car les statistiques disaient qu'il y avait 12 lignes en écart ... effectivement je confirme !
Comment puis-je m'assurer que je n'ai pas d'autres problèmes (du même genre ... ou pas) sur ma base ? Là heureusement que j'avais une PK sinon j'aurais inséré des doublons dans ma table. Ah oui ce que je ne vous ai pas dit c'est que pour découvrir ce problème, j'ai un traitement ETL qui a planté sur une erreur PostgreSQL de tentative d'insertion de doublons ... doublons qui n'existaient donc pas !
Gôm
Dernière modification par gom (17/07/2013 19:22:53)
Hors ligne
#2 17/07/2013 22:38:15
- rjuju
- Administrateur
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Quelle est votre version exacte de PostgreSQL ? Plusieurs bug entrainant des corruptions d'index ont été résolu par le passé, et il est fort probable que vous soyez tombé sur l'un d'entre eux.
Julien.
https://rjuju.github.io/
Hors ligne
#3 18/07/2013 09:26:09
- gom
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Bonjour,
8.4.4 sur RedHat 64 bits (4.1.2-46).
Dernière modification par gom (18/07/2013 09:26:17)
Hors ligne
#4 18/07/2013 10:03:20
- rjuju
- Administrateur
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Vous avez de nombreuses version de retard. Regardez par exemple http://www.postgresql.org/docs/9.1/stat … -4-11.html :
"Fix btree index corruption from insertions concurrent with vacuuming (Tom Lane)
An index page split caused by an insertion could sometimes cause a concurrently-running VACUUM to miss removing index entries that it should remove. After the corresponding table rows are removed, the dangling index entries would cause errors (such as "could not read block N in file ...") or worse, silently wrong query results after unrelated rows are re-inserted at the now-free table locations. This bug has been present since release 8.2, but occurs so infrequently that it was not diagnosed until now. If you have reason to suspect that it has happened in your database, reindexing the affected index will fix things."
Vous devriez dans tous les cas prévoir une mise à jour vers la version à plus récente, et peut être planifier un reindex de la base.
Julien.
https://rjuju.github.io/
Hors ligne
#5 18/07/2013 10:15:07
- gom
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
[...]
Vous devriez dans tous les cas prévoir une mise à jour vers la version à plus récente, et peut être planifier un reindex de la base.
Aussi incroyable (décidément) que cela puisse paraître ... je n'ai pas de DBA PostgreSQL à disposition ! Pensez-vous que je puisse procéder seul à une mise à jour de 8.4.4 vers 8.4.17 (et non 8.4.11, qui peut le plus ...) ?
Pour le REINDEX, est-il possible d'utiliser une requête SQL basée sur les tables Système pour générer tous mes REINDEX ?
REINDEX TABLE mon_schema.ma_table;
Hors ligne
#6 18/07/2013 10:24:50
- gom
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Bon ... j'ai bien lu les conseils mentionnés ici ou là :
http://www.postgresql.org/docs/8.4/stat … -4-17.html
http://www.postgresql.org/docs/8.4/stat … -4-10.html
http://www.postgresql.org/docs/8.4/stat … 8-4-8.html
Mais ça ne me dit pas clairement ce que je dois faire pour mettre à jour PostgreSQL ?
Hors ligne
#7 18/07/2013 10:30:02
- gom
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Je pense avoir trouvé !
http://www.postgresql.org/docs/8.4/stat … ading.html + http://www.postgresql.org/docs/8.4/stat … edure.html (point 4)
Donc si j'ai bien tout lu Shakespeare ... je dois réaliser uniquement les points 2, 4 et 7 de la doc "install-upgrading". C'est bien ça ?
Hors ligne
#8 18/07/2013 11:24:32
- kenrio
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
vous etes sur redhat un simple yum update marche pas ??
Hors ligne
#9 18/07/2013 20:01:43
- rjuju
- Administrateur
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
La mise à jour est très simple : arrêter postgres, yum update, relancer postgres. Ensuite, si vous pouvez vous permettre de bloquer la base quelques temps, un REINDEX DATABASE ma_base; va regénérer tous les index. Cela sera sans doute la méthode la plus sure.
Julien.
https://rjuju.github.io/
Hors ligne
#10 19/07/2013 17:37:11
- gom
- Membre
Re : Incroyable ... mon SQL me ramène un résultat qui n'existe pas !!!
Merci !
Hors ligne