Query syntax and vacuum behavior

The extension to the SQL standard that gets the most attention is that subqueries in FROM no longer require an alias. Porting queries from Oracle gets noticeably easier as a result.

Anti-wraparound autovacuum runs are the other longstanding pain point addressed here: when v16 has to modify a block, it will freeze all rows in that block if possible, which should reduce the impact of those massive runs.

Privileges, I/O and access control

The CREATEROLE property of a user is now secure. In earlier versions it could not be handed out, since a user holding it could easily abuse it to become a superuser; that is no longer possible. Some observers treated the old behavior as a CVE-level security problem, though the PostgreSQL developers did not.

Direct I/O gets its first, tentative support through the debug_io_direct parameter. It is not meant for production at this point, but probably will be in the future.

Pattern matching in pg_hba.conf can now be used for database and role names, with such patterns required to begin with a slash (/), adding flexibility to host-based authentication rules.

On the client side, libpq can specify which authentication methods it finds acceptable. That blocks an attack in which someone impersonates the server and asks for an insecure method such as password.

A new system view, pg_stat_io, shows which tables cause I/O — especially informative when track_io_timing = on.

Text handling and dump compression

Integer constants can be written in hexadecimal, octal or binary, for example 0x42F, 0o273 and 0b100101.

COPY FROM accepts a string that makes PostgreSQL substitute the column default value; whenever that string appears in the input data, a NULL value is inserted instead.

ICU collation support is enhanced with rules for building a customized sort order. Moving to ICU collations soon is worthwhile: they sidestep some tricky problems and are slated to become the default in future versions.

pg_dump can now use the lz4 and zstd compression methods, both of which perform much better than the default.

Replication topologies

A streaming replication standby can now act as a logical replication publisher, which opens the door to more elaborate replication architectures.

Logical replication also permits cycles with disabled statements. Previously such cycles produced an "echo chamber" effect, with the same insert, update or delete statement travelling back and forth forever; the new behavior lets you stop sending statements that arrived via logical replication, breaking the loop. It is a first step toward multi-master replication, but conflict resolution is not there yet.

The fourteenth feature, and why it is missing

The list above holds thirteen items. The fourteenth was a new predefined role, pg_maintain, which let non-superusers run VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX, and LOCK TABLE on all tables.

It was reverted because it had problems.

Testing the beta

PostgreSQL 16 beta testing is under way. Applications can be tried against PostgreSQL v16 Beta 2 now, with a reasonable expectation of not being hit by a bug — and anyone who finds a problem at this stage has the full attention of the PostgreSQL developers. By the time v16 ships in the fall, confidence that it works for a given workload will be much higher. Production systems are explicitly out of scope for now.