1.6. 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が唯一コピーイン/アウトであっ たときにのみ正しく動作します。