Ich versuche eine Abfrage wie folgt auszuführen:
SELECT * FROM table WHERE id IN (1,2,3,4)
Das Problem ist, dass die Liste der IDs, nach denen ich filtern möchte, nicht konstant ist und bei jeder Ausführung unterschiedlich sein muss. Ich müsste mich auch den IDs entziehen, da sie möglicherweise aus nicht vertrauenswürdigen Quellen stammen, obwohl ich mich tatsächlich allem entziehen würde, was in einer Abfrage enthalten ist, unabhängig von der Vertrauenswürdigkeit der Quelle.
Node-Postgres scheint ausschließlich mit gebundenen Parametern zu arbeiten : client.query('SELECT * FROM table WHERE id = $1', [ id ])
; Dies funktioniert, wenn ich eine bekannte Anzahl von Werten ( client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
) hatte, aber nicht direkt mit einem Array:, client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
da es keine spezielle Behandlung von Array-Parametern zu geben scheint.
Das dynamische Erstellen der Abfragevorlage entsprechend der Anzahl der Elemente im Array und das Erweitern des IDs-Arrays in das Array mit den Abfrageparametern (das in meinem tatsächlichen Fall neben der Liste der IDs auch andere Parameter enthält) erscheint unangemessen aufwändig. Das Hardcodieren der Liste der IDs in der Abfragevorlage scheint ebenfalls nicht möglich zu sein, da Node-Postgres keine Methoden zum Entkommen von Werten bereitstellt.
Dies scheint ein sehr häufiger Anwendungsfall zu sein. Ich vermute also, dass ich tatsächlich etwas übersehen habe und nicht, dass es nicht möglich ist, den allgemeinen IN (values)
SQL-Operator mit Node-Postgres zu verwenden.
Wenn jemand dieses Problem auf elegantere Weise gelöst hat als die oben aufgeführten, oder wenn mir wirklich etwas über Node-Postgres fehlt, helfen Sie bitte.