>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Rust

Por qué reescribir Postgres en Rust

Imagina que decides reconstruir el motor de un auto clásico, pero en lugar de piezas originales usas piezas impresas en 3D de titanio. Eso es aproximadamente lo que está haciendo el proyecto pgrust. Los desarrolladores tomaron Postgres 18.3 y comenzaron a reescribir metódicamente sus internos en Rust.

Suena a locura o a un experimento estudiantil, pero los números dicen lo contrario. El proyecto ya supera más de 46,000 pruebas de regresión del Postgres original. No es solo una "base de datos inspirada en", sino un intento de crear un reemplazo binariamente compatible que entiende los mismos archivos de datos y las mismas consultas.

Qué es este proyecto

pgrust es una renovación completa del núcleo de PostgreSQL. La idea principal de su autor, malisper, es que el código C original de Postgres se ha vuelto demasiado complejo a lo largo de décadas para cambios radicales. Implementar multi-threading o nuevos mecanismos de almacenamiento allí es una tarea que tomaría años de discusiones en listas de correo.

Rust aquí sirve no solo como un "lenguaje seguro", sino como una herramienta para iteración rápida. Los desarrolladores usan asistentes de IA para acelerar el puerto, pero controlan estrictamente los resultados a través de las pruebas de referencia de Postgres. Si la base de datos original lanza un error en una consulta SQL mal formada, pgrust debe lanzar exactamente el mismo error.

Cómo pgrust difiere del original

La parte más interesante está en los planes y los prototipos ya implementados. El README menciona una nueva versión que aún no se ha publicado públicamente, pero los resultados son intrigantes.

En lugar del clásico modelo de "un proceso por conexión", que nos obliga a usar pgbouncer u otros proxies, pgrust está cambiando a hilos. Esto inmediatamente da un gran impulso en cargas de trabajo transaccionales. Según las mediciones de los autores, esta arquitectura funciona 50% más rápido que el original.

Para análisis, los números son aún más impresionantes: se promete una aceleración de 300x. Los desarrolladores apuntan a un rendimiento a nivel de Clickhouse mientras se mantienen dentro de la interfaz familiar de Postgres.

Detalles técnicos y compatibilidad

El proyecto mantiene compatibilidad de disco. Puedes tomar un directorio de datos existente de Postgres 18.3 y "apuntar" pgrust hacia él. Tomará los archivos y comenzará a trabajar.

Para compilar desde el código fuente, necesitarás el conjunto estándar para trabajar con Postgres: icu4c, openssl y libpq. El proceso es familiar para los desarrolladores de Rust:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres

Un detalle interesante: al iniciar, tienes que aumentar manualmente los límites del stack (ulimit -s 65520), porque algunas operaciones de Postgres son muy hambrientas de memoria en el stack, y el runtime de Rust se comporta de forma más modesta por defecto.

Qué sigue en la hoja de ruta

La hoja de ruta del proyecto parece la lista de deseos de todo administrador de bases de datos:

  • Pool de conexiones integrado (adiós, pgbouncer).
  • Experimentos con almacenamiento sin Vacuum. Si esto se puede implementar, pgrust resolverá uno de los problemas más "dolorosos" de Postgres.
  • Restricciones para consultas mal hechas. Esto es especialmente relevante ahora, cuando las redes neuronales frecuentemente generan SQL sin mucha preocupación por los índices y los planes de ejecución.
  • Ramificación rápida de datos.

¿Vale la pena probar

En este momento, pgrust no está listo para producción. Los propios autores lo admiten honestamente. Extensiones como PL/Python o PL/Tcl aún no son compatibles, y el rendimiento en la rama pública aún no ha sido completamente optimizado.

Sin embargo, este es un patio de juegos ideal para experimentos. Si siempre quisiste profundizar en las entrañas de un DBMS pero te asustaba el enorme código C, pgrust es tu oportunidad. El código Rust es un orden de magnitud más fácil de leer y modificar.

Puedes probar el proyecto a través de Docker con un solo comando:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

Esto iniciará un contenedor con pgrust y abrirá el psql estándar dentro. Para quienes no quieren descargar nada, hay una demo en el sitio web oficial que se ejecuta en WebAssembly, funcionando directamente en el navegador.

El proyecto parece uno de los desafíos de código abierto más ambiciosos en los últimos tiempos. Incluso si pgrust no reemplaza a Postgres en los próximos años, definitivamente se convertirá en un campo de pruebas para tecnologías que luego podrían migrar a la rama principal del "elefante".

Proyectos relacionados