Uso de PL/Rust para escribir funciones de PostgreSQL en lenguaje Rust - Amazon Relational Database Service

Uso de PL/Rust para escribir funciones de PostgreSQL en lenguaje Rust

PL/Rust es una extensión del lenguaje Rust de confianza para PostgreSQL. Puede usarlo para procedimientos almacenados, funciones y otro código de procedimiento que se pueda llamar desde SQL. La extensión de lenguaje PL/Rust está disponible en las siguientes versiones:

  • RDS para PostgreSQL 16.1 y versiones 16 posteriores

  • RDS para PostgreSQL, 15.2-R2 y versiones 15 posteriores

  • RDS para PostgreSQL, 14.9 y versiones 14 posteriores

  • RDS para PostgreSQL, 13.12 y versiones 13 posteriores

Para obtener más información, consulte PL/Rust en GitHub.

Configuración de PL/Rust

Para instalar la extensión plrust en la instancia de base de datos, agregue plrust al parámetro shared_preload_libraries en el grupo de parámetros de base de datos asociado con la instancia de base de datos. Con la extensión plrust instalada, puede crear funciones.

Para modificar el parámetro shared_preload_libraries, la instancia de base de datos debe asociarse al grupo de parámetros personalizado. Para obtener información sobre la creación de un grupo de parámetros de base de datos personalizado, consulte Grupos de parámetros para Amazon RDS.

Puede instalar la extensión plrust mediante la AWS Management Console o la AWS CLI.

En los pasos siguientes se supone que la instancia de base de datos está asociada a un grupo de parámetros de base de datos personalizado.

Instalar la extensión plrust en el parámetro shared_preload_libraries

Realice los siguientes pasos con una cuenta que sea miembro del grupo rds_superuser (rol).

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, seleccione Databases (Bases de datos).

  3. Elija el nombre de la instancia de base de datos para ver los detalles.

  4. Abra la pestaña Configuración de la instancia de base de datos y busque el enlace del grupo de parámetros de instancias de base de datos.

  5. Elija el enlace para abrir los parámetros personalizados asociados a la instancia de base de datos.

  6. En el campo de búsqueda Parametes (Parámetros), escriba shared_pre para buscar el parámetro shared_preload_libraries.

  7. Seleccione Edit parameters (Editar parámetros) para acceder a los valores de las propiedades.

  8. Añada plrust a la lista en el campo Valores. Utilice una coma para separar los elementos de la lista de valores.

  9. Reinicie la instancia de base de datos para que los cambios en el parámetro shared_preload_libraries surtan efecto. El reinicio inicial puede requerir tiempo adicional para completarse.

  10. Cuando la instancia esté disponible, compruebe si se ha inicializado plrust. Use psql para conectarse a la instancia de base de datos y ejecute el siguiente comando.

    SHOW shared_preload_libraries;

    El resultado debería tener un aspecto similar al siguiente:

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
Instale la extensión plrust en el parámetro shared_preload_libraries.

Realice los siguientes pasos con una cuenta que sea miembro del grupo rds_superuser (rol).

  1. Use el comando modify-db-parameter-group de AWS CLI para añadir plrust al parámetro shared_preload_libraries.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=plrust,ApplyMethod=pending-reboot" \ --region aws-region
  2. Use el comando reboot-db-instance de AWS CLI para reiniciar la instancia de base de datos e inicializar la biblioteca plrust. El reinicio inicial puede requerir tiempo adicional para completarse.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  3. Cuando la instancia esté disponible, compruebe si se ha inicializado plrust. Use psql para conectarse a la instancia de base de datos y ejecute el siguiente comando.

    SHOW shared_preload_libraries;

    El resultado debería tener un aspecto similar al siguiente:

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)

Creación de funciones con PL/Rust

PL/Rust compilará la función como biblioteca dinámica, la cargará y la ejecutará.

La siguiente función de Rust filtra los múltiplos de una matriz.

postgres=> CREATE LANGUAGE plrust; CREATE EXTENSION
CREATE OR REPLACE FUNCTION filter_multiples(a BIGINT[], multiple BIGINT) RETURNS BIGINT[] IMMUTABLE STRICT LANGUAGE PLRUST AS $$ Ok(Some(a.into_iter().filter(|x| x.unwrap() % multiple != 0).collect())) $$; WITH gen_values AS ( SELECT ARRAY(SELECT * FROM generate_series(1,100)) as arr) SELECT filter_multiples(arr, 3) from gen_values;

Uso de cajas con PL/Rust

En RDS para PostgreSQL versiones 16.3-R2 y posteriores, 15.7-R2 y versiones 15 posteriores, 14.12-R2 y versiones 14 posteriores y 13.15-R2 y versiones 13 y posteriores, PL/Rust admite cajas adicionales:

  • url

  • regex

  • serde

  • serde_json

En RDS para PostgreSQL versiones 15.5-R2 y posteriores, 14.10-R2 y versiones 14 posteriores y 13.13-R2 y versiones 13 posteriores, PL/Rust admite dos cajas adicionales:

  • croaring-rs

  • num-bigint

A partir de las versiones 15.4, 14.9 y 13.12 de Amazon RDS para PostgreSQL, PL/Rust admite las siguientes cajas:

  • aes

  • ctr

  • rand

Estas cajas solo admiten las funciones predeterminadas. Es posible que las nuevas versiones de RDS para PostgreSQL contengan versiones actualizadas de las cajas y que las versiones anteriores de las cajas ya no sean compatibles.

Siga las prácticas recomendadas para realizar una actualización de una versión principal y comprobar si las funciones de PL/Rust son compatibles con la nueva versión principal. Para obtener más información, consulte el blog Best practices for upgrading Amazon RDS to major and minor versions of PostgreSQL y Actualización del motor de base de datos de PostgreSQL para Amazon RDS en la Guía del usuario de Amazon RDS.

Encontrará ejemplos del uso de dependencias al crear una función de PL/Rust en Use dependencies.

Limitaciones de PL/Rust

De forma predeterminada, los usuarios de bases de datos no pueden usar PL/Rust. Para proporcionar acceso a PL/Rust, conéctese como usuario con el privilegio rds_superuser y ejecute el siguiente comando:

postgres=> GRANT USAGE ON LANGUAGE PLRUST TO user;