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
Temas
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).
Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
En el panel de navegación, seleccione Databases (Bases de datos).
-
Elija el nombre de la instancia de base de datos para ver los detalles.
-
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.
-
Elija el enlace para abrir los parámetros personalizados asociados a la instancia de base de datos.
-
En el campo de búsqueda Parametes (Parámetros), escriba
shared_pre
para buscar el parámetroshared_preload_libraries
. -
Seleccione Edit parameters (Editar parámetros) para acceder a los valores de las propiedades.
-
Añada plrust a la lista en el campo Valores. Utilice una coma para separar los elementos de la lista de valores.
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.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).
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" \ --regionaws-region
-
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
\ --regionaws-region
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
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
;