Строковые константы должны быть заключены в одинарные, а не двойные кавычки.двойные кавычки предназначены для идентификаторов, например:
select_statement := 'select ... order by "userName" offset '||offset||' limit '||pagesize;
Но использование курсора и цикла излишне и делает запрос намного медленнее, чем нужно.Кроме того, для начала вам не нужен динамический SQL, вы можете использовать переменные непосредственно в статическом операторе SQL.
Таким образом, фактическая функция должна выглядеть следующим образом:
CREATE OR REPLACE FUNCTION sp_get_users_page(p_offset int, p_pagesize int)
RETURNS SETOF entuser AS
$BODY$
BEGIN
SET ENABLE_SEQSCAN = OFF;
return query
SELECT *
FROM entuser
ORDER BY "userName"
OFFSET p_offset
LIMIT p_pagesize
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Но вам не нужен PL / pgSQL для такой простой функции для начала.Функция SQL обычно лучше:
CREATE OR REPLACE FUNCTION sp_get_users_page(p_offset int, p_pagesize int)
RETURNS SETOF entuser AS
$BODY$
SET ENABLE_SEQSCAN = OFF;
SELECT *
FROM entuser
ORDER BY "userName"
OFFSET p_offset
LIMIT p_pagesize
$BODY$
LANGUAGE sql VOLATILE;
SET ENABLE_SEQSCAN = OFF;
очень подозрительно - вам это действительно нужно?