升级PostgreSQL 15后GROUP BY/ORDER BY用TRUE报错问题咨询
PostgreSQL 15 GROUP BY/ORDER BY 中使用TRUE报错问题解答
是的,PostgreSQL 15确实不再允许在GROUP BY子句中使用非整数常量(比如TRUE),ORDER BY子句的语法检查也同步收紧,不再支持这类非标准写法。
变更原因
这是PostgreSQL 15针对SQL标准兼容性做出的调整。旧版本中允许这种不符合标准的语法,但15版本严格遵循SQL规范,要求GROUP BY只能基于列名、列的位置序号或聚合函数进行分组,布尔常量这类非整数常量不再被允许。
相关信息查询渠道
- 查看PostgreSQL官方的15版本发布说明,在「SQL Compliance」章节里明确记录了该语法限制的变更;
- 参考官方文档中
SELECT语句的详细说明,里面有GROUP BY和ORDER BY子句的语法规则细节。
保持与旧版本功能一致的解决方案
如果需要保留原有分组/排序逻辑,可以通过以下方式修改SQL:
- 将
TRUE替换为等价的整数常量1(PostgreSQL中TRUE的数值等价为1),修改后的语句如下:SELECT ... FROM ... GROUP BY 1, column ORDER BY 1, column - 也可以显式定义一个常量列,再基于该列分组,逻辑更清晰:
SELECT ..., TRUE AS fixed_group FROM ... GROUP BY fixed_group, column ORDER BY fixed_group, column
内容的提问来源于stack exchange,提问作者Fremya
相关产品推荐
相关产品推荐

