DuckDB v2.0 弃用 PostgreSQL 解析器
DuckDB V2 PEG-based SQL parser
DuckDB v2.0 迎来重大升级,彻底替换了沿用多年的 PostgreSQL 衍生 SQL 解析器,转而采用基于 PEG(Parsing Expression Grammar)的新架构。这一变革旨在解决旧解析器在扩展语法时面临的 LALR(1) 冲突难题,让 DuckSQL 的演进更加灵活。新解析器不仅完整支持现有的 DuckSQL 方言,还引入了 Packrat Parsing 技术,有效避免了处理畸形查询时的性能陷阱。借助这一新基础,DuckDB 能够更轻松地添加如表达式语句、CONNECT 指令等新语法,并为未来扩展自定义解析规则铺平了道路,让数据库系统的语法扩展变得前所未有的简单。
在 DuckDB 中,我们的目标之一是让使用数据库系统变得尽可能简单。
- zcw100
我对这个更新很兴奋,手头已经有一些应用场景,但我始终担心语法会陷入各自为政的混乱局面,导致冲突,因为每个扩展作者都想修改语法。我希望他们已经有了相应的解决方案,只是我还没读到。我担心加载某个扩展后,会扰乱语法的解析。两个作者的扩展可能 legitimately 需要冲突的解析器,而在 DuckDB 中卸载扩展并没有简单的方法。如果能有一个显式的 "GRAMMAR SQL" 或 "GRAMMAR GGSQL" 之类的声明就太好了。
- tofflos
> 之前的博客文章已经介绍了 DuckDB 友好的 SQL,包括 GROUP BY ALL 以及使用 SELECT * EXCLUDE (...) 进行列选择。
我非常喜欢“友好 SQL”这个概念!我经常创建形状相同的视图,如果 UNION 和 UNION ALL 能接受列表就好了。但这不在标准里,所以我已经对 PostgreSQL 实现它不抱希望了。
select * from view1 union all view2, view3, view4;
- pspeter3
我很好奇,这是否意味着我们可以有一个 Duck SQL Oxfmt 插件?