修改德哥的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
相关推荐
满天星830357710 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
我不介意孤独11 小时前
04-记忆系统为什么向量数据库不够用
数据库·人工智能·资源隔离·agent infra
AOwhisky11 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
qq210846295312 小时前
【数据库】TDengine 清理旧数据
数据库·oracle·tdengine
j_xxx404_12 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
持敬chijing12 小时前
Web渗透之SQL注入-二次注入(Second-Order SQL Injection)
sql·安全·web安全·网络安全·网络攻击模型·安全威胁分析
数据库小学妹12 小时前
PostgreSQL迁移到国产数据库怎么做?评估、改造、上线全流程实操指南
数据库·经验分享·postgresql·dba
x***r15112 小时前
Redis Desktop Manager 0.8.8 安装教程(Windows redis-desktop-manager-0.8.8.384详细步骤)
数据库·windows·redis
initialize130612 小时前
Postgresql(Oracle兼容) 到Oracle19.9字符语义
数据库·oracle
稷下元歌13 小时前
七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。
网络·数据库·笔记