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

Extensions PostgreSQL Discussion :

Dump de base avec procédures stockées


Sujet :

Extensions PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Par défaut Dump de base avec procédures stockées
    Bonjour,
    Je me suis enfin décidé à passer en version PostgreSQL 8.4 (je viens de la 7.4!) Je n'ai pas eu trop de peine malgré des petites adaptations pour mes procédures stockées en langage C (remplacement de VARATT_SIZEP par SET_VARSIZE ainsi que l'ajout du bloc "magique" PG_MODULE_MAGIC).

    Mon problème est apparu lors de mon premier DUMP ou plutôt mon premier RESTORE. En effet, j'ai souvent besoin de copier des bases de données d'une machine à l'autre et j'utilise beaucoup le pg_dump.
    Je retrouve bien les fonctions 'C' de ma librairie dans le fichier dump généré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE FUNCTION getvals(integer, integer, integer) RETURNS SETOF __vals
        AS '/usr/bin/FCTLIB/pgfuncts.so', 'getvals'
        LANGUAGE C STRICT;
    Dans cette fonction, il y a un "select" dans la table "ville" de la même base de donnée. Lors de mon restore, le message d'erreur suivant apparait :
    ERROR: relation "ville" does not exist
    LINE 1: select max(pkey) from ville
    Et ma fonction getvals n'est pas créée! La table "ville" ne saurait pas exister puisqu'elle n'a pas encore été importée (le pg_dump crée les fonctions avant les tables). Pourtant, si je fais une fonction en plpgsql qui fait accès à une table, l'erreur n'apparaît pas et la fonction est bien créée! Je n'avais pas ce problème en version 7.4.
    Quelqu'un aurait-il une explication à mon problème? Ou encore mieux, une solution? Merci!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Par défaut
    Personne n'a une idée ça m'étonne quand même que personne n'aie jamais eu ce gente de problème? C'est si peu fréquent d'utiliser des fonctions en 'C' et de faire des dump?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il parait invraisemblable que le message d'erreur que tu cites corresponde à l'instruction SQL (CREATE FUNCTION) au-dessus.
    Est-ce que c'est reproductible en-dehors de la restauration?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Par défaut
    Oui, évidement, j'aurais dû préciser, l'erreur ne vient pas du "restore", je voulais simplement expliquer pourquoi ma table n'existait pas encore.
    Mais le message d'erreur apparait également hors restauration.

    Si je fais l'instruction suivante dans une base qui n'a pas encore la table ville :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE FUNCTION getvals(integer, integer, integer) RETURNS SETOF __vals
        AS '/usr/bin/FCTLIB/pgfuncts.so', 'getvals'
        LANGUAGE C STRICT;
    Le message d'erreur est le même à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR: relation "ville" does not exist
    LINE 1: select max(pkey) from ville
    Car ma fonction getvals fait une sélection dans cette table "ville".

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par dumbool_82 Voir le message
    Car ma fonction getvals fait une sélection dans cette table "ville".
    Oui mais le fait de créer une fonction ne doit pas exécuter cette fonction.
    Et le CREATE FUNCTION n'est normalement pas capable, sans exécuter la fonction, de savoir qu'elle peut faire une requête sur cette table ville.

    Il y a quelque chose de très curieux là-dedans.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 13
    Par défaut
    Exactement C'est bien là le sens de ma question... Pourquoi est-ce qu'il essaye d'accéder à ma table au moment de la création! C'est très bizarre et de nouveau, ça n'arrive qu'avec une fonction écrite en 'C'. Y aurait-il un traitement particulier dans ce cas??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySql] Soucis avec procédure stockée
    Par glopglopyoup dans le forum Langage SQL
    Réponses: 0
    Dernier message: 01/11/2007, 15h16
  2. Rafraîchissement d'une grille avec procédure stockée
    Par lecongolais dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/02/2007, 22h38
  3. Réponses: 1
    Dernier message: 17/07/2006, 17h08
  4. C# récupérer l'id avec procédure stocké SQL Sserver 2000
    Par maximenet dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/04/2006, 23h17
  5. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30

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