PostgreSQL异常:An I/O error occurred while sending to the backend

在这里插入图片描述

在使用PostgreSQL数据库批量写入数据的时候,遇到了一个问题,异常内容如下:

Cause: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.

报错内容

报错提示1
Caused by: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:336)at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:446)at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:370)at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:149)at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:138)
报错提示2
Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 1847252at org.postgresql.core.PGStream.sendInteger2(PGStream.java:252)at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1470)at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1793)at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1356)at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:301)... 117 common frames omitted

问题分析

从首个错误信息中可以看出,在PostgreSQL运行SQL语句时遭遇了输入/输出(I/O)异常,这意味着所执行的SQL语句存在某种问题或数据库文件系统有潜在故障。

而第二条错误信息则揭示,PostgreSQL在向客户端传输数据时,数据量超过了预设的限制。这通常表明,执行中的SQL查询结果过于庞大,超出了系统默认的传输容量,可能是因为查询返回了过多的数据行或单行数据包含大量信息所致。

查看源码
  /*** Sends a 2-byte integer (short) to the back end.** @param val the integer to be sent* @throws IOException if an I/O error occurs or {@code val} cannot be encoded in 2 bytes*/public void sendInteger2(int val) throws IOException {if (val < Short.MIN_VALUE || val > Short.MAX_VALUE) {throw new IOException("Tried to send an out-of-range integer as a 2-byte value: " + val);}int2Buf[0] = (byte) (val >>> 8);int2Buf[1] = (byte) val;pgOutput.write(int2Buf);}

sendInteger2方法的作用是将一个整型值转换成短整型的二进制表示,并通过输出流发送给后端。如果输入的值超出短整型的范围,或者在写入过程中出现I/O错误,则会抛出IOException

在方法内部,首先进行了一次范围检查,确保传入的整数值在短整型(short)的表示范围内,即介于 Short.MIN_VALUEShort.MAX_VALUE 之间。如果超出范围,会抛出一个 IOException,指明试图发送的值过大或过小,无法用两个字节表示。

上面的错误提示,能确定就是在这块抛出的了,接下来重点查看代码中批量写入数据的代码。

问题发现

拿到接口执行的SQL以后,发现是一个批量写入的SQL,执行语句特别长,在Navicat中执行就直接报错了;修改批量写入的数据条数,发现是可以正常执行的;

伪代码如下:

// 从一个响应中获取一个名为"list"的数据集合
List<CustomEntity> entityList = ExtractListFromResponse(response, "list");// 使用一个数据访问层组件,将数据插入到数据库中的指定表中
DataMapper.persistResponseData(entityList, targetTableName);

问题解决

将大集合进行拆分
// 使用org.apache.commons.collections4提供的ListUtils工具类,将大集合按照每组1000条进行拆分
List<List<CustomEntity>> partition = ListUtils.partition(entityList,1000);
// 循环遍历拆分之后的集合,分批写入数据
for (List<CustomEntity> customEntityList : partition){// 使用一个数据访问层组件,将数据插入到数据库中的指定表中DataMapper.persistResponseData(customEntityList, targetTableName);
}
使用MybatisPlus的批量写入

请确保自己的项目当中使用了MybatisPlus

// 从一个响应中获取一个名为"list"的数据集合
List<CustomEntity> entityList = ExtractListFromResponse(response, "list");
// 使用MybatisPlus的批量写入,指定每批写入条数
customService.saveBatch(entityList,1000);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1486218.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

go-kratos 学习笔记(3) google buf 管理proto

google buf 管理proto&#xff0c;以及从新归档文件的目录结构 什么是 BSR&#xff1f; BSR 将 Protobuf 文件作为版本化模块进行存储和管理&#xff0c;以便个人和组织可以轻松使用和发布他们的 API。 BSR 带有可浏览的 UI、依赖项管理、API 验证、版本控制、生成的文档以及…

Linux系统安装Cobol语言及IBM大型机模拟软件Hercules

COBOL&#xff08;Common Business-Oriented Language&#xff09;起源于50年代中期&#xff0c;是一种面向过程的高级程序设计语言&#xff0c;主要用于商业和数据处理领域。经过不断发展和标准化&#xff0c;已成为国际上应用最广泛的商业编程语言之一&#xff0c;在某red书上…

MATLAB基础:字符串、元胞数组

今天我们继续学习MATLAB中的字符串、元胞和结构 字符串 由于MATLAB是面向矩阵的&#xff0c;所以字符串的处理可以用矩阵的形式实现 字符串的赋值与引用 假设变量a&#xff0c;将用单引号引起来的字符串赋值给它&#xff0c; a清心明目, b(a[4;-1;1]) 在这里&#xff0c;…

Mysql注意事项(二)

Mysql注意事项&#xff08;二&#xff09; 最近回顾了一下MySQL&#xff0c;发现了一些MySQL需要注意的事项&#xff0c;同时也作为学习笔记&#xff0c;记录下来。—2020年06月11日 接上一篇Mysql注意事项&#xff08;一&#xff09; 9、分组数据 GROUP BY 规定&#xff…

英伟达、Mistral AI 开源企业级大模型,120亿参数、可商用

