PostgreSQL 17

PostgreSQL 17 is the next PostgreSQL major release, scheduled to be released in late 2024.

Initial commit marking the start of PostgreSQL 17 development is 5bcc7e6d (2023-06-29).

Release schedule and pre-release test versions

CommitFests

Features

  • support for incremental backup (initial commit dc212340)

Source code and build changes

Configuration

  • configuration option --disable-thread-safety removed (commit 68a4b58e)

Source code

  • Code and documentation related to wait events generated automatically (commit fa889284)

Platform support

  • support for AIX removed (commit 0b16bb87)

Backend changes

General

  • database and user names in startup packets no longer truncated (commit 562bee0f) compatibility change
  • WAL summarizer process added (commit 174c4805)
  • internal TIDStore functionality for storing large sets of TIDs added (initial commit 30e14428)

Background workers

  • length of bgw_library_name increased from 96 to 1024 bytes (commit 95784578)]

Character sets and collation

  • collation provider "builtin" added (commit 2d819a08)

Event triggers

Optimizer

  • redundant self-joins can now be removed (commit d3d55ce5) reverted (commit d3d55ce5)

WAL

  • WAL insertion lock acquisition and release optimized (commit 71e4cc6b)

Data type changes

interval

  • support for +infinity/-infinity added (commit 519fc1bd)

JSON

  • following SQL standard JSON functions added (commit 03734a7f):
    • JSON()
    • JSON_SCALAR()
    • JSON_SERIALIZE()
  • following SQL standard JSON query functions added (commit 6185c973):
    • JSON_EXISTS()
    • JSON_QUERY()
    • JSON_VALUE()
  • JSON_TABLE() constructor added (commit de360045)

XML

  • support for parsing XML documents larger than 10MB added (2197d062) reverted (commit f2743a7d)

SQL changes

  • support for named NOT NULL constraints added (commit b0e96f31)
  • support for temporal PRIMARY KEY and UNIQUE constraints added (commit 46a0cd4c) reverted (commit 8aee330a)
  • support for temporal FOREIGN KEY constraints added (commit 34768ee3) reverted (commit 8aee330a)

Modified:

  • ALTER OPERATOR
    • COMMUTATOR, NEGATOR, MERGES, and HASHES attributes can now be set (commit 2b5154be)
  • ALTER STATISTICS
    • ALTER STATISTICS ... SET STATISTICS DEFAULT syntax added (commit 012460ee)
  • ALTER SUBSCRIPTION
    • parameter failover added (commit 776621a5)
  • ALTER SYSTEM
  • ALTER TABLE
    • CONSTRAINT ... NOT NULL ... syntax added (commit b0e96f31)
    • ALTER TABLE ... SET EXPRESSION AS ... syntax added (commit 5d06e99a)
    • ALTER TABLE ... SET STATISTICS DEFAULT syntax added (commit 4f622503)
    • ALTER TABLE ... SET ACCESS METHOD DEFAULT syntax added (commit d61a6cad)
    • ALTER TABLE ... MERGE PARTITIONS ... syntax added (commit 1adf16b8) reverted (commit 3890d90c1508125729ed20038d90513694fc3a7b)
    • ALTER TABLE ... SPLIT PARTITION ... syntax added (commit 87c21bb9) reverted (commit 3890d90c1508125729ed20038d90513694fc3a7b)
  • COPY
    • FORCE_NULL * and FORCE_NOT_NULL * options for COPY FROM added (commit f6d4c9cf)
    • option ON_ERROR for COPY FROM added (initial commit 9e2d8701, renamed from SAVE_ERROR_TO in b725b7ee)
    • option LOG_VERBOSITY added (commit f5a22789)
  • CREATE SUBSCRIPTION
    • parameter failover added (commit 776621a5)
  • CREATE TABLE
    • CONSTRAINT ... NOT NULL ... syntax added (commit b0e96f31)
    • UNIQUE ... WITHOUT OVERLAPS and PRIMARY KEY ... WITHOUT OVERLAPS syntax added (commit 46a0cd4c) reverted (commit 8aee330a)
    • specification of an access method with CREATE TABLE ... USING possible for partitioned tables (commit 374c7a22)
  • EXPLAIN
    • MEMORY option added (commit 5de890e3)
    • SERIALIZE option added (commit 06286709)
  • GRANT
    • MAINTAIN privilege added (commit ecb0fd33)
  • MERGE
    • target relation can be an updatable view (commit 5f2e179b)
    • MERGE ... RETURNING ... support added (commit c649fa24)
    • MERGE ... WHEN NOT MATCHED BY SOURCE support added (commit 0294df2f)

Partitioning changes

  • some kinds of exclusion constraint allowed on partitions (commit 8c852ba9)
  • support for identity columns on partitioned tables added (commit 69958631)
  • an access method can be defined for partitioned tables (commit 374c7a22)

Indexing changes

BRIN

GiST

  • support for Incremental sorts added (commit 625d5b3c)

SP-GiST

  • support for Incremental sorts added (commit 625d5b3c)

System catalog changes

Tables

Modified:

Views

Added:

Modified:

System function changes

Added:

Modified:

Configuration changes

Added:

Modified:

Removed:

Users / roles

Authentication changes

  • support for OpenSSL 1.0.1 removed (commit 8e278b65)

