10
Задачи
Обработка информации, хранимой в базе данных
подпрограмма всегда выполняется в контексте подключения к БД
PL/pgSQL интегрирован с SQL
для остальных — интерфейс серверного программирования (SPI)
Вычисления, не связанные с базой данных
возможности PL/pgSQL сильно ограничены
эффективность
удобство использования
наличие готовых библиотек
специализированные задачи
Задачи, для решения которых используются хранимые подпрограммы,
можно условно поделить на две группы.
В первую входит работа с информацией, которая содержится внутри
базы данных. Здесь любые хранимые подпрограммы выигрывают
у внешних (клиентских) программ, поскольку они находятся ближе
к данным: во-первых, не требуется установка соединения с сервером,
и во-вторых, не требуется пересылка лишнего по сети. PL/pgSQL очень
удобен для таких задач, поскольку тесно интегрирован с SQL.
Ко второй группе можно отнести обработку, не связанную с
обращением к базе данных. Здесь возможности PL/pgSQL сильно
ограничены. Начать с того, что он вычислительно не эффективен:
любое выражение вычисляется с помощью запроса (для которого
в ряде простых случаев исключен этап планирования).
Если бы были важны только эффективность и универсальность, можно
было бы использовать язык C. Но писать на нем прикладной код крайне
дорого и долго.
Кроме того, язык PL/pgSQL достаточно старомоден и не располагает
возможностями и библиотеками, которые есть в современных ЯП,
и он в принципе не пригоден для решения целого ряда задач.
Поэтому использование других языков (отличных от SQL, PL/pgSQL
и C) для серверного программирования во многих случаях вполне
оправдано.