Вы можете сделать это, объявив серверные курсоры, с помощью команды DECLARE
:
DECLARE my_cursor CURSOR FOR select * from foo;
А затем прочитайте результаты с помощью команды FETCH
:
FETCH 10 FROM my_cursor;
Спя между командой FETCH, вы фактически ограничиваете скорость выполнения запроса.
После того, как вы покончили с этим, вы можете избавиться от курсора, вызвав COMMIT
, ROLLBACK
или CLOSE my_cursor
Обратите внимание, что некоторые виды запросов не могут напрямую передаваться с помощью курсора, но будут выполняться до завершения, прежде чем они произведут первую строку вывода. Например, запросы с агрегатами хэшей и большими неиндексированными сортировками. Вы можете уменьшить значение cursor_tuple_fraction
(по умолчанию 0,1), чтобы планировщик не поощрял выбор таких планов, но это не всегда возможно.