← All articles

PostgreSQL 17 in production: three features we liked

18 March 20262 min read

Postgres 17 shipped in September 2024. Six months after upgrading our projects, three things that really matter.

Postgres 17 shipped in September 2024. Six months after upgrading our larger projects, three features that entered practice.

1. JSON_TABLE

Postgres finally has standard SQL/JSON syntax to extract tables from JSON. For semi-structured data (logs, events, external API payloads), JSON_TABLE is the difference between "30 SQL lines" and "5".

SELECT * FROM JSON_TABLE(
  events_data,
  '$[*]'
  COLUMNS (
    user_id INT PATH '$.user.id',
    action TEXT PATH '$.action',
    ts TIMESTAMP PATH '$.timestamp'
  )
);

2. Much faster vacuum

Postgres 17 internally changes the vacuum process: a new memory layout for dead tuples cuts I/O and CPU. On our biggest dbs (50+ GB) nightly vacuum went from 38 minutes to 14. On write-heavy tables, noticeable.

3. Improved COPY

New ON_ERROR and LOG_VERBOSITY options let you import data with corrupted rows without stopping the whole operation. For periodic CSV imports (ERP → Postgres), valuable.

Not yet in production

  • Logical replication with failover: useful on multi-region scenarios, not urgent for us.
  • Incremental backup (built-in, replacing some pgBackRest pieces): test before adopting.

Migration

16 to 17 broke nothing on our 12 projects. For those still on Postgres 14 or 15 (looming EOL): move within the year. The performance and feature delta justifies the work.