PostgreSQL在Windows下ORDER BY非整数常量报错问题排查
PostgreSQL在Windows与Linux下
ORDER BY TRUE的行为差异 现象
- 执行SQL语句:
仅在Windows系统的psql v14及v15版本中报错,Linux系统下可正常运行。SELECT 1 ORDER BY TRUE; - Windows环境下需通过显式类型转换才能正常执行:
SELECT 1 ORDER BY TRUE::BOOLEAN;
原因与配置关联
这个差异并非PostgreSQL服务器端的配置导致,而是Windows平台psql客户端v14/v15版本的解析行为bug:
- Linux下的psql能正确将
TRUE识别为布尔常量,而Windows同版本的psql会误将其解析为标识符(如列名),从而触发“列不存在”类的报错。 - 客户端配置如
quote_all_identifiers不会直接解决该问题,因为TRUE作为常量不需要被引号包裹。
解决方案
- 显式添加类型转换:
TRUE::BOOLEAN; - 将
TRUE用单引号包裹并转换类型:'TRUE'::BOOLEAN; - 升级psql到v16及以上版本,该解析bug已在后续版本中修复。
内容的提问来源于stack exchange,提问作者user5480949
相关产品推荐
相关产品推荐