全球AI领导者英伟达&#xff08;Nvidia&#xff09;和著名开源大模型平台Mistral.ai联合开源了&#xff0c;企业级大模型Mistral NeMo 12B。&#xff08;以下简称“MN 12B”&#xff09; 据悉&#xff0c;MN 12B一共有基础和指令微调两种模型&#xff0c;支持128K上下文长度&a…

Spark-第一周

一、spark是什么 Spark是一种快速、通用、可扩展的大数据分析引擎 2009年诞生于加州大学伯克利分校AMPLab&#xff0c;2010年开源&#xff0c;2013年6月成为Apache孵化项目&#xff0c;2014年2月成为Apache顶级项目。 目前&#xff0c;Spark生态系统已经发展成为一个包含多个…

大语言模型-Bert-Bidirectional Encoder Representation from Transformers

一、背景信息&#xff1a; Bert是2018年10月由Google AI研究院提出的一种预训练模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是机器阅读理、文本分类、序列标注等任务。 BERT的网络架构使用的是多层Transformer结构&#xff0c;有效的解决了长…

如何用JavaScript实现视频观看时间追踪

在网页开发中&#xff0c;跟踪用户与多媒体内容&#xff08;如视频&#xff09;的互动是一项常见需求。无论是教育平台、数据分析&#xff0c;还是用户参与度统计&#xff0c;监控用户如何观看视频内容都能提供宝贵的见解。这篇文章将探索如何使用JavaScript实现视频播放时长的…

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

【ELK】window下ELK的安装与部署

ELK的安装与部署 1. 下载2. 配置&启动2.1 elasticsarch2.1.1 生成证书2.1.2 生成秘钥2.1.3 将凭证迁移到指定目录2.1.4 改配置2.1.5 启动2.1.6 访问测试2.1.7 生成kibana账号 2.2 kibana2.2.1 改配置2.2.2 启动2.2.3 访问测试 2.3 logstash2.3.1 改配置2.3.2 启动 2.4 file…

ElMessage自动引入,样式缺失和ts esline 报错问题解决

一. 环境 "unplugin-auto-import": "^0.17.6", "vue": "^3.3.8", "vite": "^5.0.0", "typescript": "^5.2.2",二. ElMessage样式缺失问题. 以下有两种解决方法 方法一: 配置了自动引用后…

移动UI:运动风格具备什么特征,如何识别。

在移动UI设计中&#xff0c;具备以下特征可以归为运动风格&#xff1a; 1. 流畅的动画效果&#xff1a; 运动风格的UI设计通常会运用流畅的动画效果&#xff0c;例如过渡动画、元素的缓动效果等&#xff0c;以增强用户体验和吸引用户的注意力。 2. 动态的交互设计&#xff1a…

八股文之java基础

jdk9中对字符串进行了一个什么优化&#xff1f; jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…

python+onlyoffice+vue3项目实战20240722笔记,环境搭建和前后端基础代码

开发后端 先创建data目录,然后在data目录下创建一个test.docx测试文档。 后端代码: import json import req import api from api import middleware, PlainTextResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback ==…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行&#xff0c;LLMs&#xff08;大语言模型&#xff09;再次进入人们的视野。然而&#xff0c;在处理特定领域查询时&#xff0c;大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

java之利用二维数组来计算年利润和每个季度的营业额

public class TwodimensionDemo2 {public static void main(String[] args) {//创建二维数组来存储数据int [][]yearArrArr{{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int yearSum0;//遍历二维数组&#xff0c;得到每一个一维数组并求和for (int i 0; i < yearArrArr.…

Nginx 怎样处理请求的重试机制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 怎样处理请求的重试机制&#xff1f;一、为何需要重试机制&#xff1f;二、Nginx 中的重试机制原理三、Nginx 重试机制的配置参数四、Nginx 重试机制的实际…

新手小白的pytorch学习第十弹----多类别分类问题模型以及九、十弹的练习

目录 1 多类别分类模型1.1 创建数据1.2 创建模型1.3 模型传出的数据1.4 损失函数和优化器1.5 训练和测试1.6 衡量模型性能的指标 2 练习Exercise 之前我们已经学习了 二分类问题&#xff0c;二分类就像抛硬币正面和反面&#xff0c;只有两种情况。 这里我们要探讨一个 多类别…

LeetCode 中有关数组的题目(JAVA代码实现)

1.两数之和 作为力扣的第一题&#xff0c;我估计很多新手在这里就被劝退了&#xff0c;但其实这道题不难&#xff0c;我们用map存储我们找到的目标整数&#xff0c;当循环结束之后&#xff0c;如果找到&#xff0c;就返回找到的两个整数的数组&#xff0c;如果没找到&#xff0…

pycharm创建新python环境(切换版本)详细图解版——最简单的方法实现python环境切换

先按操作&#xff0c;进行python版本的切换 下面这种方式是切换你本地已经下载了的python环境 我比较推荐下面这种方法&#xff0c;前提是你已经安装了anaconda 在这里&#xff0c;你可以创建2.7到3.10任意版本的虚拟环境 选择了创建好的环境后&#xff0c;如果对你所需要的…