PostgreSQL 15

PostgreSQL 15 is the latest major PostgreSQL version, released on October 13th 2022.

Minor version releases

Backend changes


Source configuration

  • option --with-zstd added (initial commit 6c417bbc)


  • PostgreSQL forks can now explicitly declare their ABI as incompatible (commit d6d1dfcc)



  • execution of monotonic window functions improved (commit 9d9c02cc)







  • execution of monotonic window functions improved (commit 9d9c02cc)


  • option --forkboot renamed to --forkaux (commit 50017f77)
  • CREATE privilege on the public schema is now always revoked by default from PUBLIC, and it is now owned by the pg_database_owner role (commit b073c3cc)
  • option -C now displays runtime-computed GUCs (commit 0c39c292)


  • unlogged sequences added (commit 344d62fb)

Statistics collector

  • replaced by shared memory implementation (commit 5891c7a8)


  • VACUUM VERBOSE and autovacuum operations now report the details of how relfrozenxid and relminmxid were advanced (commit 872770fd)


  • full-page writes can be compressed with:
  • support for custom resource managers added (commit 5c279a6d)
  • support for WAL prefetching added (commit 5dc0418f)

Data type changes


  • new type category for "internal use" types added (commit 07eee5a0)


  • JSON
    • following SQL/JSON standard constructors added (commits f79b803d and  f4fb45d1): withdrawn (commit 2f2b18bd)
      • JSON_ARRAY()
      • JSON_OBJECT()
    • JSON_TABLE() constructor added (commit 4e34747c) withdrawn (commit 2f2b18bd)
    • following SQL/JSON query functions added (commit 1a36bc9d) withdrawn (commit 2f2b18bd):
      • JSON_EXISTS()
      • JSON_QUERY()
      • JSON_VALUE()
    • scale can be negative or greater than precision (commit 085f931f)
  • xid
    • support for MIN() and MAX() aggregates added (commit 400fc6b6)

Partitioning changes

SQL changes


  • equality of NULL values in UNIQUE constraints configurable via UNIQUE [ NULLS [ NOT ] DISTINCT ] option (commit 94aa7cc5)
  • IS JSON predicate added (commit 33a37760) withdrawn (commit 2f2b18bd)
  • following SQL standard JSON functions added (commits 606948b0 and 49082c2c) withdrawn (commit 2f2b18bd):
    • JSON()



System catalog changes







System function changes




Configuration changes


  • GUC flag GUC_RUNTIME_COMPUTED added for displaying runtime-computed GUCs (commit 0c39c292)




Users / roles

Procedural language changes


  • minimum required version is now Perl 5.8.3 (commit 92e6a98c)


  • enforcement of variable CONSTANT markings improved (commit ccd10a9b)


  • support for Python 2 removed (initial commit 19252e8e)


  • trigger handler example added (commit 2f4d0d67)


Replication changes

Replication protocol

  • revised BASE_BACKUP command with more flexible syntax (commit 0ba281cb):
    • PROGRESS [ boolean ] (previously did not accept a boolean value)
    • CHECKPOINT { 'fast' | 'spread' } (supersedes the previous FAST option)
    • WAL [ boolean ] (previously did not accept a boolean value)
    • WAIT [ boolean ] (supersedes the previous WAIT option)
    • TABLESPACE_MAP [ boolean ] (previously did not accept a boolean value)
    • VERIFY_CHECKSUMS [ boolean ] (supersedes the previous NOVERIFY_CHECKSUMS option)
  • TWO_PHASE option added to CREATE_REPLICATION_SLOT (commit cda03cfe)
  • BASE_BACKUP command revised with more flexible syntax (commit 0ba281cb)
  • IDENTIFY_SYSTEM no longer needs to be executed before START_REPLICATION (commit 8e7811e9)

Logical replication

  • support for prepared transactions added (commit a8fd13ca)
  • support for for streaming prepared transactions added (commit 63cf61cd)
  • support for publishing all tables of a schema added (commit 5a283246)
  • support for logical decoding of sequences added (commit 0da92dc5)
  • support for row filters added (commit 52e4f0cd)
  • subscriptions can optionally be disabled on error (commit 705e20f8)
  • support for specifying individual table columns added (commit 923def9a)
  • consistent logical replication of values effected by GUCs DateStyle, IntervalStyle and extra_float_digits enforced  (commit f3d4019d)

libpq changes

  •  support for IPv4 and IPv6 addresses in a server's Subject Alternative Names added (commit c1932e54)
  • PQcancel() now uses the PGconn's tcp_user_timeout and tcp_keepalives_{count|idle|interval} settings (commit 5987feb7)
  • PQsslAttribute(NULL, "library") returns the name of the SSL library in use without requiring a connection handle (commit ebc8b7d4)

