Acabo de elaborar una opción específica de PostgreSQL para esto. Es un truco y viene con sus propios pros, contras y limitaciones, pero parece funcionar y no se limita a un lenguaje de desarrollo específico, plataforma o controlador PG.
El truco, por supuesto, es encontrar una manera de pasar una colección arbitraria de valores de longitud como un solo parámetro, y hacer que db lo reconozca como valores múltiples. La solución que tengo trabajando es construir una cadena delimitada a partir de los valores de la colección, pasar esa cadena como un solo parámetro y usar string_to_array () con la conversión necesaria para que PostgreSQL lo use correctamente.
Entonces, si desea buscar "foo", "blah" y "abc", puede concatenarlos en una sola cadena como: 'foo, blah, abc'. Aquí está el SQL directo:
select column from table
where search_column = any (string_to_array('foo,blah,abc', ',')::text[]);
Obviamente, cambiaría la conversión explícita a lo que quisiera que fuera su matriz de valores resultante: int, text, uuid, etc. Y porque la función está tomando un solo valor de cadena (o dos, supongo, si desea personalizar el delimitador) también), puede pasarlo como parámetro en una declaración preparada:
select column from table
where search_column = any (string_to_array($1, ',')::text[]);
Esto es incluso lo suficientemente flexible como para soportar cosas como comparaciones LIKE:
select column from table
where search_column like any (string_to_array('foo%,blah%,abc%', ',')::text[]);
De nuevo, no hay duda de que es un truco, pero funciona y le permite seguir usando declaraciones preparadas previamente compiladas que toman * ejem * parámetros discretos, con los beneficios de seguridad y (tal vez) de rendimiento que lo acompañan. ¿Es aconsejable y realmente eficaz? Naturalmente, depende, ya que tiene el análisis de cadenas y posiblemente la conversión antes de que se ejecute su consulta. Si espera enviar tres, cinco, algunas docenas de valores, seguro, probablemente esté bien. Unos pocos miles? Sí, tal vez no tanto. YMMV, se aplican limitaciones y exclusiones, sin garantía expresa o implícita.
Pero funciona.