次のコードで Postgres への SQL クエリを実行する必要があります。クエリは膨大な数の行 (40M 以上) を返し、4 つの整数フィールドがあります。データセット全体を待たずに、バッチで行をロードするように C++ に指示する方法はありますか? Java では、おそらくより優れた JDBC ドライバーのおかげで、これらの問題はこれまで一度もありませんでした。
try {
work W(*Conn);
result r = W.exec(sql[sqlLoad]);
W.commit();
for (int rownum = 0; rownum < r.size(); ++rownum) {
const result::tuple row = r[rownum];
vid1 = row[0].as<int>();
vid2 = row[1].as<int>();
vid3 = row[2].as<int>();
.....
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
}
私は PostgreSQL 9.3 を使用していますが、このhttp://www.postgresql.org/docs/9.3/static/libpq-single-row-mode.htmlが表示されますが、C++ コードで使用する方法がわかりません。あなたの助けに感謝します。
編集:このクエリは、必要なメイン メモリ データ構造を作成するために、1 回だけ実行されます。そのため、tt は最適化できません。また、pgAdminIII は、同じ (または RAM が小さい) PC で 1 分以内にこれらの行を簡単に取得できます。また、Java は 2 倍の行数を簡単に処理できます (Statent.setFetchSize() http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setFetchSize%28int%29を使用) 。したがって、これは実際には libpqxx ライブラリの問題であり、アプリケーションの問題ではありません。制限/オフセットを手動で明示的に設定せずに、C++ でこの機能を強制する方法はありますか?