Оператор IN
поддерживает только списки. Он не поддерживает поиск в массиве. Вам следует использовать оператор = ANY()
.
postgres=# select 10 = ANY(ARRAY[10,20,30]);
┌──────────┐
│ ?column? │
╞══════════╡
│ t │
└──────────┘
(1 row)
postgres=# select 11 = ANY(ARRAY[10,20,30]);
┌──────────┐
│ ?column? │
╞══════════╡
│ f │
└──────────┘
(1 row)
или, возможно, вы можете использовать функцию array_position
(но там статистика не будет использоваться):
postgres=# select array_position(ARRAY[10,2,3], 10);
┌────────────────┐
│ array_position │
╞════════════════╡
│ 1 │
└────────────────┘
(1 row)
postgres=# select array_position(ARRAY[10,2,3], 11);
┌────────────────┐
│ array_position │
╞════════════════╡
│ ∅ │
└────────────────┘
(1 row)
Если массив маленький (<100), то не так уж важно, что вы используете. Для больших массивов, вероятно, лучше использовать оператор. Но это зависит от контекста. </p>