node-postgres: как выполнить запрос «WHERE col IN (<список динамических значений>)»?
Я пытаюсь выполнить такой запрос:
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, пожалуйста, помогите.