大型查询上的Java PostgreSQL错误:发送到后端时发生I / O错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了大型查询上的Java PostgreSQL错误:发送到后端时发生I / O错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含989字,纯文字阅读大概需要2分钟。
内容图文
![大型查询上的Java PostgreSQL错误:发送到后端时发生I / O错误](/upload/InfoBanner/zyjiaocheng/883/21ad45c8d6d74415842934725086db44.jpg)
在Java中,我使用java.sql.PreparedStatement尝试提交一个相当大的查询,其中包含用于高效连接的常量(VALUES(?),(?),(?)…)表达式.
有cca 250K值,所以我还要设置250K参数.
在Java中,
org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
在我的服务器PostgreSQL日志上,只有一行关于该错误:
incomplete message from client
关于可以随时更改以使大型查询正常工作的某些设置的想法吗?
解决方法:
JDBC驱动程序可以传递给后端的最大参数数是32767.这受v3有线协议的限制,该协议以16位int形式传递参数计数(有关definition of the Bind message,请参见文档).
您可以通过在数组中传递值并将其取消嵌套在服务器上来解决此问题:
// Normally this would be one too many parameters
Integer[] ids = new Integer[Short.MAX_VALUE + 1];
Arrays.setAll(ids, i -> i);
// Pass them in an array as a single parameter and unnest it
PreparedStatement stmt = con.prepareStatement(
"WITH ids (id) AS (SELECT unnest (?)) " +
"SELECT f.* FROM foo f JOIN ids i ON i.id = f.id"
);
stmt.setArray(1, con.createArrayOf("INT", ids));
内容总结
以上是互联网集市为您收集整理的大型查询上的Java PostgreSQL错误:发送到后端时发生I / O错误全部内容,希望文章能够帮你解决大型查询上的Java PostgreSQL错误:发送到后端时发生I / O错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。