Usando Javascript em funções do PostgreSQL PLV8
Instalando o PLV8 na AWS
PLV8 é uma extensão que permite criar funções em JavaScript, CoffeeScript e LiveScript. Para instalar a extensão na AWS basta executar:
[code language="sql"]--Instalando o suporte para JavaScript CREATE EXTENSION plv8; --Instalando o suporte para LiveScript CREATE EXTENSION plls; --Instalando o suporte para CoffeeScript CREATE EXTENSION plcoffee; --Descobrindo se a instalação teve sucesso: SELECT plv8_version(); [/code]
Exemplo de criação de função com PLV8
[code language="javascript"]CREATE OR REPLACE FUNCTION public.sum(primeiro_numero NUMERIC, segundo_numero NUMERIC) RETURNS bigint LANGUAGE 'plv8' VOLATILE AS $ return primeiro_numero + segundo_numero; $; [/code]
Função para descobrir o valor atual de uma sequência de uma dada coluna
[code language="javascript"]CREATE OR REPLACE FUNCTION public.get_sequence_last_value(_schema TEXT, _table TEXT, _column TEXT) RETURNS bigint LANGUAGE 'plv8' VOLATILE AS $ var schema_table = `${_schema}.${_table}`; var sequence_name = plv8.execute(`SELECT pg_get_serial_sequence('${schema_table}','${_column}');`)[0].pg_get_serial_sequence; var last_value = plv8.execute(`SELECT last_value FROM ${sequence_name}`)[0].last_value; return last_value; $; [/code]
Referências
Documentação do PLV8 no Github
https://plv8.github.io/
Documentação do PLV8 no PGXN
https://pgxn.org/dist/plv8/doc/plv8.html
Git do PLV8
https://github.com/plv8/plv8
Tutorial no EndPoint
https://www.endpoint.com/blog/2013/11/22/using-javascript-in-postgresql
Uma análise aprofundada das funcionalidades do PLV8
https://rymc.io/2016/03/22/a-deep-dive-into-plv8/
Instalando PLV8 no Ubuntu 18
# Podem haver versões mais novas, vá mudando os números e descobrindowget https://github.com/plv8/plv8/archive/v2.3.11.tar.gz tar -xvzf v2.3.11.tar.gz cd plv8-2.3.11 make PG_CONFIG=/usr/lib/postgresql/11/pg_config
Instalando via pgxnclient (gerenciador de extensões do PostgreSQL)
apt install postgresql-server-dev-x.xapt install pgxnclient pgxn install plv8
Referências
Releases do PLV8
https://github.com/plv8/plv8/releases
Tutorial antigo de instalação
https://gist.github.com/asleepysamurai/5690830
Outro tutorial antigo instalando o PLV8
https://gist.github.com/benjie/588376004859b3699a6a181379e87f77
PostgreSQL 11 + PLV8 no Docker
https://github.com/IonxSolutions/docker-images