Procedural language changes

PL/pgSQL

  • %TYPE and %ROWTYPE can now be followed by array decoration (commit 5e8674dc)

libpq changes

  • functions for closing portals and statements added (commit 28b57265)
  • function PQchangePassword() added (commit a7be2a6c)
  • function PQsendPipelineSync() added (commit 4794c2d3)
  • various non-blocking query cancellation functions added (commit 61461a30)
  • function PQsocketPoll() added (commit f5e4dedf)
  • function PQsetChunkedRowsMod() added (commit 4643a2b2)

Information schema changes

  • domain_default column removed from element_types view (commit 78806a95)

Replication changes

Replication protocol

  • command ALTER_REPLICATION_SLOT added (commit 73292404)
  • option FAILOVER added to command CREATE_REPLICATION_SLOT (commit 73292404)

Logical replication

  • binary upgrades can now preserve the full state of a subscription (commit 9a17be1e)

Core utilities

Added:

Modified:

  • clusterdb
    • option -a/--all can be combined with option -t/--table (commit 1b49d56d)
  • createdb
    • option --locale-provider accepts additional value builtin (commit 2d819a08)
  • pg_amcheck
    • option --checkunique added (commit 5ae20872)
  • pg_archivecleanup
    • following options extended with long forms (commit dd7c60f1):
      • -d/--debug
      • -n/--dry-run
      • -x/--strip-extension
    • option --clean-backup-history added (commit 3f8c98d0)
  • pg_basebackup
    • option --sync-method added (commit 8c16ad3b)
    • dbname permitted in the provided conninfo string (commit cca97ce6)
    • option -i/--incremental added (commit dc212340)
    • dbname can now be written in the conninfo string via the -R/--write-recovery-conf option (commit a145f424)
  • pgbench
    • COPY used for all client-side data generation (commit e35cc3b3)
    • option --exit-on-abort added (commit 3c662643)
    • meta-command \syncpipeline added (commit 94edfe25)
    • option -d as shortform for --debug replaced by -d/--database option (commit 3ff01b2b)
  • pg_dump
    • option --sync-method added (commit 8c16ad3b)
    • option --filter added (commit a5cf808b)
    • option --exclude-extension added (commit 522ed12f)
  • pg_dumpall
    • option --filter added (commit a5cf808b)
  • pg_receivewal
  • pg_restore
    • performance with parallel restore and many tables improved (commit 9bfd44bb)
    • option --filter added (commit a5cf808b)
    • option --transaction-size added (commit 959b38d7)
  • reindexdb
    • option --all may be used in conjunction with --table, --schema, --index, and --system (commit 24c928ad)
    • option --system  may be used in conjunction with --table, --schema, and --index (commit 24c928ad)
    • option --jobs may be used in conjunction with --index (commit 47f99a40)
  • vacuumdb
    • option -a/--all can now be used in conjunction with --table, --schema, and --exclude-schema (commit 648928c7)

Server utilities

psql changes

  • \drg command added (commit d65ddaca)
  • min_rows parameter added to \watch command (commit f347ec76)
  • default and empty privilege display improved (commit d1379ebf)
  • database reconnections can now be cancelled by SIGINT (commit cafe1056)

Contrib modules

Removed:

Modified:

  • amcheck
    • support for checking unique constraint violation added (commit 5ae20872)
  • dblink
    • remote queries are now interruptible (commit d3c5f37d)
  • ltree
  • pg_buffercache
    • function pg_buffercache_evict() added (commit 13453eed)
  • pgrowlocks
    • labels Share and Key Share changed to For Share and For Key Share (commit 15d5d740)
  • pg_stat_statements
    • savepoint names now displayed as constants (commit 31de7e60)
    • GIDs of two-phase commit commands now displayed as constants (commit 638d42a3)
    • names of DEALLOCATE statements shown as constants bb45156f)
    • columns jit_deform_count and jit_deform_time added to view pg_stat_statements (commit 5a3423ad)
    • CALL parameters now displayed as constants (commit 11c34b34)
    • columns local_blk_read_time and local_blk_write_time added to view pg_stat_statements (commit 5147ab1d)
    • columns stats_since and minmax_stats_since added to view pg_stat_statements (commit dc9f8a79)
  • pg_prewarm
    • modified to use streaming I/O (commit 3a352df0)
  • postgres_fdw
    • support for deparsing semi-joins added (commit 824dbea3)
    • WAIT_EVENT_EXTENSION event replaced by custom wait events (commit d61f2538a39f1dbeead01bc972fca597c769f518)
    • DEFAULT_FDW_TUPLE_COST changed from 0.01 to 0.2 (commit cac169d6)
    • support for deparsing semi-joins added (commit 824dbea3)
  • test_decoding
  • unaccent
    • support for quoted translated characters added (59f47fb9)

Testing

  • backend support for injection points added (initial commit d86d20f0)

pg_regress

  • options set in environment variable PG_TEST_INITDB_EXTRA_OPTS passed to initdb (commit 995d400c)

TAP tests

  • options set in environment variable PG_TEST_INITDB_EXTRA_OPTS passed to initdb (commit 995d400c)

Test modules

Other

  • \v now handled as a whitespace character in various parsers (commit ae6d06f0)
  •