Estou tentando usar a função jsonb_path_exists no PostgreSQL para verificar se um campo JSONB (com lista de objetos) contém um objeto onde uma chave específica tem um valor que pertence a uma determinada lista de valores.
Uma condição simples como esta funciona bem (comparando com um único valor):
SELECT t.id
FROM some_scheme.some_table as t
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id == "0e66fef9-0f59-4742-8669-74f41fc26a3f")');
No entanto, quero verificar se o campo id é um dos vários valores possíveis em vez de apenas um. Tentei a seguinte consulta usando o operador "IN":
SELECT t.id
FROM some_scheme.some_table as t
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id in ("0e66fef9-0f59-4741-9669-74f41fc26a3f", "1e66fef9-0f59-4741-9669-74f41fc26a3f"))');
e
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id in ["0e66fef9-0f59-4741-9669-74f41fc26a3f", "1e66fef9-0f59-4741-9669-74f41fc26a3f"])');
Mas isso resulta em um erro de sintaxe:
ERROR: syntax error in jsonpath near " " SQL state: 42601
Gostaria de saber se o PostgreSQL suporta a verificação de associação em uma lista usando "IN" dentro do JSONPath, ou se há uma maneira alternativa de fazer isso.