pg-promise中带命名参数的WHERE col IN语法问题求助
pg-promise命名参数中:list与:csv的差异问题
首先给你明确结论:在你使用的pg-promise 5.7.1版本里,命名参数语法下:list和:csv确实不能互换,而且完全不需要用位置参数形式,用$(ids:csv)的写法就是正确的选择。
具体原因拆解:
- 早期pg-promise(比如5.x系列)对命名参数和位置参数的修饰符处理逻辑存在差异。位置参数里
$1:csv和$1:list可以互换,是因为这俩修饰符在位置参数场景下的行为一致——都会把数组转换成适合IN子句的逗号分隔格式,同时做好类型转义。 - 但在命名参数场景下,旧版本的
:list修饰符并没有适配PostgreSQL的IN子句语法,导致生成的SQL会出现语法错误;而:csv修饰符则会正确处理数组,把元素转成带引号(如果是字符串)、逗号分隔的格式,完美匹配WHERE id IN (...)的要求。
额外说明:
如果你后续升级到pg-promise 6.x及以上版本,这个问题会得到优化,命名参数下的:list和:csv会变得更兼容,但在你当前的5.7.1版本里,老老实实用$(ids:csv)就完全没问题,不需要折腾其他写法。
内容的提问来源于stack exchange,提问作者BrDaHa
相关产品推荐
相关产品推荐

