Development Versions: 17 / devel
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.

E.1. Release 17 #

Release date: 2024-??-??, AS OF 2024-05-18

E.1.1. Overview #

PostgreSQL 17 contains many new features and enhancements, including:


The above items and other new features of PostgreSQL 17 are explained in more detail in the sections below.

E.1.2. Migration to Version 17 #

A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 18.6 for general information on migrating to new major releases.

Version 17 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:

  • Change functions to use a safe search_path during maintenance operations (Jeff Davis)

    This prevents maintenance operations (ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX, or VACUUM) from performing unsafe access. Functions used by expression indexes and materialized views that need to reference non-default schemas must specify a search path during function creation.

  • Restrict "ago" to only appear at the end in interval values (Joseph Koshakow)

    Also, prevent empty interval units and interval units from appearing multiple times.

  • Remove server variable old_snapshot_threshold (Thomas Munro)

    This variable allowed vacuum to remove rows that potentially could be still visible to running transactions, causing "snapshot too old" error later if accessed. This feature might be re-added to Postgres later if an improved implementation is found.

  • Rename server variable session_auth_is_superuser to the more accurate current_role_is_superuser (Nathan Bossart)

  • Change SET SESSION AUTHORIZATION handling of the initial session user's superuser status (Joseph Koshakow)

    The new behavior is based on the session user's superuser status at the time the SET SESSION AUTHORIZATION command is issued, rather than their superuser status at connection time.

  • Remove feature which simulated per-database users (Nathan Bossart)

    The feature, db_user_namespace, was rarely used.

  • Remove wal_sync_method value fsync_writethrough on Windows (Thomas Munro)

    This value was the same as "fsync" on Windows.

  • Change file boundary handling of two WAL file name functions (Kyotaro Horiguchi, Andres Freund, Bruce Momjian)

    The functions pg_walfile_name() and pg_walfile_name_offset() used to report the previous LSN segment number when the LSN was on a file segment boundary; it now returns the LSN segment.

  • Remove server variable trace_recovery_messages since it is no longer needed (Bharath Rupireddy)

  • Remove information schema column element_types.domain_default (Peter Eisentraut)

  • Change pgrowlocks lock mode output labels (Bruce Momjian)

  • Rename I/O block read/write timing statistics columns of pg_stat_statements (Nazir Bilal Yavuz)

    This renames "blk_read_time" to "shared_blk_read_time", and "blk_write_time" to "shared_blk_write_time".

  • Remove buffers_backend and buffers_backend_fsync from pg_stat_checkpointer (Bharath Rupireddy)

    These fields are considered redundant to similar columns in pg_stat_io.

  • Change pg_attribute.attstattarget and pg_attribute.stxstattarget to represent the default statistics target as NULL (Peter Eisentraut)

  • Change pg_stat_progress_vacuum columns max_dead_tuples to max_dead_tuple_bytes and num_dead_tuples to dead_tuple_bytes (Masahiko Sawada)

    These columns now report bytes instead of tuples.

  • Rename SLRU columns in system view pg_stat_slru (Alvaro Herrera)

    The column names accepted by pg_stat_slru_rest() are also changed.

E.1.3. Changes #

Below you will find a detailed account of the changes between PostgreSQL 17 and the previous major release.

E.1.3.1. Server #

E. Optimizer #
  • Allow the optimizer to improve CTE plans by considering the statistics of columns referenced in earlier row output clauses (Jian Guo, Tom Lane)

  • Allow the optimizer to improve CTE plans by considering the sort order of columns referenced in earlier row output clauses (Richard Guo)

  • Improve optimization of IS NOT NULL and IS NULL query restrictions (David Rowley, Richard Guo, Andy Fan)

    Remove IS NOT NULL query restrictions on NOT NULL columns and eliminate scans on NOT NULL columns if IS NULL is specified.

  • Allow partition pruning on boolean columns on IS [NOT] UNKNOWN conditionals (David Rowley)

  • Improve optimization of range values when using containment operators <@ and @> (Kim Johan Andersson, Jian He)

  • Allow correlated IN subqueries to be transformed into joins (Andy Fan, Tom Lane)

  • Improve optimization of the LIMIT clause on partitioned tables, inheritance parents, and UNION ALL queries (Andy Fan, David Rowley)

  • Allow query nodes to be run in parallel in more cases (Tom Lane)

  • Allow GROUP BY columns to be internally ordered to match ORDER BY (Andrei Lepikhov, Teodor Sigaev)

    This can be disabled using server variable enable_group_by_reordering.

  • Allow UNION (without ALL) to use MergeAppend (David Rowley)

  • Fix MergeAppend plans to more accurately compute the number of rows that need to be sorted (Alexander Kuzmenkov)

  • Allow GiST and SP-GiST indexes to be part of incremental sorts (Miroslav Bendik)

    This is particularly useful for ORDER BY clauses where the first column has a GiST and SP-GiST index, and other columns do not.

  • Add columns to pg_stats to report range-type histogram information (Egor Rogov, Soumyadeep Chakraborty)

