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, пожалуйста, помогите.

Ответы на вопрос(7)

Ваш ответ на вопрос