PostgreSQL代码查询报错:列不存在,但psql CLI可正常执行
解决方案
问题根源是PostgreSQL的双引号标识符规则理解错误,以下是具体分析和修正方案:
核心问题
PostgreSQL中,双引号包裹的内容会被视为单个完整的标识符:
- 你写的
"paraglider.idMaker"会被识别为名为paraglider.idMaker的列,而非paraglider表下的idMaker列,这直接导致了"column does not exist"报错; - 后续修改的
"maker.id"同理,会被当成一个列名,而非maker表的id列。
修正后的查询语句
将表名和列名分别用双引号包裹(驼峰命名的列必须用双引号保留大小写,小写表名可省略双引号),同时修正原代码中maker.is的笔误(应为maker.id):
const result = await client.query(` SELECT paraglider.*, maker.id AS maker_id, maker.name AS maker_name FROM "paraglider" JOIN maker ON "paraglider"."idMaker" = maker.id `);
为什么psql中的语句能正常运行?
你在psql里的写法符合规则:
"idMaker"明确指定了驼峰命名的列(必须用双引号保留大小写);maker.id未加双引号,PostgreSQL会自动解析为maker表的id列(小写表名创建时未加双引号,PostgreSQL默认转为小写,无需额外包裹)。
内容的提问来源于stack exchange,提问作者olivier
相关产品推荐
相关产品推荐

