C#和PostgreSQL单行模式

C#和PostgreSQL单行模式,postgresql,npgsql,Postgresql,Npgsql,当使用Npgsql将大量数据从PostgreSQL流式传输到C#时,该命令是默认为单行模式,还是在返回之前提取整个结果集?我在Npgsql文档中没有提到单行模式,在源代码中也没有任何东西表明它是可选的。根据我的经验,Npgsql中的默认设置是在调用reader.Read()时为结果集获取一个游标,该游标将获取当前正在处理的行数从服务器到驱动程序客户端都有一行。可能会发生一些缓冲,但流式传输的结果是正常的 当Npgsql发送您提供的SQL查询时,PostgreSQL将立即发回所有行。如果将Comm

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

根据我的经验,Npgsql中的默认设置是在调用
reader.Read()时为结果集获取一个游标,该游标将获取当前正在处理的行数
从服务器到驱动程序客户端都有一行。可能会发生一些缓冲,但流式传输的结果是正常的

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


有关为什么我们没有实现更具攻击性的内容,请参阅。

当您说“立即发回所有行”时,您的意思是一旦找到第一行,它就会发回该行,然后当它找到第二行时,它就会被发送,等等。,或者,您的意思是它将计算整个结果,然后将它们发送回客户端?PostgreSQL通常会将行流式传输回客户端-它不会对所有行进行缓冲,然后才将它们发送回客户端。事实上,如果客户机的使用速度不够快,PG可能会阻止查询的进一步处理(TCP零窗口),直到使用更多行。