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