Atualizar e usar a extensão PLV8
O PLV8 é uma extensão de linguagem Javascript confiável para o PostgreSQL. Você pode usá-lo para procedimentos armazenados, gatilhos e outros códigos processuais que podem ser chamados do SQL. Essa extensão de idioma é compatível com todas as versões atuais do PostgreSQL.
Se você usar o PLV8
O processo de atualização elimina todas as suas funções PLV8 existentes. Portanto, recomendamos que você crie um snapshot da sua instância de banco de dados do RDS para PostgreSQL antes de atualizar. Para obter mais informações, consulteCriar um snapshot de banco de dados para uma instância de banco de dados single-AZ para o Amazon RDS
Para sincronizar os metadados do catálogo com uma nova versão do PLV8
-
Verifique se você precisa atualizar. Para fazer isso, execute o comando a seguir enquanto conectado à instância.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
Se os resultados contiverem valores para uma versão instalada que seja um número menor que a versão padrão, continue com este procedimento para atualizar suas extensões. Por exemplo, o seguinte conjunto de resultados indica que você deve atualizar.
name | default_version | installed_version | comment --------+-----------------+-------------------+-------------------------------------------------- plls | 2.1.0 | 1.5.3 | PL/LiveScript (v8) trusted procedural language plcoffee| 2.1.0 | 1.5.3 | PL/CoffeeScript (v8) trusted procedural language plv8 | 2.1.0 | 1.5.3 | PL/JavaScript (v8) trusted procedural language (3 rows)
Crie um snapshot da sua instância de banco de dados do RDS para PostgreSQL se você ainda não tiver feito isso. Você pode continuar com as seguintes etapas enquanto o snapshot estiver sendo criado.
-
Obtenha uma contagem do número de funções do PLV8 em sua instância de banco de dados para que você possa confirmar se todas estão implementadas depois da atualização. Por exemplo, a consulta SQL a seguir retorna o número de funções gravadas em plv8, plcoffee e plls.
SELECT proname, nspname, lanname FROM pg_proc p, pg_language l, pg_namespace n WHERE p.prolang = l.oid AND n.oid = p.pronamespace AND lanname IN ('plv8','plcoffee','plls');
-
Use o pg_dump para criar um arquivo de despejo de somente esquema. Por exemplo, crie um arquivo na máquina do cliente no diretório
/tmp
../pg_dump -Fc --schema-only -U master postgres >/tmp/test.dmp
Esse exemplo usa as seguintes opções:
-
-Fc
: formato personalizado -
--schema-only: fará o despejo apenas dos comandos necessários para criar o esquema (funções em nosso caso)
-
-U
: o nome do usuário mestre do RDS -
database
: o nome do banco de dados de nossa instância de banco de dados
Para obter mais informações sobre pg_dump, consulte pg_dump
na documentação do PostgreSQL. -
-
Extraia a declaração DDL "CREATE FUNCTION" que está presente no arquivo de despejo. O exemplo a seguir usa o comando
grep
para extrair a instrução DDL que cria as funções e as salva em um arquivo. Use isso em etapas subsequentes para recriar as funções../pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list/
Para obter mais informações sobre pg_restore, consulte pg_restore
na documentação do PostgreSQL. -
Descarte as funções e as extensões. O exemplo a seguir descarta todos os objetos baseados em PLV8. A opção de cascata garante que qualquer dependente seja descartado.
DROP EXTENSION plv8 CASCADE;
Se sua instância do PostgreSQL contiver objetos baseados em plcoffee ou plls, repita essa etapa para essas extensões.
-
Crie as extensões. O exemplo a seguir cria as extensões plv8, plcoffee e plls.
CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
-
Crie as funções usando o arquivo de despejo e o arquivo do “driver”.
O exemplo a seguir recria as funções que você extraiu anteriormente.
./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
-
Verifique se todas as suas funções foram recriadas usando a seguinte consulta.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
A versão 2 do PLV8 adiciona a seguinte linha extra ao conjunto de resultados:
proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8