[NodeJS]node-postgresでWHEREのINにArrayを簡単に指定する方法

node-postgresでWHEREのINにArrayを指定したくても、普通にやったところでエラーが帰ってくるだけで正常に動きません。
invalid input syntaxとエラーが返ってくるだけです。

const items = [1, 2, ...];
client.query(`SELECT * FROM bar WHERE id IN ($1)`, [items]);
// エラーが返ってくる
{ error: invalid input syntax for integer: "{"1","2", ...}"

今回はnode-postgresでWHEREのINにArrayを簡単に指定する方法を書きます。

簡単な解決方法

INの代わりにANYを使いましょう。

const items = [1, 2, ...];
client.query(`SELECT * FROM bar WHERE id = ANY ($1)`, [items]);

INと違って、ANYの前に「=」が入るのを注意してください。
もしVersion問題などでどうしても「IN」が使いたい場合は、公式ページのFAQを見てみてください。

参考

本件に関する公式のFAQ: https://github.com/brianc/node-postgres/wiki/FAQ#11-how-do-i-build-a-where-foo-in--query-to-find-rows-matching-an-array-of-values
node-postgres公式: https://node-postgres.com/