如何在 pg-promise 中将数组作为 rowMode= "array" 的参数传递



我想使用 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"}"的输入语法无效

我知道这可能是因为我被迫对rowMode="array"使用ParameterizedQuery格式,它不允许像:list这样的时髦修饰符,但这导致了一个问题,如果我使用ParameterizedQuery格式,那么我如何本机传入Javascript数组以便驱动程序可以接受它?

我想这个问题的另一种表述是:如何使用数组作为参数化查询或准备语句的参数......

回答我自己的问题,因为我最终找到了这个问题的答案:如何在使用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]]);

最新更新