Я пытаюсь выполнить такой запрос:
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 ])
, поскольку, как представляется, не существует специальной обработки параметров массива.
Динамическое создание шаблона запроса в соответствии с количеством элементов в массиве и расширение массива ids в массив параметров запроса (который в моем фактическом случае также содержит другие параметры, кроме списка идентификаторов), представляется неоправданно обременительным. Жестко-кодирование списка идентификаторов в шаблоне запроса кажется нежизнеспособным, так как node -postgres не предоставляет никаких методов экранирования значений.
Это похоже на очень распространенный случай использования, поэтому я предполагаю, что я вообще что-то пропускаю, а не то, что невозможно использовать обычный оператор SQL IN (values)
с node -postgres.
Если кто-то решил эту проблему более элегантно, чем те, которые перечислены выше, или если я действительно что-то пропустил о node -postgres, пожалуйста, помогите.