E. Indexes #
  • Allow btree indexes to more efficiently find array matches (Peter Geoghegan, Matthias van de Meent)

  • Allow BRIN indexes to be created using parallel workers (Tomas Vondra, Matthias van de Meent)

E. General Performance #
  • Allow vacuum to more efficiently remove and freeze tuples (Melanie Plageman)

    WAL traffic caused by vacuum is also more compact.

  • Allow vacuum to more efficiently store tuple references (Masahiko Sawada, John Naylor)

    Additionally, vacuum is no longer silently limited to one gigabyte of memory when maintenance_work_mem or autovacuum_work_mem are higher.

  • Optimize vacuuming of relations with no indexes (Melanie Plageman)

  • Increase default vacuum_buffer_usage_limit to 2MB (Thomas Munro)

  • Improve performance when checking roles with many memberships (Nathan Bossart)

  • Improve performance of heavily-contended WAL writes (Bharath Rupireddy)

  • Improve performance when transferring large blocks of data to a client (Melih Mutlu)

  • Allow the grouping of file system reads with the new system variable io_combine_limit (Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz)

E. Monitoring #
  • Create system view pg_stat_checkpointer (Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov)

    Relevant columns have been removed from pg_stat_bgwriter and added to this new system view.

  • Allow pg_stat_reset_shared() to reset all shared statistics (Atsushi Torikoshi)

    This is done by passing NULL.

  • Allow pg_stat_reset_shared("slru") to clear SLRU statistics (Atsushi Torikoshi)

    Now pg_stat_reset_shared(NULL) also resets SLRU statistics.

  • Allow pg_stat_reset_slru() to reset all SLRU statistics (Bharath Rupireddy)

    The command pg_stat_reset_slru(NULL) already did this.

  • Add log messages related to WAL recovery from backup (Andres Freund)

  • Add log_connections log line for "trust" connections (Jacob Champion)

  • Add log message to report walsender acquisition and release of replication slots (Bharath Rupireddy)

    This is enabled by the server variable log_replication_commands.

  • Fix emit_log_hook to use the same time value as other log records for the same query (Kambam Vinay, Michael Paquier)

  • Add system view pg_wait_events that reports wait event types (Bertrand Drouvot)

    This is useful for adding descriptions to wait events reported in pg_stat_activity.

  • Add wait events for checkpoint delays (Thomas Munro)

  • Allow vacuum to report the progress of index processing (Sami Imseih)

    This appears in system view columns pg_stat_progress_vacuum.indexes_total and pg_stat_progress_vacuum.indexes_processed.

  • Add server variable trace_connection_negotiation to allow debugging of connection encryption (Heikki Linnakangas, Kyotaro Horiguchi)

E. Privileges #
  • Add per-table GRANT permission MAINTAIN to control maintenance operations (Nathan Bossart)


  • Add user-grantable role pg_maintain to control maintenance operations (Nathan Bossart)


  • Allow roles with pg_monitor membership to execute pg_current_logfile() (Pavlo Golub, Nathan Bossart)

E. Server Configuration #
  • Add system variable allow_alter_system to disallow ALTER SYSTEM (Jelte Fennema-Nio, Gabriele Bartolini)

  • Allow ALTER SYSTEM to set unrecognized custom server variables (Tom Lane)

    This is also possible with GRANT ON PARAMETER.

  • Add server variable transaction_timeout to restrict the duration of transactions (Andrey Borodin, Japin Li, Junwang Zhao, Alexander Korotkov)

  • Create "builtin" collation provider similar to libc's C locale (Jeff Davis)

    While its C locale is similar but independent of libc, its C.UTF-8 locale sorts by Unicode code points and has Unicode-based case folding.

  • Add server variable huge_pages_status to report the use of huge pages by Postgres (Justin Pryzby)

    This is useful when huge_pages is set to "try".

  • Add server variable to disable event triggers (Daniel Gustafsson)

    The setting, event_triggers, allows for the temporary disabling of event triggers for debugging.

  • Allow the SLRU cache sizes to be configured (Andrey Borodin, Dilip Kumar)

    The new server variables are commit_timestamp_buffers, multixact_member_buffers, multixact_offset_buffers, notify_buffers, serializable_buffers, subtransaction_buffers, and transaction_buffers.

