방금 PostgreSQL 관련 옵션을 해결했습니다. 그것은 약간의 해킹이며 자체 장단점과 한계가 있지만 작동하는 것으로 보이며 특정 개발 언어, 플랫폼 또는 PG 드라이버로 제한되지 않습니다.
물론 비결은 임의의 길이 값 모음을 단일 매개 변수로 전달하고 db가이를 여러 값으로 인식하도록하는 방법을 찾는 것입니다. 내가 작업 한 해결책은 컬렉션의 값에서 구분 된 문자열을 구성하고 해당 문자열을 단일 매개 변수로 전달한 다음 string_to_array ()를 PostgreSQL의 필수 캐스팅과 함께 사용하여 올바르게 사용하는 것입니다.
따라서 "foo", "blah"및 "abc"를 검색하려면 'foo, blah, abc'와 같이 단일 문자열로 함께 연결할 수 있습니다. 다음은 간단한 SQL입니다.
select column from table
where search_column = any (string_to_array('foo,blah,abc', ',')::text[]);
int, text, uuid 등 결과 값 배열을 원하는대로 명시 캐스트를 변경하십시오. 함수는 단일 문자열 값을 취하기 때문에 (또는 구분 기호를 사용자 정의하려는 경우 두 가지로 가정합니다) 또한 준비된 명령문에서 매개 변수로 전달할 수 있습니다.
select column from table
where search_column = any (string_to_array($1, ',')::text[]);
이것은 LIKE 비교와 같은 것을 지원하기에 충분히 유연합니다.
select column from table
where search_column like any (string_to_array('foo%,blah%,abc%', ',')::text[]);
다시 말하지만, 그것은 해킹이지만 의심의 여지없이 작동하며 보안 및 성능상의 이점과 함께 * ahem * 이산 매개 변수를 사용하는 사전 컴파일 된 준비된 명령문을 계속 사용할 수 있습니다 . 바람직하고 실제로 성능이 있습니까? 당연히 문자열 구문 분석이 가능하고 쿼리가 실행되기 전에 캐스팅이 진행되기 때문에 상황에 따라 다릅니다. 3, 5, 수십 개의 값을 보내려면 아마 괜찮을 것입니다. 몇 천? 예, 그렇게 많지 않을 수도 있습니다. YMMV, 제한 및 제외가 적용되며 명시 적 또는 묵시적 보증은 없습니다.
그러나 작동합니다.