Ich habe gerade eine PostgreSQL-spezifische Option dafür ausgearbeitet. Es ist ein bisschen wie ein Hack und hat seine eigenen Vor- und Nachteile und Einschränkungen, aber es scheint zu funktionieren und ist nicht auf eine bestimmte Entwicklungssprache, Plattform oder einen bestimmten PG-Treiber beschränkt.
Der Trick besteht natürlich darin, einen Weg zu finden, eine Sammlung von Werten beliebiger Länge als einen einzelnen Parameter zu übergeben und die Datenbank als mehrere Werte erkennen zu lassen. Die Lösung, an der ich arbeite, besteht darin, aus den Werten in der Auflistung eine begrenzte Zeichenfolge zu erstellen, diese Zeichenfolge als einzelnen Parameter zu übergeben und string_to_array () mit dem erforderlichen Casting für PostgreSQL zu verwenden, um sie ordnungsgemäß zu verwenden.
Wenn Sie also nach "foo", "blah" und "abc" suchen möchten, können Sie sie zu einer einzigen Zeichenfolge zusammenfassen: 'foo, blah, abc'. Hier ist das reine SQL:
select column from table
where search_column = any (string_to_array('foo,blah,abc', ',')::text[]);
Sie würden natürlich die explizite Umwandlung in das ändern, was Ihr resultierendes Wertearray sein soll - int, text, uuid usw. Und weil die Funktion einen einzelnen Zeichenfolgenwert annimmt (oder zwei, nehme ich an, wenn Sie das Trennzeichen anpassen möchten Sie können es auch als Parameter in einer vorbereiteten Anweisung übergeben:
select column from table
where search_column = any (string_to_array($1, ',')::text[]);
Dies ist sogar flexibel genug, um Dinge wie LIKE-Vergleiche zu unterstützen:
select column from table
where search_column like any (string_to_array('foo%,blah%,abc%', ',')::text[]);
Keine Frage, es ist ein Hack, aber es funktioniert und ermöglicht es Ihnen, vorkompilierte vorbereitete Anweisungen zu verwenden, die * ahem * diskrete Parameter mit den damit verbundenen Sicherheits- und (möglicherweise) Leistungsvorteilen verwenden. Ist es ratsam und tatsächlich performant? Dies hängt natürlich davon ab, ob Sie das Parsen von Zeichenfolgen und möglicherweise das Casting durchführen, bevor Ihre Abfrage überhaupt ausgeführt wird. Wenn Sie damit rechnen, drei, fünf, ein paar Dutzend Werte zu senden, ist das wahrscheinlich in Ordnung. Ein paar tausend? Ja, vielleicht nicht so sehr. YMMV, Einschränkungen und Ausschlüsse gelten, keine ausdrückliche oder stillschweigende Garantie.
Aber es funktioniert.