E. Streaming Replication and Recovery #
  • Add support for incremental file system backup (Robert Haas, Jakub Wartak, Tomas Vondra)

    Incremental backups can be created using pg_basebackup's new --incremental option. The new application pg_combinebackup allows manipulation of base and incremental file system backups.

  • Allow the creation of WAL summarization files (Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski)

    These files record the block numbers that have changed within an LSN range and are useful for incremental file system backups. This is controlled by the server variables summarize_wal and wal_summarize_keep_time, and introspected with pg_available_wal_summaries(), pg_wal_summary_contents(), and pg_get_wal_summarizer_state().

  • Add the system identifier to file system backup manifest files (Amul Sul)

    This helps detect invalid WAL usage.

  • Allow connection string value dbname to be written when pg_basebackup writes connection information to (Vignesh C, Hayato Kuroda)

  • Add column pg_replication_slots.invalidation_reason to report the reason for invalid slots (Shveta Malik, Bharath Rupireddy)

  • Add pg_replication_slots.inactive_since to report slot inactivity duration (Bharath Rupireddy)

  • Add function pg_sync_replication_slots() to synchronize logical replication slots (Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut)

  • Add the failover property to the replication protocol (Hou Zhijie, Shveta Malik)

E. Logical Replication #
  • Add application pg_createsubscriber to create a logical replica from a physical standby server (Euler Taveira)

  • Have pg_upgrade migrate valid logical slots and subscriptions (Hayato Kuroda, Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal)

    This allows logical replication to continue quickly after the upgrade. This only works for old clusters of PostgreSQL version 17.0 or later.

  • Enable the failover of logical slots (Hou Zhijie, Shveta Malik, Ajin Cherian)

    This is controlled by an optional fifth argument to pg_create_logical_replication_slot().

  • Add server variable sync_replication_slots to enable failover logical slot synchronization (Shveta Malik, Hou Zhijie, Peter Smith)

  • Add logical replication failover control to CREATE/ALTER SUBSCRIPTION (Shveta Malik, Hou Zhijie, Ajin Cherian)

  • Allow the application of logical replication changes to use hash indexes on the subscriber (Hayato Kuroda)

    Previously only btree indexes could be used for this purpose.

  • Improve logical decoding performance in cases where there are many subtransactions (Masahiko Sawada)

  • Restart apply workers if subscription owner's superuser privileges are revoked (Vignesh C)

    This forces reauthentication.

  • Add "flush" option to pg_logical_emit_message() (Michael Paquier)

    This makes the message durable.

  • Allow specification of physical standbys that must be synchronized before they are visible to subscribers (Hou Zhijie, Shveta Malik)

    The server variable is standby_slot_names.

  • Add worker type column to pg_stat_subscription (Peter Smith)

E.1.3.2. Utility Commands #

  • Add new COPY option "ON_ERROR ignore" to discard error rows (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo Nagata)

    The default behavior is "ON_ERROR stop".

  • Add new COPY option LOG_VERBOSITY which reports COPY FROM ignored error rows (Bharath Rupireddy)

  • Allow COPY FROM to report the number of skipped rows during processing (Atsushi Torikoshi)

    This appears in system view column pg_stat_progress_copy.tuples_skipped.

  • In COPY FROM, allow easy specification that all columns should be forced null or not null (Zhang Mingli)

  • Allow EXPLAIN to report optimizer memory usage (Ashutosh Bapat)

    The option is called "MEMORY".

  • Add EXPLAIN option SERIALIZE to report the cost of converting data for network transmission (Stepan Rutz, Matthias van de Meent)

  • Add local I/O block read/write timing statistics to EXPLAIN (Nazir Bilal Yavuz)

  • Improve EXPLAIN's display of SubPlan nodes and output parameters (Tom Lane, Dean Rasheed)

  • Add JIT deform_counter details to EXPLAIN (Dmitry Dolgov)

  • Allow partitions to be merged using ALTER TABLE ... MERGE PARTITIONS (Dmitry Koval)

  • Allow partitions to be split using ALTER TABLE ... SPLIT PARTITION (Dmitry Koval)

  • Allow partitioned tables to have identity columns (Ashutosh Bapat)

  • Allow exclusion constraints on partitioned tables (Paul A. Jungwirth)

    As long as exclusion constraints compare partition key columns for equality, other columns can use exclusion constraint-specific comparisons.

  • Allow specification of partitioned table access methods (Justin Pryzby, Soumyadeep Chakraborty, Michael Paquier)

  • Add clearer ALTER TABLE method to set a column to the default statistics target (Peter Eisentraut)

    The command is ALTER TABLE ... SET STATISTICS DEFAULT; using "SET STATISTICS -1" is still supported.

  • Allow ALTER TABLE to change a columns generation expression (Amul Sul)


  • Add DEFAULT setting for ALTER TABLE .. SET ACCESS METHOD (Michael Paquier)

  • Add support for event triggers that fire at connection time (Konstantin Knizhnik, Mikhail Gribkov)

  • Add event trigger support for REINDEX (Garrett Thornburg, Jian He)

  • Allow parenthesized syntax for CLUSTER options if a table name is not specified (Nathan Bossart)

