Přišlo mi to jasné, ale uvedu příklad.
CREATE TEMP TABLE xx AS SELECT id FROM tab WHERE ... FOR r IN SELECT ... FROM t WHERE id IN (SELECT id FROM xx) --- lepe DECLARE xx int[]; SELECT array_agg(id) INTO xx FROM tab WHERE ... FOR r IN SELECT ... FROM t WHERE id = ANY(xx)
Důvodů, proč se používá dočasná tabulka může být vícero - někdy se používá pro předávání např. seznamu id mezi procedurami. V takovém případě se právě perfektně uplatní pole.
CREATE OR REPLACE FUNCTION zrus_xx(ids int[]) RETURNS void AS $$ BEGIN DELETE FROM tab WHERE id = ANY(ids) ..