当前位置: 首页 > news >正文

PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000

目录

    • 一、报错场景
    • 二、源码分析
    • 三、实际原因(更加复杂)
    • 四、解决思路

一、报错场景

今天写了一个历史数据处理程序,在开发环境、测试环境都可以正常执行,但是放到生产环境上就不行,报了一个这样的错误:

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

意思大概是:当把数据发送给后端的时候,出现了一个 I/O 异常。

完整报错截图如下:

顺着日志中异常栈信息往下看,可以看到下面有一处具体的报错原因:

  • Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000

意思大概是:出现了一个IO异常,尝试发送一个二进制 int 类型数值时,当前数值超出了大小限制:5100

Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000at org.postgresql.core.PGStream.sendInteger2(PGStream.java:359)at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1604)at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1929)at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1487)at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)... 140 common frames omitted

二、源码分析

我们根据报错提示,找到源码对应的位置,该源码位于 postgresql 依赖中,Maven坐标如下:

<!--postgresql 数据库驱动依赖 -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.6.0</version><scope>runtime</scope>
</dependency>

源码位置如下:

可以看到这里有一个大小限制,Short.MAX_VALUE 对应的就是 Short 类型的最大值,为 32767。也就是说,在 PostgreSQL 中,如果参数的数量超过 32767 之后,就会抛出 Tried to send an out-of-range integer 这个异常。


三、实际原因(更加复杂)

道理都懂,但是细想的话还是有以下两个问题:

  1. 我在代码中明明根据入参按照 1000 分页处理的,没有超出 32767,为什么还会报这个错?
  2. 报错信息中的 51000 又是哪来的?

于是我们继续根据上面的异常栈信息进行排查,针对第2层栈信息在本地打断点调试。

Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000at org.postgresql.core.PGStream.sendInteger2(PGStream.java:359)at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1604)at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1929)at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1487)at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)... 140 common frames omitted

首先找到第二层栈信息对应的源码位置,并在本地进行debug:

这里我本地调试的时候,是传了 11 个参数,但是在第二层断点中入参却变成了 352 个,这是为什么呢?

不要慌,其实这里的 queryUtf8 变量中存储的就是我们的 SQL 了,我们直接查看下这个变量的字符串即可:

终于,找到罪魁祸首了,由于项目中集成了 ShrdingJDBC,导致执行 SQL 的时候会自动拼接分表 SQL 并进行 UNION ALL,导致入参个数猛增几十倍。所以:

  • 开发环境中,分表是 202110~202405,32张表 × 11个入参 = 352 个总入参。
  • 生产环境中,分表是 202110~202512,51张表 × 1000个入参 = 51000 个总入参。

51000 远远超出 32767 的限制,所以抛出 IO 异常。


四、解决思路

可以根据以下两种情况,分别进行解决:

  1. 如果没有使用 ShardingJDBC 进行分表:建议分页处理。
  2. 如果已经使用 ShardingJDBC 进行分表:在单个SQL入参不超过 32767 的情况下,一方面可以将分片键加入参数中;另一方面可以再进一步分页,细化分页颗粒度。

整理完毕,完结撒花~🌻

相关文章:

PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000

目录 一、报错场景二、源码分析三、实际原因&#xff08;更加复杂&#xff09;四、解决思路 一、报错场景 今天写了一个历史数据处理程序&#xff0c;在开发环境、测试环境都可以正常执行&#xff0c;但是放到生产环境上就不行&#xff0c;报了一个这样的错误&#xff1a; or…...

Linux守护进程

进程组和会话在 UNIX 系统中是非常重要的概念&#xff0c;特别是在进行作业控制和终端会话管理时。下面是关于进程组和会话的详细解释&#xff1a; 进程组&#xff08;Process Group&#xff09; 定义与作用&#xff1a; 进程组是一个或多个进程的集合&#xff0c;这些进程通常…...

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了&#xff0c;要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看&#xff0c;可以看我下面总结的干货&#xff0c;哈哈 第一个问题&#xff1a;stage架构和fa架构的区…...

开源免费的发票识别OCR应用:Invoice

Invoice&#xff1a;轻松识别&#xff0c;发票电子化扫描烦恼消- 精选真开源&#xff0c;释放新价值。 概览 Invoice 是github社区上一个采用开源许可协议发布的增值税发票光学字符识别&#xff08;OCR&#xff09;解决方案项目。该项目不仅集成了预训练的高级模型&#xff0c…...

关于Docker alpine