E.1.3.3. Data Types #

  • Allow the interval data type to support +/-infinity values (Joseph Koshakow, Jian He, Ashutosh Bapat)

  • Allow the use of an ENUM added via ALTER TYPE if the type was created in the same transaction (Tom Lane)

    This was previously disallowed.

E.1.3.4. MERGE #

  • Allow MERGE to modify updatable views (Dean Rasheed)


    "WHEN NOT MATCHED" on target rows was already supported.

  • Allow MERGE to use the RETURNING clause (Dean Rasheed)

    The new RETURNING function merge_action() reports on the DML that generated the row.

E.1.3.5. Functions #

  • Add function JSON_TABLE() to convert JSON data to a table representation (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Jian He)

    This function can be used in the FROM clause of SELECT queries as a tuple source.

  • Add SQL/JSON constructor functions JSON(), JSON_SCALAR(), and JSON_SERIALIZE() (Amit Langote)

  • Add SQL/JSON query functions JSON_EXISTS(), JSON_QUERY(), and JSON_VALUE() (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Peter Eisentraut, Jian He)

  • Add jsonpath methods to convert JSON values to other JSON data types (Jeevan Chalke)

    The jsonpath methods are .bigint(), .boolean(), .date(), .decimal([precision [, scale]]), .integer(), .number(), .string(), .time(), .time_tz(), .timestamp(), and .timestamp_tz().

  • Add to_timestamp() time zone format specifiers (Tom Lane)

    "TZ" accepts time zone abbreviations or numeric offsets, while "OF" accepts only numeric offsets.

  • Allow the session time zone to be specified by AS LOCAL (Vik Fearing)

    This is useful when converting adding and removing time zones from time stamps values, rather than specifying the literal session time zone.

  • Add functions uuid_extract_timestamp() and uuid_extract_version() to return UUID information (Andrey Borodin)

  • Add functions to generate random numbers in a specified range (Dean Rasheed)

    The functions are random(min, max) and they take values of type integer, bigint, and numeric.

  • Add functions to convert integers to hex and binary strings (Eric Radman, Nathan Bossart)

    The functions are to_bin() and to_oct().

  • Add Unicode informational functions (Jeff Davis)

    Function unicode_version() returns the Unicode version, icu_unicode_version() returns the ICU version, and unicode_assigned() returns if the characters are assigned Unicode codepoints.

  • Add function xmltext() to convert text to a single XML text node (Jim Jones)

  • Add function to_regtypemod() to return the type modifier of a type specification (David Wheeler, Erik Wienhold)

  • Add pg_basetype() function to return a domain's base type (Steve Chavez)

  • Add function pg_column_toast_chunk_id() to return a value's TOAST identifier (Yugo Nagata)

    This returns NULL if the value is not stored in TOAST.

E.1.3.6. PL/pgSQL #

  • Allow plpgsql %TYPE and %ROWTYPE specifications to represent arrays of non-array types (Quan Zongliang, Pavel Stehule)

  • Allow plpgsql %TYPE specification to reference composite column (Tom Lane)

