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

How to pass array as a parameter for rowMode="array" in pg-promise

我想使用 rowMode="array" 获取查询结果(因为这可能非常大 table 并且我不希望它格式化为对象格式)但是我无法弄清楚如何传入 array/list 参数以在 IN 运算符中使用。

const events = await t.manyOrNone({text: `select * from svc.events where user_id in (:list);`, rowMode: "array"}, [[1,2]]);

然而,上面给出了一个错误:“:”处或附近的语法错误

删除 :list 也不起作用:

const events = await t.manyOrNone({text: `select * from svc.events where user_id in ();`, rowMode: "array"}, [[1,2]]);

错误:整数的输入语法无效:“{"1","2"}"

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

我想这个问题的另一种表述是:如何使用数组作为 ParameterizedQuery 或 PreparedStatements 的参数...

回答我自己的问题,因为我最终找到了这个问题的答案:如何在使用 rowMode="array" | ParameterizedQuery | PreparedStatements.

时将数组作为参数传入以供 IN 运算符使用

因为这个查询正在服务器中参数化,我们不能使用 IN 运算符,因为 IN 运算符使用 IN (, , ...) 参数化项目。相反,我们需要使用 ANY 运算符,其中 ANY() 其中 $1 需要一个数组。

所以有效的查询是:

const events = await t.manyOrNone({text: `select * from svc.events where user_id=ANY();`, rowMode: "array"}, [[1,2]]);