Criar extensões TLE para Aurora PostgreSQL
Você pode instalar qualquer extensão criada com o TLE em qualquer cluster de banco de dados do Aurora PostgreSQL que tenha a extensão pg_tle
instalada. A extensão pg_tle
tem como escopo o banco de dados PostgreSQL no qual ela está instalada. As extensões que você cria usando o TLE têm como escopo o mesmo banco de dados.
Use as várias funções pgtle
para instalar o código que compõe sua extensão TLE. As funções do Trusted Language Extensions a seguir exigem a função pgtle_admin
.
Exemplo: Criar uma extensão de linguagem confiável usando SQL
O exemplo a seguir mostra como criar uma extensão TLE chamada pg_distance
que contém algumas funções SQL para calcular distâncias usando fórmulas diferentes. Na lista, você pode encontrar a função para calcular a distância de Manhattan e a função para calcular a distância euclidiana. Para obter mais informações sobre a diferença entre essas fórmulas, consulte Geometria taxicab
Você poderá usar esse exemplo em seu próprio cluster de banco de dados do Aurora PostgreSQL se tiver a extensão pg_tle
configurada conforme detalhado em Configurar o Trusted Language Extensions em seu cluster de banco de dados do Aurora PostgreSQL.
nota
Você precisa ter os privilégios da função pgtle_admin
para seguir esse procedimento.
Como criar o exemplo de extensão TLE
As etapas a seguir usam um exemplo de banco de dados chamado labdb
. Esse banco de dados é de propriedade do usuário primário postgres
. A função postgres
também tem as permissões da função pgtle_admin
.
Use o
psql
para se conectar à instância de gravador do cluster de banco de dados do Aurora PostgreSQL.psql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdbCrie uma extensão TLE denominada
pg_distance
copiando o código a seguir e colando-o no console da sessãopsql
.SELECT pgtle.install_extension ( 'pg_distance', '0.1', 'Distance functions for two points', $_pg_tle_$ CREATE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL; CREATE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL; CREATE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL; $_pg_tle_$ );
Você verá a saída da forma a seguir.
install_extension --------------- t (1 row)
Os artefatos que compõem a extensão
pg_distance
agora estão instalados em seu banco de dados. Esses artefatos incluem o arquivo de controle e o código da extensão, que são itens que precisam estar presentes para que a extensão possa ser criada usando o comandoCREATE EXTENSION
. Em outras palavras, você ainda precisa criar a extensão para disponibilizar suas funções aos usuários do banco de dados.Para criar a extensão, use o comando
CREATE EXTENSION
como você faz com qualquer outra extensão. Assim como acontece com outras extensões, o usuário do banco de dados precisa ter as permissõesCREATE
no banco de dados.CREATE EXTENSION pg_distance;
Para testar a extensão TLE
pg_distance
, você pode usá-la para calcular a distância de Manhattanentre quatro pontos. labdb=>
SELECT manhattan_dist(1, 1, 5, 5);
8
Para calcular a distância euclidiana
entre o mesmo conjunto de pontos, você pode usar o seguinte. labdb=>
SELECT euclidean_dist(1, 1, 5, 5);
5.656854249492381
A extensão pg_distance
carrega as funções no banco de dados e as disponibiliza para qualquer usuário com permissões no banco de dados.
Modificar a extensão TLE
Para melhorar a performance da consulta para as funções empacotadas nessa extensão TLE, adicione os dois atributos do PostgreSQL a seguir às suas especificações.
IMMUTABLE
: o atributoIMMUTABLE
garante que o otimizador de consultas possa usar otimizações para melhorar os tempos de resposta da consulta. Para obter mais informações, consulte Function Volatility Categories(Categorias de volatilidade de funções) na documentação do PostgreSQL. PARALLEL SAFE
: o atributoPARALLEL SAFE
é outro atributo que permite que o PostgreSQL execute a função no modo paralelo. Para obter mais informações, consulte CREATE FUNCTIONna documentação do PostgreSQL.
No exemplo a seguir, você pode ver como a função pgtle.install_update_path
é usada para adicionar esses atributos a cada função para criar uma versão 0.2
da extensão TLE pg_distance
. Para ter mais informações sobre essa função, consulte pgtle.install_update_path. Você precisa ter a função pgtle_admin
para realizar essa tarefa.
Como atualizar uma extensão TLE existente e especificar a versão padrão
Conecte-se à instância de gravador de seu cluster de banco de dados do Aurora PostgreSQL usando
psql
ou outra ferramenta de cliente, como o pgAdminpsql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdbModifique a extensão TLE existente copiando o código a seguir e colando-o no console da sessão
psql
.SELECT pgtle.install_update_path ( 'pg_distance', '0.1', '0.2', $_pg_tle_$ CREATE OR REPLACE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; $_pg_tle_$ );
Você verá uma resposta semelhante ao seguinte.
install_update_path --------------------- t (1 row)
Você pode tornar essa versão da extensão a versão padrão, para que os usuários do banco de dados não precisem especificar uma versão ao criar ou atualizar a extensão em seu banco de dados.
Para especificar que a versão modificada (versão 0.2) de sua extensão TLE é a versão padrão, use a função
pgtle.set_default_version
conforme mostrado no exemplo a seguir.SELECT pgtle.set_default_version('pg_distance', '0.2');
Para ter mais informações sobre essa função, consulte pgtle.set_default_version.
Com o código implementado, você pode atualizar a extensão TLE instalada da maneira usual, utilizando o comando
ALTER EXTENSION ... UPDATE
, conforme mostrado aqui:ALTER EXTENSION pg_distance UPDATE;