尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

修改一个触发PostgreSQL 17.2 bug的SQL

修改一个触发PostgreSQL 17.2 bug的SQL
📅 发布时间:2026/6/19 8:06:38

德哥发表了一篇文章DBA挑战AI: 一条SQL解数独,
其中最后一个SQL在PostgreSQL 15上能正确执行,但在PostgreSQL 17.2上报错,84: ERROR: wrong varnullingrels (b 3) (expected (b)) for Var 1/1,这里84是sql最后一行,并不是出错的位置,我在网上搜索这个错误,有下面两个有用的信息。

  1. https://www.postgresql.org/message-id/1948671.1686748004%40sss.pgh.pa.us 这个网页提到,2023年就有相关的错误。
  2. https://github.com/citusdata/citus/issues/7899 提出这个问题的人说
The query executes successfully if: Use INNER JOIN instead of LEFT OUTER JOIN ranged_partition table is not distributed Use PG15 & Citus12.1.6

这提供了修改的思路,我在代码中找到了LEFT,代码片段如下。

SELECTboard,-- 初始化行掩码:确保 SUM 结果被强制转为 int(SELECTarray_agg(m)FROM(SELECTCOALESCE(SUM(1<<(val-1)),0)::intasmFROMgenerate_series(0,8)rLEFTJOINLATERAL(SELECTsubstring(board,r*9+i,1)aschFROMgenerate_series(1,9)i)sONch<>'.'CROSSJOINLATERAL(SELECT(ch::text)::intasval)vGROUPBYrORDERBYr)s)asrowsFROMsudoku_puzzlesWHEREid=4

将LEFT改为INNER,果真不报错了,也能算出结果,但有一个漏洞,如果某行全空,left join能保留右侧为NULL的结果,inner join则不能。
将ch为’.‘替换为’0’,然后将COALESCE(SUM(1 << (val - 1)), 0)::int改为SUM(case when val>0 then 1 << (val - 1)else 0 end)就可以了。
经验算,结果正确,放到PostgreSQL 15上也能正确执行,效率相同。

后来试验其他版本,发现17.4已经修复了这个bug

相关新闻

  • 什么是 ‘Type Erasure’ 在 `std::any` 中的性能权衡?对比 `std::variant` 的编译期多态开销
  • 2025最新!10个AI论文平台测评:研究生写论文痛点全解析
  • Day39bootstrap的栅格系统

最新新闻

  • 2026年好用的PTFE管道品牌,推荐哪家? - mypinpai
  • 邢台黄金回收门店实地探访全记录 - 余生黄金回收
  • 岳阳黄金回收实测六家正规门店靠谱吗 - 余生黄金回收
  • 零基础看懂 FPGA 实现 IIR 滤波器:大白话 + 手算实例 + 代码全拆解
  • MC68VZ328 UART与PWM寄存器深度解析与驱动开发实战
  • 2026老Windows WMA格式免费在线转换保姆级教程:即转即播全攻略 - 时时资讯

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号