0
我使用libdbi连接到一个大型postgresql数据库(3亿条记录)并执行SELECT *
查询,然后逐行显示结果。我得到完整的交换和内存,所以它似乎autocommit
已启用,并将整个结果集加载到内存中。有没有任何选项来禁用自动提交或至少保持游标后提交像在ResultSet.HOLD_CURSORS_OVER_COMMIT
在Java?我没有找到dbi_conn_set_option
的任何选项来做到这一点。这里是我的代码:如何在libdbi中使用游标 - postgresql
dbi_conn conn;
dbi_result result;
int64_t id;
dbi_initialize(NULL);
conn = dbi_conn_new("pgsql");
if (conn == NULL)
{
printf("connection error.\n");
return EXIT_FAILURE;
}
dbi_conn_set_option(conn, "host", "127.0.0.1");
dbi_conn_set_option(conn, "username", "postgres");
dbi_conn_set_option(conn, "password", "123456");
dbi_conn_set_option(conn, "dbname", "backup");
if (dbi_conn_connect(conn) < 0)
{
printf("could not connect to database.\n");
return EXIT_FAILURE;
}
result = dbi_conn_query(conn, "SELECT * FROM tbl");
if (result)
{
while (dbi_result_next_row(result))
{
id = dbi_result_get_longlong(result, "_id");
printf("This is _id: %ld\n", id);
}
dbi_result_free(result);
}
dbi_conn_close(conn);
dbi_shutdown();
至少当使用Java/JDBC时,使用服务器端游标**与自动提交设置**有关,因为“*后端在事务结束时关闭游标,所以在自动提交模式下,后端将关闭任何东西之前的光标都可以从中获取*“ – 2012-08-07 14:15:27