Chapter 16. libpq

Table of Contents
データベース接続関数
問い合わせ実行関数
非同期問い合わせ処理
近道
非同期通知
COPY コマンドに関連した関数
libpq トレース関数
libpq 制御関数
ユーザ認証関数
環境変数
注意点
サンプルプログラム

C アプリケーションプログラマ向けの Postgres インターフェース,libpq は,クライアントプログラムから Postgres バックエンドへ問い合わせを渡し, その結果を受け取るライブラリルーチンの集合です. また libpq++(C++),libpgtcl(Tcl), perl5ecpg を含む,各種の Postgres アプリケーションインターフェースを支える エンジンが,この libpq です. もしこれらのパッケージを使うのであれば,libpq の動作に見られる一部の側面は大切なことになるはずです. このセクションの最後に,libpq を使ったプログラミング方法を 示すための短いプログラムを三つ載せておきました.また以下に示すディレクトリにも libpq アプリケーションの完成例があります.

    ../src/test/regress
    ../src/test/examples
    ../src/bin/psql

なお libpq を使うフロントエンドはヘッダファイル libpq-fe.h をインクルードし,libpq ライブラリとリンクしなければなりません.

データベース接続関数

Postgres バックエンドサーバ との接続は以下のルーチンが処理します.アプリケーションはバックエンドへの 接続を同時に複数持つことが可能です.(このようなことをする 事情のひとつとして,複数のデータベースへのアクセスが挙げられます) 個々の接続は PQconnectdb() または PQsetdblogin() を呼び出すと得られる, PGConn オブジェクトによって表されます.なおこれらの関数はわずかでも PGconn オブジェクトを割り当てるメモリの余裕があれば,NULL ではなく常に オブジェクトのポインタを返します. またこのコネクションオブジェクトを通じて問い合わせを送る前に,接続が 成功したかどうか PQstatus 関数で確認しておくべきでしょう.

libpq アプリケーションプログラマは PGconn による抽象化に注意を払うべきです. PGconn の内容は以下に挙げるアクセッサ関数を使って取り出してください. PGconn 構造体中のフィールドは将来予告なく変更されることがあります. ですから直接フィールドを参照することは避けてください. (Postgres リリース 6.4 の初期の段階から, PGconn 構造体の定義を libpq-fe.h の中から外しました) 以前作成したプログラムが PGconn のフィールドを直接操作している場合, libpq-int.h をインクルードすれば使い続けることができます. しかしそのプログラムは是非とも修正してください.