当使用 Npgsql 将大量数据从 PostgreSQL 流式传输到 C# 时,该命令是默认为单行模式还是会在返回之前提取整个结果集?我在 Npgsql 文档中没有提到单行模式,源代码中也没有任何内容表明它是可选的一种或另一种方式。
2 回答
1
当 Npgsql 发送你给它的 SQL 查询时,PostgreSQL 会立即发回所有的行。如果您将CommandBehavior.SingleRow(或SingleResult)传递给NpgsqlCommand.ExecuteReader,Npgsql 将根本不会将这些行返回给用户;它会在内部消耗它们,但它们仍然是从服务器发送的。换句话说,如果您希望这些选项能够减少使用的网络带宽,那是行不通的;这样做的唯一方法是通过 LIMIT 子句限制 SQL 本身中的结果集。无论如何,这通常是一个更好的主意。
请参阅https://github.com/npgsql/npgsql/issues/410了解更多关于为什么我们没有实施更激进的东西的详细信息。
于 2019-10-03T22:10:19.873 回答
0
根据我的经验,Npgsql 中的默认设置是为结果集获取一个游标,该游标将获取您当前正在处理的行数,基本上,在调用时,reader.Read()您会从服务器获取一行到驱动程序客户端。可能会发生一些缓冲,但流式传输结果是常态。
于 2019-10-03T11:13:15.763 回答