Мне трудно понять, что именно вы хотите.У меня есть несколько вариантов, возможно, вы можете объяснить больше, если ни один из них не является тем, что вы хотите?
create table foo1 ( t1 date, id int );
insert into foo1 values ('2001-01-01', 1), ('2002-01-01', 2), ('2003-01-01', 3), ('2004-01-01', 4);
create or replace function foo1(date) returns setof foo1 as $$ select * from foo1 where $1 > t1 order by t1 asc; $$ language 'sql';
select * from foo1('2002-02-02');
create or replace function foo2(text) RETURNS SETOF foo1 as $$
DECLARE
q alias for $1;
r foo1%rowtype;
BEGIN
for r in execute q loop
return next r;
end loop;
return;
END;
$$ language 'plpgsql';
select * from foo2('select * from foo1 order by t1 asc limit 1');
drop table foo1 cascade;