Это связано с объектной моделью Python - всегда есть способ получить ссылку на объекты, которые могут быть небезопасными. См. Документацию к модулю rexec и главу с ограниченным исполнением в документации для получения дополнительной информации о проблемах, а также:
Ограничения не имеют ничего общего с самим PostgreSQL, они присущи реализации интерпретатора CPython или, возможно, даже самому языку Python.
Некоторые другие языки проверяли среды выполнения, такие как Perl, Java, JavaScript и Lua. Большинство из них столкнулись с рядом проблем безопасности, поскольку такие ограниченные среды исполнения очень трудно защитить от всех возможных взломов.
На самом деле ничто не мешает PostgreSQL добавить интерпретатора Python с поличным доверием, поскольку rexec достаточно хорош для многих целей. PostgreSQL не склонен увлекаться только - в основном - достаточно хорошо - возможно, хотя. Вероятно, он будет принят только в том случае, если он помечен как суперпользовательский, но вы всегда можете предоставить доступ к нему конкретным пользователям. Это было бы лучше, чем ненадежный Python.
Лично я думаю, что PL / V8 или подобное - это будущее здесь, и я хотел бы видеть его движение в сторону поддержки в ядре.
Я также смутно исследовал идею надежного Mono, который может загружать «безопасные» сборки, написанные на C #, VB.NET, IronPython или чем-то еще, но не смог сделать много на эту тему.
rexec
модуля Python как небезопасный, как указано выше. Я предполагаю, что, возможно, plpython, использующий PyPi, сможет предоставить ограниченный режим, который затем может использовать Pg. Я не смотрел, чтобы увидеть, есть ли много работы. Вы также ошибаетесь в «специальной доверенной версии Perl» - на самом деле это совершенно обычный Perl, один и тот же интерпретатор используется для plperl и plperlu. Разница заключается в конфигурации времени выполнения.pp_require_safe
иplperl_trusted_init
. Я не знаю достаточно, чтобы составить мнение об истинной безопасности ограниченного исполнения Perl. Я бы предпочел увидеть доверенную версию Lua или получить лучшую поддержку и принятие, надежный интерпретатор JavaScript. Но сейчас у нас есть plperl.