私はPostgreSQL 8.3を使用しており、libpq
APIを使用するC++プログラムを作成しています。私はPQsendQuery()
関数と非同期にコマンドを実行します。タイムアウト処理機能を実装しようとしています。タイムアウトが切れるとPQcancel()
と呼んで実装しました。私は、1ミリ秒のタイムアウトで100 000行(約0.5秒続く)を返すクエリでそれをテストし、サーバが実行を終了するまでコマンドをキャンセルする代わりにブロックし、成功したクエリを返すことを発見しました。PostgreSQL:C/C++プログラムからクエリを取り消します。
私は、ドキュメントでは、キャンセル要求が成功してもクエリが実行される可能性があることを理解しています。私の問題は、PQcancel()
が私の実行スレッドをブロックするということです。これは、非同期処理(Boost Asioフレームワークを使用)を使用するので受け入れられません。私のプログラムは、SQLクエリを実行する以外のタスクを実行する可能性があります。 。
通常はPQcancel()
ブロックですか?ノンブロッキングキャンセル要求を行う方法はありますか?
サイドノート:8.3バージョンはサポートされていません。サポートされているバージョンのいずれかにアップデートすることを検討してください。 –
私が使用しているLinuxディストリビューションで出荷されているバージョンです(SUSE 11)。 – petersohn
出荷方法は関係ありません。それはまだ時代遅れです。 –