Почему возникает ошибка «Final statement returns bigint instead of integer» в SQL функции?
Не соответствуют типы данных как они объявлены в выходных параметрах функции и тем, что вы пытаетесь делать в return. Должны соответствовать друг другу.

sum у нас в pg13 существуют такие:
melkij=> \da pg_catalog.sum
                                              Список агрегатных функций
   Схема    | Имя | Тип данных результата | Типы данных аргументов |                     Описание                     
------------+-----+-----------------------+------------------------+--------------------------------------------------
 pg_catalog | sum | numeric               | bigint                 | sum as numeric across all bigint input values
 pg_catalog | sum | double precision      | double precision       | sum as float8 across all float8 input values
 pg_catalog | sum | bigint                | integer                | sum as bigint across all integer input values
 pg_catalog | sum | interval              | interval               | sum as interval across all interval input values
 pg_catalog | sum | money                 | money                  | sum as money across all money input values
 pg_catalog | sum | numeric               | numeric                | sum as numeric across all numeric input values
 pg_catalog | sum | real                  | real                   | sum as float4 across all float4 input values
 pg_catalog | sum | bigint                | smallint               | sum as bigint across all smallint input values
Как видно, нет ни одного варианта, который бы возвращал int4

Final statement returns too many columns действительно надо пояснять? Или прямым английским языком всё и так уже сказано?
sum(int) возвращает bigint в постгресе (иначе легко было бы нарваться на переполнение)