Вам нужна функция SQL:
CREATE OR REPLACE FUNCTION test2(rok int, id int)
RETURNS int AS
$$
select sum(data_zakonczenia-data_rozpoczecia)
from historia where id_eksponatu = $2
AND data_rozpoczecia>DATE(to_char($1,'9999') || '-01-01')
AND data_zakonczenia<DATE(to_char($1+1,'9999') || '-01-01');
$$ LANGUAGE sql;
Или, если по какой-то причине вам нужен PL / pgSQL, вам нужно использовать return query
CREATE OR REPLACE FUNCTION test2(rok int, id int)
RETURNS int AS $$
BEGIN
return query
select sum(data_zakonczenia-data_rozpoczecia)
from historia where id_eksponatu = $2
AND data_rozpoczecia>DATE(to_char($1,'9999') || '-01-01')
AND data_zakonczenia<DATE(to_char($1+1,'9999') || '-01-01');
END;
$$ LANGUAGE plpgsql;
Или, если вам нужноперед возвратом сделайте что-нибудь со значением:
CREATE OR REPLACE FUNCTION test2(rok int, id int)
RETURNS int AS $$
declare
l_sum integer;
BEGIN
select sum(data_zakonczenia-data_rozpoczecia)
into l_sum
from historia where id_eksponatu = $2
AND data_rozpoczecia>DATE(to_char($1,'9999') || '-01-01')
AND data_zakonczenia<DATE(to_char($1+1,'9999') || '-01-01');
....
return l_sum;
END;
$$ LANGUAGE plpgsql;
Имя языка является идентификатором.Не помещайте это в одинарные кавычки.