Процедуры Postgresql могут возвращать самое большее одно значение:
CREATE PROCEDURE test (INOUT x int)
LANGUAGE sql
AS $$
SELECT x;
$$;
# call test (1);
x
---
1
(1 row)
Postgresql функции гораздо более гибкие:
create or replace function test()
RETURNS setof atable
language sql
as $$
select * from atable;
$$;
Преимущество процедур заключается в том, чтоони могут контролировать транзакции.Если вам это не нужно, вам, скорее всего, лучше с функцией.