À medida que ganho mais experiência com o PostgreSQL começo a questionar a existência do PLPython. É considerada uma linguagem "não confiável" https://www.postgresql.org/docs/10/plpython.html
O que eu estou querendo saber é, quando ou por que alguém precisaria usar isso? PLPGSQL já é uma linguagem bastante forte que permite fazer muitas coisas. Alguém aqui teve a necessidade de usá-lo, e se sim, para quê?
Acho pl/pgsql tedioso para programação geral e lento para programar e lento para executar. E faltam muitas funcionalidades - algumas das quais faltam porque tem que ser para ser uma linguagem confiável (sem IPC ou rede), e outras apenas porque não foram construídas e carecem de um mecanismo para bibliotecas/ módulos/pacotes.
Eu usei plpython3u para obter acesso a bibliotecas de inteligência química de dentro do banco de dados. reimplementar a funcionalidade dessas bibliotecas do zero seria teoricamente factível, mas totalmente impraticável. Fazer isso em pl/pgsql seria totalmente impraticável ao quadrado.
Eu fiz a mesma coisa com plperlu e plperl, para ter acesso a uma variedade de módulos CPAN Perl. Se esses módulos estivessem em python em vez de Perl, eu teria usado plpythonu em vez de plperl(u).
Eu também usei o plperl (não o plpythonu, mas apenas porque prefiro Perl ao invés de python) para implementar funções que eu queria que estivessem disponíveis tanto dentro do banco de dados através do SQL quanto fora do nosso código procedural. Eu poderia tê-los implementado em pl/pgsql, mas isso seria chato de fazer, e também significa que eles precisariam de duas implementações em duas linguagens. Alternativamente, eu poderia simplesmente implementá-los no banco de dados e conectar-me ao banco de dados do Perl autônomo quando quiser chamar as funções de lá. Mas isso às vezes significaria estabelecer uma conexão de banco de dados que de outra forma seria desnecessária nesse programa e seria um abuso de um de nossos recursos mais limitados, pois os bancos de dados são muito mais difíceis de dimensionar do que os scripts Perl independentes. Também introduziria latência.
Não é confiável porque, na verdade, você pode usar chamadas de sistema do sistema operacional a partir de
plpython
funções - arquivos de leitura/gravação (incluindopgdata
catálogo) e processos do sistema, sobpostgres
o usuário do sistema. Então você deve ter muito cuidado com isso. Mas deixe-me mostrar alguns casos em queplpython
pode ser útil.plpgsql
, é uma má ideia. Isso será definitivamente mais rápido doplpython
que noplpgsql
porque , naplpgsql
verdade, invoca umaSELECT
instrução separada para calcular cada expressão enquantoplpython
não o faz.