IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Mises à jour incohérentes


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut Mises à jour incohérentes
    J'ai développé une application qui tourne sur postgresql 9.5 pour la gestion du stock. Mais le client s'est toujours plain de l'incohérence des données. par exemple avant inventaire un produit à pour quantité 10, après inventaire la quantité du produit à été corrigé puis remise à 12. mais le lendemain le client constate que la quantité avant inventaire qui était de 10 est revient. et cela se répète fréquemment, alors que mon code n'est pas erroné. Ai-je mal configuré le serveur postgresql?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    C'est plus que léger comme description pour faire un diagnostic.

    Cette quantité est elle stockée ou bien est elle le résultat d'un calcul ?
    Quand le client signale cette erreur, la constatez-vous vous aussi ?
    La donnée consultée par le client et dont la valeur reste 10 est elle bien la même que celle modifiée suite à l'inventaire (n'y a -t- il pas une redondance de donnée quelque part qui pourrait expliquer) ?
    Qu'en est il des commits, comment avez-vous vérifié les résultats de votre code "qui n'est pas erroné" ?
    etc...

  3. #3
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Je constate effectivement ces erreurs
    Voici le code qui permet de mettre à jour la colonne "QTEDISP" de ma table "PRODUIT"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FDquery12.First;
    while not FDquery12.eof do
    begin
    FDConnection1.ExecSQL('update facturation."PRODUIT" set "QTEDISP"="QTEDISP"-:qte where "CODPRO"=:cp',[FDquery12.Fields[1].asinteger,FDquery12.Fields[0].asstring]);
    FDquery12.Next;
    end
    Comme vous le constatez, le code n'est pas au sein d'une transaction [ start ....... ....commit] j laisse le serveur s'en occupé selon les configurations par défaut.
    Images attachées Images attachées  

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    S'il vous plait, merci de formuler une réponse pour chaque question d'escartefigue.

    Sans préjuger des réponses il me semble qu'il serait utile de suivre l'historique des écritures :
    * https://github.com/2ndQuadrant/pgaudit
    * faire un trigger
    Le savoir est une nourriture qui exige des efforts.

  5. #5
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mehady Voir le message
    Comme vous le constatez, le code n'est pas au sein d'une transaction [ start ....... ....commit] j laisse le serveur s'en occupé selon les configurations par défaut.
    On en voit pas ce que lit FDquery12 mais il est probable que tout devrait se faire dans une transaction en repeatable read.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par mehady Voir le message
    mais le lendemain le client constate que la quantité avant inventaire qui était de 10 est revient.
    Il faudrait essayer de réduire la fourchette de durée. Parce que "le lendemain" c'est long. Il faudrait par exemple mettre le truc à 12, puis arrêter l'application et la relancer et voir si c'est toujours à 12. Si c'est le cas, alors arrêter le serveur Postgres et le relancer. Ca permettrait ainsi de cibler l'endroit où se passe l'erreur.

    Citation Envoyé par mehady Voir le message
    alors que mon code n'est pas erroné.
    Sans déconner ???

    Citation Envoyé par mehady Voir le message
    ai-je mal configuré le serveur postgresql?
    A priori non car même la config la plus basique qui puisse se faire enregistre quand-même les update.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Comment empêcher la mise à jour d'un contrôle à l'écran ?
    Par JojoLaFripouille dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2003, 12h52
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo