Как в plpgsql выбрать строки удовлетворяющие условию вхождения значения колонки в массив?
Как записать условие вхождения значения колонки в массиве? Там где закомментированная строка, а именно
id in (ids)
.
do $$
declare
ids int[];
res text[];
begin
create temp table test (
id bigserial,
name text,
constraint test_pk primary key(id)
);
insert into test(name) values
('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8');
ids := '{1, 3, 5, 7}'::int[];
-- select array_agg(name) from test where id in (ids) into res; -- ERROR
raise notice '%', res;
end;
$$ language plpgsql;
Ответы (1 шт):
Автор решения: Мелкий
→ Ссылка
Как любопытным ненавязчиво поясняет explain, условие in (1,2,3) на самом деле лишь преобразуется в искомую вами форму условия:
explain select * from test where id in (1,2,44);
QUERY PLAN
----------------------------------------------------------------------
Bitmap Heap Scan on test (cost=8.48..15.59 rows=3 width=40)
Recheck Cond: (id = ANY ('{1,2,44}'::bigint[]))
-> Bitmap Index Scan on test_pk (cost=0.00..8.48 rows=3 width=0)
Index Cond: (id = ANY ('{1,2,44}'::bigint[]))
Вам же нужен как раз не in, а непосредственно само условие над массивом id = ANY (ids)