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

PostgreSQL Discussion :

Causes de l'erreur 5438


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Juillet 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Juillet 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Causes de l'erreur 5438
    Bonjour,

    Pour les besoins d'un projet COBOL/Postgres, j'ai créé un curseur qui me renvoie 6 lignes de 2 champs.
    Lorsque je descend ce curseur par une boucle , l'application me renvoie le message d'erreur suivant et se ferme: double free or corruption (out)

    [1] 5438 IOT instruction (core dumped) ./runstat
    La requète du curseur fonctionne lorsque je l'exécute directement dans la base, je ne comprend pas pourquoi j'ai ce message, sachant qu'une partie des données est bien récupérée (j'ai déstructuré la boucle pour exécuter le fetch ligne par ligne, il s'arrète à mi chemin (3 lignes lues pour 6 lignes à lire)).
    Voici la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT r.REGION_NUM, 
                              COUNT(c.UUID_CUSTOMER) AS NB_CUSTOMER
                     FROM BOBO_REGION r JOIN CUSTOMER c
                     ON SUBSTRING(c.CUSTOMER_ZIPCODE FROM 1 FOR 2) 
                           = r.REGION_CODEDEP
                     WHERE c.CUSTOMER_ACTIVE IN ('1','0')       
                     GROUP BY r.REGION_NUM
                     ORDER BY r.REGION_NUM;
    Et le résultat depuis la base:
    region_num	nb_customer
    1	1
    7	1
    8	1
    10	1
    11	1
    13	1
    Rien de bien méchant...
    Auriez vous des pistes pour expliquer et corriger ce qui doit l'être pour aller jusqu'au bout de ma boucle sur le fetch?

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

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 776
    Points : 1 488
    Points
    1 488
    Par défaut
    Bonjour,

    Visiblement le problème vient plutôt du curseur.
    En quel langage est-il programmé ? pl-sql ?

    Ce que je suspecte : lire une ligne inexistante.
    Dans ce cas c'est la condition de sortie qui serait en cause.

    Sinon, faire une table temporaire du résultat (stabilisation du résultat) et faire une requête sur cette table en jouant avec LIMIT
    https://www.postgresql.org/docs/curr...ies-limit.html
    Le savoir est une nourriture qui exige des efforts.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Juillet 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Juillet 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour.

    Merci pour votre réponse.
    Cependant, j'ai du mal à la comprendre; comment un curseur peut il ramener une ligne inexistante?
    Cela se passe au milieu de la lecture des résultats, ce n'est donc pas la fin de curseur qui serait mal gérée.

    Merci pour l'astuce LIMIT pour éviter de déstructurer ma boucle FETCH. Je n'y avais pas pensé.

    Sinon, oui, je travaille en pl-sql.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 982
    Points
    52 982
    Billets dans le blog
    6
    Par défaut
    Si votre curseur est "live" et que vous n'avez pas mis de ORDER BY, les lignes peuvent se déplacer au gré des UPDATEs concurrent et ce type d'erreur peut apparaitre si le système croyait trouver une ligne qui s'est finalement déplacée...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 306
    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 306
    Points : 39 669
    Points
    39 669
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Autre solution, utiliser une isolation "RR" pour que les lectures soient "répétables", mais bien sûr, c'est au détriment des threads concurrents.
    Voir ICI


    À ce propos :

    Citation Envoyé par IsaM59 Voir le message
    Pour les besoins d'un projet COBOL/Postgres, j'ai créé un curseur qui me renvoie 6 lignes de 2 champs.
    Il s'agit de 6 lignes de deux colonnes, les champs n'ont rien à voir avec la BDD : ce sont les zones d'un formulaire de saisie ou d'un état.


    Enfin, la fonction substring sur le prédicat de jointure rend celui-ci non sargable : aucun index n'est éligible, les performances peuvent s'en ressentir.
    Ce besoin est probablement symptomatique d'une erreur de modélisation.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Juillet 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Juillet 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos retours.
    D'abord il y a un order by dans la requête du curseur.
    Ensuite, je suis la seule à utiliser la base lorsque je lis les données renvoyées par le curseur. Il n'y a donc pas de concurrence avec une autre action sur la table, pas de mise à jour ni de lecture.
    Enfin, le substring est là pour isoler le code département du code postal des clients.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 306
    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 306
    Points : 39 669
    Points
    39 669
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par IsaM59 Voir le message
    Enfin, le substring est là pour isoler le code département du code postal des clients.
    Ce qui est une mauvaise idée : les deux premiers caractères du code postal correspondent souvent au département, mais pas toujours, il y a de nombreuses exceptions !

    Voyez ICI


    Ça confirme l'erreur de modélisation.

Discussions similaires

  1. [MySQL] Cherche cause de l'erreur 'Aucune base n'a été sélectionnée'
    Par CinePhil dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/08/2008, 14h12
  2. [MySQL] est ce que l'emplacement de la requete est la cause de l'erreur
    Par info_sara dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/06/2008, 13h41
  3. [7.4.3] pg_restore annulé à cause de l'erreur
    Par Débéa dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 03/04/2008, 16h52
  4. Avertissement à cause d'une erreur dans l'URL
    Par ranell dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2008, 17h44
  5. Cause de l'erreur ?
    Par uranium-design dans le forum Visual C++
    Réponses: 11
    Dernier message: 28/10/2006, 13h17

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