C# 和 PostgreSQL 单行模式

C# and PostgreSQL Single Row Mode

当使用 Npgsql 将大量数据从 PostgreSQL 流式传输到 C# 时,该命令是默认为单行模式还是会在返回之前提取整个结果集?我在 Npgsql 文档中找不到单行模式的提及,源代码中也没有任何内容表明它是可选的。

根据我的经验,Npgsql 中的默认设置是获取结果集的游标,该游标将获取您当前正在处理的行数,基本上,当调用 reader.Read() 时,您会从服务器获取一行给 driver 客户端。可能会发生一些缓冲,但流式传输结果是常态。

当 Npgsql 发送您给它的 SQL 查询时,PostgreSQL 将立即发回所有行。如果您将 CommandBehavior.SingleRow(或 SingleResult)传递给 NpgsqlCommand.ExecuteReader,Npgsql 将不会 return 那些行给用户;它会在内部使用它们,但它们仍然是从服务器发送的。换句话说,如果您希望这些选项能够减少使用的网络带宽,那是行不通的;您唯一的方法是通过 LIMIT 子句限制 SQL 本身的结果集。无论如何,这通常是一个更好的主意。

请参阅 https://github.com/npgsql/npgsql/issues/410 详细了解为什么我们没有实施更积极的措施。