PostgreSQL 17 Released!

The PostgreSQL Global Development Group
today announced the release of PostgreSQL 17,
the latest version of the world’s most advanced open source database.

PostgreSQL 17 builds on decades of open source development, improving its
performance and scalability while adapting to emergent data access and storage
patterns. This release of PostgreSQL adds
significant overall performance gains, including an overhauled memory management
implementation for vacuum, optimizations to storage access and improvements for
high concurrency workloads, speedups in bulk loading and exports, and query
execution improvements for indexes. PostgreSQL 17 has features that benefit
brand new workloads and critical systems alike, such as additions to the
developer experience with the SQL/JSON JSON_TABLE command, and enhancements to
logical replication that simplify management of high availability workloads and
major version upgrades.

“PostgreSQL 17 highlights how the global open source community, which drives the
development of PostgreSQL, builds enhancements that help users at all stages of
their database journey,” said Jonathan Katz, a member of the PostgreSQL core
team. “Whether it’s improvements for operating databases at scale or
new features that build on a delightful developer experience, PostgreSQL 17
will enhance your data management experience.”

PostgreSQL, an innovative data management system known for its reliability,
robustness, and extensibility, benefits from over 25 years of open source
development from a global developer community and has become the preferred open
source relational database for organizations of all sizes.

System-wide performance gains

The PostgreSQL vacuum
process is critical for healthy operations, requiring server instance resources
to operate. PostgreSQL 17 introduces a new internal memory structure for vacuum
that consumes up to 20x less memory. This improves vacuum speed and
also reduces the use of shared resources, making more available for your
workload.

PostgreSQL 17 continues to improve performance of its I/O layer. High
concurrency workloads may see up to 2x better write throughput due to
improvements with write-ahead log
(WAL) processing.
Additionally, the new streaming I/O interface speeds up sequential scans
(reading all the data from a table) and how quickly
ANALYZE can update
planner statistics.

PostgreSQL 17 also extends its performance gains to query execution.
PostgreSQL 17 improves the performance of queries with IN clauses that use
B-tree
indexes, the default index method in PostgreSQL. Additionally,
BRIN indexes now support
parallel builds. PostgreSQL 17 includes several improvements for query planning,
including optimizations for NOT NULL constraints, and improvements in
processing common table expressions
(WITH queries). This
release adds more SIMD (Single Instruction/Multiple Data) support for
accelerating computations, including using AVX-512 for the
bit_count
function.

Further expansion of a robust developer experience

PostgreSQL was the first relational database to add JSON support (2012),
and PostgreSQL 17 adds to its implementation of the SQL/JSON standard.
JSON_TABLE
is now available in PostgreSQL 17, letting developers convert JSON data into a
standard PostgreSQL table. PostgreSQL 17 now supports SQL/JSON constructors
(JSON, JSON_SCALAR, JSON_SERIALIZE) and
query functions
(JSON_EXISTS, JSON_QUERY, JSON_VALUE), giving developers other ways of
interfacing with their JSON data. This release adds more
jsonpath expressions,
with an emphasis of converting JSON data to a native PostgreSQL data type,
including numeric, boolean, string, and date/time types.

PostgreSQL 17 adds more features to MERGE,
which is used for conditional updates, including a RETURNING clause and the
ability to update views.
Additionally, PostgreSQL 17 has new capabilities for bulk loading and data
exporting, including up to a 2x performance improvement when exporting large rows
using the COPY command.
COPY performance also has improvements when the source and destination
encodings match, and includes a new option, ON_ERROR, that allows an import to
continue even if there is an insert error.

This release expands on functionality both for managing data in partitions and
data distributed across remote PostgreSQL instances. PostgreSQL 17 supports
using identity columns and exclusion constraints on
partitioned tables.
The PostgreSQL foreign data wrapper
(postgres_fdw), used
to execute queries on remote PostgreSQL instances, can now push EXISTS and
IN subqueries to the remote server for more efficient processing.

PostgreSQL 17 also includes a built-in, platform independent, immutable
collation provider that’s guaranteed to be immutable and provides similar
sorting semantics to the C collation except with UTF-8 encoding rather than
SQL_ASCII. Using this new collation provider guarantees that your text-based
queries will return the same sorted results regardless of where you run
PostgreSQL.

Logical replication enhancements for high availability and major version upgrades

Logical replication
is used to stream data in real-time across many use cases. However, prior to
this release, users who wanted to perform a major version upgrade would have to
drop logical replication slots, which requires resynchronizing data
to subscribers after an upgrade. Starting with upgrades from PostgreSQL 17,
users don’t have to drop logical replication slots, simplifying the upgrade
process when using logical replication.

PostgreSQL 17 now includes failover control for logical replication, making it
more resilient when deployed in high availability environments. Additionally,
PostgreSQL 17 introduces the
pg_createsubscriber
command-line tool for converting a physical replica into a new logical replica.

More options for managing security and operations

PostgreSQL 17 further extends how users can manage the overall lifecycle of
their database systems. PostgreSQL has a new TLS option, sslnegotiation, that
lets users perform a direct TLS handshakes when using
ALPN
(registered as postgresql in the ALPN directory). PostgreSQL 17 also adds the
pg_maintain predefined role,
which gives users permission to perform maintenance operations.

pg_basebackup, the
backup utility included in PostgreSQL, now supports incremental backups and adds
the pg_combinebackup
utility to reconstruct a full backup. Additionally,
pg_dump includes a new
option called --filter that lets you select what objects to include when
generating a dump file.

PostgreSQL 17 also includes enhancements to monitoring and analysis features.
EXPLAIN now shows the
time spent for local I/O block reads and writes, and includes two new options:
SERIALIZE and MEMORY, useful for seeing the time spent in data conversion
for network transmission, and how much memory was used. PostgreSQL 17 now
reports the progress of vacuuming indexes,
and adds the pg_wait_events
system view that, when combined with pg_stat_activity,
gives more insight into why an active session is waiting.

Additional Features

Many other new features and improvements have been added to PostgreSQL 17 that
may also be helpful for your use cases. Please see the
release notes for a
complete list of new and changed features.

About PostgreSQL

PostgreSQL is the world’s most advanced open
source database, with a global community of thousands of users, contributors,
companies and organizations. Built on over 35 years of engineering, starting at
the University of California, Berkeley, PostgreSQL has continued with an
unmatched pace of development. PostgreSQL’s mature feature set not only matches
top proprietary database systems, but exceeds them in advanced database
features, extensibility, security, and stability.

Links