From: | Samuel ROZE <samuel(dot)roze(at)gmail(dot)com> |
---|---|
To: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Fonction C: Segmentation fault |
Date: | 2009-10-14 19:21:48 |
Message-ID: | 1255548108.27829.23.camel@samuel-laptop |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonsoir,
Le mercredi 14 octobre 2009 à 20:53 +0200, Dimitri Fontaine a écrit :
> Bonsoir,
>
> Rapidemment aussi, avec un peu de chance plus tard dans la semaine je
> pourrai regarder le code, mais je n'ai encore jamais retourné de tuple
> en C...
>
> Samuel ROZE <samuel(dot)roze(at)gmail(dot)com> writes:
> > Pour le compilation, voilà ce que j'ai fait:
>
> Regarde plutôt du côté de PGXS, tu fais un Makefile de 5 lignes et hop
> ça roule. Il faut absolument utiliser les mêmes options de compilation
> que ton serveur PG.
En premier, c'est ce que j'avais fait !
rps1:~# pg_config --pgxs
/usr/lib/postgresql/8.3/lib/pgxs/src/makefiles/pgxs.mk
rps1:~# cat /usr/lib/postgresql/8.3/lib/pgxs/src/makefiles/pgxs.mk
cat: /usr/lib/postgresql/8.3/lib/pgxs/src/makefiles/pgxs.mk: Aucun
fichier ou répertoire de ce type
Ça aide pas ! :-)
De plus, en mettant l'adresse du fichier "pgxs.mk" manuellement, j'avais
une erreur, qui était que le fichier postgres.h n'était pas trouvé. En
effet, "-I/usr/local/pgsql/include/server/" n'était pas ajouté à la
commande gcc, d'où le problème...
> > Ça marche bien. Quelques petites erreurs:
> > ------------------------------------------------------------------------
> > parse_url.c: In function ‘parse_url’:
> > parse_url.c:25: warning: unused variable ‘length’
> > parse_url.c: In function ‘parse_url_alloc’:
> > parse_url.c:73: warning: control reaches end of non-void function
> > parse_url.c: In function ‘parse_url’:
> > parse_url.c:51: warning: ‘tupdesc’ may be used uninitialized in this
> > function
> > ------------------------------------------------------------------------
>
> N'accepte aucun warning. Pas la peine de tenter d'aller plus loin en
> faisant comme si tu n'avais pas vu.
Ils ne sont vraiment pas méchants, mais je les ai corrigés et... ça ne
marche pas mieux !
> > Pour la création de la fonction dans PostgreSQL:
> > ------------------------------------------------------------------------
> > CREATE FUNCTION parse_url (text) RETURNS record AS '/root/PgSQL-parse_url/parse_url.so', 'parse_url' LANGUAGE C;
> > ------------------------------------------------------------------------
>
> Relis la doc sur les modules externes et PGXS, et utilise :
>
> http://www.postgresql.org/docs/8.3/interactive/xfunc-c.html
>
> Pour reprendre l'exemple de hstore-new :
>
> CREATE OR REPLACE FUNCTION exist(hstore,text)
> RETURNS bool
> AS 'MODULE_PATHNAME','hstore_exists'
> LANGUAGE C STRICT IMMUTABLE;
Juste pour information, avec le même code, ça revient au même. ;-)
> > L'erreur suivante m'est retournée:
> > ------------------------------------------------------------------------
> > server closed the connection unexpectedly
> > This probably means the server terminated abnormally
> > before or while processing the request.
> > ------------------------------------------------------------------------
>
> Utilise un serveur compilé avec les options --enable-debug et
> --enable-cassert pour valider du code maison en C, et regarde comment
> attacher gdb au backend qui traite tes requêtes. En gros, dans deux
> consoles interactives a et b :
>
> a# psql ...
> b# ps aux | grep '[p]ostgres.*idle'
> b# gdb -p <pid>
> b# continue
> a# select ...
> crash
> b# bt
>
> bt ça veut dire backtrace et tu peux demander plein d'autres infos pour
> savoir exactement ce qui c'est passé, regarder la valeur des variables,
> tout.
Je vais essayer et je vous tient au courant ! Merci !
Samuel.
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2009-10-14 19:28:40 | Re: Fonction C: Segmentation fault |
Previous Message | Guillaume Lelarge | 2009-10-14 19:07:04 | Re: Fonction C: Segmentation fault |