E.1.3.7. libpq #

  • Add libpq function to change role passwords (Joe Conway)

    The new function, PQchangePassword(), hashes the new password before sending it to the server.

  • Add libpq functions to close portals and prepared statements (Jelte Fennema-Nio)

    The functions are PQclosePrepared(), PQclosePortal(), PQsendClosePrepared(), and PQsendClosePortal().

  • Add libpq API which allows for blocking and non-blocking cancel requests, with encryption if already in use (Jelte Fennema-Nio)

    Previously only blocking, unencrypted cancel requests were supported.

  • Add libpq function PQsocketPoll to allow polling of network sockets (Tristan Partin)

  • Add libpq function PQsendPipelineSync() to send a pipeline synchronization point (Anton Kirilov)

    This is similar to PQpipelineSync() but it does not flush to the server unless the size threshold of the output buffer is reached.

  • Add libpq function PQsetChunkedRowsMode to allow retrieval of results in chunks (Daniel Vérité)

  • Allow TLS connections without requiring a network round-trip negotiation (Greg Stark, Heikki Linnakangas, Peter Eisentraut, Michael Paquier, Daniel Gustafsson)

    This is enabled with the client-side option sslnegotation=direct, requires ALPN, and only works on PostgreSQL 17 and later servers.

E.1.3.8. psql #

  • Improve psql display of default and empty privileges (Erik Wienhold, Laurenz Albe)

    Command \dp now displays "(none)" for empty privileges; default still display as empty.

  • Have backslash commands honor "\pset null" (Erik Wienhold, Laurenz Albe)

    Previously "\pset null" was ignored.

  • Allow psql's \watch to stop after a minimum number of rows returned (Greg Sabino Mullane)

    The parameter is "min_rows".

  • Allow psql connections to be canceled with control-C (Tristan Partin)

  • Allow psql to honor FETCH_COUNT for non-SELECT queries (Daniel Vérité)

  • Improve psql tab completion (Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Pavel Borisov)

E.1.3.9. Server Applications #

  • Add application pg_walsummary to dump WAL summary files (Robert Haas)

  • Allow pg_dump's large objects to be restorable in batches (Tom Lane)

    This allows the restoration of many large objects to avoid transaction limits and to be restored in parallel.

  • Add pg_dump option --exclude-extension (Ayush Vatsa)

  • Allow pg_dump, pg_dumpall, and pg_restore to specify include/exclude objects in a file (Pavel Stehule, Daniel Gustafsson)

    The option is called "--filter".

  • Add the --sync-method parameter to several client applications (Justin Pryzby, Nathan Bossart)

    The applications are initdb, pg_basebackup, pg_checksums, pg_dump, pg_rewind, and pg_upgrade.

  • Add pg_restore option --transaction-size to allow object restore in transaction batches (Tom Lane)

    This allows the performance benefits of transaction batches without the problems of excessively large transaction blocks.

  • Change pgbench debug mode option from -d to --debug (Greg Sabino Mullane)

    Option -d is now used for the database name, and the new --dbname option can be used as well.

  • Add pgbench option "--exit-on-abort" to exit after any client aborts (Yugo Nagata)

  • Add pgbench command \syncpipeline to allow sending of sync messages (Anthonin Bonnefoy)

  • Allow pg_archivecleanup to remove backup history files (Atsushi Torikoshi)

    The option is --clean-backup-history.

  • Add some long options to pg_archivecleanup (Atsushi Torikoshi)

    The long options are --debug, --dry-run, and --strip-extension.

  • Allow pg_basebackup and pg_receivewal to use dbname in their connection specification (Jelte Fennema-Nio)

    This is useful for connection poolers that are sensitive to the database name.

  • Add pg_upgrade option --copy-file-range (Thomas Munro)

    This is supported on Linux and FreeBSD.

  • Allow reindexdb --index to process indexes from different tables in parallel (Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov)

  • Allow reindexdb to process objects in all databases matching a pattern (Nathan Bossart)

    Specifically, --all can now be used with --table, --schema, --index, and --system.

  • Allow vacuumdb to process objects in all databases matching a pattern (Nathan Bossart)

    Specifically, --all can now be used with --table, --schema, and --exclude-schema.

  • Allow clusterdb to process objects in all databases matching a pattern (Nathan Bossart)

    Specifically, --all can now be used with --table.

