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

PostgreSQL の 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 コマンド群に含めた copy in/copy out コマンドを確実に、また正しく実行できるはずです。

比較的古いアプリケーションでは、copy in /copy out をPQexec で実行し、PQendcopy の実行でトランザクションは完了する、と想定していることがよくあります。 これはコマンド文字列中の SQL が copy in/copy out だけであったときにのみ正しく動作します。