PostgreSQL 19 RC1: JIT off by default, LZ4 for TOAST, GA on 19 November
On 15 October 2026 the PostgreSQL Global Development Group published the first release candidate of PostgreSQL 19. The final release is planned for 19 November, with a second candidate on 12 November. The announcement lists bug fixes since Beta 4 and a few behaviour changes. What changes for operators is in the release notes for 19.
Defaults that change
Under incompatibilities the release notes say JIT is disabled by default. They add that sites running many large analytical queries must now enable it by hand. If you lived with the old default, reporting queries that benefited from compilation are where you will notice. The way to find out for your own load is to run the same queries with jit = on and jit = off on a test copy.
The second change is default_toast_compression, which moves from pglz to lz4. By our reading this applies to large values written from now on; data already stored is not converted by a new default. You can measure the effect on tables with big text, JSON or bytea columns, through table size and CPU load on writes.
Two smaller numbers sit in the same list. max_locks_per_transaction goes from 64 to 128, and standard_conforming_strings is forced on. Dumps made with standard_conforming_strings = off may no longer load.
What pg_upgrade refuses
For the step from an older version the release notes name three routes: dump and restore with pg_dumpall, pg_upgrade, or logical replication. pg_upgrade gets two new blockers:
- Clusters with
btree_gistindexes oninetorcidrare rejected, because those operator classes can exclude rows that should be returned. - Clusters with line breaks (CR or LF) in database, role and tablespace names are rejected, for security reasons.
On the plus side, pg_upgrade now handles tablespaces inside the data directory and copies large-object metadata faster.
New features worth a test
REPACK replaces VACUUM FULL and CLUSTER; the old commands stay. With the CONCURRENTLY option it rebuilds a table without an exclusive lock, and a new setting, max_repack_replication_slots, goes with it. For tables you could only tidy in a maintenance window this is the most interesting item. The RC announcement lists several fixes for exactly this feature, so it is young.
The pg_plan_advice module is meant to stabilise and steer planner decisions, and pg_stash_advice attaches advice to individual query IDs. Logical replication can be enabled without a restart when wal_level is replica, and the new variable effective_wal_level shows what is really in effect.
Where we stand
Our Postgres instances run version 17, among them the shared database server and the database behind our mail gateways. A release candidate does not belong in production. The wait until 19 November is still useful: copy the cluster, run pg_upgrade against the copy, then time your key queries with both JIT settings. The number you want at the end is your own.
heise covers the RC briefly in its developer roundup and gives 19 November as the final release date as well. The JIT and LZ4 details are not in that piece; they come only from the project's release notes.
Further reading
- PostgreSQL 19 RC 1 Released (15 Oct 2026)
- PostgreSQL 19 Release Notes
- heise developer: What Postgres 19, Python 3.16 and Symfony 8.2 bring (17 Oct 2026, in German)
- Simple Icons: postgresql.svg (logo, CC0)
When does PostgreSQL 19 ship?+
The project announcement gives 19 November 2026 as the planned date for the final release, with a second release candidate on 12 November. If problems turn up, the date can slip.
Which defaults change?+
According to the release notes JIT is disabled by default, and the default TOAST compression moves from pglz to lz4. Sites that run many large analytical queries have to switch JIT back on themselves. Both are changes to defaults, not to data already stored.
Can I use pg_upgrade from an older version?+
Yes, the release notes name pg_upgrade, pg_dumpall or logical replication as routes. pg_upgrade refuses clusters with btree_gist indexes on inet or cidr and clusters with line breaks in database, role or tablespace names. You can check for both before you start.
senn-tech