Как l oop работает в хранимой процедуре PL / pg SQL? - PullRequest
0 голосов
/ 04 августа 2020

Согласно документации PostgreSQL по курсорам , для циклов используется cursors внутри.

Однако пользователям PL / pg SQL обычно не о чем беспокоиться об этом, поскольку циклы FOR автоматически используют курсор внутри, чтобы избежать проблем с памятью.

Итак, согласно этому, использование циклов for должно быть хорошим вариантом для потоковой передачи данных клиенту. Но затем в Postgres docs также говорится следующее о RETURN NEXT (который обычно используется внутри для l oop).

Текущая реализация RETURN NEXT и RETURN QUERY сохраняет весь набор результатов перед возвратом из функции, как описано выше. Это означает, что если функция PL / pg SQL выдает очень большой набор результатов, производительность может быть низкой: данные будут записаны на диск, чтобы избежать исчерпания памяти, но сама функция не вернется, пока не будет сгенерирован весь набор результатов. .

Меня беспокоит то, что если Postgres в конечном итоге ждет, пока весь набор результатов будет получен с сервера, тогда какова цель наличия курсора в for l oop?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...