Remove symbolic links for the postmaster binary (Peter Eisentraut)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-19 [2cbc3c17a] Rework logic and simplify syntax of REINDEX DATABASE/SYS
Author: Michael Paquier <michael@paquier.xyz>
2022-07-26 [0a5f06b84] Fix a few issues with REINDEX grammar
-->
<listitem>
<para>
Change reindexedb to not process indexes on system catalogs (Simon Riggs)
</para>
<para>
Processing such indexes is still possible using REINDEX SYSTEM.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-17 [98ae2c84a] libpq: Remove code for SCM credential authentication
-->
<listitem>
<para>
Remove libpq support for SCM credential authentication (Michael Paquier)
</para>
<para>
Backend support for this authentication method was removed in PostgreSQL 9.1.
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-01 [d747dc85a] In plpgsql, don't preassign portal names to bound cursor
-->
<listitem>
<para>
Change assignment rules for PL/pgSQL bound cursor variables (Tom Lane)
</para>
<para>
Previously, the string value of such variables was set to match the variable name during cursor assignment; now it will be assigned during OPEN, and will not match the variable name.
</para>
</listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-02-24 [d95952325] Disallow NULLS NOT DISTINCT indexes for primary keys
-->
<listitem>
<para>
Disallow NULLS NOT DISTINCT indexes for primary keys (Daniel Gustafsson)
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-02 [b23cd185f] Remove logic for converting a table to a view.
-->
<listitem>
<para>
Remove the ability to create views manually with ON SELECT rules (Tom Lane)
2022-07-19 [2cbc3c17a] Rework logic and simplify syntax of REINDEX DATABASE/SYS
Author: Michael Paquier <michael@paquier.xyz>
2022-07-26 [0a5f06b84] Fix a few issues with REINDEX grammar
-->
<listitem>
<para>
Change REINDEX DATABASE to not process indexes on system catalogs (Simon Riggs)
</para>
<para>
Processing such indexes is still possible using REINDEX SYSTEM.
</para>
</listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [3592e0ff9] Have ExecFindPartition cache the last found partition
-->
<listitem>
<para>
Improve performance by caching RANGE and LIST partition lookups (Amit Langote, Hou Zhijie, David Rowley)
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-11 [8bf6ec3ba] Improve handling of inherited GENERATED expressions.
-->
<listitem>
<para>
Tighten GENERATED expression restrictions on inherited and partitioned tables (Amit Langote, Tom Lane)
</para>
<para>
Columns of parent/partitioned and child/partition tables must all have the same generation status, though now the actual generation expressions can be different.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4 id="release-16-optimizer">
<title>Optimizer</title>
<itemizedlist>
<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [b59242209] Relax overly strict rules in select_outer_pathkeys_for_m
Author: David Rowley <drowley@postgresql.org>
2023-01-11 [3c6fc5820] Have the planner consider Incremental Sort for DISTINCT
-->
<listitem>
<para>
Allow incremental sorts in more cases, including DISTINCT (David Rowley)window
2023-04-07 [ae78cae3b] Add - -buffer-usage-limit option to vacuumdb
Author: Masahiko Sawada <msawada@postgresql.org>
2023-04-28 [b72f564d8] Add unit to vacuum_buffer_usage_limit value in postgresq
-->
<listitem>
<para>
Allow control of the shared buffer usage by vacuum and analyze (Melanie Plageman)
</para>
<para>
The VACUUM/ANALYZE option is BUFFER_USAGE_LIMIT, and the vacuumdb option is --buffer-usage-limit. The default value is set by server variable vacuum_buffer_usage_limit, which also controls autovacuum.
</para>
</listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-20 [9430fb407] Add wal_sync_method=fdatasync for Windows.
-->
<listitem>
<para>
Support wal_sync_method=fdatasync on Windows (Thomas Munro)
</para>
</listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-03-20 [19d8e2308] Ignore BRIN indexes when checking for HOT updates
-->
<listitem>
<para>
Allow HOT updates if only BRIN-indexed columns are updated (Matthias van de Meent, Josef Simanek, Tomas Vondra)
</para>
</listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2023-02-20 [2cb82e2ac] Speedup and increase usability of set proc title functio
-->
<listitem>
<para>
Improve the speed of updating the process title (David Rowley)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4 id="release-16-monitoring">
<title>Monitoring</title>
<itemizedlist>
<!--
Author: Andres Freund <andres@anarazel.de>
2023-02-11 [a9c70b46d] Add pg_stat_io view, providing more detailed IO statisti
Author: Andres Freund <andres@anarazel.de>
2023-03-30 [8aaa04b32] Track shared buffer hits in pg_stat_io
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [ac8d53dae] Track IO times in pg_stat_io
Author: Michael Paquier <michael@paquier.xyz>
2023-04-21 [0ecb87e1f] Remove io prefix from pg_stat_io columns
Author: Andres Freund <andres@anarazel.de>
2023-05-17 [093e5c57d] Add writeback to pg_stat_io
-->
<listitem>
<para>
Add system view pg_stat_io view to track IO statistics (Melanie Plageman)
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-14 [c03747183] pgstat: Track time of the last scan of a relation
-->
<listitem>
<para>
Record statistics on the last sequential and index scans on tables (Dave Page)
</para>
<para>
This information appears in pg_stat_all_tables and pg_stat_all_indexes.
</para>
</listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-23 [ae4fdde13] Count updates that move row to a new page.
-->
<listitem>
<para>
Record statistics on the occurrence of updated rows moving to new pages (Corey Huinker)
</para>
<para>
The pg_stat_*_tables column is n_tup_newpage_upd.
</para>
</listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-01-10 [f74573969] Fix the display of lock information for specktoken.
-->
<listitem>
<para>
Add speculative lock information to the pg_locks system view (Masahiko Sawada, Noriyoshi Shinoda)
</para>
<para>
The transaction id is displayed in the transactionid field and the speculative insertion token is displayed in the objid field.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-05 [84ad713cf] Add result_types column to pg_prepared_statements view
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-05 [6ffff0fd2] Fix pg_prepared_statements.result_types for DML statemen
-->
<listitem>
<para>
Add the display of prepared statement result types to the pg_prepared_statements view (Dagfinn Ilmari Mannsåker)
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-06 [e0b014295] Create subscription stats entry at CREATE SUBSCRIPTION t
-->
<listitem>
<para>
Create subscription statistics entries at subscription creation time so stats_reset is accurate (Andres Freund)
</para>
<para>
Previously entries were created only created when the first statistics were reported.
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [704261ecc] Improve IO accounting for temp relation writes
-->
<listitem>
<para>
Correct the IO accounting for temp relation writes shown in pg_stat_database (Melanie Plageman)
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-12-19 [10ea0f924] Expose some information about backend subxact status.
-->
<listitem>
<para>
Add function pg_stat_get_backend_subxact() to report on a session's subtransaction cache (Dilip Kumar)
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-29 [d7e39d72c] Use actual backend IDs in pg_stat_get_backend_idset() an
-->
<listitem>
<para>
Have pg_stat_get_backend_idset(), pg_stat_get_backend_activity(), and related functions use the unchanging backend id (Nathan Bossart)
</para>
<para>
Previously the index values might change during the lifetime of the session.
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2022-08-22 [0c679464a] Add BackendType for standalone backends
-->
<listitem>
<para>
Report stand-alone backends with a special backend type (Melanie Plageman)
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2022-11-21 [92daeca45] Add wait event for pg_usleep() in perform_spin_delay()
2022-07-14 [7bae3bbf6] Create a distinct wait event for POSIX DSM allocation.
-->
<listitem>
<para>
Create new wait event "DSMAllocate" to indicate waiting for dynamic shared memory allocation (Thomas Munro)
</para>
<para>
Previously this type of wait was reported as "DSMFillZeroWrite", which was also used by mmap() allocations.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-24 [af205152e] Add the database name to the ps display of logical WAL s
-->
<listitem>
<para>
Add the database name to the process display of logical WAL senders (Tatsuhiro Nakamori)
</para>
<para>
Physical WAL senders do not display a database name.
</para>
</listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-07 [62c46eee2] Add checkpoint and REDO LSN to log_checkpoints message.
-->
<listitem>
<para>
Add checkpoint and REDO LSN information to log_checkpoints messages (Bharath Rupireddy, Kyotaro Horiguchi)
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-15 [3a0e38504] Log details for client certificate failures
-->
<listitem>
<para>
Provide additional details during client certificate failures (Jacob Champion)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4 id="release-16-privileges">
<title>Privileges</title>
<itemizedlist>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-12-13 [60684dd83] Add grantable MAINTAIN privilege and pg_maintain role.
Author: Andrew Dunstan <andrew@dunslane.net>
2022-11-28 [4441fc704] Provide non-superuser predefined roles for vacuum and an
Author: Jeff Davis <jdavis@postgresql.org>
2023-01-14 [ff9618e82] Fix MAINTAIN privileges for toast tables and partitions.
-->
<listitem>
<para>
Create a predefined role with permission to perform maintenance operations (Nathan Bossart)
</para>
<para>
This is called pg_maintain.
</para>
</listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-11-28 [b5d638249] Provide per-table permissions for vacuum and analyze.
-->
<listitem>
<para>
Allow GRANT to give vacuum and analyze permission to users beyond the table owner or superusers (Nathan Bossart)
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-03-30 [c3afe8cf5] Add new predefined role pg_create_subscription.
-->
<listitem>
<para>
Add predefined role pg_create_subscription with permission to create subscriptions (Robert Haas)
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-03-30 [c3afe8cf5] Add new predefined role pg_create_subscription.
Author: Amit Kapila <akapila@postgresql.org>
2023-04-20 [c1cc4e688] Restart the apply worker if the 'password_required' opti
Author: Amit Kapila <akapila@postgresql.org>
2023-04-24 [19e65dff3] Display 'password_required' option for \dRs+ command.
-->
<listitem>
<para>
Allow subscriptions to not require passwords (Robert Haas)
</para>
<para>
This is accomplished with the option password_required=false.
</para>
</listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-01-13 [c44f6334c] Simplify permissions for LOCK TABLE.
-->
<listitem>
<para>
Simplify permissions for LOCK TABLE (Jeff Davis)
</para>
<para>
Previously the ability to perform LOCK TABLE at various lock levels was bound to specific query-type permissions. For example, UPDATE could could perform all lock levels except ACCESS SHARE, which
required SELECT permissions. Now UPDATE can issue all lock levels. MORE?
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->
<listitem>
<para>
Allow "GRANT group_name TO user_name" to be performed with ADMIN OPTION (Robert Haas)
</para>
<para>
Previously CREATEROLE permission was required.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-10 [cf5eb37c5] Restrict the privileges of CREATEROLE users.
-->
<listitem>
<para>
Restrict the privileges of CREATEROLE roles (Robert Haas)
</para>
<para>
Previously roles with CREATEROLE privileges could change many aspects of any non-superuser role. Such changes, including adding members, are now require the role requesting the change to have ADMIN OPTION
permission.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-24 [f1358ca52] Adjust interaction of CREATEROLE with role properties.
-->
<listitem>
<para>
Improve logic of CREATEROLE roles ability to control other roles (Robert Haas)
</para>
<para>
For example, they can change the CREATEDB, REPLICATION, and BYPASSRLS properties only if they also have those permissions.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-25 [e3ce2de09] Allow grant-level control of role inheritance behavior.
-->
<listitem>
<para>
Allow GRANT to control role inheritance behavior (Robert Haas)
</para>
<para>
By default, role inheritance is controlled by the inheritance status of the member role. The new GRANT clauses WITH INHERIT and WITH ADMIN can now override this.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-10 [e5b8a4c09] Add new GUC createrole_self_grant.
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-02-22 [e00bc6c92] doc: Add default value of createrole_self_grant
-->
<listitem>
<para>
Allow roles that create other roles to automatically inherit the new role's rights or SET ROLE to the new role (Robert Haas, Shi Yu)
</para>
<para>
This is controlled by server variable createrole_self_grant.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-09-19 [48a257d44] Make ALTER DEFAULT PRIVILEGES require privileges, not me
-->
<listitem>
<para>
Prevent users from changing the default privileges of non-inherited roles (Robert Haas)
</para>
<para>
This is now only allowed for inherited roles.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->
<listitem>
<para>
When granting role membership, require the granted-by role to be a role that has appropriate permissions (Robert Haas)
</para>
<para>
This is a requirement even when the superuser is granting role membership.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->
<listitem>
<para>
Allow non-superusers to grant permissions using a granted-by user that is not the current user (Robert Haas)
</para>
<para>
The current user still must have sufficient permissions given by the specified granted-by user.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-11-18 [3d14e171e] Add a SET option to the GRANT command.
-->
<listitem>
<para>
Add GRANT to control permission to use SET ROLE (Robert Haas)
</para>
<para>
This is controlled by a new GRANT ... SET option.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->
<listitem>
<para>
Add dependency tracking to roles which have granted privileges (Robert Haas)
</para>
<para>
For example, removing ADMIN OPTION will fail if there are privileges using that option; CASCADE must be used to revoke dependent permissions.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-18 [6566133c5] Ensure that pg_auth_members.grantor is always valid.
-->
<listitem>
<para>
Add dependency tracking of grantors for GRANT records (Robert Haas)
</para>
<para>
This will guarantee that pg_auth_members.grantor values is always valid.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
Author: Robert Haas <rhaas@postgresql.org>
2022-08-31 [0101f770a] Fix a bug in roles_is_member_of.
-->
<listitem>
<para>
Allow multiple role membership records (Robert Haas)
</para>
<para>
Previously a new membership grant would remove a previous matching membership grant, even if other aspects of the grant did not match.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-07-26 [e530be2c5] Do not allow removal of superuser privileges from bootst
-->
<listitem>
<para>
Prevent removal of superuser privileges for the bootstrap user (Robert Haas)
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-03 [b762bbde3] Allow makeaclitem() to accept multiple privilege names.
-->
<listitem>
<para>
Allow makeaclitem() to accept multiple privilege names (Robins Tharakan)
</para>
<para>
Previously only a single privilege names, like SELECT, were supported.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4 id="release-16-server-config">
<title>Server Configuration</title>
<itemizedlist>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2023-04-13 [6633cfb21] De-Revert "Add support for Kerberos credential delegatio
-->
<listitem>
<para>
Add support for Kerberos credential delegation (Stephen Frost)
</para>
<para>
This is enabled with server variable gss_accept_deleg.
</para>
</listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-03-27 [b57774300] Make SCRAM iteration count configurable
-->
<listitem>
<para>
Allow the SCRAM iteration count to be set with server variable scram_iterations (Daniel Gustafsson)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-10-24 [8fea86830] Add support for regexps on database and user entries in
-->
<listitem>
<para>
Add support for regular expression matching on database and role entries in pg_hba.conf (Bertrand Drouvot)
</para>
<para>
Regular expression patterns are prefixed with a slash. Database and role names that begin with slashes need to be double-quoted if referenced in pg_hba.conf.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-20 [efb6f4a4f] Support the same patterns for pg-user in pg_ident.conf a
-->
<listitem>
<para>
Improve user-column handling of pg_ident.conf to match pg_hba.conf (Jelte Fennema)
</para>
<para>
Specifically, add support for "all", role membership with "+", and regular expressions with a leading slash. Any user name that matches these patterns must be double-quoted.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-24 [a54b658ce] Add support for file inclusions in HBA and ident configu
-->
<listitem>
<para>
Allow include files in pg_hba.conf and pg_ident.conf (Julien Rouhaud)
</para>
<para>
These are controlled by "include", "include_if_exists", and "include_dir". System views pg_hba_file_rules and pg_ident_file_mappings now display the file name.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-10-26 [c591300a8] Add rule_number to pg_hba_file_rules and map_number to p
-->
<listitem>
<para>
Add rule and map numbers to the system view pg_hba_file_rules (Julien Rouhaud)
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-10-14 [3057465ac] Replace the sorted array of GUC variables with a hash ta
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-10-14 [f13b2088f] Add auxiliary lists to GUC data structures for better pe
Tighten restrictions on what server variables can be reset (Masahiko Sawada)
</para>
<para>
Previously, while certain variables, like transaction_isolation, were not affected by RESET ALL, they could be individually reset in inappropriate situations.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-09 [0b039e3a8] Fix some inconsistencies with GUC categories
-->
<listitem>
<para>
Move various postgresql.conf items into new categories (Shinya Kato)
</para>
<para>
This also affects the categories displayed in the pg_settings view.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-25 [d13b68411] Introduce variables for initial and max nesting depth on
Allow autovacuum to more frequently honor changes to delay settings (Melanie Plageman)
</para>
<para>
Rather than honor changes only at the start of each relation, honor them at the start of each block.
</para>
</listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-26 [756e221db] Reduce overhead of renaming archive status files.
Author: Fujii Masao <fujii@postgresql.org>
2022-07-26 [3cabe45a8] doc: Add note about re-archiving of same WAL files in do
-->
<listitem>
<para>
Remove restrictions that archive files be durably renamed (Nathan Bossart)
</para>
<para>
The archive command is now more likely to be called with already-archived files after a crash.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-15 [d627ce3b7] Disallow setting archive_library and archive_command at
-->
<listitem>
<para>
Prevent archive_library and archive_command from being set at the same time (Nathan Bossart)
</para>
<para>
Previously archive_library would override archive_command.
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-21 [51b5834cd] Provide options for postmaster to kill child processes w
-->
<listitem>
<para>
Allow the postmaster to terminate children with an abort signal (Tom Lane)
</para>
<para>
Abort normally creates a core dump. This is controlled by send_abort_for_crash and send_abort_for_kill. postmaster -T now the same as setting send_abort_for_crash.
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-21 [51b5834cd] Provide options for postmaster to kill child processes w
-->
<listitem>
<para>
Remove the unnecessary postmaster -n option (Tom Lane)
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-20 [6e2775e4d] Add new GUC reserved_connections.
-->
<listitem>
<para>
Allow the server to reserve backend slots for roles with pg_use_reserved_connections membership (Nathan Bossart)
</para>
<para>
The number of reserved slots is set by server variable reserved_connections.
</para>
</listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-03-10 [c45dc7ffb] initdb: derive encoding from locale for ICU; similar to
-->
<listitem>
<para>
Determine the ICU default locale from the environment (Jeff Davis)
</para>
<para>
However, ICU doesn't support the C local so UTF-8 is used in such cases. Previously the default was always UTF-8.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-10 [0d21d4b9b] Add standard collation UNICODE
-->
<listitem>
<para>
Add predefined collations "unicode" and "ucs_basic" (Peter Eisentraut)
</para>
<para>
This only works if ICU support is enabled.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-08 [30a53b792] Allow tailoring of ICU locales with custom rules
-->
<listitem>
<para>
Allow custom ICU collation rules to be created (Peter Eisentraut)
</para>
<para>
This is done using CREATE COLLATION's new new RULES clause, as well as new options for CREATE DATABASE, createdb, and initdb.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-01-03 [bf03cfd16] Windows support in pg_import_system_collations
-->
<listitem>
<para>
Add Windows process the system collations (Jose Santamaria Flecha)
2023-05-15 [319bae9a8] Rename io_direct to debug_io_direct.
-->
<listitem>
<para>
Add debug_io_direct setting for developer usage (Thomas Munro, Andres Freund, Bharath Rupireddy)
</para>
<para>
While primarily for developers, wal_sync_method=open_sync/open_datasync has been modified to not use direct I/O with wal_level=minimal; this is now enabled with debug_io_direct=wal.
2023-01-30 [1e8b61735] Rename GUC logical_decoding_mode to logical_replication_
Author: Amit Kapila <akapila@postgresql.org>
2023-02-02 [9f2213a7c] Allow the logical_replication_mode to be used on the sub
-->
<listitem>
<para>
Add server variable to control how logical decoding publishers transfer changes and how subscribers apply them (Shi Yu)
</para>
<para>
The variable is logical_replication_mode.
</para>
</listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-03-23 [ecb696527] Allow logical replication to copy tables in binary forma
-->
<listitem>
<para>
Allow logical replication initial table synchronization to copy rows in binary format (Melih Mutlu)
</para>
<para>
This is only possible for subscriptions marked as binary.
</para>
</listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-01-09 [216a78482] Perform apply of large transactions by parallel workers.
Author: Amit Kapila <akapila@postgresql.org>
2023-01-10 [cd06ccd78] Document the newly added wait events added by commit 216
Author: Amit Kapila <akapila@postgresql.org>
2023-02-16 [fce003cfd] Add a new wait state and use it when sending data in the
-->
<listitem>
<para>
Allow parallel application of logical replication (Hou Zhijie, Wang Wei, Amit Kapila)
</para>
<para>
The CREATE SUBSCRIPTION "streaming" option now supports "parallel" to enable parallel application. Perform apply of large transactions by parallel workers. The number of parallel workers is controlled by
the new server variable max_parallel_apply_workers_per_subscription. Wait events LogicalParallelApplyMain, LogicalParallelApplyStateChange, and LogicalApplySendData were also added. Column leader_pid was
added to system view pg_stat_subscription to track parallel activity.
</para>
</listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-03-15 [89e46da5e] Allow the use of indexes other than PK and REPLICA IDENT
-->
<listitem>
<para>
Improve performance for logical replication apply without a primary key (Onder Kalaci, Amit Kapila)
</para>
<para>
Specifically, REPLICA IDENTITY FULL can now use btree indexes rather than sequentially scanning the table to find matches.
</para>
</listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-07-21 [366283961] Allow users to skip logical replication of data having o
Author: Amit Kapila <akapila@postgresql.org>
2022-09-08 [875693019] Raise a warning if there is a possibility of data from m
-->
<listitem>
<para>
Allow logical replication subscribers to process only changes that have no origin (Vignesh C, Amit Kapila)
</para>
<para>
This can be used to avoid replication loops.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-04-04 [1e10d49b6] Perform logical replication actions as the table owner.
Author: Robert Haas <rhaas@postgresql.org>
2023-04-04 [482675987] Add a run_as_owner option to subscriptions.
-->
<listitem>
<para>
Perform logical replication SELECT and DML actions as the table owner (Robert Haas)
</para>
<para>
This improves security and now requires subscription owners to be either superusers or to have SET ROLE permissions on all tables in the replication set. The previous behavior of performing all operations
as the subscription owner can be enabled with the subscription run_as_owner option.
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-22 [5a3a95385] Track logrep apply workers' last start times to avoid us
-->
<listitem>
<para>
Have wal_retrieve_retry_interval operate on a per-subscription basis (Nathan Bossart)
</para>
<para>
Previously the retry time was applied globally. This also adds wait events LogicalRepLauncherDSA and LogicalRepLauncherHash.
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [be87200ef] Support invalidating replication slots due to horizon an
Author: Andres Freund <andres@anarazel.de>
2023-04-08 [26669757b] Handle logical slot conflicts on standby
-->
<listitem>
<para>
Allow invalidation of replication slots due to row removal, wal_level, and conflicts (Bertrand Drouvot, Andres Freund, Amit Khandekar)
</para>
<para>
Invalidated slots are indicated in the pg_replication_slots.conflicting column.
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3 id="release-16-utility">
<title>Utility Commands</title>
<itemizedlist>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-24 [3c05284d8] Invent GENERIC_PLAN option for EXPLAIN.
-->
<listitem>
<para>
Add EXPLAIN option GENERIC_PLAN to display the query's generic plan (Laurenz Albe)
</para>
</listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-03-13 [9f8377f7a] Add a DEFAULT option to COPY FROM
-->
<listitem>
<para>
Allow a COPY FROM value to map to a column's DEFAULT (Israel Barth Rubio)
</para>
</listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2022-10-13 [97da48246] Allow batch insertion during COPY into a foreign table.
-->
<listitem>
<para>
Allow COPY into foreign tables to add rows in batches (Andrey Lepikhov, Etsuro Fujita)
</para>
<para>
This is controlled by the postgres_fdw "batch_size" option.
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-13 [784cedda0] Allow specifying STORAGE attribute for a new table
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-10 [b9424d014] Support writing "CREATE/ALTER TABLE ... SET STORAGE DEFA
-->
<listitem>
<para>
Allow the STORAGE type to be specified by CREATE TABLE (Teodor Sigaev, Aleksander Alekseev)
</para>
<para>
Previously only ALTER TABLE could control this
</para>
</listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-12 [3b00a944a] Support TRUNCATE triggers on foreign tables.
-->
<listitem>
<para>
Allow truncate triggers on foreign tables (Yugo Nagata)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-06 [4211fbd84] Add PROCESS_MAIN to VACUUM
-->
<listitem>
<para>
Allow VACUUM and vacuumdb to only process TOAST tables (Nathan Bossart)
</para>
<para>
This is accomplished by having VACUUM turn off PROCESS_MAIN or by vacuumdb using the --no-process-main option.
</para>
</listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-06 [a46a7011b] Add options to control whether VACUUM runs vac_update_da
-->
<listitem>
<para>
Add VACUUM option to skip or update all frozen statistics (Tom Lane, Nathan Bossart)
</para>
<para>
The options are SKIP_DATABASE_STATS and ONLY_DATABASE_STATS.
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-19 [2cbc3c17a] Rework logic and simplify syntax of REINDEX DATABASE/SYS
Author: Michael Paquier <michael@paquier.xyz>
2022-07-26 [0a5f06b84] Fix a few issues with REINDEX grammar
-->
<listitem>
<para>
Change REINDEX DATABASE and REINDEX SYSTEM to no longer require an argument (Simon Riggs)
</para>
<para>
Previously the database name had to be specified.
</para>
</listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-07-21 [624aa2a13] Make the name optional in CREATE STATISTICS.
-->
<listitem>
<para>
Allow CREATE STATISTICS to generate a statistics name if none is specified (Simon Riggs)
Improve pg_basebackup to accept numeric compression options (Georgios Kokolatos, Michael Paquier)
</para>
<para>
Options like "--compress=server-5" are now supported.
</para>
</listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-04-18 [363e8f911] Fix pg_basebackup with in-place tablespaces some more.
-->
<listitem>
<para>
Fix pg_basebackup to handle tablespaces stored in the PGDATA directory (Robert Haas)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-27 [d497093cb] pg_waldump: Add - -save-fullpage=PATH to save full page i
-->
<listitem>
<para>
Add pg_waldump option --save-fullpage to dump full page images (David Christensen)
</para>
</listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-21 [4c8044c04] pg_waldump: Allow hexadecimal values for -t/- -timeline o
-->
<listitem>
<para>
Allow pg_waldump options -t/--timeline to accept hexadecimal values (Peter Eisentraut)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-02-06 [d07c2948b] Add support for progress reporting to pg_verifybackup
-->
<listitem>
<para>
Add support for progress reporting to pg_verifybackup (Masahiko Sawada)
</para>
</listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2023-02-23 [009eeee74] pg_rewind: Fix determining TLI when server was just prom
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2023-02-27 [0a0500207] pg_rewind: Remove notice in docs about running CHECKPOIN
-->
<listitem>
<para>
Allow pg_rewind to properly track timeline changes (Heikki Linnakangas)
</para>
<para>
Previously if pg_rewind was run after a timeline switch but before a checkpoint was issued, it might incorrectly determine that a rewind was unnecessary.
</para>
</listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2022-09-14 [8b60db774] Handle SIGTERM in pg_receivewal and pg_recvlogical
-->
<listitem>
<para>
Have pg_receivewal and pg_recvlogical cleanly exit on SIGTERM (Christoph Berg)
</para>
<para>
This signal is often used by systemd.
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3 id="release-16-source-code">
<title>Source Code</title>
<itemizedlist>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-04-18 [fcb21b3ac] Build ICU support by default.
-->
<listitem>
<para>
Build ICU support by default (Jeff Davis)
</para>
<para>
This removes build flag --with-icu and adds flag --without-icu.
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-04 [56f2c7b58] Support SSE2 intrinsics where available
-->
<listitem>
<para>
Add support for SSE2 (Streaming SIMD Extensions 2) vector operations on x86-64 architectures (John Naylor)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-29 [82739d4a8] Use ARM Advanced SIMD (NEON) intrinsics where available
-->
<listitem>
<para>
Add support for Advanced SIMD (Single Instruction Multiple Data) (NEON) instructions on ARM architectures (Nathan Bossart)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-26 [121d2d3d7] Use SSE2 in is_valid_ascii() where available.
-->
<listitem>
<para>
Allow ASCII string detection to use vector operations on x86-64 architectures (John Naylor)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-02 [0a8de93a4] Speed up lexing of long JSON strings
-->
<listitem>
<para>
Allow JSON string processing to use vector operations on x86-64 architectures (John Naylor)
</para>
<para>
ARM?
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-10 [b6ef16756] Introduce optimized routine for linear searches of array
Author: John Naylor <john.naylor@postgresql.org>
2022-08-26 [e813e0e16] Add optimized functions for linear search within byte ar
-->
<listitem>
<para>
Allow arrays searches to use vector operations on x86-64 architectures (John Naylor)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-11 [37a6e5df3] Optimize xid/subxid searches in XidInMVCCSnapshot().
-->
<listitem>
<para>
Allow xid/subxid searches to use vector operations on x86-64 architectures (Nathan Bossart)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-28 [36389a060] Enable RandomizedBaseAddress (ASLR) on Windows with MSVC
-->
<listitem>
<para>
Have Windows binaries built with MSVC use RandomizedBaseAddress (ASLR) (Michael Paquier)
</para>
<para>
This was already enabled on MinGW builds.
</para>
</listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2022-07-17 [089480c07] Default to hidden visibility for extension libraries whe
Author: Andres Freund <andres@anarazel.de>
2022-07-17 [8cf64d35e] Mark all symbols exported from extension libraries PGDLL
-->
<listitem>
<para>
Prevent extension libraries from export their symbols by default (Andres Freund, Tom Lane)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-07 [495ed0ef2] Make Windows 10 the minimal runtime requirement for WIN3
-->
<listitem>
<para>
Require Windows 10 or newer versions (Michael Paquier, Juan José Santamaría Flecha
</para>
<para>
Previously Windows Vista and Windows XP were supported.
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-14 [4c1532763] Bump minimum Perl version to 5.14
-->
<listitem>
<para>
Require Perl version 5.14 or later (John Naylor)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-09 [b086a47a2] Bump minimum version of Bison to 2.3
-->
<listitem>
<para>
Require Bison version 2.3 or later (John Naylor)
</para>
</listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-09 [8b878bffa] Bump minimum version of Flex to 2.5.35
-->
<listitem>
<para>
Require Flex version 2.5.35 or later (John Naylor)
</para>
</listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2023-04-13 [f7431bca8] Explicitly require MIT Kerberos for GSSAPI
-->
<listitem>
<para>
Require MIT Kerberos for GSSAPI support (Stephen Frost)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-14 [6203583b7] Remove support for Visual Studio 2013
-->
<listitem>
<para>
Remove support for Visual Studio 2013 (Michael Paquier)
The new options are --show-diff, --silent-diff, --commit, and --help, and allow multiple --exclude options. Also require the typedef file to be explicitly specified. Options --code-base and --build were
Add pg_walinspect function pg_get_wal_block() to report WAL block information (Michael Paquier, Melanie Plageman, Bharath Rupireddy)
</para>
</listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-30 [122376f02] Show record information in pg_get_wal_block_info.
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-31 [df4f3ab51] Add show_data option to pg_get_wal_block_info.
-->
<listitem>
<para>
Add output fields to pg_walinspect's function pg_get_wal_block_info() (Bharath Rupireddy, Peter Geoghegan)
</para>
</listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [5c1b66280] Rework design of functions in pg_walinspect
-->
<listitem>
<para>
Change how pg_walinspect functions pg_get_wal_records_info(), pg_get_wal_stats(), and pg_get_wal_block_info() interpret ending LSNs (Bharath Rupireddy)
</para>
<para>
Previously ending LSNs which represent nonexistent WAL locations would generate an error, while they will now be interpreted as the end of the WAL. Functions pg_get_wal_records_info_till_end_of_wal() and
pg_get_wal_stats_till_end_of_wal() have been removed.
</para>
</listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-07 [7d8219a44] Show more detail in heapam rmgr descriptions.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-07 [1c453cfd8] Show more detail in nbtree rmgr descriptions.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-11 [96149a180] Fix Heap rmgr's desc output for infobits arrays.