从MySQL迁移至PostgreSQL:大写字段名SQL查询适配问题
MySQL转PostgreSQL:大小写字段名的SQL兼容写法
针对你遇到的大小写字段名兼容问题,核心要抓住PostgreSQL的标识符规则:未加双引号的标识符会被自动转为小写,所以大写的字段/表名必须用双引号包裹,但要注意表别名和字段名的分隔方式。
你的原始MySQL查询转换为PostgreSQL兼容写法:
SELECT * from test t1 WHERE created_at = (SELECT MAX(created_at) from test t2 WHERE t1."UpperCaseTableName" = t2."UpperCaseTableName") AND "Completed" = FALSE ORDER BY "UpperCaseTableName" ASC
关键注意点:
- 正确格式是
表别名."大写字段名":你之前尝试的"t1.UpperCaseTableName"会被PostgreSQL识别为一个名为t1.UpperCaseTableName的单独字段,而非t1表下的UpperCaseTableName字段,这就是报错的核心原因。 - PostgreSQL中布尔类型推荐用
TRUE/FALSE替代0/1:虽然输入0也会被解析为FALSE,但使用标准布尔值更符合PostgreSQL的使用习惯。
长期优化方案
既然你数据量不大,最省心的方式还是把数据库中所有大写的表名、字段名直接转为小写(包括实际的数据库对象)。这样后续写SQL完全不需要加双引号,既能彻底避免大小写兼容问题,也符合PostgreSQL的常规开发规范。
内容的提问来源于stack exchange,提问作者SScotti
相关产品推荐
相关产品推荐

