Nuevo driver JDBC moderno para PostgreSQL
Sehrope Sarkini, en colaboración con Claude, ha desarrollado desde cero un nuevo driver JDBC. Por el momento, se encuentra en fase de pre-lanzamiento. Este es un fragmento de su blog:
PostgreSQL primero.
La API nativa está diseñada alrededor del protocolo de comunicación y las funcionalidades propias de PostgreSQL. No parte del mínimo común denominador que JDBC debe ser compatible con prácticamente cualquier base de datos. Si PostgreSQL ofrece una funcionalidad, la API debería permitir acceder a ella directamente.
JDBC como capa, no como base.
La compatibilidad completa con JDBC es un objetivo a largo plazo. Actualmente ya existe una capa java.sql.* que registra un Driver y proporciona Connection, PreparedStatement, ResultSet, DatabaseMetaData, DataSource y XA. No obstante, esta capa se construye sobre la API nativa, en lugar de determinar su estructura. Y ese orden es importante. Cuando los supuestos de JDBC pasan a formar parte del núcleo de ejecución, es prácticamente imposible eliminarlos después.
Hilos virtuales para E/S.
Durante años, hablar de un «driver rápido» suponía utilizar una API asíncrona o reactiva, ya que la alternativa consistía en asignar un hilo a cada conexión. Con Java 21, esta disyuntiva desaparece. pg-java utiliza código convencional con un modelo bloqueante, pero está diseñado para evitar en todo momento que un hilo portador (carrier thread) quede fijado, lo que principalmente implica emplear ReentrantLock en lugar de synchronized en las operaciones de E/S. De este modo, es posible gestionar miles de conexiones mediante hilos virtuales sin necesidad de un event loop ni de una API basada en callbacks. Además, resulta mucho más sencillo entender cómo funciona y cómo utilizarlo.
Streaming por defecto.
El mecanismo básico para ejecutar consultas es un cursor de tipo pull. Este lee de la conexión únicamente los datos necesarios para obtener el siguiente registro, sin almacenar nunca en memoria todo el conjunto de resultados. forEach, map, collect y otros métodos similares son adaptadores que se apoyan en este mecanismo, no una ruta de lectura independiente.

