węzeł-postgres: jak wykonać zapytanie „WHERE col IN (<dynamiczna lista wartości>)”?
Próbuję wykonać zapytanie w ten sposób:
SELECT * FROM table WHERE id IN (1,2,3,4)
Problem polega na tym, że lista identyfikatorów, które chcę filtrować, nie jest stała i musi być inna przy każdym wykonaniu. Musiałbym także uciec od identyfikatorów, ponieważ mogą pochodzić z niezaufanych źródeł, chociaż w rzeczywistości uniknęłbym wszystkiego, co wchodzi w skład zapytania, niezależnie od wiarygodności źródła.
węzeł-postgres wydaje się działać wyłącznie z powiązanymi parametrami:client.query('SELECT * FROM table WHERE id = $1', [ id ])
; to zadziała, jeśli będę miał znaną liczbę wartości (client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
), ale nie będzie działać bezpośrednio z tablicą:client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
, ponieważ wydaje się, że nie ma specjalnej obsługi parametrów tablicy.
Dynamiczne tworzenie szablonu zapytania w zależności od liczby elementów w tablicy i rozwijanie tablicy ids w tablicy parametrów zapytań (które w moim przypadku również zawierają inne parametry oprócz listy identyfikatorów) wydaje się nieracjonalnie uciążliwe. Twarde kodowanie listy identyfikatorów w szablonie zapytań wydaje się również nieopłacalne, ponieważ węzeł-postgres nie zapewnia żadnych metod ucieczki wartości.
Wydaje się, że jest to bardzo powszechny przypadek użycia, więc zgaduję, że faktycznie coś przeoczyłem, a nie, że nie jest możliwe użycie wspólnegoIN (values)
Operator SQL z węzłem-postgres.
Jeśli ktoś rozwiązał ten problem w bardziej elegancki sposób niż te wymienione powyżej, lub jeśli naprawdę brakuje mi czegoś o post-węzłach, proszę o pomoc.