1.拉取alpine镜像 docker pull alpine 2.运行镜像成为容器 docker run -it --rm alpine sh (--rm标志确保容器在退出时被自动删除。) 3.容器建立后&#xff0c;运行 docker exec -it <container_id> sh 4.进入容器里的 alpine环境 ①.配置安装源 cat >/etc…...

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群&#xff0c;版本为7.12.1&#xff0c;近期频繁告警&#xff0c;频繁出现索引分片异常&#xff0c;索引状态异常&#xff0c;导致应用无法正常写入ES&#xff0c;另外&#xff0c;也经常出现节点掉问题。通过分析相关ES日志&#xff0c;显示和当前JAVA G…...

思通数科大模型在智能数据查询系统中的深度应用:销售数据分析的革新

在企业决策支持系统中&#xff0c;销售数据分析占据着举足轻重的地位。思通数科的大模型技术&#xff0c;结合自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff0c;为智能数据查询系统提供了强大的分析能力。本文将详细描述思通数科大模型在销售数据分析中的应用&am…...

上位机图像处理和嵌入式模块部署(树莓派4b和qt应用全屏占有)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们都知道&#xff0c;嵌入式应用一般都是为了某一个特定应用而存在的。也就是说&#xff0c;和pc不同&#xff0c;这个嵌入式板子一般都是为了解…...

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…...

matlab例题大全

1.第1章 MATLAB系统环境 1.1 注&#xff1a;plot函数为画图函数。例plot&#xff08;x1,y1,:,x2,y2,*&#xff09;; 1.2 注&#xff1a;root为求根函数。p为方程变量前面系数矩阵。 1.3 注&#xff1a; 2*x3y-1*z 2; 8*x2*y3*z 4; 45*x3*y9*z 23 求&#xff1a;x,y,z的…...

SwiGLU激活函数

SwiGLU激活函数已经成为LLM的标配了。它是GLU的变体&#xff0c;公式如下&#xff1a; SwiGLU ⁡ ( x , W , V , b , c , β ) Swish ⁡ β ( x W b ) ⊗ ( x V c ) \operatorname{SwiGLU}(x, W, V, b, c, \beta)\operatorname{Swish}_\beta(x Wb) \otimes(x Vc) SwiGLU(x,…...

MySQL慢查询优化

当需要优化MySQL的慢查询时&#xff0c;通常需要结合多个方面进行分析和优化&#xff0c;包括索引优化、SQL语句重构、数据库结构调整等。下面&#xff0c;我将通过一个例子来说明如何优化MySQL的慢查询&#xff0c;包括多表关联和条件查询。 假设我们有一个简化的电子商务系统…...

开源数据可视化大屏对接表单数据实践!

如果你需要一个表单系统&#xff0c;进行数据收集&#xff1b;可以使用tduck填鸭进行私有化部署&#xff0c;进行表单制作&#xff0c;完成数据收集。 在实际业务中&#xff0c;往往需要将收集的数据进行展示或分析&#xff1b;此时就可以使用表单数据推送到TReport中&#xf…...

08.图形化界面字体问题处理

图形化界面字体问题处理 发现图形存在乱码&#xff0c;不显示文字 zabbix服务器的字符集所在的路径下&#xff1a; /usr/share/zabbix/assets/fonts 将本地windows系统的字体进行上传&#xff0c;选择一个自己喜欢的字体 上传到系统路径下并且直接覆盖掉 回到web浏览器界面…...

【代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II】

代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II 一、977.有序数组的平方 解题代码C&#xff1a; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int len nums.size();fo…...

Java:Servlet详解

目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…...

Oracle存储过程怎么定义类并继承

在Oracle数据库中&#xff0c;存储过程&#xff08;Stored Procedure&#xff09;是用于执行特定功能的预编译的SQL代码块。然而&#xff0c;Oracle的存储过程并不直接支持面向对象的编程概念&#xff0c;如类&#xff08;Class&#xff09;和继承&#xff08;Inheritance&…...

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…...

什么是网页反作弊

在搜索引擎技术中&#xff0c;网页反作弊是指一种防止网页排名被恶意操纵的技术。搜索引擎会根据特定的算法来评估网页的相关性和质量&#xff0c;以决定其在搜索结果中的排名。然而&#xff0c;有些人可能会尝试通过各种不正当的手段来提高自己网页的排名&#xff0c;这被称为…...

MAVEN打包JAR启动执行manifest

当您使用Maven进行项目打包&#xff0c;特别是需要创建一个可执行的JAR文件时&#xff0c;确保JAR文件的MANIFEST.MF中包含正确的Main-Class属性是非常重要的。这个属性告诉Java运行时环境哪个类包含main方法&#xff0c;作为应用程序的入口点。 如果您发现生成的JAR文件不包含…...

JavaEE 多线程详细讲解(1)

1.线程是什么 &#xff08;shift F6&#xff09;改类名 1.1.并发编程是什么 &#xff08;1&#xff09;当前的CPU&#xff0c;都是多核心CPU &#xff08;2&#xff09;需要一些特定的编程技巧&#xff0c;把要完成的仍无&#xff0c;拆解成多个部分&#xff0c;并且分别让…...

