Postgres also adds UPDATE and DELETE FOR PORTION OF, continuing work around temporal use cases. Time is one of the most common dimensions in real applications, and better temporal syntax in core SQL is a welcome direction.
Expanded RANDOM() temporal functions. (Thanks to our own Paul Ramsey and Greg Sabino Mullane for work on this one.)
Performance improvements across the board
The planner and executor continue to get steady work in Postgres 19. Special thanks to Snowflake's Tom Lane for his efforts in Postgres 19 in performance and many other areas.
There are improvements around anti-joins, semi-joins, constant folding, incremental sort with append paths, aggregate processing before joins, join selectivity computation, function statistics and more.
The easy thing to do here is list planner changes and call it done. But the more useful takeaway is this: Postgres keeps getting better at recognizing the shape of common queries and doing less unnecessary work.
Some aggregate processing can now happen before joins, which can reduce the number of rows processed. More NOT IN and LEFT JOIN cases can become efficient anti-joins. Memoize has more visibility in EXPLAIN. Sort performance improves with radix sort. Foreign key constraint checks get faster. COPY FROM text and CSV input can use SIMD instructions.
These are not always features you change application code to use. In many cases, you upgrade and Postgres simply has a better chance of doing the right thing.
That is one of the best kinds of database improvements.
Why Postgres 19 feels important
The thing that stands out to me about Postgres 19 is not one single feature. It is the breadth.
There is something for application developers: graph queries, better SQL syntax, window function improvements, better upsert behavior.
There is something for operators: REPACK CONCURRENTLY, better autovacuum, better monitoring, online checksum changes, more replication visibility.
There is something for performance-minded folks: planner improvements, SIMD improvements, asynchronous I/O visibility, faster foreign key checks, better sorts.
There is something for people building on top of Postgres: new hooks, planner advice modules, extension improvements, FDW stats retrieval and continued investment in the extension ecosystem.
That breadth is one of the reasons Postgres keeps winning. It is not just getting better for one workload or one persona. It is getting better as an application database, an operational database, an analytical database, an extensible database and a platform.
Postgres 19 is not GA yet, so now is the time to test. Try your application. Run your migration tests. Check your extensions. Look at plans for your most important queries. Exercise logical replication if you depend on it. Run your maintenance workflows. See what breaks while there is still time to fix it.
Postgres releases get better because people test them against real workloads.
And based on what is already in Postgres 19 beta, there is a lot here worth testing.