gpt4 book ai didi

C++、Postgres、libpqxx 大查询

转载 作者:太空狗 更新时间:2023-10-29 21:21:02 26 4
gpt4 key购买 nike

我必须通过以下代码对 Postgres 执行 SQL 查询。查询返回大量行(40M 或更多)并有 4 个整数字段:当我使用 32Gb 的工作站时,一切正常,但在 16Gb 的工作站上,查询非常慢(我猜是由于交换)。有没有办法告诉 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++ 代码中使用它。您的帮助将不胜感激。

编辑:这个查询只运行一次,用于创建必要的主内存数据结构。因此,无法优化 tt。此外,pgAdminIII 可以在相同(或内存更小)的 PC 上在一分钟内轻松获取这些行。此外,Java 可以轻松处理两倍的行数(使用 Statent.setFetchSize() http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setFetchSize%28int%29 )因此,这确实是 libpqxx 库的问题,而不是应用程序问题。有没有办法在 C++ 中强制执行此功能,而无需手动明确设置限制/偏移量?

最佳答案

使用 cursor

另见 FETCH . cursor会在幕后为您使用它,我想,但以防万一,您始终可以使用 FETCH 手动编码流式检索。 .

关于C++、Postgres、libpqxx 大查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com