Postgres-wasm è il nome di un progetto rilasciato sotto licenza Open Source grazie al quale PostgreSQL è stato portato su WebAssembly. Si tratta di una soluzione sviluppata grazie ad una collaborazione tra Supabase, provider di database in Cloud, e Snaplet, società specializzata nella programmazione per i database.
Cos'è Postgres-wasm
Non si tratta del primo progetto di questo tipo, questa estate infatti il team di CrunchyData ha lanciato una demo della sua proposta per il porting di PostgreSQL in WebAssembly che ha ispirato gli stessi autori di Postgres-wasm, in quel caso però non si trattava di una piattaforma Open Source.
Grazie a Postgres-wasm, PostgreSQL può essere eseguito direttamente tramite browser per la navigazione Web, a questo scopo è stata utilizzata la distribuzione Linux Buildroot, caratterizzata da dimensioni estremamente ridotte, e l'emulatore v86 che permette di replicare il funzionamento di un terminale x86 in Wasm.
Nel complesso tutto il progetto è contenuto in una singola istantanea delle dimensioni di 12MB con cui eseguire un server PostgreSQL.
Come ammesso dagli sviluppatori di Postgres-wasm, le performance in fase di esecuzione non sono molto elevate ma l'obbiettivo di rendere PostgreSQL 14.5 utilizzabile da browser con tanto di interfaccia da linea di comando psql
è stato raggiunto con successo.
Caratteristiche e limiti di Postgres-wasm
La persistenza dei dati è stata affidata a IndexedDB che è sostanzialmente un'API (Application Programming Interface) per l'implementazione di database su browser, si possono inoltre caricare dump e CSV da manipolare direttamente tramite l'emulatore.
Ma quale potrebbe essere l'utilità di una versione di PostgreSQL accessibile direttamente da browser? Tra gli ambiti di applicazione ipotizzabili vi è per esempio quella delle didattica, con la possibilità di offrire un'installazione del DBMS (o qualcosa di molto simile) senza dover configurare un ambiente completo per i test.
L'idea di utilizzare una Virtual Machine per il funzionamento di Postgres-wasm non è forse ottimale dal punto di vista delle prestazioni, probabilmente una compilazione diretta in Wasm sarebbe stata più usabile ma un'impostazione di questo genere avrebbe posto dei problemi di dipendenze tra PostgreSQL e sistema operativo ospitante.