You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM+PostgreSQL使用驼峰别名addSelect报错,求解决方法

问题原因

PostgreSQL 对未用双引号包裹的标识符(包括列别名)会自动转换为小写,且会忽略驼峰式的分隔逻辑。当你使用驼峰别名bookingParticipantSortable时,PostgreSQL 实际会将其识别为全小写的bookingparticipantsortable,但后续orderBy中你依然用驼峰式名称引用,数据库找不到对应列,因此抛出"column does not exist"错误。而蛇形命名的booking_participant_sortable转换为小写后与原名称一致,所以能正常匹配。

保留驼峰别名的解决办法

要继续使用驼峰别名,需手动给别名加上双引号,强制PostgreSQL保留标识符的大小写格式。修改代码中addSelect部分的别名定义即可:

if (orderBy && orderBy.bookingParticipant) {
  queryBuilder
    .addSelect((subQuery) => {
      return subQuery
        .select(
          'COUNT(eventParticipantCount.id)',
          '"bookingParticipantSortable"' // 子查询内的别名加双引号
        )
        .from(EventParticipant, 'eventParticipantCount')
        .where(
          "eventParticipantCount.event = event.id AND eventParticipantCount.bookingStatus = 'BOOKING' AND eventParticipantCount.isDeleted = false",
        );
    }, '"bookingParticipantSortable"') // 外层的别名也加双引号
    .orderBy('"bookingParticipantSortable"', orderBy.bookingParticipant); // orderBy里的引用同样加双引号
}

这样PostgreSQL会严格按照驼峰格式识别该别名,不会自动转换为小写,即可正常执行排序逻辑。

内容的提问来源于stack exchange,提问作者Vương

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:48:24