Ala*_*lan 2 .net postgresql select npgsql
我有一个大表(2,000,000 行),我想将每条记录打印到屏幕上,一次一个,而不将整个表加载到内存中。
//pseudo code
var cmd = new NpgSQLCommand();
cmd.CommandText = "SELECT * FROM mytable;"
IReader reader = cmd.ExecuteReader(); //blocks until the entire set is returned
while(reader.Read()) //ideally each call to read loads more results from the db.
{
// print record name
}
Run Code Online (Sandbox Code Playgroud)
正如上面代码中所指出的,在整个集合加载到内存中之前,ExecuteReader() 不会继续。我如何改变这种行为以便结果被流式传输?
谢谢
ETA:虽然这看起来像是家庭作业,但事实并非如此。这只是描述问题的一种更简单的方法,该问题涉及使用单个查询读取整个表,但一次处理一行结果。
预计到达时间 x2:
来自 npgsql 警告:调用 ExecuteReader 和大型表时存在一个已知问题。当前Npgsql 的版本 1 在返回之前从表中获取所有数据。如果在这种情况下遇到性能不佳的情况,您可能需要使用服务器游标来分页浏览行。为此,您可以使用如下代码:
Npgsql2 现在可以更好地处理大型结果集。它不会将所有数据加载到内存中。因此,您不再需要使用服务器端光标。
我希望它有帮助。
Francisco Figueiredo Jr. Npgsql 首席开发人员
| 归档时间: |
|
| 查看次数: |
4690 次 |
| 最近记录: |