Кстати, о вереде заворачивания запросов во внутрь plpgsql адское зло, тк. вот такое
CREATE OR REPLACE FUNCTION tfn2(i int) RETURNS TABLE (a int, b int) AS $$ BEGIN RETURN QUERY SELECT * FROM t1, t2 WHERE t1.a = i; END $$ LANGUAGE plpgsql;
будет выполняться еще дольше, чем select * from view
но вообще посгрес старается оптимизировать что может. например, он умеет понимать частичные индексы не 1 в 1. тут тоже по понятным причинам будут всякие оптимизации