Согласно документации PostgreSQL по курсорам , для циклов используется cursors
внутри.
Однако пользователям PL / pg SQL обычно не о чем беспокоиться об этом, поскольку циклы FOR автоматически используют курсор внутри, чтобы избежать проблем с памятью.
Итак, согласно этому, использование циклов for должно быть хорошим вариантом для потоковой передачи данных клиенту. Но затем в Postgres docs также говорится следующее о RETURN NEXT (который обычно используется внутри для l oop).
Текущая реализация RETURN NEXT и RETURN QUERY сохраняет весь набор результатов перед возвратом из функции, как описано выше. Это означает, что если функция PL / pg SQL выдает очень большой набор результатов, производительность может быть низкой: данные будут записаны на диск, чтобы избежать исчерпания памяти, но сама функция не вернется, пока не будет сгенерирован весь набор результатов. .
Меня беспокоит то, что если Postgres в конечном итоге ждет, пока весь набор результатов будет получен с сервера, тогда какова цель наличия курсора в for l oop?