COPY コマンドに関連した関数

Postgres の COPY コマンドでは, libpq が使っているネットワーク接続に対して読み込み, あるいは書き込みを選ぶことができるようになっています. そこでこのネットワーク接続に直接アクセスするための関数が必要になります. もちろんアプリケーションもこの機能によって恩恵を受けるでしょう.

これらの関数は,PQexec または PQgetResult から, PGRES_COPY_OUT か PGRES_COPY_IN 結果オブジェクトを受け取った後にのみ, 実行するべきです.

PQgetResult を使うとき,アプリケーションは PQgetline を繰り返し呼び出して PGRES_COPY_OUT に応答し,最終行を見つけたら続いて PQendcopy を呼び出します. それから,PQgetResult が NULL を返すまで PQgetResult のループに戻っておくべきです. 同じように PGRES_COPY_IN は連続した PQputline で処理し, そして PQendcopy でしめくくった後に PQgetResult のループに戻ります. このようにすることで,ひとつづきの SQL コマンド群に含めたコピーイン/ アウトコマンドを確実に,また正しく実行できるはずです. 比較的古いアプリケーションでは,コピーイン/アウトを PQexec で実行し,PQendcopy の実行でトランザクションは完了する, と想定していることがよくあります. これは文字列中の SQL コマンドが唯一コピーイン/アウトであったときにのみ正しく動作します.