В простом SQL вы можете получить количество возвращенных строк, используя производную таблицу (поместив запрос в подзапрос в предложении FROM
), например:
select count(*)
from (
<your query>
) s;
Сделайте то же самое в plpgsqlфункция.Вам нужна динамическая команда , так как функция должна работать для любого допустимого запроса SQL:
create or replace function number_of_rows(query text)
returns bigint language plpgsql as $$
declare
c bigint;
begin
execute format('select count(*) from (%s) s', query) into c;
return c;
end $$;
Пример:
select number_of_rows('select * from generate_series(1, 3)');
number_of_rows
----------------
3
(1 row)