J'essaie d'exécuter une requête comme celle-ci :
SELECT * FROM table WHERE id IN (1,2,3,4)
Le problème est que la liste des identifiants sur lesquels je veux filtrer n'est pas constante et doit être différente à chaque exécution. J'aurais également besoin d'échapper les identifiants, car ils pourraient provenir de sources non fiables, bien que j'échappe en fait tout ce qui entre dans une requête, quelle que soit la fiabilité de la source.
node-postgres semble fonctionner exclusivement avec des paramètres liés : client.query('SELECT * FROM table WHERE id = $1', [ id ])
; cela fonctionnera si j'avais un nombre connu de valeurs ( client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
), mais ne fonctionnera pas directement avec un tableau : client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
car il ne semble pas y avoir de traitement spécial des paramètres de tableau.
Construire le modèle de requête dynamiquement en fonction du nombre d'éléments dans le tableau et étendre le tableau des identifiants dans le tableau des paramètres de la requête (qui dans mon cas actuel contient également d'autres paramètres en plus de la liste des identifiants) semble être une charge déraisonnable. Le codage en dur de la liste des identifiants dans le modèle de requête ne semble pas non plus viable, car node-postgres ne fournit aucune méthode d'échappement des valeurs.
Cela semble être un cas d'utilisation très commun, donc je pense que je suis en train de négliger quelque chose, et non pas qu'il n'est pas possible d'utiliser la méthode commune de l IN (values)
Opérateur SQL avec node-postgres.
Si quelqu'un a résolu ce problème d'une manière plus élégante que celles que j'ai énumérées ci-dessus, ou si je rate vraiment quelque chose à propos de node-postgres, veuillez m'aider.