Любая разница в производительности/совместимости разных языков в PostgreSQL?

В настоящее время PostgreSQL предлагает множество процедурных языков: pl/pgsql, pl/perl и т.д.

Есть ли разница в скорости/потреблении памяти в процедурах, написанных на разных языках?

Проводили ли какие-либо тесты?

Верно ли, что использовать собственный pl/pgsql является наиболее правильным выбором?

Как процедура, написанная на С++ и скомпилированная в загружаемый модуль, отличается во всех параметрах w.r.t. пользовательская функция, написанная на языках pl/*?

Ответ 1

Правильный выбор зависит от того, что именно вы собираетесь делать.

По моему опыту, pl/pgsql имеет меньше накладных расходов, чем pl/perl, pl/python или pl/tcl, если то, что вы хотите сделать, легко выразить в pl/pgsql. Например, если вы выполняете операции с базой данных. Однако накладные расходы, которые вы платите, например, за pl/perl, быстро возвращаются, если вы делаете что-то, что подходит для perl - например, для обработки строк.

Единственное, о чем вы должны думать в этих случаях, это то, что "большие" языки, такие как perl и python, имеют значительно более высокую стоимость запуска, чем pl/pgsql, но это можно легко смягчить, используя постоянные соединения.

Функции, написанные на C, почти наверняка будут быстрее - и они будут использовать меньше памяти, если вы можете написать код, который хорош в использовании небольшой памяти. Тем не менее, подслушивание написания и поддержания их, как правило, намного хуже, чем у PL - при построении и деконструировании кортежей требуется гораздо больше кода, чем вы думаете о каких-либо сложных функциях.

Единственный язык стиля PL, который я нашел значительно медленнее, чем другие, - pl/java, из-за накладных расходов JVM. Но я уверен, что вы можете найти случаи, когда они будут быстрее для некоторых проблем.

Если вы хотите быть уверены в том, что абсолютно эффективно в вашем сценарии, вам нужно разработать несколько своих функций на каждом языке, а затем проверить их. Но, скорее всего, это не имеет большого значения, и вы можете выбрать, какой язык лучше всего подходит для задачи, а не для производительности.