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
相关产品推荐
相关产品推荐

