ここまでで、埋め込みSQL Cプログラムの作成方法は理解できたと思います。 ここからはそのコンパイル方法についてお話しします。 コンパイルの前に、そのファイルを埋め込みSQL Cプリプロセッサに通します。 これは、使用するSQL文を特別な関数呼び出しに変換します。 コンパイル後、必要な関数を持つ特別なライブラリとリンクしなければなりません。 これらの関数は引数から情報を取り出し、libpqを使用してそのSQLを実行し、出力用に指定された引数にその結果を格納します。
プリプロセッサプログラムはecpg
という名前で、通常PostgreSQLのインストレーションに含まれています。
通常、埋め込みSQLプログラムの拡張子は.pgc
とします。
prog1.pgc
という名前のプログラムファイルがある場合、単純に以下を呼び出すことで前処理を行うことができます。
ecpg prog1.pgc
これはprog1.c
という名前のファイルを作成します。
入力ファイルがこの提案パターンに従った名前でない場合、-o
オプションを使用して明示的に出力ファイルを指定することができます。
前処理後のファイルは普通にコンパイルできます。 以下に例を示します。
cc -c prog1.c
生成されたCソースファイルはPostgreSQLインストレーションに付随するヘッダファイルをインクルードします。
ですので、デフォルトで検索されない場所にPostgreSQLをインストールした場合は、コンパイル用のコマンドラインに-I/usr/local/pgsql/include
のようなオプションを追加しなければなりません。
埋め込みSQLプログラムをリンクするためには、以下のように、libecpg
ライブラリを含めなければなりません。
cc -o myprog prog1.o prog2.o ... -lecpg
繰り返しになりますが、コマンドラインに-L/usr/local/pgsql/lib
といったオプションを追加する必要があるかもしれません。
インストール先のパスを取得するために、パッケージ名libecpg
でpg_config
またはpkg-config
を使うことができます。
大規模プロジェクトの構築処理をmakeを使用して管理している場合、以下の暗黙規則をMakefileに含めておくと便利です。
ECPG = ecpg %.c: %.pgc $(ECPG) $<
ecpg
コマンドの完全な構文はecpgに説明があります。
デフォルトではecpgはスレッドセーフです。 しかしクライアントコードのコンパイル時に他のスレッド関連のコマンドラインオプションを使用する必要があるかもしれません。