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

为什么Postgres在Node中查询返回额外转义符号,与pgAdmin结果不同?

Node.js查询PostgreSQL返回结果带多余双引号的解决方法

Node.js执行查询返回的结果:
Postgres Problem in query in nodejs
pgAdmin执行同一条查询返回的结果:
Postgres at pgAdmin

  • 首先确认查询语句是否完全一致,打印Node代码中最终执行的SQL字符串,和pgAdmin中执行的语句逐字符对比,排除Node中拼接SQL时意外添加转义引号的问题。
  • 检查返回带双引号的字段类型,如果是json/jsonb类型:
    • 不要在SQL中手动将JSON字段强转为text类型返回,pg官方Node库默认会自动将JSON类型解析为原生JS对象/数组,手动转义会导致结果被外层套上字符串引号。
    • 检查是否自定义了pg库的类型解析规则,错误修改了JSON类型的解析逻辑。正确的JSON类型解析配置参考:
    const { types } = require('pg')
    // 114为pg中json类型的oid,3802为jsonb类型的oid
    types.setTypeParser(114, (val) => val === null ? null : JSON.parse(val))
    types.setTypeParser(3802, (val) => val === null ? null : JSON.parse(val))
    
    如果你之前的配置中错误使用了JSON.stringify处理JSON类型返回值,就会导致结果多一层双引号。
  • 检查SQL逻辑中是否存在多余的字符串拼接操作,比如SELECT '"' || username || '"' FROM user这类写法会主动给返回值拼接引号,和pgAdmin中查询逻辑不一致。
  • 不要通过正则替换的方式处理多余引号,该方案属于临时修复,后续遇到特殊字符依然会出现解析错误,优先从根源排查查询逻辑和pg库配置问题。

内容的提问来源于stack exchange,提问作者Júlio Cesar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:27:02