Creación de extensiones TLE para Aurora PostgreSQL
Puede instalar cualquier extensión que cree con TLE en cualquier clúster de base de datos de Aurora PostgreSQL que tenga la extensión pg_tle
instalada. La extensión pg_tle
se limita a la base de datos PostgreSQL en la que está instalada. Las extensiones que cree con TLE están incluidas en la misma base de datos.
Utilice las distintas funciones de pgtle
para instalar el código que conforma la extensión TLE. Todas las siguientes funciones de Extensiones de lenguaje de confianza requieren el rol pgtle_admin
.
Ejemplo: creación de una extensión de lenguaje de confianza mediante SQL
El siguiente ejemplo muestra cómo crear una extensión TLE denominada pg_distance
que contenga algunas funciones SQL para calcular distancias mediante diferentes fórmulas. En la lista, puede encontrar la función para calcular la distancia Manhattan y la función para calcular la distancia euclidiana. Para obtener más información sobre la diferencia entre estas fórmulas, consulte Geometría del taxista
Puede utilizar este ejemplo en su clúster de base de datos de Aurora PostgreSQL si tiene la extensión pg_tle
configurada como se detalla en Configuración de Extensiones de lenguaje de confianza en su clúster de base de datos de Aurora PostgreSQL.
nota
Debe tener los privilegios del rol pgtle_admin
para seguir este procedimiento.
Para crear la extensión TLE de ejemplo
En los pasos siguientes se utiliza un ejemplo de base de datos denominado labdb
. Esta base de datos es propiedad del usuario postgres
principal. El rol postgres
también tiene los permisos del rol pgtle_admin
.
Use
psql
para conectarse a la instancia de escritor de su clúster de base de datos de Aurora PostgreSQL.psql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdbCree una extensión TLE denominada
pg_distance
copiando el siguiente código y pegándolo en la consola de sesión depsql
.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_$ );
Debería ver un resultado como el siguiente.
install_extension --------------- t (1 row)
Los artefactos que componen la extensión
pg_distance
ahora ya están instalados en su base de datos. Estos artefactos incluyen el archivo de control y el código de la extensión, que son elementos que deben estar presentes para poder crear la extensión mediante el comandoCREATE EXTENSION
. En otras palabras, aún debe crear la extensión para que sus funciones estén disponibles para los usuarios de la base de datos.Para crear la extensión, utilice el comando
CREATE EXTENSION
como lo haría con cualquier otra extensión. Al igual que con otras extensiones, el usuario de la base de datos debe tener los permisosCREATE
en la base de datos.CREATE EXTENSION pg_distance;
Para probar la extensión TLE
pg_distance
, puede utilizarla para calcular la distancia Manhattanentre cuatro puntos. labdb=>
SELECT manhattan_dist(1, 1, 5, 5);
8
Para calcular la distancia euclidiana
entre el mismo conjunto de puntos, puede utilizar lo siguiente. labdb=>
SELECT euclidean_dist(1, 1, 5, 5);
5.656854249492381
La extensión pg_distance
carga las funciones de la base de datos y las pone a disposición de cualquier usuario con permisos en la base de datos.
Modificación de su extensión TLE
Para mejorar el rendimiento de las consultas para las funciones incluidas en esta extensión TLE, añada los dos atributos de PostgreSQL siguientes a sus especificaciones.
IMMUTABLE
: el atributoIMMUTABLE
garantiza que el optimizador de consultas pueda utilizar optimizaciones para mejorar los tiempos de respuesta de las consultas. Para obtener más información, consulte Function Volatility Categories(Categorías de volatilidad de función) en la documentación de PostgreSQL. PARALLEL SAFE
: el atributoPARALLEL SAFE
es otro atributo que permite a PostgreSQL ejecutar la función en modo paralelo. Para obtener más información, consulte CREATE FUNCTIONen la documentación de PostgreSQL.
En el siguiente ejemplo, puede ver cómo se usa la función pgtle.install_update_path
para agregar estos atributos a cada función a fin de crear una versión 0.2
de la extensión TLE pg_distance
. Para obtener más información acerca de esta función, consulte pgtle.install_update_path. Debe tener el rol pgtle_admin
para realizar esta tarea.
Para actualizar una extensión TLE existente y especificar la versión predeterminada
Conecte con la instancia de escritor de su clúster de base de datos de Aurora PostgreSQL con
psql
u otra herramienta de cliente como pgAdmin.psql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdbModifique una extensión TLE existente copiando el siguiente código y pegándolo en la consola de sesión de
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_$ );
Verá una respuesta similar a la siguiente.
install_update_path --------------------- t (1 row)
Puede hacer que esta versión de la extensión sea la versión predeterminada para que los usuarios de la base de datos no tengan que especificar una versión al crear o actualizar la extensión en su base de datos.
Para especificar que la versión modificada (versión 0.2) de la extensión TLE es la versión predeterminada, utilice la función
pgtle.set_default_version
tal como se muestra en el siguiente ejemplo.SELECT pgtle.set_default_version('pg_distance', '0.2');
Para obtener más información acerca de esta función, consulte pgtle.set_default_version.
Con el código en su lugar, puede actualizar la extensión TLE instalada de la forma habitual, mediante el comando
ALTER EXTENSION ... UPDATE
, tal como se muestra aquí:ALTER EXTENSION pg_distance UPDATE;