---
title: "New Modern JDBC Driver for PostgreSQL"
url: https://daily.dev/posts/new-modern-jdbc-driver-for-postgresql-iyswltsgp
source_url: https://www.postgresql.org/about/news/new-modern-jdbc-driver-for-postgresql-3354
type: article
source: "PostgreSQL"
published: 2026-08-12T07:35:55.362Z
updated: 2026-08-12T07:36:16.232Z
tags: ["java", "postgresql"]
reading_time: 2
upvotes: 26
comments: 1
language: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# New Modern JDBC Driver for PostgreSQL

**[PostgreSQL](https://daily.dev/sources/postgres)** · 2 min read · 26 upvotes · 1 comments

## Summary

A new JDBC driver for PostgreSQL called pg-java has been written from scratch by Sehrope Sarkini (with assistance from Claude). Currently in pre-release, it takes a PostgreSQL-native approach rather than designing around JDBC's lowest-common-denominator abstractions. The JDBC compliance layer sits on top of the native API rather than dictating its shape. Leveraging Java 21 virtual threads, it uses ordinary blocking-style code with ReentrantLock instead of synchronized around I/O, enabling thousands of connections without an event loop or callback API. The core query primitive is a pull cursor that reads only enough data to produce the next row, avoiding full result set buffering.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.postgresql.org/about/news/new-modern-jdbc-driver-for-postgresql-3354>

## Questions this post answers

### How does the new pg-java PostgreSQL JDBC driver handle concurrency without an async API?

pg-java uses Java 21 virtual threads with ordinary blocking-style code, carefully avoiding carrier thread pinning by using ReentrantLock instead of synchronized around I/O. This allows thousands of connections to run concurrently without an event loop or callback API, making the code significantly easier to reason about compared to traditional async or reactive drivers.

_Java developers choosing between async and virtual-thread approaches for PostgreSQL connections track developments like pg-java on daily.dev._

### What is the core query execution model in pg-java?

The core query primitive in pg-java is a pull cursor that reads exactly enough data off the wire to produce the next row, never buffering a whole result set. Higher-level operations like forEach, map, and collect are adapters built on top of this cursor, not a separate read path.

_Developers optimizing PostgreSQL query performance in Java can follow pg-java's progress and related database driver news on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@agustinbarrientos** · 1 upvotes

> What happens to the cursor when a virtual thread is canceled while the driver is waiting on the next batch?

## Similar posts on daily.dev

- [PostgreSQL JDBC 42.7.10 Released](https://daily.dev/posts/postgresql-jdbc-42-7-10-released-8petdqguv) · PostgreSQL · 1 upvotes · 0 comments

---

Tags: [#java](https://daily.dev/tags/java), [#postgresql](https://daily.dev/tags/postgresql)

[View this post on daily.dev](https://daily.dev/posts/new-modern-jdbc-driver-for-postgresql-iyswltsgp)