E.1.3.10. Source Code #

  • Remove support for OpenSSL 1.0.1 (Michael Paquier)

  • Allow tests to pass in OpenSSL FIPS mode (Peter Eisentraut)

  • Use CPU AVX-512 instructions for bit counting (Paul Amonson, Nathan Bossart, Ants Aasma)

  • Require LLVM version 10 or later (Thomas Munro)

  • Use native CRC instructions on 64-bit LoongArch CPUs (YANG Xudong)

  • Remove AIX support (Heikki Linnakangas)

  • Remove the Microsoft Visual Studio-specific Postgres build option (Michael Paquier)

    Meson is now the only available method for Visual Studio builds.

  • Remove configure option --disable-thread-safety (Thomas Munro, Heikki Linnakangas)

    We now assume all supported platforms have sufficient thread support.

  • Remove configure option --with-CC (Heikki Linnakangas)

    Setting the CC environment variable is now the only supported method for specifying the compiler.

  • User-defined data type receive functions will no longer receive their data null-terminated (David Rowley)

  • Add incremental JSON parser for use with huge JSON documents (Andrew Dunstan)

  • Convert source code README to Markdown (Nathan Bossart)

  • Remove no longer needed top-level INSTALL file (Tom Lane)

  • Remove make's distprep option (Peter Eisentraut)

  • Add 'make' support for Android shared libraries (Peter Eisentraut)

  • Add backend support for injection points (Michael Paquier)

    This is used for server debugging and they must be enabled at server compile time.

  • Improve documentation for using jsonpath for predicate checks (David Wheeler)

E.1.3.11. Additional Modules #

  • Allow joins with non-join qualifications to be pushed down to foreign servers and custom scans (Richard Guo, Etsuro Fujita)

    Foreign data wrappers and custom scans will need to be modified to handle these cases.

  • Allow pushdown of EXISTS and IN subqueries to the postgres_fdw foreign server (Alexander Pyhalov)

  • Increase the default foreign data wrapper tuple cost (David Rowley, Umair Shahid)

    This value is used by the optimizer.

  • Create custom wait events for postgres_fdw (Masahiro Ikeda)

  • Create custom wait events for dblink (Masahiro Ikeda)

  • Allow dblink database operations to be interrupted (Noah Misch)

  • Allow the creation of hash indexes on ltree columns (Tommy Pavlicek)

    This also enables hash join and hash aggregation on ltree columns.

  • Allow unaccent character translation rules to contain whitespace and quotes (Michael Paquier)

    The syntax for unaccent.rules has changed.

  • Allow amcheck to check for unique constraint violations (Anastasia Lubennikova, Pavel Borisov, Maxim Orlov)

    The pg_amcheck option --checkunique will check all the unique indexes.

  • Allow citext tests to pass in OpenSSL FIPS mode (Peter Eisentraut)

  • Allow pgcrypto tests to pass in OpenSSL FIPS mode (Peter Eisentraut)

  • Remove some unused SPI macros (Bharath Rupireddy)

  • Remove adminpack contrib extension (Daniel Gustafsson)

    This was used by now end-of-life pgAdmin III.

  • Allow ALTER OPERATOR to set more optimization attributes (Tommy Pavlicek)

    This is useful for extensions.

  • Allow extensions to define custom wait events (Masahiro Ikeda)

  • Add pg_buffercache function pg_buffercache_evict() to allow shared buffer eviction (Palak Chaturvedi, Thomas Munro)

    This is useful for testing.

E. pg_statstatements #
  • Replace CALL parameters in pg_stat_statements with placeholders (Sami Imseih)

  • Replace savepoint names stored in pg_stat_statements with placeholders (Greg Sabino Mullane)

    This greatly reduces the number of entries needed to record SAVEPOINT, RELEASE SAVEPOINT, and ROLLBACK TO SAVEPOINT commands.

  • Replace two-phase commit GIDs stored in pg_stat_statements with placeholders (Michael Paquier)

    This greatly reduces the number of entries needed to record PREPARE TRANSACTION, COMMIT PREPARED, and ROLLBACK PREPARED.

  • Track DEALLOCATE in pg_stat_statements (Dagfinn Ilmari Mannsåker, Michael Paquier)

    DEALLOCATE names are stored in pg_stat_statements as placeholders.

  • Add local I/O block read/write timing statistics columns of pg_stat_statements (Nazir Bilal Yavuz)

    The new columns are "local_blk_read_time" and "local_blk_write_time".

  • Add JIT deform_counter details to pg_stat_statements (Dmitry Dolgov)

  • Add optional fourth argument (minmax_only) to pg_stat_statements_reset() to allow for the resetting of only min/max statistics (Andrei Zubkov)

    This argument defaults to "false".

  • Add pg_stat_statements columns "stats_since" and "minmax_stats_since" to track entry creation time and last min/max reset time (Andrei Zubkov)

E.1.4. Acknowledgments #

The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.