Utilizzo di PL/Rust per scrivere funzioni PostgreSQL nel linguaggio Rust - Amazon Relational Database Service

Utilizzo di PL/Rust per scrivere funzioni PostgreSQL nel linguaggio Rust

PL/Rust è un'estensione attendibile del linguaggio Rust per PostgreSQL. È possibile utilizzarlo per stored procedure, funzioni e altri codici procedurali richiamabili da SQL. L'estensione del linguaggio PL/Rust è disponibile nelle seguenti versioni:

  • RDS per PostgreSQL 17.1 e versioni successive alla 17

  • RDS per PostgreSQL 16.1 e versioni successive alla 16

  • RDS per PostgreSQL 15.2-R2 e versioni successive alla 15

  • RDS per PostgreSQL 14.9 e versioni successive alla 14

  • RDS per PostgreSQL 13.12 e versioni successive alla 13

Per ulteriori informazioni, consulta PL/Rust su GitHub.

Configurazione di PL/Rust

Per installare l'estensione plrust sull'istanza database, aggiungere plrust al parametro shared_preload_libraries nel gruppo di parametri database associato all'istanza database. Dopo aver installato l'estensione plrust, è possibile creare funzioni.

Per modificare il parametro shared_preload_libraries, l'istanza database deve essere associata a un gruppo di parametri personalizzato. Per ulteriori informazioni sulla creazione di un gruppo di parametri personalizzato, consulta Gruppi di parametri per Amazon RDS.

È possibile installare l'estensione plrust usando la AWS Management Console o la AWS CLI.

I passaggi seguenti si basano sull'ipotesi che l'istanza database sia associata a un gruppo di parametri personalizzato.

Installare l'estensione plrust nel parametro shared_preload_libraries

Eseguire i seguenti passaggi utilizzando un account membro del gruppo rds_superuser (ruolo).

  1. Accedi alla AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione, scegliere Databases (Database).

  3. Scegliere il nome dell'istanza database per visualizzarne i dettagli.

  4. Aprire la scheda Configurazione dell'istanza database e trovare il link al gruppo di parametri dell'istanza database.

  5. Scegliere il link per aprire i parametri personalizzati associati all'istanza database.

  6. Nel campo di ricerca Parametri, digita shared_pre per trovare il parametro shared_preload_libraries.

  7. Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.

  8. Aggiungere plrust all'elenco nel campo Valori. Utilizza una virgola per separare gli elementi nell'elenco di valori.

  9. Riavviare l'istanza database per applicare le modifiche al parametro shared_preload_libraries. Il completamento del riavvio iniziale potrebbe richiedere più tempo.

  10. Quando l'istanza è disponibile, verificare che plrust sia stato inizializzato. Utilizzare psql per connettersi all'istanza database ed eseguire il comando riportato di seguito.

    SHOW shared_preload_libraries;

    L'aspetto dell'output sarà simile al seguente:

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
Installare l'estensione plrust nel parametro shared_preload_libraries

Eseguire i seguenti passaggi utilizzando un account membro del gruppo rds_superuser (ruolo).

  1. Usare il comando AWS CLI modify-db-parameter-group per aggiungere plrust al parametro 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. Usare il comando AWS CLI reboot-db-instance per riavviare l'istanza database e inizializzare la libreria plrust. Il completamento del riavvio iniziale potrebbe richiedere più tempo.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  3. Quando l'istanza è disponibile, è possibile verificare se plrust è stato inizializzato. Utilizzare psql per connettersi all'istanza database ed eseguire il comando riportato di seguito.

    SHOW shared_preload_libraries;

    L'aspetto dell'output sarà simile al seguente:

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

Creazione di funzioni con PL/Rust

PL/Rust compilerà la funzione come libreria dinamica, la caricherà e la eseguirà.

La seguente funzione Rust filtra i multipli da un array.

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;

Utilizzo dei formati crate con PL/Rust

In RDS per PostgreSQL versioni 16.3-R2 e successive, 15.7-R2 e versioni 15 successive, 14.12-R2 e versioni 14 successive e 13.15-R2 e versioni 13 successive, PL/Rust supporta formati crate aggiuntivi:

  • url

  • regex

  • serde

  • serde_json

In RDS per PostgreSQL versioni 15.5-R2 e successive, 14.10-R2 e versioni 14 successive e 13.13-R2 e versioni 13 successive, PL/Rust supporta due formati crate aggiuntivi:

  • croaring-rs

  • num-bigint

A partire dalle versioni 15.4, 14.9 e 13.12 di Amazon RDS per PostgreSQL, PL/Rust supporta i seguenti formati crate:

  • aes

  • ctr

  • rand

Per questi formati sono supportate solo le funzionalità predefinite. Le nuove versioni di RDS per PostgreSQL potrebbero contenere versioni aggiornate di questi formati e le relative versioni precedenti potrebbero non essere più supportate.

Segui le best practice per eseguire un aggiornamento della versione principale per verificare se le tue funzioni PL/Rust sono compatibili con la nuova versione principale. Per ulteriori informazioni, consulta il blog Best practices for upgrading Amazon RDS to major and minor versions of PostgreSQL (Best practice per l'aggiornamento di Amazon RDS alle versioni principali e secondarie di PostgreSQL) e Aggiornamento del motore del database PostgreSQL per Amazon RDS nella Guida per l'utente Amazon RDS.

Esempi di utilizzo delle dipendenze durante la creazione di una funzione PL/Rust sono disponibili in Use dependencies (Utilizzo delle dipendenze).

Limitazioni del linguaggio PL/Rust

Per impostazione predefinita, gli utenti del database non possono utilizzare PL/Rust. Per fornire l'accesso a PL/Rust, connettersi come utente con il privilegio rds_superuser ed eseguire il seguente comando:

postgres=> GRANT USAGE ON LANGUAGE PLRUST TO user;