Я намагаюся виконати такий запит:
SELECT * FROM table WHERE id IN (1,2,3,4)
Проблема полягає в тому, що список ідентифікаторів, за якими я хочу фільтруватись, не є постійним і повинен бути різним при кожному виконанні. Мені також потрібно було б уникати ідентифікаторів, оскільки вони можуть надходити з ненадійних джерел, хоча я б насправді уникав усього, що входить у запит, незалежно від надійності джерела.
node-postgres, схоже, працює виключно з прив'язаними параметрами client.query('SELECT * FROM table WHERE id = $1', [ id ])
:; це спрацює, якщо б у мене була відома кількість значень ( client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
), але безпосередньо з масивом працювати не буде:, client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
оскільки, здається, не існує жодної спеціальної обробки параметрів масиву.
Побудова шаблону запиту динамічно відповідно до кількості елементів у масиві та розширення масиву ідентифікаторів у масив параметрів запиту (який у моєму фактичному випадку також містить інші параметри, крім списку ідентифікаторів) здається необґрунтовано обтяжливим. Жорстке кодування списку ідентифікаторів у шаблоні запиту також здається нежиттєздатним, оскільки node-postgres не надає жодних методів екранування значень.
Це здається дуже поширеним випадком використання, тому я припускаю, що я насправді щось пропускаю, а не те, що неможливо використовувати загальний IN (values)
оператор SQL із node-postgres.
Якщо хтось вирішив цю проблему більш елегантно, ніж ті, що я перелічив вище, або якщо мені дійсно щось не вистачає щодо node-postgres, будь ласка, допоможіть.