# Scrivere estensioni sicure per PostgreSQL in Rust
> [! nota]-
> Il contenuto di questa pagina è generato dalla trascrizione audio/video e dalla trasformazione del testo dal contenuto e dai link di questa fonte.
Fonte: [https://fosdem.org/2025/schedule/event/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/](https://fosdem.org/2025/schedule/event/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/)
<video src=“https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.webm” controls></video>
## Riepilogo e punti salienti:
Questa sessione esplora come scrivere estensioni sicure per PostgreSQL utilizzando Rust, evidenziando i vantaggi in termini di sicurezza, prestazioni e manutenibilità. Rust sta diventando il nuovo standard per lo sviluppo di estensioni per database grazie alla sua capacità di fornire garanzie di sicurezza della memoria e di integrare un vasto ecosistema di librerie.
**Introduzione a PostgreSQL e Rust**
PostgreSQL è noto per la sua estensibilità, e Rust sta emergendo come un linguaggio ideale per scrivere estensioni robuste e performanti. La sessione introduce il framework PGRX, che facilita l'integrazione tra Rust e PostgreSQL, permettendo agli sviluppatori di sfruttare le caratteristiche avanzate di Rust per migliorare la sicurezza e le prestazioni delle estensioni.
**Vantaggi dell'utilizzo di Rust**
Rust offre garanzie di sicurezza della memoria che riducono i rischi di crash del server, una critica comune quando si utilizzano estensioni scritte in C. Inoltre, Rust consente un ambiente di sviluppo completamente gestito e l'accesso a un vasto ecosistema di librerie, rendendo lo sviluppo più efficiente e la manutenzione delle estensioni più semplice.
**Esempi pratici e lezioni apprese**
La sessione presenta esempi pratici di utilizzo di PGRX per scrivere estensioni in Rust, tra cui la riscrittura di un'estensione di anonimizzazione da C a Rust. Vengono condivise lezioni apprese, come l'importanza di scegliere gli strumenti giusti e i vantaggi di portare il codice vicino ai dati per migliorare le prestazioni e la sicurezza.
**Conclusioni e futuro delle estensioni PostgreSQL**
La sessione conclude con una discussione sul futuro delle estensioni PostgreSQL, sottolineando come Rust possa rappresentare una rivoluzione per lo sviluppo di estensioni sicure e performanti. Gli sviluppatori sono incoraggiati a esplorare Rust come punto di ingresso nella comunità PostgreSQL e a contribuire alla crescita di un ecosistema di estensioni più sicuro e robusto.
## Significato per una trasformazione eco-sociale
L'utilizzo di Rust per sviluppare estensioni PostgreSQL rappresenta un passo significativo verso una trasformazione eco-sociale, poiché migliora la sicurezza e l'efficienza delle operazioni sui database. La sicurezza della memoria offerta da Rust riduce i rischi di crash del sistema, contribuendo alla stabilità e alla sostenibilità delle infrastrutture digitali. Gli eco-designer possono applicare questi principi per sviluppare soluzioni software più affidabili e sostenibili, riducendo l'impatto ambientale associato a errori di sistema e downtime. Tuttavia, le sfide includono la necessità di superare le barriere tecniche nell'adozione di nuovi strumenti e linguaggi, e di promuovere un cambiamento culturale verso pratiche di sviluppo più sicure e sostenibili.
## Slides:
| | |
| --- | --- |
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_001.jpg\|300]] | La prima diapositiva introduce il tema della sessione: scrivere estensioni sicure per PostgreSQL utilizzando Rust. Si sottolinea l'importanza di Rust nel migliorare la sicurezza e le prestazioni delle estensioni, offrendo un ambiente di sviluppo più sicuro e gestibile.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_002.jpg\|300]] | Damien Clochard, co-fondatore di DALIBO e sviluppatore principale dell'estensione PostgreSQL Anonymizer, condivide la sua esperienza nel riscrivere estensioni in Rust. La sua esperienza e contributo alla comunità francese di PostgreSQL sono messi in evidenza.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_003.jpg\|300]] | Damien racconta il suo percorso di scoperta di PostgreSQL 25 anni fa e di Rust l'anno scorso. Condivide la sua esperienza di passaggio da C a Rust, evidenziando la curva di apprendimento e i benefici ottenuti.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_004.jpg\|300]] | La storia di Damien inizia nel 2018 con il progetto PostgreSQL Anonymizer, scritto inizialmente in C. Nel corso degli anni ha riscritto il codice in Rust, migliorando la sicurezza e la manutenibilità dell'estensione.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_005.jpg\|300]] | La sessione copre vari argomenti: cosa sono le estensioni PostgreSQL, il framework PGRX, esempi pratici e le lezioni apprese dalla riscrittura dell'estensione PostgreSQL Anonymizer. Si discute anche del futuro delle estensioni PostgreSQL con Rust.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_006.jpg\|300]] | La diapositiva suggerisce semplicemente di utilizzare PostgreSQL, sottolineando la sua versatilità e capacità di soddisfare molteplici esigenze grazie alla sua natura di piattaforma estensibile.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_007.jpg\|300]] | PostgreSQL non è solo un database, ma una piattaforma che supporta vari tipi di dati e funzioni. La diapositiva elenca diverse estensioni che rendono PostgreSQL adatto a grafici, dati geografici, OLAP, NoSQL, intelligenza artificiale, ETL, serie temporali, ricerca full-text e altro.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_008.jpg\|300]] | PostgreSQL vanta un ecosistema unico con oltre 1000 estensioni conosciute, di cui quasi 250 sono attive e mantenute. Questo ecosistema consente una vasta gamma di applicazioni e personalizzazioni.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_009.jpg\|300]] | Una estensione di PostgreSQL può consistere in oggetti SQL, codice di linguaggio procedurale (PL) e/o una libreria compilata. Questa versatilità permette di estendere le funzionalità del database in vari modi.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_010.jpg\|300]] | Scrivere un'estensione in SQL o codice PL è semplice e veloce, ideale per condividere codice tra più database e molto stabile tra le versioni principali. PostgreSQL supporta oltre 20 linguaggi procedurali.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_011.jpg\|300]] | Esempio di funzione SQL: la diapositiva mostra come creare una funzione per ottenere il nome di un dipendente utilizzando l'identificativo. Questo esempio illustra la semplicità e l'efficacia del codice SQL per le estensioni.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_012.jpg\|300]] | PostgreSQL supporta oltre 20 linguaggi procedurali, tra cui PL/pgsql, PL/perl, PL/php, PL/Ruby, PL/Java, PL/Scheme, PL/tcl, PL/Lua, PL/python, PL/haskell, PL/Rust e molti altri, offrendo grande flessibilità agli sviluppatori.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_013.jpg\|300]] | La diapositiva accenna a PL/Rust, un linguaggio procedurale per PostgreSQL, ma indica che non sarà trattato nella sessione. Tuttavia, evidenzia la varietà di linguaggi disponibili.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_014.jpg\|300]] | Scrivere un'estensione in C offre accesso diretto alle funzioni interne ma senza barriere di sicurezza, il che può portare a crash. Il codice è a basso livello, senza astrazioni, e ogni nuova versione principale di PostgreSQL può rompere l'estensione.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_015.jpg\|300]] | Se un'estensione scritta in C si blocca, l'intera istanza di PostgreSQL si blocca. Questo sottolinea i rischi associati alla scrittura di estensioni in C senza adeguate misure di sicurezza.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_016.jpg\|300]] | La diapositiva esplora la possibilità di combinare i benefici di sicurezza delle funzioni PL con le prestazioni del C, utilizzando un linguaggio moderno e stabile come Rust per scrivere estensioni.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_017.jpg\|300]] | PGRX è presentato come una ventata di aria fresca per gli sviluppatori di estensioni, offrendo un modo per colmare il divario tra Rust e le funzionalità interne di PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_018.jpg\|300]] | PGRX è un framework che funge da ponte tra Rust e PostgreSQL, consentendo agli sviluppatori di sfruttare le caratteristiche avanzate di Rust per migliorare la sicurezza e le prestazioni delle estensioni.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_019.jpg\|300]] | PGRX consente di esporre le funzioni Rust come funzioni utente all'interno di PostgreSQL, con mappatura automatica dei tipi di dati PostgreSQL in tipi Rust e viceversa, facilitando l'integrazione.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_020.jpg\|300]] | PGRX gestisce la conversione dei tipi tra PostgreSQL e Rust, ad esempio BYTEA in Vec<u8>, TEXT in String, INTEGER in i32, DATE in pgrx::Date, e NULL in Option::None, semplificando lo sviluppo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_021.jpg\|300]] | PGRX offre astrazioni Rust su puntatori PostgreSQL e strumenti per scambiare memoria con PostgreSQL, garantendo un accesso sicuro all'interfaccia di programmazione del server (SPI).
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_022.jpg\|300]] | In caso di crash dell'estensione, PGRX solleva un evento ERROR in PostgreSQL, annullando la transazione corrente e consentendo alla sessione di continuare, garantendo la sopravvivenza dell'istanza PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_023.jpg\|300]] | PGRX offre strumenti di sviluppo moderni, un ambiente di sviluppo completamente gestito, supporto per tutte le versioni principali, un framework di test idiomatico Rust e comandi facili per costruire e distribuire pacchetti.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_024.jpg\|300]] | PGRX è un progetto aperto e attivo, lanciato da una singola azienda e trasferito alla fondazione pgcentral. La comunità Discord è amichevole e utile per i principianti.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_025.jpg\|300]] | La diapositiva introduce un esempio pratico di utilizzo di PGRX per sviluppare un'estensione in Rust, illustrando il processo di sviluppo passo dopo passo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_026.jpg\|300]] | La diapositiva mostra i comandi per installare e inizializzare PGRX, inclusi 'cargo install --locked cargo-pgrx' e 'cargo pgrx init', per preparare l'ambiente di sviluppo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_027.jpg\|300]] | I comandi 'cargo pgrx new world' e 'cd world' vengono utilizzati per creare un nuovo progetto PGRX e navigare nella directory del progetto, avviando lo sviluppo dell'estensione.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_028.jpg\|300]] | Il codice mostra una funzione Rust semplice, 'hello_world', che restituisce una stringa statica. Questo esempio illustra la facilità di esporre funzioni Rust in PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_029.jpg\|300]] | La diapositiva suggerisce di utilizzare 'cargo pgrx run' per eseguire l'estensione sviluppata, testando l'integrazione della funzione Rust con PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_030.jpg\|300]] | Un esempio di utilizzo della funzione 'hello_world' in PostgreSQL, dimostrando come creare e selezionare un'estensione per ottenere il messaggio 'Hello, world'.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_031.jpg\|300]] | La funzione Rust 'hello' accetta un parametro e restituisce una stringa formattata. Questo esempio mostra come passare parametri alle funzioni Rust esposte in PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_032.jpg\|300]] | Esempio di utilizzo della funzione 'hello' in PostgreSQL, dimostrando come passare un parametro e ricevere un messaggio personalizzato, 'Hello, FOSDEM'.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_033.jpg\|300]] | La diapositiva confronta l'implementazione di una funzione simile in C, evidenziando la complessità e la verbosità del codice C rispetto alla semplicità di Rust.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_034.jpg\|300]] | Discussione su come viene calcolato il numero di assicurazione sociale canadese (SIN) utilizzando la formula di Luhn, con un esempio di calcolo del checksum per un numero SIN.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_035.jpg\|300]] | La diapositiva consiglia di utilizzare pacchetti esistenti, come 'luhn3', per evitare di reinventare la ruota, dimostrando l'integrazione di librerie Rust preesistenti.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_036.jpg\|300]] | Esempio di funzione Rust che calcola il checksum di Luhn per un input, utilizzando la libreria 'luhn3'. Questo illustra come integrare librerie Rust per eseguire calcoli specifici.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_037.jpg\|300]] | La diapositiva suggerisce di ricostruire l'estensione utilizzando 'cargo pgrx run', per testare le modifiche apportate alla funzione e verificarne il funzionamento.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_038.jpg\|300]] | Esempi di test manuali della funzione 'luhn_checksum' in PostgreSQL, dimostrando come eseguire query per verificare la correttezza del calcolo del checksum.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_039.jpg\|300]] | Esempio di test automatici per la funzione 'luhn_checksum', utilizzando il framework di test di Rust per garantire la correttezza del codice in modo sistematico.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_040.jpg\|300]] | La diapositiva mostra i risultati dei test automatici eseguiti con 'cargo pgrx test', dimostrando il successo dei test e la stabilità della funzione sviluppata.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_041.jpg\|300]] | Esecuzione dei test su PostgreSQL 14 utilizzando 'cargo pgrx test pg14', dimostrando la compatibilità dell'estensione con diverse versioni di PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_042.jpg\|300]] | Creazione di un tipo definito dall'utente (UDT) in Rust, 'SIN', utilizzando derive e macro per serializzare, deserializzare e gestire gli input e output del tipo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_043.jpg\|300]] | Implementazione dei tratti di I/O di base per il tipo 'SIN', gestendo l'input come una stringa C e l'output come una stringa formattata, utilizzando la libreria 'luhn3'.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_044.jpg\|300]] | Il tratto di input convalida il numero SIN, rimuove gli spazi e verifica la validità utilizzando 'luhn3'. Se valido, viene convertito in un intero e restituito come 'SIN'.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_045.jpg\|300]] | Il tratto di output formatta il numero SIN in parti leggibili, calcolando il checksum e restituendo una stringa strutturata, dimostrando la gestione dell'output in Rust.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_046.jpg\|300]] | La diapositiva suggerisce di provare il nuovo tipo 'SIN' utilizzando 'cargo pgrx run', per testare l'integrazione e il funzionamento del tipo definito dall'utente.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_047.jpg\|300]] | Esempi di conversione di testo in tipo 'SIN', dimostrando come gestire input validi e invalidi e restituire errori appropriati senza causare crash del server.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_048.jpg\|300]] | Utilizzo del tipo 'SIN' in una colonna di una tabella PostgreSQL, affrontando l'errore dovuto alla mancanza di una classe operatore predefinita per il tipo personalizzato.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_049.jpg\|300]] | Derivazione degli operatori predefiniti per il tipo 'SIN', utilizzando macro per implementare operatori di uguaglianza, ordinamento e altre funzionalità necessarie.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_050.jpg\|300]] | Confronto tra due numeri SIN utilizzando gli operatori derivati, dimostrando la capacità di eseguire operazioni di confronto sui tipi definiti dall'utente.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_051.jpg\|300]] | La colonna 'SIN' ora funziona correttamente, permettendo di creare una tabella con chiavi primarie di tipo 'SIN' e inserire dati senza errori.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_052.jpg\|300]] | Discussione su ulteriori possibilità di interazione con il motore del database, come wrapper di dati esterni, decodificatori WAL e metodi di accesso agli indici.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_053.jpg\|300]] | Feedback sull'esperienza di riscrittura dell'estensione PostgreSQL Anonymizer da C a Rust, evidenziando i benefici e le sfide incontrate durante il processo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_054.jpg\|300]] | Riscrittura dell'estensione PostgreSQL Anonymizer da zero in Rust, migliorando la sicurezza e la manutenibilità, con una discussione più approfondita prevista per il giorno successivo.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_055.jpg\|300]] | La transizione da C a Rust porta a una sensazione di familiarità con PostgreSQL, con una curva di apprendimento iniziale ripida ma ricompense significative una volta superata.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_056.jpg\|300]] | Gains immediati dalla riscrittura in Rust includono maggiore comfort di sviluppo, rilevamento di bug grazie ai test unitari, migliori prestazioni e stabilità senza segfault.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_057.jpg\|300]] | Shock culturale nel passaggio a Rust, dove le variabili non possono essere NULL e alcuni macro interni di PostgreSQL sono mancanti, richiedendo una gestione di due contesti di memoria.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_058.jpg\|300]] | Nonostante i vantaggi, ci sono sezioni di codice ancora insicure, il processo di costruzione è lento e non c'è supporto per Windows, richiedendo la comprensione del codice C di PostgreSQL.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_059.jpg\|300]] | Il futuro di PostgreSQL è 'Rusty', con Rust che rappresenta una rivoluzione per lo sviluppo di estensioni sicure e performanti, incoraggiando l'adozione di pratiche di sviluppo moderne.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_060.jpg\|300]] | Una nuova generazione di estensioni PostgreSQL sta emergendo, tra cui wrapper supabase, PL/PRQL, pg_graphql e altri, che sfruttano le potenzialità di Rust per migliorare le funzionalità.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_061.jpg\|300]] | Invito a partecipare alla rivoluzione delle estensioni PostgreSQL con Rust, portando il codice vicino ai dati, definendo tipi personalizzati e utilizzando PostgreSQL come piattaforma.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_062.jpg\|300]] | Link utili per esplorare PGRX, un tutorial di 4 ore e provare PostgreSQL Anonymizer, con riferimenti a risorse online e repository GitHub e GitLab.
| ![[FOSDEM 2025/assets/Writing-safe-PostgreSQL-extensions-in-Rust-a-pract/preview_063.jpg\|300]] | La presentazione si conclude con un ringraziamento al pubblico, sottolineando l'importanza di Rust per il futuro delle estensioni PostgreSQL.
## Link
[slides](https://fosdem.org/2025/events/attachments/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/slides/238202/writing_p_EGMYZay.pdf)
[video recording (AV1/WebM)](https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.webm)
[video recording (MP4)](https://video.fosdem.org/2025/ub2252a/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide.av1.mp4)
[video recording subtitle file (VTT)](https://fosdem.org/2025/events/attachments/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/slides/238202/writing_p_EGMYZay.vtt)
[chat room(web)](https://fosdem.org/2025/events/attachments/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/chatroom/web)
[chat room(app)](https://fosdem.org/2025/events/attachments/fosdem-2025-4317-writing-safe-postgresql-extensions-in-rust-a-practical-guide/chatroom/app)