Core utilities

  • createdb
    • --icu-locale option added (commit f2553d43)
    • --locale-provider option added (commit f2553d43)
    • --strategy option added (commit 9c08aea6)
  • pg_basebackup
    • new COPY subprotocol implemented (commit cc333f32)
    • option -t/--target added (commit 3500ccc3)
    • option --compress extended to accept a compression method and an optional compression level (commit 5c649fe1)
    • option --compress can accept client-gzip or server-gzip as well as gzip (commit 0ad80329)
    • option --compress can accept lz4 or server-lz4 (commit dab29847)
    • option --compress can accept client-lz4 (commit 751b8d23)
    • option --compress can accept zstd, client-zstd or server-zstd (commit 7cf085f0)
    • option --compress can accept (client|server)-zstd:workers=N to provide parallel backup using multiple zstd workers (commit 51c0d186)
  • pgbench
    • COPY FREEZE used for faster benchmark table population (commit 06ba4a63)
    • following options added (commit 4a39f87a):
      • --max-tries
      • --failures-detailed
      • --verbose-errors
  • pg_dump
  • pg_dumpall
  • pg_receivewal
    • option --compression extended to support method[:detail] syntax (commits d62bcc8b and 042a923a)
    • support for LZ4 compression added (commit babbbb59)
    • can now stream from a slot's restart LSN (commit f61e1dd2)
  • pg_recvlogical
    • option --two-phase added (commit cda03cfe)
  • pg_restore
    • option --no-table-access-method added (commit 21586288)

Server utilities

  • initdb
    • option --icu-locale added (commit f2553d43)
    • option --locale-provider added (commit f2553d43)
  • pg_resetwal
    • option -u/--oldest-transaction-id added (commit 74cf7d46)
  • pg_rewind
    • option --config-file added (commit 0d5c3875)
  • pg_upgrade
    • option -N/--no-sync added (commit 3d5ffccb)
    • filenode and tablespace OIDs preserved (commit 9a974cbc)
    • postgres and template0 database OIDs preserved (commit aa010514)
    • files generated by pg_upgrade will now be stored in the upgraded cluster's data directory under pg_upgrade_output.d (commit 38bfae36)
    • all databases which cannot be connected to will now be listed (commit 26ebb0e2)
    • progress status will not be emitted if output is not a tty (commit 27b02e07)
    • support for upgrading from versions older than PostgreSQL 9.2 removed (commit e469f0aa)
  • pg_waldump
    • option --rmgr can be specified multiple times (commit c8bf5098)
    • short option for --block changed from -k to -B (commit 52b55684)
    • short option for --relation changed from -l to -R (commit 52b55684)
    • option --fork now accepts the fork name, not the fork number (commit 52b55684)
    • stats summary now emitted on receipt of SIGINT (commit f2c52eeb)
    • filtering by RelFileNode, BlockNumber, ForkNum and FPW added (commit 127aea2a)


Contrib modules



  • amcheck
    • verify_heapam() now supports sequences (commit c3b011d9)
    • additional TOAST pointer checks (commit bd807be6)
  • btree_gist
    • bool opclass added to allow creating GiST indexes on boolean columns (commit 57e3c516)
  • pgcrypto
    • now only built if OpenSSL support is configured (commit db7d1a7b)
  • postgres_fdw
    • support for parallel commit added (commit 04e706d4)
    • CASE expressions can be pushed to the remote server (commit 5d44fff0)
    • remote connection's application_name can be set via GUC postgres_fdw.application_name (commit 449ab635)
    • postgres_fdw.application_name can include certain escape sequences (commits 6e0cb3de and 94c49d53)
    • report warning when timeout expiration occurs while retrieving a query result (commit 815d61fc)
  • pg_stat_statements
    • columns temp_blk_read_time and temp_blk_write_time added to view pg_stat_statements for tracking I/O timing for temporary file blocks (commit 76cbf7ed)
    • JIT counters added (commit 57d6aea0)
  • sepgsql
    • permissive/enforcing state now included in log messages (commit 134d9746)
  • test_decoding
    • option include-sequences added (commit 80901b32)
  • xml2
    • function xml_is_well_formed() removed (commit fd2abeb7)

Testing changes

TAP tests

  • PostgresNode and TestLib Perl modules moved to custom namespace PostgreSQL::Test (b3b4d8e6)


  • support for continuous integration for github repositories via cirrus-ci added (commit 93d97349)


Following CommitFests were for PostgreSQL 15 code submissions:

Note that the March CommitFest generally stays open a few days beyond the official end date until feature freeze is announced, usually in early April.

Release schedule and pre-release test versions

Initial commit marking the start of PostgreSQL 15 development is 596b5af1 (2021-06-28).