PGAdmin可执行的PostgreSQL查询在Node.js服务端执行报错求助
先帮你拆解下问题根源,从报错信息和日志来看,你的SQL在Node.js环境里被解析成了不符合语法的格式,主要有两个核心问题:
1. 参数传递格式完全错误
从日志里的PARAMS ARE: Alex AND %Alex%就能看出来,你在Node.js代码里传递参数时,把$1和$2对应的两个值拼成了一个字符串"Alex AND %Alex%"传给了pg模块。但pg模块要求参数必须是数组形式,每个占位符$n对应数组里的第n个元素。
这种错误会导致PostgreSQL把$1替换成这个带AND的字符串,而$2没有对应参数值,直接破坏了SQL的结构,最终在JOIN附近触发语法错误。
修复方法:
把参数改成数组形式,分别传入$1和$2的纯值,不要手动在参数里加AND(你的SQL语句里已经用OR连接了条件,参数只需要传对应值就行):
// 正确的参数传递方式 const queryParams = ["Alex", "%Alex%"]; // 调用pg的query方法时传入数组 client.query(yourSqlStatement, queryParams, (err, results) => { // 处理结果或错误 });
2. SQL语句包含HTML转义字符
你提供的SQL语句里写的是position(WASInventorywindows.servername in waswindows.computername) > 0,这里的>是HTML转义字符,对应标准大于号>。但PostgreSQL不认识>这个符号,如果在Node.js代码里直接用这段带转义的SQL,必然触发语法错误。
修复方法:
把SQL里的>替换成标准SQL大于号>,修正后的对应部分为:
position(WASInventorywindows.servername in waswindows.computername) > 0
额外验证技巧
如果修改后仍有问题,可以手动把占位符替换成参数值,生成完整SQL语句在PGAdmin里执行:如果能正常运行,说明Node.js里的参数传递或SQL语句还有问题;如果也报错,再排查SQL逻辑(不过你说PGAdmin里能跑,所以大概率是前两个原因)。
内容的提问来源于stack exchange,提问作者LittleOldMe

