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 :

[procédures stockées en C] postgresql 8.4


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur TIC
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur TIC
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Par défaut [procédures stockées en C] postgresql 8.4
    Bonjour,

    je viens de commencer actuellement à travailler sur des procédures stockées en langage C sous windows xp, et je rencontre un problème lors de l'appel de mon fichier so via un procédures pl/pgsql/.

    voici le petit code d'essai de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    int projet(int);
     
    int projet(int a) {
     
                     return a;
     
                          }

    et voici le code d'appel de mon fichier.so

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    CREATE FUNCTION projet( int ) RETURNS int 
     AS 'c:\\projet.so' 
     LANGUAGE 'C';
    et voici l'erreur retournée:


    ATTENTION: utilisation non standard de \\ dans une chaîne littérale
    LINE 2: AS 'c:\\projet.so'
    ^
    HINT: Utilisez la syntaxe de chaîne d'échappement pour les antislashs, c'est-à-dire E'\\'.


    ERREUR: bibliothèque « c:\projet.so » incompatible : bloc magique manquant
    HINT: Les bibliothèques étendues nécessitent l'utilisation de la macro
    PG_MODULE_MAGIC.

    ********** Erreur **********

    ERREUR: bibliothèque « c:\projet.so » incompatible : bloc magique manquant
    État SQL :XX000
    Astuce : Les bibliothèques étendues nécessitent l'utilisation de la macro
    PG_MODULE_MAGIC.
    merci d'avance et bonne journée.

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour
    Pour l'O/S Microsoft regardez dans ce lien
    http://www.scribd.com/doc/40725510/B...ons-on-Windows
    Cordialement

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur TIC
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur TIC
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Par défaut
    Bonjour bustaf,

    Merci pour le lien, il s'est avéré très intéressant, mais Windows m'a agacé la vie, donc je re à mon linux, le problème c'est que dans la même situation telle que j'avais décrit au départ il m'affiche l'erreur suivante:
    ERROR: incompatible library "chemin de ma lib partagé": missing magic block
    SQL state: XX000
    Hint: Extension libraries are required to use the PG_MODULE_MAGIC macro.
    et ce sachant que j'ai précédé le début du code c par la définition du PG_Module_MAGIC macro.

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour ratata

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include "/usr/local/pgsql/include/server/postgres.h"
    #include <string.h>
    #include "/usr/local/pgsql/include/server/utils/geo_decls.h"
    #include"/usr/local/pgsql/include/server/utils/errcodes.h"
    #include "/usr/local/pgsql/include/server/fmgr.h"
    PG_MODULE_MAGIC;
    
    int projet(int arg)
    {
      return arg + 1;
    }
    //ou autrement 
    
    /*PG_FUNCTION_INFO_V1(projet);
    Datum projet(PG_FUNCTION_ARGS)
    {
    int32   arg = PG_GETARG_INT32(0);
    PG_RETURN_INT32(arg + 1);
    } */
    
    // POUR COMILER
    // gcc -fPIC -c projet.c
    // gcc -shared -o projet.so projet.o
    // cp projet.so projet.o /usr/lib
    // ldconfig
    
    //COMMANDE ET RESULTAT
    //base=# CREATE FUNCTION projet(integer) RETURNS integer   AS '/usr/lib/projet', 'projet'   LANGUAGE C STRICT;
    //CREATE FUNCTION
    //base=# 
    (Il ne faut pas utiliser c++ (g++)
    Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur TIC
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur TIC
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Par défaut
    Bonjour Bustaf,

    Merci pour ta réponse, alors à ce qui paraît, j'ai une arborescence un peu différente, vu que mes include n'existent pas dans les chemins que vous m'avez cités aussi, je n'ai pas les fichiers "fmgr.h" et "geo_decls.h", mais en cherchant par-ci par-là, j'ai trouvé que "postgres.h" suffirait, ainsi que elog.h et errcodes.h,mais au moment de la compilation:

    gcc -shared projet.c -o projet.so (j'ai aussi essayé la commande que vous m'avez proposée )
    ça me donne ce qui est en-dessous, je rappelle juste que je suis sur postgresql 9.0

    In file included from /usr/include/postgresql/postgres.h:48,
    from projet.c:1:
    /usr/include/postgresql/utils/elog.h:69:28: error: utils/errcodes.h: No such file or directory

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour ratata
    Les chemins que je donne dans l'exemple sont les chemins par défaut
    avec des sources postgresql compilées sans un flag (--prefix) défini

    tapez au shell (en root)
    find / -name errcodes.h -print

    vous devez trouver un répertoire include/server/utils qui contient également palloc.h etc ...
    Si ces fichiers sont absents, il faut compiler les sources pour générer une installation complète standard.

    Je peux vous aider pour cette tâche si vous me donnez les infos suivantes

    1] Votre distribution Linux ?
    2] gcc -v ?
    3] cat /proc/cpuinfo (ou dmidecode -t4) ?
    Cordialement

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

Discussions similaires

  1. Migration procédures stockées : Oracle vers Postgresql
    Par vingohan dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 04/06/2014, 22h18
  2. [PostgreSQL] [PostGreSQL] Procédures stockées
    Par Brousse_Ouilisse dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2007, 09h56
  3. [PEAR][DB] Appel de procédure stockée dans différents schémas sous postgresql
    Par rebolon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/09/2006, 16h49
  4. [POSTGRESQL] - Procédures stockées
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/01/2006, 11h24
  5. Réponses: 2
    Dernier message: 23/05/2003, 12h22

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