このセクションはecpgツールの使いかたを説明します。
プリプロセッサはecpgと呼ばれます。インストールのあと Postgresのbin/ディレクトリ に置かれます。
ecpgライブラリはlibecpg.aもしくは libecpg.soと呼ばれます。更に、このライブラリは Postgresサーバーとの通信にlibpq ライブラリを使うので、プログラムを-lecpg -lpqと リンクしておく必要があります。
このライブラリはいくつか "隠された" メソッドを持っていますが、時においては とても便利です。
ECPGdebug(int on, FILE *stream) 0以外の第1引数で渡された場合、デバッグログを onにします。デバッグログはstream で実行されます。ほとんどのSQL文は引数と 結果をログに出します。
ほとんどのSQL文で呼ばれる最も重要な関数 ECPGdoは、拡張された文字列(例:全ての 引数用変数が挿入されたもの)とPostgres サーバからの結果の両方をログに出力します。SQL 文のエラーを探すのにはとても便利です。
ECPGstatus() このメソッドはデータベースと接続されている場合「真」を返し、 それ以外は「偽」を返します。
Postgresサーバからのエラーを見つけるためには ファイルのincludeセクションに下記のような行を追加して下さい。
exec sql include sqlca;これは構造体とsqlcaという名前の変数を次のように 定義します。
struct sqlca { char sqlcaid[8]; long sqlabc; long sqlcode; struct { int sqlerrml; char sqlerrmc[70]; } sqlerrm; char sqlerrp[8]; long sqlerrd[6]; /* 0: empty */ /* 1: OID of processed tuple if applicable */ /* 2: number of rows processed in an INSERT, UPDATE */ /* or DELETE statement */ /* 3: empty */ /* 4: empty */ /* 5: empty */ char sqlwarn[8]; /* 0: set to 'W' if at least one other is 'W' */ /* 1: if 'W' at least one character string */ /* value was truncated when it was */ /* stored into a host variable. */ /* 2: empty */ /* 3: empty */ /* 4: empty */ /* 5: empty */ /* 6: empty */ /* 7: empty */ char sqlext[8]; } sqlca;
もし上のSQL文でエラーが発生した場合 sqlca.sqlcodeが 0 以外になります。もし sqlca.sqlcodeがその 0 よりも小さい場合、 データベース定義が与えられた問い合わせと合わないといった深刻な エラーです。もし 0 以上だった場合はテーブルが要求された行を含まない といった通常のエラーです。
sqlca.sqlerrm.sqlerrmc はエラーを説明する文字列を持っています。 その文字列はソースファイルの行数で終ります。
起こり得るエラーのリスト:
通常は起こりません。これは仮想メモリに空きが無いことを知らせるものです。
通常は起こりません。これはライブラリの知らないものをプリプロセッサが 作ったことを知らせます。プリプロセッサとライブラリのバージョンが 相容れないものを使っている可能性があります。
これはPostgresが、持っている変数より多い 引数を返した場合です。おそらくINTO :var1,:var2 リストでホスト変数を対にするのを忘れたのでしょう。
これはPostgresが、持っているホスト変数より少ない 引数を返した場合です。おそらくINTO :var1,:var2リストに ホスト変数を多く入れすぎています。
これは問い合わせが数行を返したにも関わらず、指定された変数が配列になっていません。 入力したSELECTが一意なものではなかったのです。
これは、ホスト変数がint型でPostgres データベースのフィールドがintでは表せない別の型を含んでいるという意味です。 ライブラリはこの変換にstrtolを使います。
これは、ホスト変数がunsigned int型でPostgres データベースのフィールドがunsigned int型では表せない型を含んでいるという 意味です。
これは、ホスト変数がfloat型でPostgresデータベース のフィールドがfloatでは表せない別の型を含んでいるという意味です。 ライブラリはこの変換にstrtodを使います。
これはホスト変数がbool型でPostgres データベースのフィールドが't' でも 'f' でもないという意味です。
おそらく問い合わせが空だったために、Postgres がPGRES_EMPTY_QUERYを返しました。
プログラムが存在しない接続にアクセスしようとしています。
プログラムが、存在するけれども開いていない接続にアクセスしようとしています。
使おうとしている文が用意されていません。
Postgresのエラーです。 このメッセージはPostgresのバックエンド からのエラーメッセージを含んでいます。
スタート、コミット、トランザクションの ロールバックができないことをPostgres が警告しています。
データベースへの接続ができませんでした。
これは「一般的な」エラーで問い合わせているものが見つけられないか、 カーソルで通りすぎてしまったものです。