Re: Fonction C: Segmentation fault

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.

In response to

Responses

Browse pgsql-fr-generale by date

  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