他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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 だけであったときにのみ正しく動作します。