doc: first draft of Postgres 17 release notes
authorBruce Momjian
Thu, 9 May 2024 03:54:30 +0000 (23:54 -0400)
committerBruce Momjian
Thu, 9 May 2024 03:54:30 +0000 (23:54 -0400)
Backpatch-through: master

doc/src/sgml/release-17.sgml

index 3d671cc375aa06011fb06a77ba1ad1d6ca9f894e..11d5710b6b0ef5059fe534c33dec73e57d98c00e 100644 (file)
-
+
 
 
-
Release 17
+ 
 Release 17
 
-  Release date:
-  2024-??-??
 
+   Release date:
+   2024-??-??, AS OF 2024-05-07
 
 
-  This is just a placeholder for now.
+  
+   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.
+   
+
+  
+
+  
+
+   Migration to Version 17
+
+   
+    A dump/restore using  or use of
+     or logical replication is required for
+    those wishing to migrate data from any previous release.  See 
+    linkend="upgrading"/> 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 of 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_statement (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.
+
+
+
+   
+
+  
+
+  
+   Changes
+
+    
+     Below you will find a detailed account of the changes between
+    PostgreSQL 17 and the previous major
+    release.
+    
+
+   
+    Server
+
+    
+     Optimizer
+
+     
+
+
+
+
+
+Allow the optimizer to improve CTE plans by using the statistics of columns referenced in earlier CTE clauses (Jian Guo, Tom Lane)
+
+
+
+
+
+
+
+Allow the optimizer to improve CTE plans by using the sort order of columns referenced in earlier CTE clauses (Jian 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 query nodes to be run in parallel in more case (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 histogram information (Egor Rogov, Soumyadeep Chakraborty)
+
+
+
+     
+
+    
+
+    
+     Indexes
+
+     
+
+
+
+
+Allow btree indexes to more efficiently find array matches (Peter Geoghegan, Matthias van de Meent)
+
+
+
+
+
+
+
+Allow a BRIN indexes to be created using parallel workers (Tomas Vondra, Matthias van de Meent)
+
+
+
+
+
+
+
+Add stratnum GiST support function (Paul A. Jungwirth)
+
+
+
+     
+
+    
+
+    
+     General Performance
+
+     
+
+
+
+
+
+Allow vacuum to more efficiently freeze tuples (Melanie Plageman)
+
+
+
+
+
+
+
+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)
+
+
+
+
+
+
+
+Allow the grouping of file system reads with the new system variable io_combine_limit (Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz)
+
+
+
+     
+
+    
+
+    
+     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 (Michael Paquier)
+
+
+
+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)
+
+
+
+     
+
+    
+
+    
+     Privileges
+
+     
+
+
+
+
+
+Add per-table GRANT permission MAINTAIN to control maintenance operations (Nathan Bossart)
+
+
+
+The operations are VACUUM, ANALYZE, REINDEX, REFRESH MATERIALIZE VIEW, CLUSTER, and LOCK TABLE.
+
+
+
+
+
+
+
+Add user-grantable role pg_maintain to control maintenance operations (Nathan Bossart)
+
+
+
+The operations are VACUUM, ANALYZE, REINDEX, REFRESH MATERIALIZE VIEW, CLUSTER, and LOCK TABLE.
+
+
+
+
+
+
+
+Allow roles with pg_monitor privileges to execute pg_current_logfile() (Pavlo Golub, Nathan Bossart)
+
+
+
+     
+
+    
+
+    
+     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 a "builtin" collation provider similar to libc's C locale (Jeff Davis)
+
+
+
+It uses a "C" locale which is identical but independent of libc, but it allows the use of non-"C" collations like "en_US" and "C.UTF-8" with the "C" locale, which libc does not.  MORE?
+
+
+
+
+
+
+
+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.
+
+
+
+     
+
+    
+
+    
+     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 is 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 postgresql.auto.conf (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)
+
+
+
+     
+
+    
+
+    
+     <link linkend="logical-replication">Logical Replication</link>
+
+    
+
+
+
+
+
+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 use for this purpose.
+
+
+
+
+
+
+
+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)
+
+
+
+    
+
+    
+
+   
+
+   
+    Utility Commands
+
+    
+
+
+
+
+
+Add new COPY option "ON_ERROR ignore" to discard error rows (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, 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.
+
+
+
+
+
+
+
+All 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)
+
+
+
+The syntax is "ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION".
+
+
+
+
+
+
+
+Add DEFAULT setting for ALTER TABLE .. SET ACCESS METHOD (Michael Paquier)
+
+
+
+
+
+
+
+Allow foreign keys to reference WITHOUT OVERLAPS primary keys (Paul A. Jungwirth)
+
+
+
+The keyword PERIOD is used for this purpose.
+
+
+
+
+
+
+
+Allow PRIMARY KEY and UNIQUE constraints to use WITHOUT OVERLAPS for non-overlapping exclusion constraints (Paul A. Jungwirth)
+
+
+
+
+
+
+
+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 NOT NULL columns to be specified as column constraints and domains (Alvaro Herrera, Bernd Helmle, Kyotaro Horiguchi, Peter Eisentraut)
+
+
+
+Previously NOT NULL could only be specified as a column attribute.
+
+
+
+
+
+
+
+Allow parenthesized syntax for CLUSTER options if a table name is not specified (Nathan Bossart)
+
+
+
+    
+
+   
+
+   
+    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.
+
+
+
+    
+
+   
+
+   
+    <link linkend="sql-merge">MERGE</link>
+
+
+    
+
+
+
+
+
+Allow MERGE to modify updatable views (Dean Rasheed)
+
+
+
+
+
+
+
+Add WHEN NOT MATCHED BY SOURCE to MERGE (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.
+
+
+
+    
+
+   
+
+   
+    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 different 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 typemod of a string (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.
+
+
+
+    
+
+   
+
+   
+    <link linkend="plpgsql">PL/pgSQL</link>
+
+    
+
+
+
+
+
+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)
+
+
+
+    
+
+   
+
+   
+    <link linkend="libpq">libpq</link>
+
+    
+
+
+
+
+
+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.
+
+
+
+    
+
+   
+
+   
+     <xref linkend="app-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".
+
+
+
+
+
+
+
+Improve psql tab completion (Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Dagfinn Ilmari Mannsåker, Pavel Borisov)
+
+
+
+     
+
+   
+
+   
+    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 who 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.
+
+
+
+    
+
+   
+
+   
+    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 (Peter Eisentraut)
+
+
+
+
+
+
+
+Use native CRC instructions on 64-bit LoongArch CPUs (YANG Xudong)
+
+
+
+
+
+
+
+Remove AIX support (Heikki Linnakangas)
+
+
+
+
+
+
+
+Remove the ability to build Postgres with Visual Studio (Michael Paquier)
+
+
+
+Meson is now the only available Windows build method.
+
+
+
+
+
+
+
+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)
+
+
+
+
+
+
+
+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)
+
+
+
+
+
+
+
+Add function pg_buffercache_evict() to allow shared buffer eviction (Palak Chaturvedi, Thomas Munro)
+
+
+
+This is useful for testing.
+
+
+
+    
+
+   
+
+   
+    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)
+
+
+
+
+
+
+
+Double 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 non-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)
+
+
+
+     
+
+    
+     <link linkend="pgstatstatements"><application>pg_statstatements</application></link>
+
+     
+
+
+
+
+
+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 (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_statement (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 parameter to pg_stat_statements_reset() to allow for the resetting of only min/max statistics (Andrei Zubkov)
+
+
+
+This parameter 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)
+
+
+
+     
+
+    
+
+   
+
+  
+
+  
+   Acknowledgments
+
+   
+    The following individuals (in alphabetical order) have contributed
+    to this release as patch authors, committers, reviewers, testers,
+    or reporters of issues.
+   
+
+   
+    
+   
+  
+