我终于在windows 10上测试了一个旧的.NET应用程序。它使用32位9.03 odbc对Postgresql 9.3(64位)运行十几个sql选择。应用程序运行一个Select以获取配置数据Select MyRow,MyName from config where ConfigID=?它会如期而至。然后再次运行它以获取不同的id,但失败并出现错误[HY000]没有使用该句柄执行任何查询。sql在语法上是正确的,当我在QA中运行它时,它会按预期返回。我用google搜索错误,IBM说要在连接中添加;UseDeclareFetch=1。我做到了,应用程序继续运行。我找不到任何关于什么的信息;UseDeclareFetch=1做了什么,以及为什么它在windows 10中突然起了作用。我读过,但没怎么说明它的用途。 最佳答案 UseDeclareFetch=1在使用UnixODBC启用“单行模式”时更改底层libpq PostgreSQL库的行为,如文档中所述:https://www.postgresql.org/docs/9.2/static/libpq-single-row-mode.html设置此模式后,每次提取都会导致客户端服务器往返,并从光标向客户端提取一行。如果没有此模式(默认情况下不使用UseDeclareFetch),则在返回第一次提取之前,将光标的整个结果集推送到客户机内存。这减少了网络使用,但增加了(有时很大)游标结果集所需的客户机RAM数量。因此,如果客户机RAM有限,您可能希望设置UseDeclareFetch,但是如果您确实使用它,请注意潜在的网络延迟问题。关于postgresql - 什么是UseDeclareFetch postgresql odbc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34009774/
10-11 03:22