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

Sequelize原生查询与PostgreSQL返回结果不一致问题求助

解决Sequelize原生查询返回结果与PostgreSQL直接执行不一致的问题

这个坑我之前踩过!你遇到的情况大概率是Sequelize默认的结果合并逻辑在搞鬼——它会自动把查询结果中主键字段(通常是id)相同的行合并成一行,哪怕其他字段内容不一样,就会出现你说的“两行数据混合成一行”的情况,而PostgreSQL直接执行SQL时不会做这个处理,所以返回正常的2行。

快速解决方法

在sequelize.query的选项里加上raw: true,让Sequelize直接返回原始的查询结果,跳过它自带的合并逻辑:

const Sequelize = require('sequelize'); 
let sequelize; 
sequelize = new Sequelize('db_oauth2','postgres', 'postgres',{ 
  host: 'localhost',
  dialect: 'postgres'
}); 

// 修改后的查询,添加raw: true选项
const invoices = await sequelize.query(
  "SELECT invoice_amount, bill_period_from, ...", 
  { 
    type: Sequelize.QueryTypes.SELECT,
    raw: true // 关键:禁用Sequelize的结果合并,返回原始数据
  }
);

原理说明

Sequelize的query方法默认会尝试把查询结果映射成它的模型实例(哪怕你没指定模型),这个过程中它会用主键字段来识别重复行并合并。当你执行原生查询且不需要模型映射时,raw: true会告诉Sequelize:“别处理结果,直接把数据库返回的原封不动给我”,这样就和你在PostgreSQL客户端里执行SQL的结果完全一致了。

如果加了raw: true还是有问题,可以检查你的SQL语句是否隐含了分组、去重逻辑,但根据你的描述,PostgreSQL直接执行能返回2行,那99%就是这个合并逻辑的问题。

内容的提问来源于stack exchange,提问作者Shaju Nr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:55