我想使用rowMode =“ array”来获得查询的结果(因为这可能是一个非常大的表,并且我不希望将其格式化为对象格式),但是我不知道如何传递用于IN运算符的数组/列表参数。
const events = await t.manyOrNone({text: `select * from svc.events where user_id in ($1:list);`, rowMode: "array"}, [[1,2]]);
但是,以上给出了错误:“:”或附近的语法错误
删除:list也不起作用:
const events = await t.manyOrNone({text: `select * from svc.events where user_id in ($1);`, rowMode: "array"}, [[1,2]]);
错误:整数:“ {” 1“,” 2“}”的无效输入语法]
[我了解这可能是因为我被迫对ParameterMode的rowMode =“ array”使用ParameterizedQuery格式,该格式不允许使用:list这样的令人眼花modifier乱的修饰符,但这会引发问题,如果我要使用ParameterizedQuery格式,那么我如何在本地传递Javascript数组,以便驱动程序可以接受它?
我想这个问题的替代表达是:如何使用数组作为ParameterizedQuery或PreparedStatements的参数...
回答我自己的问题,因为我最终找到了这个问题的答案:如何在使用rowMode="array" | ParameterizedQuery | PreparedStatements
时将数组作为参数传递给IN运算符。
因为此查询在服务器中被参数化,所以我们不能使用IN运算符,因为IN运算符使用IN ($1, $2, $3...)
参数化项目。相反,我们需要使用ANY运算符,其中ANY($1)
期望$ 1的数组。
所以将起作用的查询是:
const events = await t.manyOrNone({text: `select * from svc.events where user_id=ANY($1);`, rowMode: "array"}, [[1,2]]);