Maintenant que vous avez une idée de comment rédiger des programmes SQL embarqué en C, vous voudrez probablement savoir comment les compiler. Avant de les compiler, vous passez le fichier dans le préprocesseur C SQL embarqué, qui convertira les ordres SQL que vous avez utilisé vers des appels de fonction spéciaux. Ces fonctions récupèrent des données à partir de leurs arguments, effectuent les commands SQL en utilisant l'interface libpq, et met le résultat dans les arguments spécifiés comme sortie.
Le programme préprocesseur est appelé ecpg
et fait
partie d'une installation normale de PostgreSQL.
Les programmes SQL embarqués sont typiquement nommés avec une extension
.pgc
. Si vous avez un fichier de programme appelé
prog1.pgc
, vous pouvez le préprocesser en appelant
simplement:
ecpg prog1.pgc
Cela créera un fichier appelé prog1.c
. Si
vos fichiers d'entrée ne suivent pas les règles de nommage suggérées,
vous pouvez spécifier le fichier de sortie explicitement en utilisant
l'option -o
.
Le fichier préprocessé peut être compilé normalement, par exemple:
cc -c prog1.c
Les fichiers sources C générés incluent les fichiers d'entête de
l'installation PostgreSQL, donc si vous avez
installé PostgreSQL à un endroit qui n'est
pas recherché par défaut, vous devrez ajouter une option comme
-I/usr/local/pgsql/include
à la ligne de commande de
compilation.
Pour lier un programme SQL embarqué, vous aurez besoin d'inclure la
librairie libecpg
, comme ceci:
cc -o myprog prog1.o prog2.o ... -lecpg
De nouveau, vous pourriez avoir besoin d'ajouter une option comme
-L/usr/local/pgsql/lib
à la ligne de commande.
Vous pouvez utiliser pg_config
ou pkg-config
avec le package libecpg
pour obtenir les chemins de votre
installation.
Si vous gérez le processus de compilation d'un projet de grande taille en utilisant make, il serait pratique d'inclure la règle implicite suivante à vos makefiles:
ECPG = ecpg %.c: %.pgc $(ECPG) $<
La syntaxe complète de la commande ecpg
est
détaillée dans ecpg.
La librairie ecpg est thread-safe par défaut. Toutefois, vous aurez peut-être besoin d'utiliser des options de ligne de commande spécifiques aux threads pour compiler votre code client.