修改德哥的PostgreSQL求解数独SQL在cedardb上运行

cedardb与PostgreSQL语法兼容,但是直接运行结果是NULL,求解失败。将中间子查询的结果打印出来看出了原因。

同样的输入数据,输出的位掩码不同,比如初始化列和宫编码,数组中的元素值相同,顺序不同。

cedardb 输出

复制代码
id board cols boxes 
1 000000010400000000020000000000050407008000300001090000300400200050100000000806000  {12,64,32,18,1,14,137,272,129} {20,1,2,10,0,129,169,272,76}

PostgreSQL输出

复制代码
  1 | 000000010400000000020000000000050407008000300001090000300400200050100000000806000 | {12,18,129,137,272,32,14,1,64} | {10,0,1,129,272,76,20,169,2} 

将相应的聚合函数 array_agg(m)改为明确的排序 array_agg(m ORDER BY c), 在cedardb 输出了与PostgreSQL相同的结果。

复制代码
id board cols boxes 
1 000000010400000000020000000000050407008000300001090000300400200050100000000806000  {12,18,129,137,272,32,14,1,64} {10,0,1,129,272,76,20,169,2}

再运行完整SQL,cedardb 求解出了示例数据的结果,时间约是PostgreSQL的十分之一。

PostgreSQL输出

复制代码
 id |  puzzle   |  result
----+-----------+-----------
  3 | 8????????+| 812753649+
    | ??36?????+| 943682175+
    | ?7??9?2??+| 675491283+
    | ?5???7???+| 154237896+
    | ????457??+| 369845721+
    | ???1???3?+| 287169534+
    | ??1????68+| 521974368+
    | ??85???1?+| 438526917+
    | ?9????4?? | 796318452
(1 row)

Time: 1211.606 ms (00:01.212)

cedardb 输出

复制代码
id puzzle result
3 8????????
??36?????
?7??9?2??
?5???7???
????457??
???1???3?
??1????68
??85???1?
?9????4?? 812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452

2026-01-24 05:37:18.850220019 UTC       INFO:     [s] execution: (0.116115 min, 0.116115 max, 0.116115 median, 0.0% relMAD, 0.116115 avg, 0.000000 sdev, 4 scale, nan IPC, nan CPUs, nan GHz) compilation: (0.006032 min, 0.006032 max, 0.006032 median, 0.0% relMAD, 0.006032 avg, 0.000000 sdev)

但是如果是多个行,cedardb就报错了,看来是在生成执行计划阶段报错,原因还需要进一步研究。

复制代码
2026-01-24 11:54:10.854135438 UTC       FATAL:   Assertion `(x != y) && (lca(x, y) == x)` failed. /cedardb/plan/algebra/operators/Operator.cpp:280: static cedar::algebra::Operator* cedar::algebra::Operator::LinkCutNode::findContainingChild(cedar::algebra::Operator*, cedar::algebra::Operator*)
CedarDB v2026-01-22 current-amd64
cedardb 0x31aff8b
相关推荐
Zenova EdgeOS11 分钟前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
KKKlucifer15 分钟前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
字节跳动开源1 小时前
OpenViking 上线原生 3D 内容理解模型
数据库·开源
CCIE-Yasuo3 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶3 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构
涛思数据(TDengine)3 小时前
从工业本体到 AI 原生:TDengine 出席 2026 QCon 分享工业数据基础设施路径
大数据·数据库·人工智能·tdengine·工业
Jesse_EC4 小时前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
工控丫丫4 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
这个DBA有点耶5 小时前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
无言听风雨丶6 小时前
Redis 运维实战与排错
运维·数据库·redis