数据分析从入门到精通 1.numpy剑客修炼

会在某一瞬间突然明白&#xff0c;有些牢笼是自己给自己的 —— 24.5.5 一、数据分析秘笈介绍 1.什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来&#xff0c;总结出所研究对象的内在规律。使得数据的价值最大化 案例&#xff1a; 分析用户的消…...

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后&#xff0c;isa指向是谁&#xff0c;以及中间类是否会销毁&#xff1f;总结 三、KVO本质GNUStep窥探…...

python json字符串怎么用format方法填充参数值报KeyError

python json字符串怎么用format方法填充参数值报KeyError 需求问题分析解决方案 需求 因为python中的字典和json中的一些变量有差异&#xff0c;比如&#xff1a;json中有null、true&#xff0c;在python中就不会被识别&#xff0c;只能转换成字符串&#xff0c;在通过loads()…...

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字&#xff08;C98&#xff09; 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…...

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 &#xff08;一&#xff09;智慧旅游的定义 &#xff08;二&#xff09;智慧旅游的特点 三、智能科技在旅游服务中的应用 &#xff08;一&#xff09;大数据分析助力旅游决策 &#xff08;二&#xff09;人工智能实现个性化推荐…...

Hikyuu-PF-银行股轮动交易策略实现

今天&#xff0c;带来的是“如何使用 Hikyuu 中的投资组合来实现银行股轮动交易策略”。 这个策略的逻辑很简单&#xff1a;持续持有两支市净率最低银行股&#xff0c;然后每月换仓 定义回测周期与回测标的 同样&#xff0c;首先定义回测周期&#xff1a; # 定义回测日期 …...

【氮化镓】GaN功率器件在转换器设计中的挑战

I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…...

DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物

一、试剂信息 名称&#xff1a;DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2CAS号&#xff1a;1306310-00-8结构式&#xff1a; 二、试剂内容 DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2是一种重要的多肽化合物&#xff0c;其CAS号为1306310-00-8。该多肽包含一个DO…...

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac&#xff0c;一款专为Mac用户打造的剪贴板管理工具&#xff0c;让你在复制粘贴的日常任务中&#xff0c;享受到前所未有的高效与便捷。 它常驻在菜单栏中&#xff0c;时刻准备为你服务。一旦你复制了内容&#xff0c;CopyClip就会自动将其保存至历史记录中&…...

哪家公司因为做网站失败了/微信裂变营销软件

我们最后的结果还是很仓促&#xff0c;不是很完善&#xff0c;但是我们会在不断的进行中转载于:https://www.cnblogs.com/caicaihong/p/5601988.html...

萍乡做网站哪家好/太原关键词排名提升

目标&#xff0c;创建学生管理&#xff0c;使学生表格与班级表格连接&#xff0c;一个班级可以创建多个学生 学生管理页面需要增删改查 1、首先在url中增加 path(students.html, students.get_students),path(add_students.html, students.add_students),path(del_students.htm…...

交互式网站制作/东莞企业网站设计公司

了解生产中内部使用的API的性能是一项艰巨的任务。实际上&#xff0c;大多数团队还没有监控API。随着市场的变化&#xff0c;越来越多的团队将API监控作为Ops团队和QA团队的优先事项&#xff0c;因此每个版本都经过了适当的测试&#xff0c;并设置了一个监控器确保在生产环境中…...

寻求南宁网站建设人员/专业seo优化推广

怀旧是一种什么滋味 怀旧是一种什么滋味&#xff0c;好像有人在你心上攥了一下。 感谢这个时代将我们记录默默保存 感谢某技术博客平台竟然还能保存自己10年前的博客文章 早起的鸟儿有虫吃 今天需要在某网站下载个资料&#xff0c;如今是知识付费时代哪个网站不搞个VIP服务都…...

武汉网站推广¥做下拉去118cr/宣传软文是什么意思

“我可能干了个假的数据分析师&#xff01;”经常有同学发出这种感慨&#xff0c;然后到处发《数据分析师是干什么的》《数据分析师、数据工程师、数据运营、数据挖掘工程师、商业数据分析师、我随便写个什么分析师之间到底有什么区别》一类的帖子。之所以会这样&#xff0c;是…...

网站数据库怎么建立/百度官方平台

恐怕谁也没想到&#xff0c;智能翻译机这样看似小众的产品能引起AI硬件的销售热潮。数据显示&#xff0c;最近在京东预售的搜狗旅行翻译宝在3月19日开售一小时后就被抢购一空。”据悉&#xff0c;搜狗此次销售额破 1000 万&#xff0c;登顶京东该品类冠军。”如果说AlphaGo第一…...