3
Причины использования
Курсор подразумевает итеративную обработку
полная выборка занимает слишком много памяти
нужна не вся выборка, но размер заранее неизвестен
способ отдать управление выборкой клиенту
действительно требуется построчная обработка (обычно нет)
С концепцией курсоров мы уже знакомы по теме «Архитектура. Общее
устройство PostgreSQL». Там речь шла о курсорах как о возможности,
предоставляемой сервером, и мы смотрели, как к этой возможности
обращаться средствами SQL. Теперь поговорим о том, как
использовать те же самые курсоры в языке PL/pgSQL.
Почему вообще может возникнуть необходимость в курсорах?
Декларативный SQL в первую очередь предназначен для работы
с множествами строк — в этом его сила и преимущество. PL/pgSQL,
как процедурный язык, вынужден работать со строками по одной за
раз, используя явные циклы. Этого как раз можно добиться, используя
курсоры.
Например, полная выборка может занимать слишком много места, так
что приходится обрабатывать результаты по частям. Или требуется
выборка неизвестного заранее размера — то есть в процессе выборки
нужно вовремя остановиться. Или есть необходимость предоставить
управление выборкой клиенту.
(Однако еще раз отметим, что, хотя необходимость такой построчной
обработки может возникать, во многих случаях ее можно заменить
чистым SQL, и код в итоге окажется проще и будет быстрее работать.)