← All articles

PostgreSQL 17 in production: the features we actually use

20 May 20262 min read

Since 17 hit LTS we ran it on our largest projects. What the upgrade was worth and what stayed on paper.

PostgreSQL 17 has been in production on our larger projects since early 2026. Six months is enough to separate the release marketing from operational reality.

Measurable wins

Incremental vacuum

The new VACUUM memory management cut maintenance time on large tables (10M+ rows) by 30-40%. On one client with a 200M-row audit log, it went from 2h nightly to 1h. For anyone with tight maintenance windows, this single feature justifies the upgrade.

JSON_TABLE finally standard

JSON_TABLE turns a JSON column into a relational table. We use it heavily for semi-structured data from external integrations (Stripe webhooks, B2B partner payloads). No more nested CTEs.

Improved incremental sort

Queries with ORDER BY a, b where only a is indexed: the planner now picks incremental sort much more aggressively. On dashboards with mixed sorts, 20-50% response-time reduction without touching the code.

Features we haven't touched yet

BRIN multi-minmax

Interesting for huge historical tables, but real use cases on our projects are rare. Partitioning by date is simpler.

Streaming I/O improvements

Mainly benefits sequential scans on tables that don't fit in RAM. On our workloads I/O is rarely the bottleneck. For pure analytics workloads, worth testing.

What changes coming from Postgres 15

Upgrade mostly smooth: pg_upgrade --link in 5-10 minutes on a 100GB DB. Breaking changes are minimal — a few deprecated plpgsql functions, nothing blocking.

Watch your extensions: pg_repack, postgis, timescaledb all have different update timelines. Check compatible versions before planning.

What did NOT improve

  • Replication lag on write-heavy loads: no quality jump despite the "20% performance gain" tagline.
  • Logical replication on DDL: still needs workarounds. Promised for 18 (maybe).

Bottom line

If on 14 or 15: upgrade strongly recommended by mid-2026. If on 16: waiting for 18 may make sense, unless you specifically need faster VACUUM or JSON_TABLE.