<!-- doc/src/sgml/release-16.sgml -->
<!-- See header comment in release.sgml about typical markup -->

 <sect1 id="release-16-4">
  <title>Release 16.4</title>

  <formalpara>
  <title>Release date:</title>
  <para>2024-08-08</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 16.3.
   For information about new features in major release 16, see
   <xref linkend="release-16"/>.
  </para>

  <sect2 id="release-16-4-migration">
   <title>Migration to Version 16.4</title>

   <para>
    A dump/restore is not required for those running 16.X.
   </para>

   <para>
    However, if you are upgrading from a version earlier than 16.3,
    see <xref linkend="release-16-3"/>.
   </para>
  </sect2>

  <sect2 id="release-16-4-changes">
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [66e94448a] 2024-08-05 06:05:33 -0700
Branch: REL_17_STABLE [fdf218f1d] 2024-08-05 06:05:30 -0700
Branch: REL_16_STABLE [6aba85a4b] 2024-08-05 06:05:28 -0700
Branch: REL_15_STABLE [e81e53a0c] 2024-08-05 06:05:25 -0700
Branch: REL_14_STABLE [72ef1675e] 2024-08-05 06:05:23 -0700
Branch: REL_13_STABLE [bbc94abf6] 2024-08-05 06:05:20 -0700
Branch: REL_12_STABLE [79c7a7e29] 2024-08-05 06:05:17 -0700
-->
     <para>
      Prevent unauthorized code execution
      during <application>pg_dump</application> (Masahiko Sawada)
     </para>

     <para>
      An attacker able to create and drop non-temporary objects could
      inject SQL code that would be executed by a
      concurrent <application>pg_dump</application> session with the
      privileges of the role running <application>pg_dump</application>
      (which is often a superuser).  The attack involves replacing a
      sequence or similar object with a view or foreign table that will
      execute malicious code.  To prevent this, introduce a new server
      parameter <varname>restrict_nonsystem_relation_kind</varname> that
      can disable expansion of non-builtin views as well as access to
      foreign tables, and teach <application>pg_dump</application> to set
      it when available.  Note that the attack is prevented only if
      both <application>pg_dump</application> and the server it is dumping
      from are new enough to have this fix.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Noah Misch for reporting this problem.
      (CVE-2024-7348)
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [0ffc0acaf] 2024-07-08 10:11:46 +0900
Branch: REL_17_STABLE [cccab85c2] 2024-07-08 10:17:12 +0900
Branch: REL_16_STABLE [507f2347e] 2024-07-08 10:30:28 +0900
-->
     <para>
      Avoid incorrect results from Merge Right Anti Join plans
      (Richard Guo)
     </para>

     <para>
      If the inner relation is known to have unique join keys, the merge
      could misbehave when there are duplicated join keys in the outer
      relation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
Branch: master [83c39a1f7] 2024-07-19 12:04:00 -0400
Branch: REL_17_STABLE [fd4f12df5] 2024-07-19 12:12:03 -0400
Branch: REL_16_STABLE [06bf404cd] 2024-07-19 12:11:41 -0400
Branch: REL_15_STABLE [dc6354c67] 2024-07-19 12:05:51 -0400
Branch: REL_14_STABLE [45ce054c0] 2024-07-19 12:07:53 -0400
-->
     <para>
      Prevent infinite loop in <command>VACUUM</command>
      (Melanie Plageman)
     </para>

     <para>
      After a disconnected standby server with an old running transaction
      reconnected to the primary, it was possible
      for <command>VACUUM</command> on the primary to get confused about
      which tuples are removable, resulting in an infinite loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [3dd637f3d] 2024-07-24 12:38:18 +0200
Branch: REL_17_STABLE [2b22543a4] 2024-07-24 12:38:18 +0200
Branch: REL_16_STABLE [084814d88] 2024-07-24 12:38:18 +0200
Branch: REL_15_STABLE [f74fac06c] 2024-07-24 12:38:18 +0200
Branch: REL_14_STABLE [fe1d16f66] 2024-07-24 12:38:18 +0200
Branch: REL_13_STABLE [ed7430975] 2024-07-24 12:38:18 +0200
Branch: REL_12_STABLE [08b6a9ecf] 2024-07-24 12:38:18 +0200
-->
     <para>
      Fix failure after attaching a table as a partition, if the
      table had previously had inheritance children
      (&Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [839177913] 2024-07-12 12:54:01 +0200
Branch: REL_17_STABLE [30ca4e1ab] 2024-07-12 12:54:01 +0200
Branch: REL_16_STABLE [00a40e33c] 2024-07-12 12:54:01 +0200
Branch: REL_15_STABLE [4ae09c59d] 2024-07-12 12:54:01 +0200
Branch: REL_14_STABLE [66aaa7a71] 2024-07-12 12:54:01 +0200
Branch: REL_13_STABLE [057482569] 2024-07-12 12:54:01 +0200
Branch: REL_12_STABLE [d0054432d] 2024-07-12 12:54:01 +0200
Branch: master [74e12db19] 2024-07-12 13:44:19 +0200
Branch: REL_17_STABLE [0340eefd9] 2024-07-12 13:44:19 +0200
Branch: REL_16_STABLE [34eb37f79] 2024-07-12 13:44:19 +0200
Branch: REL_15_STABLE [9f0f72d89] 2024-07-12 13:44:19 +0200
Branch: REL_14_STABLE [2f5007459] 2024-07-12 13:44:19 +0200
Branch: REL_13_STABLE [7898a494f] 2024-07-12 13:44:19 +0200
Branch: REL_12_STABLE [067cb6c5d] 2024-07-12 13:44:19 +0200
-->
     <para>
      Fix <command>ALTER TABLE DETACH PARTITION</command> for cases
      involving inconsistent index-based constraints
      (&Aacute;lvaro Herrera, Tender Wang)
     </para>

     <para>
      When a partitioned table has an index that is not associated with a
      constraint, but a partition has an equivalent index that is, then
      detaching the partition would misbehave, leaving the ex-partition's
      constraint with an incorrect <structfield>coninhcount</structfield>
      value.  This would cause trouble during any further manipulations of
      that constraint.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master Release: REL_17_BR [27162a64b] 2024-06-24 15:56:32 +0200
Branch: REL_16_STABLE [96105ebfe] 2024-06-24 15:56:32 +0200
Branch: REL_15_STABLE [fb0fb0740] 2024-06-24 15:56:32 +0200
Branch: REL_14_STABLE [66e569f50] 2024-06-24 15:56:32 +0200
Branch: master Release: REL_17_BR [c2fab7024] 2024-06-11 11:38:45 +0200
Branch: REL_16_STABLE [bf78abebf] 2024-06-11 11:38:45 +0200
Branch: REL_15_STABLE [03c8cdbb7] 2024-06-11 11:38:45 +0200
Branch: REL_14_STABLE [5dcaefc6a] 2024-06-11 11:38:45 +0200
-->
     <para>
      Fix partition pruning setup during <literal>ALTER TABLE DETACH
      PARTITION CONCURRENTLY</literal> (&Aacute;lvaro Herrera)
     </para>

     <para>
      The executor assumed that no partition could be detached between
      planning and execution of a query on a partitioned table.  This is
      no longer true since the introduction of <literal>DETACH
      PARTITION</literal>'s <literal>CONCURRENTLY</literal> option, making
      it possible for query execution to fail transiently when that is
      used.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [710207032] 2024-07-13 08:09:33 -0700
Branch: REL_17_STABLE [f5bb46fb2] 2024-07-13 08:09:36 -0700
Branch: REL_16_STABLE [e81deeefc] 2024-07-13 08:09:37 -0700
Branch: REL_15_STABLE [2b4a2a79e] 2024-07-13 08:09:37 -0700
Branch: REL_14_STABLE [2b415e95a] 2024-07-13 08:09:37 -0700
-->
     <para>
      Correctly update a partitioned table's
      <structname>pg_class</structname>.<structfield>reltuples</structfield>
      field to zero after its last child partition is dropped (Noah Misch)
     </para>

     <para>
      The first <command>ANALYZE</command> on such a partitioned table
      must update <structfield>relhassubclass</structfield> as well, and
      that caused the <structfield>reltuples</structfield> update to be
      lost.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [f535f350c] 2024-05-14 20:19:20 -0400
Branch: REL_16_STABLE [8e0e99972] 2024-05-14 20:19:20 -0400
Branch: REL_15_STABLE [c40e78d23] 2024-05-14 20:19:20 -0400
Branch: REL_14_STABLE [525bd1620] 2024-05-14 20:19:20 -0400
Branch: REL_13_STABLE [e85f641b2] 2024-05-14 20:19:20 -0400
Branch: REL_12_STABLE [70ffb27b2] 2024-05-14 20:19:20 -0400
Branch: master Release: REL_17_BR [751598263] 2024-06-06 15:16:56 -0400
Branch: REL_16_STABLE [bb331af4a] 2024-06-06 15:16:56 -0400
Branch: REL_15_STABLE [5fe43d41d] 2024-06-06 15:16:56 -0400
Branch: REL_14_STABLE [d88dcdf0f] 2024-06-06 15:16:56 -0400
Branch: REL_13_STABLE [9de0ff91a] 2024-06-06 15:16:56 -0400
Branch: REL_12_STABLE [4208f44c9] 2024-06-06 15:16:56 -0400
-->
     <para>
      Fix handling of polymorphic output arguments for procedures
      (Tom Lane)
     </para>

     <para>
      The SQL <command>CALL</command> statement did not resolve the
      correct data types for such arguments, leading to errors such
      as <quote>cannot display a value of type anyelement</quote>, or even
      outright crashes.  (But <command>CALL</command>
      in <application>PL/pgSQL</application> worked correctly.)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [2dc1deaea] 2024-06-07 13:27:26 -0400
Branch: REL_16_STABLE [0d18b8eb4] 2024-06-07 13:27:26 -0400
Branch: REL_15_STABLE [a160e9277] 2024-06-07 13:27:26 -0400
Branch: REL_14_STABLE [0f7d1338c] 2024-06-07 13:27:26 -0400
Branch: REL_13_STABLE [1d4ea1376] 2024-06-07 13:27:26 -0400
Branch: REL_12_STABLE [0be81dd71] 2024-06-07 13:27:26 -0400
-->
     <para>
      Fix behavior of stable functions called from
      a <command>CALL</command> statement's argument list (Tom Lane)
     </para>

     <para>
      If the <command>CALL</command> is within an atomic context
      (e.g. there's an outer transaction block), such functions were
      passed the wrong snapshot, causing them to see stale values of rows
      modified since the start of the outer transaction.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [a9a7c2c3e] 2024-05-22 18:22:58 -0400
Branch: REL_16_STABLE [019ea7675] 2024-05-22 18:22:51 -0400
-->
     <para>
      Fix input of ISO-8601 <quote>extended</quote> time format for
      types <type>time</type> and <type>timetz</type> (Tom Lane)
     </para>

     <para>
      Re-allow cases such as <literal>T12:34:56</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [22b0ccd65] 2024-07-19 11:52:32 -0500
Branch: REL_17_STABLE [3764ee47f] 2024-07-19 11:52:32 -0500
Branch: REL_16_STABLE [34e9dce69] 2024-07-19 11:52:32 -0500
Branch: REL_15_STABLE [b82791c8f] 2024-07-19 11:52:32 -0500
Branch: REL_14_STABLE [e8dfe0430] 2024-07-19 11:52:32 -0500
Branch: REL_13_STABLE [c5321e965] 2024-07-19 11:52:32 -0500
Branch: REL_12_STABLE [4f9628158] 2024-07-19 11:52:32 -0500
-->
     <para>
      Detect integer overflow in <type>money</type> calculations
      (Joseph Koshakow)
     </para>

     <para>
      None of the arithmetic functions for the <type>money</type> type
      checked for overflow before, so they would silently give wrong
      answers for overflowing cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [1ff39f4ff] 2024-07-08 17:48:45 +0100
Branch: REL_17_STABLE [7a8977d25] 2024-07-08 17:51:23 +0100
Branch: REL_16_STABLE [f7aec8c1d] 2024-07-08 17:52:52 +0100
Branch: REL_15_STABLE [47ca912de] 2024-07-08 17:54:22 +0100
Branch: REL_14_STABLE [a3c0124f6] 2024-07-08 17:55:31 +0100
Branch: REL_13_STABLE [ece296926] 2024-07-08 17:56:51 +0100
Branch: REL_12_STABLE [8badee787] 2024-07-08 17:58:42 +0100
-->
     <para>
      Fix over-aggressive clamping of the scale argument
      in <function>round(numeric)</function>
      and <function>trunc(numeric)</function> (Dean Rasheed)
     </para>

     <para>
      These functions clamped their scale argument to +/-2000, but there
      are valid use-cases for it to be larger; the functions returned
      incorrect results in such cases.  Instead clamp to the actual
      allowed range of type <type>numeric</type>.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [b181062aa] 2024-07-28 22:22:52 +1200
Branch: REL_17_STABLE [1e020258e] 2024-07-28 22:23:32 +1200
Branch: REL_16_STABLE [6f6b0f193] 2024-07-28 22:23:54 +1200
Branch: REL_15_STABLE [0a80e88d9] 2024-07-28 22:24:15 +1200
-->
     <para>
      Fix result for <function>pg_size_pretty()</function> when applied to
      the smallest possible <type>bigint</type> value (Joseph Koshakow)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master Release: REL_17_BR [3cb2f13ac] 2024-05-13 15:53:50 -0500
Branch: REL_16_STABLE [c1664c8ee] 2024-05-13 15:54:04 -0500
Branch: REL_15_STABLE [857d280c6] 2024-05-13 15:54:10 -0500
Branch: REL_14_STABLE [c8714230a] 2024-05-13 15:54:14 -0500
Branch: REL_13_STABLE [09ec5d455] 2024-05-13 15:54:18 -0500
Branch: REL_12_STABLE [2812059d3] 2024-05-13 15:54:23 -0500
-->
     <para>
      Prevent <function>pg_sequence_last_value()</function> from failing
      on unlogged sequences on standby servers and on temporary sequences
      of other sessions (Nathan Bossart)
     </para>

     <para>
      Make it return NULL in these cases instead of throwing an error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [56a829621] 2024-06-13 20:35:02 -0400
Branch: REL_16_STABLE [086ecd12b] 2024-06-13 20:35:02 -0400
Branch: REL_15_STABLE [df95c1ec0] 2024-06-13 20:35:03 -0400
Branch: REL_14_STABLE [5912bf77c] 2024-06-13 20:34:43 -0400
Branch: REL_13_STABLE [c7de5a654] 2024-06-13 20:34:43 -0400
Branch: REL_12_STABLE [5e63a6f43] 2024-06-13 20:34:43 -0400
-->
     <para>
      Fix parsing of ignored operators
      in <function>websearch_to_tsquery()</function> (Tom Lane)
     </para>

     <para>
      Per the manual, punctuation in the input
      of <function>websearch_to_tsquery()</function> is ignored except for
      the special cases of dashes and quotes.  However, parentheses and a
      few other characters appearing immediately before
      an <literal>or</literal> could cause <literal>or</literal> to be
      treated as a data word, rather than as an <literal>OR</literal>
      operator as expected.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [991f8cf8a] 2024-07-23 21:59:02 -0500
Branch: REL_17_STABLE [657e54a05] 2024-07-23 21:59:02 -0500
Branch: REL_16_STABLE [a57d16865] 2024-07-23 21:59:02 -0500
Branch: REL_15_STABLE [547dd2cbd] 2024-07-23 21:59:02 -0500
Branch: REL_14_STABLE [670fb9f18] 2024-07-23 21:59:02 -0500
Branch: REL_13_STABLE [6c1b71bc6] 2024-07-23 21:59:02 -0500
Branch: REL_12_STABLE [878e8c6be] 2024-07-23 21:59:02 -0500
-->
     <para>
      Detect another integer overflow case while computing new array
      dimensions (Joseph Koshakow)
     </para>

     <para>
      Reject applying array
      dimensions <literal>[-2147483648:2147483647]</literal> to an empty
      array.  This is closely related to CVE-2023-5869, but appears
      harmless since the array still ends up empty.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [679c5084c] 2024-07-30 16:23:20 -0700
Branch: REL_17_STABLE [10fdc67f8] 2024-07-30 16:25:03 -0700
Branch: REL_16_STABLE [403cbd210] 2024-07-30 16:25:21 -0700
-->
     <para>
      Fix unportable usage of <function>strnxfrm()</function> (Jeff Davis)
     </para>

     <para>
      Some code paths for non-deterministic collations could fail with
      errors like <quote>pg_strnxfrm() returned unexpected result</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master Release: REL_17_BR [f9f47f0d9] 2024-06-27 19:21:06 -0700
Branch: REL_16_STABLE [e4afd7153] 2024-06-27 19:21:10 -0700
Branch: REL_15_STABLE [b08a4b616] 2024-06-27 19:21:11 -0700
Branch: REL_14_STABLE [af73e37fa] 2024-06-27 19:21:12 -0700
Branch: REL_13_STABLE [7a21306ae] 2024-06-27 19:21:13 -0700
Branch: REL_12_STABLE [11f3815d6] 2024-06-27 19:21:13 -0700
-->
     <para>
      Detect another case of a new catalog cache entry becoming stale
      while detoasting its fields (Noah Misch)
     </para>

     <para>
      An in-place update occurring while we expand out-of-line fields in a
      catalog tuple could be missed, leading to a catalog cache entry that
      lacks the in-place change but is not known to be stale.  This is
      only possible in the <structname>pg_database</structname> catalog,
      so the effects are narrow, but misbehavior is possible.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [220003b9b] 2024-07-20 13:40:15 -0400
Branch: REL_17_STABLE [041a00c48] 2024-07-20 13:40:15 -0400
Branch: REL_16_STABLE [fd958bbbd] 2024-07-20 13:40:15 -0400
Branch: REL_15_STABLE [96953052a] 2024-07-20 13:40:15 -0400
Branch: REL_14_STABLE [0d712ec12] 2024-07-20 13:40:15 -0400
Branch: REL_13_STABLE [461f47948] 2024-07-20 13:40:15 -0400
Branch: REL_12_STABLE [feca6c688] 2024-07-20 13:40:15 -0400
-->
     <para>
      Correctly check updatability of view columns targeted
      by <literal>INSERT</literal> ... <literal>DEFAULT</literal>
      (Tom Lane)
     </para>

     <para>
      If such a column is non-updatable, we should give an error reporting
      that.  But the check was missed and then later code would report an
      unhelpful error such as <quote>attribute
      number <replaceable>N</replaceable> not found in view
      targetlist</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f96c2c727] 2024-07-14 13:49:46 -0400
Branch: REL_17_STABLE [cf588e10f] 2024-07-14 13:49:46 -0400
Branch: REL_16_STABLE [8fc487614] 2024-07-14 13:49:46 -0400
Branch: REL_15_STABLE [e7f9f44e3] 2024-07-14 13:49:46 -0400
Branch: REL_14_STABLE [02b4f5e1f] 2024-07-14 13:49:46 -0400
Branch: REL_13_STABLE [b020a866a] 2024-07-14 13:49:46 -0400
Branch: REL_12_STABLE [236b225ed] 2024-07-14 13:49:46 -0400
-->
     <para>
      Avoid reporting an unhelpful internal error for incorrect recursive
      queries (Tom Lane)
     </para>

     <para>
      Rearrange the order of error checks so that we throw an on-point
      error when a <command>WITH RECURSIVE</command> query does not have a
      self-reference within the second arm of
      the <literal>UNION</literal>, but does have one self-reference in
      some other place such as <literal>ORDER BY</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master Release: REL_17_BR [f88cdb36c] 2024-06-27 19:21:05 -0700
Branch: REL_16_STABLE [112d05570] 2024-06-27 19:21:09 -0700
Branch: REL_15_STABLE [24561b498] 2024-06-27 19:21:10 -0700
-->
     <para>
      Lock owned sequences during <literal>ALTER TABLE SET
      LOGGED|UNLOGGED</literal> (Noah Misch)
     </para>

     <para>
      These commands change the persistence of a table's owned sequences
      along with the table, but they failed to acquire lock on the
      sequences while doing so.  This could result in losing the effects
      of concurrent <function>nextval()</function> calls.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [e6d0d16ad] 2024-06-20 14:21:36 -0400
Branch: REL_16_STABLE [4f1966676] 2024-06-20 14:21:36 -0400
Branch: REL_15_STABLE [1424c7abc] 2024-06-20 14:21:36 -0400
Branch: REL_14_STABLE [88f3baa06] 2024-06-20 14:21:36 -0400
Branch: REL_13_STABLE [9ce8ee9d3] 2024-06-20 14:21:36 -0400
Branch: REL_12_STABLE [b0037bbef] 2024-06-20 14:21:36 -0400
-->
     <para>
      Don't throw an error if a queued <literal>AFTER</literal> trigger no
      longer exists (Tom Lane)
     </para>

     <para>
      It's possible for a transaction to execute an operation that queues
      a deferred <literal>AFTER</literal> trigger for later execution, and
      then to drop the trigger before that happens.  Formerly this led to
      weird errors such as <quote>could not find
      trigger <replaceable>NNNN</replaceable></quote>.  It seems better to
      silently do nothing if the trigger no longer exists at the time when
      it would have been executed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [76618097a] 2024-06-14 16:20:35 -0400
Branch: REL_16_STABLE [9cf4beb9e] 2024-06-14 16:20:35 -0400
Branch: REL_15_STABLE [1f1eedd3f] 2024-06-14 16:20:35 -0400
Branch: REL_14_STABLE [f3f6a14ce] 2024-06-14 16:20:35 -0400
Branch: REL_13_STABLE [198de7961] 2024-06-14 16:20:35 -0400
Branch: REL_12_STABLE [0a39343ae] 2024-06-14 16:20:35 -0400
-->
     <para>
      Fix failure to remove <structname>pg_init_privs</structname> entries
      for column-level privileges when their table is dropped (Tom Lane)
     </para>

     <para>
      If an extension grants some column-level privileges on a table it
      creates, relevant catalog entries would remain behind after the
      extension is dropped.  This was harmless until/unless the table's
      OID was re-used for another relation, when it could interfere with
      what <application>pg_dump</application> dumps for that relation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [915de706d] 2024-06-11 17:57:46 -0400
Branch: REL_16_STABLE [b188e1bf7] 2024-06-11 17:57:46 -0400
Branch: REL_15_STABLE [1d0399b54] 2024-06-11 17:57:46 -0400
Branch: REL_14_STABLE [096f2132c] 2024-06-11 17:57:46 -0400
Branch: REL_13_STABLE [5e8aa32a9] 2024-06-11 17:57:46 -0400
Branch: REL_12_STABLE [9256bf6eb] 2024-06-11 17:57:46 -0400
-->
     <para>
      Fix selection of an arbiter index for <literal>ON CONFLICT</literal>
      when the desired index has expressions or predicates (Tom Lane)
     </para>

     <para>
      If a query using <literal>ON CONFLICT</literal> accesses the target
      table through an updatable view, it could fail with <quote>there is
      no unique or exclusion constraint matching the ON CONFLICT
      specification</quote>, even though a matching index does exist.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [7ed8ce8a4] 2024-06-07 14:50:09 -0400
Branch: REL_16_STABLE [8397f161e] 2024-06-07 14:50:09 -0400
Branch: REL_15_STABLE [3c71cb497] 2024-06-07 14:50:09 -0400
Branch: REL_14_STABLE [2dad0f433] 2024-06-07 14:50:09 -0400
Branch: REL_13_STABLE [7c4ac652e] 2024-06-07 14:50:09 -0400
Branch: REL_12_STABLE [b8efd756d] 2024-06-07 14:50:09 -0400
-->
     <para>
      Refuse to modify a temporary table of another session
      with <literal>ALTER TABLE</literal> (Tom Lane)
     </para>

     <para>
      Permissions checks normally would prevent this case from arising,
      but it is possible to reach it by altering a parent table whose
      child is another session's temporary table.  Throw an error if we
      discover that such a child table belongs to another session.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [5278668d7] 2024-05-22 17:54:17 -0400
Branch: REL_16_STABLE [2aa90c02d] 2024-05-22 17:54:17 -0400
Branch: REL_15_STABLE [2f3cfcf76] 2024-05-22 17:54:17 -0400
Branch: REL_14_STABLE [1015162c3] 2024-05-22 17:54:17 -0400
-->
     <para>
      Fix handling of extended statistics on expressions
      in <literal>CREATE TABLE LIKE STATISTICS</literal> (Tom Lane)
     </para>

     <para>
      The <literal>CREATE</literal> command failed to adjust column
      references in statistics expressions to the possibly-different
      column numbering of the new table.  This resulted in invalid
      statistics objects that would cause problems later.  A typical
      scenario where renumbering columns is needed is when the source
      table contains some dropped columns.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [d0d44049d] 2023-07-14 11:41:20 -0400
Branch: master Release: REL_17_BR [779ac2c74] 2024-05-18 14:26:13 -0400
Branch: REL_16_STABLE [ce0d16544] 2024-05-18 14:31:35 -0400
Branch: REL_15_STABLE [4ac385adc] 2024-05-18 14:31:35 -0400
Branch: REL_14_STABLE [5ac340602] 2024-05-18 14:31:35 -0400
Branch: REL_13_STABLE [7f90a5dc3] 2024-05-18 14:31:35 -0400
Branch: REL_12_STABLE [686c995fc] 2024-05-18 14:31:35 -0400
-->
     <para>
      Fix failure to recalculate sub-queries generated
      from <function>MIN()</function> or <function>MAX()</function>
      aggregates (Tom Lane)
     </para>

     <para>
      In some cases the aggregate result computed at one row of the outer
      query could be re-used for later rows when it should not be.  This
      has only been seen to happen when the outer query uses
      <literal>DISTINCT</literal> that is implemented with hash
      aggregation, but other cases may exist.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master Release: REL_17_BR [98b4f53d1] 2024-05-15 13:49:41 +0200
Branch: REL_16_STABLE [315661eca] 2024-05-15 13:54:00 +0200
-->
     <para>
      Re-forbid underscore in positional parameters (Erik Wienhold)
     </para>

     <para>
      As of v16 we allow integer literals to contain underscores.
      This change caused input such as <literal>$1_234</literal>
      to be taken as a single token, but it did not work correctly.
      It seems better to revert to the original definition in which a
      parameter symbol is only <literal>$</literal> followed by digits.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [5d6c64d29] 2024-06-27 14:44:02 -0400
Branch: REL_16_STABLE [07d66d3cc] 2024-06-27 14:44:02 -0400
Branch: REL_15_STABLE [5401e70e4] 2024-06-27 14:44:03 -0400
Branch: REL_14_STABLE [13abc1f66] 2024-06-27 14:44:03 -0400
Branch: REL_13_STABLE [86fac88ee] 2024-06-27 14:44:03 -0400
Branch: REL_12_STABLE [dccda847b] 2024-06-27 14:44:04 -0400
-->
     <para>
      Avoid crashing when a JIT-inlined backend function throws an error
      (Tom Lane)
     </para>

     <para>
      The error state can include pointers into the dynamically loaded
      module holding the JIT-compiled code (for error location strings).
      In some code paths the module could get unloaded before the error
      report is processed, leading to SIGSEGV when the location strings
      are accessed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [066e8ac6e] 2024-07-06 15:16:13 -0400
Branch: master [6082b3d5d] 2024-07-08 14:04:00 -0400
Branch: master [e7192486d] 2024-07-09 15:01:13 -0400
Branch: master [896cd266f] 2024-07-09 16:31:24 -0400
Branch: REL_17_STABLE [a9747be27] 2024-07-10 20:15:52 -0400
Branch: REL_16_STABLE [f85c91a18] 2024-07-10 20:15:52 -0400
Branch: REL_15_STABLE [f68d6aabb] 2024-07-10 20:15:52 -0400
Branch: REL_14_STABLE [475e1807c] 2024-07-10 20:15:52 -0400
Branch: REL_13_STABLE [48132587d] 2024-07-10 20:15:52 -0400
Branch: REL_12_STABLE [a134baea7] 2024-07-10 20:15:52 -0400
-->
     <para>
      Cope with behavioral changes in <application>libxml2</application>
      version 2.13.x (Erik Wienhold, Tom Lane)
     </para>

     <para>
      Notably, we now suppress <quote>chunk is not well balanced</quote>
      errors from <application>libxml2</application>, unless that is the
      only reported error.  This is to make error reports consistent
      between 2.13.x and earlier <application>libxml2</application>
      versions.  In earlier versions, that message was almost always
      redundant or outright incorrect, so 2.13.x substantially reduced the
      number of cases in which it's reported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_17_BR [cbfbda784] 2024-06-27 21:09:58 +0300
Branch: REL_16_STABLE [b5b418b68] 2024-06-27 21:10:27 +0300
Branch: REL_15_STABLE [0e2f3d78b] 2024-06-27 21:10:31 +0300
Branch: REL_14_STABLE [9dbf8ab48] 2024-06-27 21:10:34 +0300
Branch: REL_13_STABLE [e9c8747ee] 2024-06-27 21:08:55 +0300
Branch: REL_12_STABLE [5dea6628b] 2024-06-27 21:09:15 +0300
-->
     <para>
      Fix handling of subtransactions of prepared transactions
      when starting a hot standby server (Heikki Linnakangas)
     </para>

     <para>
      When starting a standby's replay at a shutdown checkpoint WAL
      record, transactions that had been prepared but not yet committed on
      the primary are correctly understood as being still in progress.
      But subtransactions of a prepared transaction (created by savepoints
      or <application>PL/pgSQL</application> exception blocks) were not
      accounted for and would be treated as aborted.  That led to
      inconsistency if the prepared transaction was later committed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [bb19b7008] 2024-07-11 22:48:23 +0900
Branch: REL_17_STABLE [068674f4a] 2024-07-11 22:48:21 +0900
Branch: REL_16_STABLE [2f3304ce1] 2024-07-11 22:48:18 +0900
Branch: REL_15_STABLE [aee8c2b95] 2024-07-11 22:48:16 +0900
Branch: REL_14_STABLE [f7d3caf9d] 2024-07-11 22:48:13 +0900
Branch: REL_13_STABLE [cf2c69ec5] 2024-07-11 22:48:10 +0900
Branch: REL_12_STABLE [1b3707587] 2024-07-11 22:48:08 +0900
-->
     <para>
      Prevent incorrect initialization of logical replication slots
      (Masahiko Sawada)
     </para>

     <para>
      In some cases a replication slot's start point within the WAL stream
      could be set to a point within a transaction, leading to assertion
      failures or incorrect decoding results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_17_BR [cd312adc5] 2024-06-06 08:47:40 +0900
Branch: REL_16_STABLE [f2c922ff2] 2024-06-06 08:48:17 +0900
Branch: REL_15_STABLE [bfc44da24] 2024-06-06 08:48:21 +0900
-->
     <para>
      Avoid <quote>can only drop stats once</quote> error during
      replication slot creation and drop (Floris Van Nee)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master Release: REL_17_BR [3e53492aa] 2024-06-27 11:35:00 +0530
Branch: REL_16_STABLE [b8f953d8d] 2024-06-27 11:19:57 +0530
Branch: REL_15_STABLE [76fda6140] 2024-06-27 10:43:52 +0530
-->
     <para>
      Fix resource leakage in logical replication WAL sender (Hou Zhijie)
     </para>

     <para>
      The walsender process leaked memory when publishing changes to a
      partitioned table whose partitions have row types physically
      different from the partitioned table's.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_17_STABLE [31f8d620b] 2024-07-01 12:21:07 -0400
Branch: REL_16_STABLE [54a7b21b3] 2024-07-01 12:21:07 -0400
Branch: REL_15_STABLE [4df767cf9] 2024-07-01 12:21:07 -0400
Branch: REL_14_STABLE [1608902fc] 2024-07-01 12:21:07 -0400
Branch: REL_13_STABLE [5f86cd70d] 2024-07-01 12:21:07 -0400
Branch: REL_12_STABLE [8565fb6fb] 2024-07-01 12:21:07 -0400
-->
     <para>
      Avoid memory leakage after servicing a notify or sinval interrupt
      (Tom Lane)
     </para>

     <para>
      The processing functions for these events could switch the current
      memory context to TopMemoryContext, resulting in session-lifespan
      leakage of any data allocated before the incorrect setting gets
      replaced.  There were observable leaks associated with (at least)
      encoding conversion of incoming queries and parameters attached to
      Bind messages.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_17_BR [7467939ea] 2024-06-27 09:44:47 +0900
Branch: REL_16_STABLE [6f61d0e7e] 2024-06-27 09:44:51 +0900
Branch: REL_15_STABLE [eb144dfca] 2024-06-27 09:44:55 +0900
-->
     <para>
      Prevent leakage of reference counts for the shared memory block used
      for statistics (Anthonin Bonnefoy)
     </para>

     <para>
      A new backend process attaching to the statistics shared memory
      incremented its reference count, but failed to decrement the count
      when exiting.  After 2<superscript>32</superscript> sessions had
      been created, the reference count would overflow to zero, causing
      failures in all subsequent backend process starts.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_17_BR [b1ffe3ff0] 2024-06-26 23:02:06 +0300
Branch: REL_16_STABLE [e7cbe5a85] 2024-06-26 23:04:36 +0300
Branch: REL_15_STABLE [c809a2b2d] 2024-06-26 23:05:58 +0300
Branch: REL_14_STABLE [4c8e00ae9] 2024-06-26 23:06:12 +0300
-->
     <para>
      Prevent deadlocks and assertion failures during truncation of the
      multixact SLRU log (Heikki Linnakangas)
     </para>

     <para>
      A process trying to delete SLRU segments could deadlock with the
      checkpointer process.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [a8458f508] 2024-07-13 14:59:46 +1200
Branch: REL_17_STABLE [3c1c82d40] 2024-07-13 15:02:33 +1200
Branch: REL_16_STABLE [a622095bc] 2024-07-13 15:27:35 +1200
Branch: REL_15_STABLE [5546a834c] 2024-07-13 15:28:38 +1200
Branch: REL_14_STABLE [894b497ac] 2024-07-13 15:43:43 +1200
Branch: REL_13_STABLE [3554d841d] 2024-07-13 15:44:11 +1200
Branch: REL_12_STABLE [ba9fcac72] 2024-07-13 15:45:28 +1200
-->
     <para>
      Avoid possibly missing end-of-input events on Windows sockets
      (Thomas Munro)
     </para>

     <para>
      Windows reports an FD_CLOSE event only once after the remote end of
      the connection disconnects.  With unlucky timing, we could miss that
      report and wait indefinitely, or at least until a timeout elapsed,
      expecting more input.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_17_BR [855517307] 2024-05-09 12:45:37 +0900
Branch: REL_16_STABLE [5396a2987] 2024-05-09 12:45:43 +0900
Branch: REL_15_STABLE [8c3f30e67] 2024-05-09 12:45:45 +0900
Branch: REL_14_STABLE [41adf9d96] 2024-05-09 12:45:48 +0900
Branch: REL_13_STABLE [377c25d32] 2024-05-09 12:45:51 +0900
-->
     <para>
      Fix buffer overread in JSON parse error reports for incomplete byte
      sequences (Jacob Champion)
     </para>

     <para>
      It was possible to walk off the end of the input buffer by a few
      bytes when the last bytes comprise an incomplete multi-byte
      character.  While usually harmless, in principle this could cause a
      crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [274bbced8] 2024-07-26 11:09:45 +0200
Branch: REL_17_STABLE [3df7f44a8] 2024-07-26 11:09:45 +0200
Branch: REL_16_STABLE [cc606afce] 2024-07-26 11:09:45 +0200
Branch: REL_15_STABLE [118ec331b] 2024-07-26 11:09:45 +0200
Branch: REL_14_STABLE [ecbb1cd9b] 2024-07-26 11:09:45 +0200
Branch: REL_13_STABLE [1f476bc75] 2024-07-26 11:09:45 +0200
Branch: REL_12_STABLE [32121c077] 2024-07-26 11:09:45 +0200
Branch: master [161c73462] 2024-07-26 16:25:28 +0200
Branch: REL_17_STABLE [1272cfb72] 2024-07-26 16:25:56 +0200
Branch: REL_16_STABLE [83b4a6358] 2024-07-26 16:29:47 +0200
Branch: REL_15_STABLE [970cd5c62] 2024-07-26 14:16:40 +0200
Branch: REL_14_STABLE [51c1b4fd1] 2024-07-26 14:16:40 +0200
Branch: REL_13_STABLE [40e8ea949] 2024-07-26 14:16:40 +0200
Branch: REL_12_STABLE [ac77add23] 2024-07-26 14:16:40 +0200
Branch: REL_16_STABLE [441eba34d] 2024-07-26 16:29:52 +0200
Branch: REL_15_STABLE [ce3045e9b] 2024-07-26 19:09:27 +0200
Branch: REL_14_STABLE [ddd66a629] 2024-07-26 19:09:54 +0200
Branch: REL_13_STABLE [634710dfb] 2024-07-26 19:10:12 +0200
Branch: REL_12_STABLE [e6dd0b863] 2024-07-26 19:10:37 +0200
-->
     <para>
      Disable creation of stateful TLS session tickets by OpenSSL
      (Daniel Gustafsson)
     </para>

     <para>
      This avoids possible failures with clients that think receipt of
      a session ticket means that TLS session resumption is supported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [6dfac2440] 2024-06-13 13:37:49 -0400
Branch: REL_16_STABLE [82a931d3d] 2024-06-13 13:37:49 -0400
Branch: REL_15_STABLE [bf552b1b2] 2024-06-13 13:37:50 -0400
Branch: REL_14_STABLE [1450db793] 2024-06-13 13:37:50 -0400
Branch: REL_13_STABLE [1fa46dba5] 2024-06-13 13:37:50 -0400
Branch: REL_12_STABLE [ec210914c] 2024-06-13 13:37:51 -0400
-->
     <para>
      When replanning a <application>PL/pgSQL</application> <quote>simple
      expression</quote>, check it's still simple (Tom Lane)
     </para>

     <para>
      Certain fairly-artificial cases, such as dropping a referenced
      function and recreating it as an aggregate, could lead to surprising
      failures such as <quote>unexpected plan node type</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master Release: REL_17_BR [cd2624fd9] 2024-06-04 11:48:01 +0100
Branch: REL_16_STABLE [b4e909082] 2024-06-04 11:51:25 +0100
-->
     <para>
      Fix <application>PL/pgSQL</application>'s handling of integer ranges
      containing underscores (Erik Wienhold)
     </para>

     <para>
      As of v16 we allow integer literals to contain underscores,
      but <application>PL/pgSQL</application> failed to handle examples
      such as <literal>FOR i IN 1_001..1_003</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [d727c5431] 2024-05-09 13:16:34 -0400
Branch: REL_16_STABLE [52ea653aa] 2024-05-09 13:16:21 -0400
Branch: REL_15_STABLE [6e29963ed] 2024-05-09 13:16:21 -0400
Branch: REL_14_STABLE [d39337021] 2024-05-09 13:16:21 -0400
Branch: REL_13_STABLE [272867792] 2024-05-09 13:16:21 -0400
Branch: REL_12_STABLE [157b1e6b4] 2024-05-09 13:16:21 -0400
-->
     <para>
      Fix recursive <type>RECORD</type>-returning
      <application>PL/Python</application> functions (Tom Lane)
     </para>

     <para>
      If we recurse to a new call of the same function that passes a
      different column definition list (<literal>AS</literal> clause), it
      would fail because the inner call would overwrite the outer call's
      idea of what rowtype to return.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [c5bec5426] 2024-05-07 18:15:00 -0400
Branch: REL_16_STABLE [be18a12b6] 2024-05-07 18:15:00 -0400
Branch: REL_15_STABLE [363e8c2f9] 2024-05-07 18:15:00 -0400
Branch: REL_14_STABLE [90d39929a] 2024-05-07 18:15:00 -0400
Branch: REL_13_STABLE [abe60b6a0] 2024-05-07 18:15:00 -0400
Branch: REL_12_STABLE [4488142a4] 2024-05-07 18:15:00 -0400
-->
     <para>
      Don't corrupt <application>PL/Python</application>'s
      <literal>TD</literal> dictionary during a recursive trigger call
      (Tom Lane)
     </para>

     <para>
      If a <application>PL/Python</application>-language trigger caused
      another one to be invoked, the <literal>TD</literal> dictionary
      created for the inner one would overwrite the outer
      one's <literal>TD</literal> dictionary.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [b631d0149] 2024-06-04 18:02:13 -0400
Branch: REL_16_STABLE [c236ecc82] 2024-06-04 18:02:13 -0400
Branch: REL_15_STABLE [89ef2aeda] 2024-06-04 18:02:13 -0400
Branch: REL_14_STABLE [1488dee08] 2024-06-04 18:02:13 -0400
Branch: REL_13_STABLE [dda633a03] 2024-06-04 18:02:13 -0400
Branch: REL_12_STABLE [30487423c] 2024-06-04 18:02:13 -0400
-->
     <para>
      Fix <application>PL/Tcl</application>'s reporting of invalid list
      syntax in the result of a function returning tuple (Erik Wienhold,
      Tom Lane)
     </para>

     <para>
      Such a case could result in a crash, or in emission of misleading
      context information that actually refers to the previous Tcl error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [1e666fd7c] 2024-07-28 09:23:24 +0200
Branch: REL_17_STABLE [821fbd63e] 2024-07-28 10:19:57 +0200
Branch: REL_16_STABLE [c53016860] 2024-07-28 09:25:03 +0200
Branch: REL_15_STABLE [6ddc8556c] 2024-07-28 09:25:52 +0200
Branch: REL_14_STABLE [95e805e9c] 2024-07-28 09:26:21 +0200
Branch: REL_13_STABLE [da5d7a771] 2024-07-28 09:26:39 +0200
Branch: REL_12_STABLE [407048999] 2024-07-28 09:26:48 +0200
-->
     <para>
      Avoid non-thread-safe usage of <function>strerror()</function>
      in <application>libpq</application> (Peter Eisentraut)
     </para>

     <para>
      Certain error messages returned by OpenSSL could become garbled in
      multi-threaded applications.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master Release: REL_17_BR [a8f87d5d2] 2024-05-15 22:48:51 +0200
Branch: REL_16_STABLE [0ae05c18e] 2024-05-15 22:48:51 +0200
Branch: REL_15_STABLE [e6fc3b70d] 2024-05-15 22:48:51 +0200
-->
     <para>
      Avoid memory leak within <application>pg_dump</application> during a
      binary upgrade (Daniel Gustafsson)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [c1aea206e] 2024-05-07 18:22:52 -0400
Branch: REL_16_STABLE [5dce8ce0a] 2024-05-07 18:23:01 -0400
Branch: REL_15_STABLE [6a458d93b] 2024-05-07 18:23:07 -0400
Branch: REL_14_STABLE [52b23b4e1] 2024-05-07 18:23:11 -0400
Branch: REL_13_STABLE [b99dc6694] 2024-05-07 18:23:15 -0400
Branch: REL_12_STABLE [a3c00ab15] 2024-05-07 18:23:20 -0400
-->
     <para>
      Ensure that <literal>pg_restore</literal> <option>-l</option>
      reports dependent TOC entries correctly (Tom Lane)
     </para>

     <para>
      If <option>-l</option> was specified together with selective-restore
      options such as <option>-n</option> or <option>-N</option>,
      dependent TOC entries such as comments would be omitted from the
      listing, even when an actual restore would have selected them.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [c145f321b] 2024-07-19 10:21:01 +0900
Branch: REL_17_STABLE [38e271d3c] 2024-07-19 10:21:21 +0900
Branch: REL_16_STABLE [9cd365f28] 2024-07-19 10:21:24 +0900
-->
     <para>
      Allow <filename>contrib/pg_stat_statements</filename> to distinguish
      among utility statements appearing within SQL-language functions
      (Anthonin Bonnefoy)
     </para>

     <para>
      The SQL-language function executor failed to pass along the query ID
      that is computed for a utility
      (non <command>SELECT</command>/<command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>)
      statement.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [5c571a34d] 2024-07-19 13:15:00 +0900
Branch: REL_17_STABLE [935fe79ea] 2024-07-19 13:15:01 +0900
Branch: REL_16_STABLE [d97f2ee50] 2024-07-19 13:15:03 +0900
Branch: REL_15_STABLE [f39f3e0fb] 2024-07-19 13:15:05 +0900
-->
     <para>
      Avoid <quote>cursor can only scan forward</quote> error
      in <filename>contrib/postgres_fdw</filename> (Etsuro Fujita)
     </para>

     <para>
      This error could occur if the remote server is v15 or later
      and a foreign table is mapped to a non-trivial remote view.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master Release: REL_17_BR [8cfbac149] 2024-06-07 17:45:00 +0900
Branch: REL_16_STABLE [8405d5a37] 2024-06-07 17:45:02 +0900
Branch: REL_15_STABLE [b33c141cc] 2024-06-07 17:45:04 +0900
Branch: REL_14_STABLE [269e2c391] 2024-06-07 17:45:06 +0900
Branch: REL_13_STABLE [2b461efc5] 2024-06-07 17:45:08 +0900
-->
     <para>
      In <filename>contrib/postgres_fdw</filename>, do not
      send <literal>FETCH FIRST WITH TIES</literal> clauses to the remote
      server (Japin Li)
     </para>

     <para>
      The remote server might not implement this clause, or might
      interpret it differently than we would locally, so don't risk
      attempting remote execution.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [2a5ef0983] 2024-07-06 10:27:16 +1200
Branch: REL_17_STABLE [9c273679b] 2024-07-06 11:23:40 +1200
Branch: REL_16_STABLE [31423bc44] 2024-07-06 11:18:29 +1200
Branch: REL_15_STABLE [467d77bb1] 2024-07-06 10:53:13 +1200
Branch: REL_14_STABLE [c2342a925] 2024-07-06 10:44:41 +1200
Branch: REL_13_STABLE [440aedc0f] 2024-07-06 10:39:10 +1200
Branch: REL_12_STABLE [274a8195d] 2024-07-06 10:30:03 +1200
-->
     <para>
      Avoid clashing with
      system-provided <filename>&lt;regex.h&gt;</filename> headers
      (Thomas Munro)
     </para>

     <para>
      This fixes a compilation failure on macOS version 15 and up.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master Release: REL_17_BR [aa901a37c] 2024-06-19 10:20:24 +1200
Branch: REL_16_STABLE [6143c9c03] 2024-06-19 10:21:00 +1200
Branch: REL_15_STABLE [27c6242a0] 2024-06-19 10:21:26 +1200
Branch: REL_14_STABLE [dae9f16aa] 2024-06-19 10:21:52 +1200
-->
     <para>
      Fix otherwise-harmless assertion failure in Memoize cost estimation
      (David Rowley)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_17_BR [92c49d106] 2024-06-17 14:30:59 -0400
Branch: REL_16_STABLE [06f81fed3] 2024-06-17 14:30:59 -0400
Branch: REL_15_STABLE [f55083319] 2024-06-17 14:30:59 -0400
Branch: REL_14_STABLE [e4a55378f] 2024-06-17 14:30:59 -0400
Branch: REL_13_STABLE [507a900ad] 2024-06-17 14:30:59 -0400
Branch: REL_12_STABLE [3e3e2ebea] 2024-06-17 14:30:59 -0400
-->
     <para>
      Fix otherwise-harmless assertion failures in <literal>REINDEX
      CONCURRENTLY</literal> applied to an SP-GiST index (Tom Lane)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16-3">
  <title>Release 16.3</title>

  <formalpara>
  <title>Release date:</title>
  <para>2024-05-09</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 16.2.
   For information about new features in major release 16, see
   <xref linkend="release-16"/>.
  </para>

  <sect2 id="release-16-3-migration">
   <title>Migration to Version 16.3</title>

   <para>
    A dump/restore is not required for those running 16.X.
   </para>

   <para>
    However, a security vulnerability was found in the system
    views <structname>pg_stats_ext</structname>
    and <structname>pg_stats_ext_exprs</structname>, potentially allowing
    authenticated database users to see data they shouldn't.  If this is
    of concern in your installation, follow the steps in the first
    changelog entry below to rectify it.
   </para>

   <para>
    Also, if you are upgrading from a version earlier than 16.2,
    see <xref linkend="release-16-2"/>.
   </para>
  </sect2>

  <sect2 id="release-16-3-changes">
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [521a7156a] 2024-05-06 09:00:00 -0500
Branch: REL_16_STABLE [2485a85e9] 2024-05-06 09:00:07 -0500
Branch: REL_15_STABLE [9cc2b6289] 2024-05-06 09:00:13 -0500
Branch: REL_14_STABLE [c3425383b] 2024-05-06 09:00:19 -0500
-->
     <para>
      Restrict visibility of <structname>pg_stats_ext</structname> and
      <structname>pg_stats_ext_exprs</structname> entries to the table
      owner (Nathan Bossart)
     </para>

     <para>
      These views failed to hide statistics for expressions that involve
      columns the accessing user does not have permission to read.  View
      columns such as <structfield>most_common_vals</structfield> might
      expose security-relevant data.  The potential interactions here are
      not fully clear, so in the interest of erring on the side of safety,
      make rows in these views visible only to the owner of the associated
      table.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Lukas Fittl for reporting this problem.
      (CVE-2024-4317)
     </para>

     <para>
      By itself, this fix will only fix the behavior in newly initdb'd
      database clusters.  If you wish to apply this change in an existing
      cluster, you will need to do the following:
     </para>

     <procedure>
      <step>
       <para>
        Find the SQL script <filename>fix-CVE-2024-4317.sql</filename> in
        the <replaceable>share</replaceable> directory of
        the <productname>PostgreSQL</productname> installation (typically
        located someplace like <filename>/usr/share/postgresql/</filename>).
        Be sure to use the script appropriate to
        your <productname>PostgreSQL</productname> major version.
        If you do not see this file, either your version is not vulnerable
        (only v14&ndash;v16 are affected) or your minor version is too
        old to have the fix.
       </para>
      </step>

      <step>
       <para>
        In <emphasis>each</emphasis> database of the cluster, run
        the <filename>fix-CVE-2024-4317.sql</filename> script as superuser.
        In <application>psql</application> this would look like
<programlisting>
\i /usr/share/postgresql/fix-CVE-2024-4317.sql
</programlisting>
        (adjust the file path as appropriate).  Any error probably indicates
        that you've used the wrong script version.  It will not hurt to run
        the script more than once.
       </para>
      </step>

      <step>
       <para>
        Do not forget to include the <literal>template0</literal>
        and <literal>template1</literal> databases, or the vulnerability
        will still exist in databases you create later.  To
        fix <literal>template0</literal>, you'll need to temporarily make
        it accept connections.  Do that with
<programlisting>
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
</programlisting>
        and then after fixing <literal>template0</literal>, undo it with
<programlisting>
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
</programlisting>
       </para>
      </step>
     </procedure>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b4a71cf65] 2024-03-14 14:57:16 -0400
Branch: REL_16_STABLE [52898c63e] 2024-03-14 14:57:16 -0400
Branch: REL_15_STABLE [7c61d2342] 2024-03-14 14:57:16 -0400
Branch: REL_14_STABLE [3621ffd9f] 2024-03-14 14:57:16 -0400
Branch: REL_13_STABLE [0200398dd] 2024-03-14 14:57:16 -0400
Branch: REL_12_STABLE [82c87af7a] 2024-03-14 14:57:16 -0400
-->
     <para>
      Fix <command>INSERT</command> from
      multiple <command>VALUES</command> rows into a target column that is
      a domain over an array or composite type (Tom Lane)
     </para>

     <para>
      Such cases would either fail with surprising complaints about
      mismatched datatypes, or insert unexpected coercions that could lead
      to odd results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [4989ce726] 2024-02-21 17:18:52 +0100
Branch: REL_16_STABLE [a3f5d2056] 2024-02-21 17:18:52 +0100
Branch: REL_15_STABLE [90ad85db6] 2024-02-21 17:18:52 +0100
-->
     <para>
      Require <literal>SELECT</literal> privilege on the target table
      for <command>MERGE</command> with a <literal>DO NOTHING</literal>
      clause (&Aacute;lvaro Herrera)
     </para>

     <para>
      <literal>SELECT</literal> privilege would be required in all
      practical cases anyway, but require it even if the query reads no
      columns of the target table.  This avoids an edge case in
      which <command>MERGE</command> would require no privileges whatever,
      which seems undesirable even when it's a do-nothing command.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [29ef1dd19] 2024-03-07 09:57:02 +0000
Branch: REL_16_STABLE [dd73d10ad] 2024-03-07 09:55:39 +0000
Branch: REL_15_STABLE [b5c645d2a] 2024-03-07 09:53:31 +0000
-->
     <para>
      Fix handling of self-modified tuples in <command>MERGE</command>
      (Dean Rasheed)
     </para>

     <para>
      Throw an error if a target row joins to more than one source row, as
      required by the SQL standard.  (The previous coding could silently
      ignore this condition if a concurrent update was involved.)  Also,
      throw a non-misleading error if a target row is already updated by a
      later command in the current transaction, thanks to
      a <literal>BEFORE</literal> trigger or a volatile function used in
      the query.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [4c2369ac5] 2024-02-20 12:49:37 +1300
Branch: REL_16_STABLE [fb95cc72b] 2024-02-20 12:50:09 +1300
Branch: REL_15_STABLE [1b3495e29] 2024-02-20 12:50:34 +1300
Branch: REL_14_STABLE [f9c8f7ccd] 2024-02-20 12:50:57 +1300
Branch: REL_13_STABLE [3850fcca6] 2024-02-20 12:51:17 +1300
Branch: REL_12_STABLE [3ffcd24c2] 2024-02-20 12:51:38 +1300
-->
     <para>
      Fix incorrect pruning of NULL partition when a table is partitioned
      on a boolean column and the query has a boolean <literal>IS
      NOT</literal> clause (David Rowley)
     </para>

     <para>
      A NULL value satisfies a clause such
      as <literal><replaceable>boolcol</replaceable> IS NOT
      FALSE</literal>, so pruning away a partition containing NULLs
      yielded incorrect answers.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fad3b5b5a] 2024-03-26 15:28:31 -0400
Branch: REL_16_STABLE [7445f0928] 2024-03-26 15:28:16 -0400
Branch: REL_15_STABLE [b48eda4e5] 2024-03-26 15:28:16 -0400
Branch: REL_14_STABLE [66bbad581] 2024-03-26 15:28:16 -0400
Branch: REL_13_STABLE [97de2a159] 2024-03-26 15:28:16 -0400
Branch: REL_12_STABLE [a8b740868] 2024-03-26 15:28:16 -0400
-->
     <para>
      Make <command>ALTER FOREIGN TABLE SET SCHEMA</command> move any
      owned sequences into the new schema (Tom Lane)
     </para>

     <para>
      Moving a regular table to a new schema causes any sequences owned by
      the table to be moved to that schema too (along with indexes and
      constraints).  This was overlooked for foreign tables, however.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [6743c5ae6] 2024-02-09 08:09:22 +0100
Branch: REL_16_STABLE [86d2b434c] 2024-02-09 08:09:59 +0100
Branch: REL_15_STABLE [d17a3a4c6] 2024-02-09 08:15:27 +0100
-->
     <para>
      Make <command>ALTER TABLE ... ADD COLUMN</command> create
      identity/serial sequences with the same persistence as their owning
      tables (Peter Eisentraut)
     </para>

     <para>
      <command>CREATE UNLOGGED TABLE</command> will make any owned
      sequences be unlogged too.  <command>ALTER TABLE</command> missed
      that consideration, so that an added identity column would have a
      logged sequence, which seems pointless.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [91e7115b1] 2024-05-02 17:36:31 -0400
Branch: REL_16_STABLE [11d40a44b] 2024-05-02 17:36:31 -0400
Branch: REL_15_STABLE [5f4a1a0a7] 2024-05-02 17:36:31 -0400
Branch: master [42b041243] 2024-04-28 14:34:21 -0400
Branch: REL_16_STABLE [b19255ca6] 2024-04-28 14:34:21 -0400
Branch: REL_15_STABLE [9b41d1d63] 2024-04-28 14:34:21 -0400
Branch: REL_14_STABLE [617a23927] 2024-04-28 14:34:21 -0400
-->
     <para>
      Improve <command>ALTER TABLE ... ALTER COLUMN TYPE</command>'s error
      message when there is a dependent function or publication (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [8c239ee15] 2024-04-21 21:21:26 +0200
Branch: REL_16_STABLE [9e6faeb32] 2024-04-21 21:21:55 +0200
Branch: REL_15_STABLE [276b7888f] 2024-04-21 21:22:11 +0200
-->
     <para>
      In <command>CREATE DATABASE</command>, recognize strategy keywords
      case-insensitively for consistency with other options (Tomas Vondra)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [0960ae196] 2024-03-18 14:03:58 +0200
Branch: REL_16_STABLE [1f4eb7342] 2024-03-18 14:04:13 +0200
Branch: REL_15_STABLE [d3d95f583] 2024-03-18 14:04:17 +0200
Branch: REL_14_STABLE [262757b73] 2024-03-18 14:04:19 +0200
Branch: REL_13_STABLE [992189a3e] 2024-03-18 14:04:24 +0200
Branch: REL_12_STABLE [f3e4581ac] 2024-03-18 14:04:28 +0200
-->
     <para>
      Fix <command>EXPLAIN</command>'s counting of heap pages accessed by
      a bitmap heap scan (Melanie Plageman)
     </para>

     <para>
      Previously, heap pages that contain no visible tuples were not
      counted; but it seems more consistent to count all pages returned by
      the bitmap index scan.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [33e729c51] 2024-03-17 10:17:11 +0000
Branch: REL_16_STABLE [34c854b93] 2024-03-17 10:19:31 +0000
Branch: REL_15_STABLE [89ee14a2f] 2024-03-17 10:20:20 +0000
-->
     <para>
      Fix <command>EXPLAIN</command>'s output for subplans
      in <command>MERGE</command> (Dean Rasheed)
     </para>

     <para>
      <command>EXPLAIN</command> would sometimes fail to properly display
      subplan Params referencing variables in other parts of the plan tree.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6faca9ae2] 2024-04-02 14:59:32 -0400
Branch: REL_16_STABLE [cbfbb14bd] 2024-04-02 14:59:04 -0400
Branch: REL_15_STABLE [4fb56a734] 2024-04-02 14:59:04 -0400
Branch: REL_14_STABLE [ca392df8d] 2024-04-02 14:59:04 -0400
Branch: REL_13_STABLE [4afc2c219] 2024-04-02 14:59:04 -0400
Branch: REL_12_STABLE [f5d9212e5] 2024-04-02 14:59:04 -0400
-->
     <para>
      Avoid deadlock during removal of orphaned temporary tables
      (Mikhail Zhilin)
     </para>

     <para>
      If the session that creates a temporary table crashes without
      removing the table, autovacuum will eventually try to remove the
      orphaned table.  However, an incoming session that's been assigned
      the same temporary namespace will do that too.  If a temporary table
      has a dependency (such as an owned sequence) then a deadlock could
      result between these two cleanup attempts.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [674e49c73] 2024-03-11 09:28:09 +0200
Branch: REL_16_STABLE [407cb6c65] 2024-03-11 09:28:21 +0200
-->
     <para>
      Fix updating of visibility map state in <command>VACUUM</command>
      with the <literal>DISABLE_PAGE_SKIPPING</literal> option (Heikki
      Linnakangas)
     </para>

     <para>
      Due to an oversight, this mode caused all heap pages to be dirtied,
      resulting in excess I/O.  Also, visibility map bits that were
      incorrectly set would not get cleared.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [f65ab862e] 2024-04-29 10:24:56 -0700
Branch: REL_16_STABLE [92685c389] 2024-04-29 10:24:59 -0700
Branch: REL_15_STABLE [7c5915c4b] 2024-04-29 10:24:59 -0700
Branch: REL_14_STABLE [2ca19aa81] 2024-04-29 10:25:00 -0700
Branch: REL_13_STABLE [70cadfba0] 2024-04-29 10:25:00 -0700
Branch: REL_12_STABLE [f222349c4] 2024-04-29 10:25:00 -0700
-->
     <para>
      Avoid race condition while examining per-relation frozen-XID values
      (Noah Misch)
     </para>

     <para>
      <command>VACUUM</command>'s computation of per-database frozen-XID
      values from per-relation values could get confused by a concurrent
      update of those values by another <command>VACUUM</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [5cd72cc0c] 2024-05-01 12:34:06 +0900
Branch: REL_16_STABLE [f199436c1] 2024-05-01 12:34:04 +0900
Branch: REL_15_STABLE [faba2f8f3] 2024-05-01 12:34:01 +0900
-->
     <para>
      Fix buffer usage reporting for parallel vacuuming (Anthonin Bonnefoy)
     </para>

     <para>
      Buffer accesses performed by parallel workers were not getting
      counted in the statistics reported in <literal>VERBOSE</literal>
      mode.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [03107b4ed] 2024-04-16 11:22:51 -0400
Branch: REL_16_STABLE [91800af13] 2024-04-16 11:03:43 -0400
Branch: REL_15_STABLE [5aacfa64e] 2024-04-16 11:22:39 -0400
Branch: REL_14_STABLE [ab2402268] 2024-04-16 11:22:39 -0400
Branch: REL_13_STABLE [d9e4ee74f] 2024-04-16 11:22:39 -0400
Branch: REL_12_STABLE [f502849d4] 2024-04-16 11:22:39 -0400
-->
     <para>
      Ensure that join conditions generated from equivalence classes are
      applied at the correct plan level (Tom Lane)
     </para>

     <para>
      In versions before <productname>PostgreSQL</productname> 16, it was
      possible for generated conditions to be evaluated below outer joins
      when they should be evaluated above (after) the outer join, leading
      to incorrect query results.  All versions have a similar hazard when
      considering joins to <command>UNION ALL</command> trees that have
      constant outputs for the join column in
      some <command>SELECT </command> arms.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [4169850f0] 2024-03-15 11:54:36 +1300
Branch: REL_16_STABLE [4e1ff2aad] 2024-03-15 11:55:50 +1300
-->
     <para>
      Fix <quote>could not find pathkey item to sort</quote> errors
      occurring while planning aggregate functions with <literal>ORDER
      BY</literal> or <literal>DISTINCT</literal> options (David Rowley)
     </para>

     <para>
      This is similar to a fix applied in 16.1, but it solves the problem
      for parallel plans.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: REL_16_STABLE [9d36b883b] 2024-05-01 16:35:05 +1200
Branch: REL_15_STABLE [7e5d20bbd] 2024-05-01 16:35:37 +1200
-->
     <para>
      Prevent potentially-incorrect optimization of some window functions
      (David Rowley)
     </para>

     <para>
      Disable <quote>run condition</quote> optimization
      of <function>ntile()</function> and <function>count()</function>
      with non-constant arguments.  This avoids possible misbehavior with
      sub-selects, typically leading to errors like <quote>WindowFunc not
      found in subplan target lists</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a767cdc84] 2024-03-27 13:39:03 -0400
Branch: REL_16_STABLE [a94f51a7b] 2024-03-27 13:39:03 -0400
Branch: REL_15_STABLE [03561a6c7] 2024-03-27 13:39:03 -0400
Branch: REL_14_STABLE [0d30e48c2] 2024-03-27 13:39:03 -0400
Branch: REL_13_STABLE [de3c5b187] 2024-03-27 13:39:03 -0400
Branch: REL_12_STABLE [25675c474] 2024-03-27 13:39:03 -0400
-->
     <para>
      Avoid unnecessary use of moving-aggregate mode with a non-moving
      window frame (Vallimaharajan G)
     </para>

     <para>
      When a plain aggregate is used as a window function, and the window
      frame start is specified as <literal>UNBOUNDED PRECEDING</literal>,
      the frame's head cannot move so we do not need to use the special
      (and more expensive) moving-aggregate mode.  This optimization was
      intended all along, but due to a coding error it never triggered.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a6b2a51e1] 2024-02-23 15:21:53 -0500
Branch: REL_16_STABLE [ef0333e67] 2024-02-23 15:21:53 -0500
Branch: REL_15_STABLE [37bbe3d3a] 2024-02-23 15:21:53 -0500
Branch: REL_14_STABLE [cbeb45527] 2024-02-23 15:21:53 -0500
Branch: REL_13_STABLE [9061fd23c] 2024-02-23 15:21:53 -0500
Branch: REL_12_STABLE [cf807eba5] 2024-02-23 15:21:53 -0500
-->
     <para>
      Avoid use of already-freed data while planning partition-wise joins
      under GEQO (Tom Lane)
     </para>

     <para>
      This would typically end in a crash or unexpected error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [e62984647] 2024-03-11 18:19:56 +1300
Branch: REL_16_STABLE [348233cb1] 2024-03-11 18:20:39 +1300
Branch: REL_15_STABLE [74530804f] 2024-03-11 18:21:23 +1300
Branch: REL_14_STABLE [72b8507db] 2024-03-11 18:21:48 +1300
-->
     <para>
      Avoid freeing still-in-use data in Memoize (Tender Wang, Andrei
      Lepikhov)
     </para>

     <para>
      In production builds this error frequently didn't cause any
      problems, as the freed data would most likely not get overwritten
      before it was used.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [a37a3e2b3] 2024-03-05 16:17:02 +1300
Branch: REL_16_STABLE [ac7e6a01c] 2024-03-05 16:17:53 +1300
Branch: REL_15_STABLE [164fe7a6e] 2024-03-05 16:18:19 +1300
Branch: REL_14_STABLE [0c2dda109] 2024-03-05 16:18:42 +1300
Branch: REL_13_STABLE [421dfb41a] 2024-03-05 16:19:05 +1300
Branch: REL_12_STABLE [94246405d] 2024-03-05 16:19:26 +1300
-->
     <para>
      Fix incorrectly-reported statistics kind codes in <quote>requested
      statistics kind <replaceable>X</replaceable> is not yet
      built</quote> error messages (David Rowley)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [473182c95] 2024-03-22 17:13:53 -0400
Branch: REL_16_STABLE [14e991db8] 2024-03-22 17:13:53 -0400
-->
     <para>
      Use a hash table instead of linear search for <quote>catcache
      list</quote> objects (Tom Lane)
     </para>

     <para>
      This change solves performance problems that were reported for
      certain operations in installations with many thousands of roles.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e0df80828] 2024-04-15 12:56:56 -0400
Branch: REL_16_STABLE [cc1eb6a3c] 2024-04-15 12:56:56 -0400
Branch: REL_15_STABLE [09989ba84] 2024-04-15 12:56:56 -0400
Branch: REL_14_STABLE [78e81e14d] 2024-04-15 12:56:56 -0400
Branch: REL_13_STABLE [b6e21cef7] 2024-04-15 12:56:56 -0400
Branch: REL_12_STABLE [e0970862e] 2024-04-15 12:56:56 -0400
Branch: master [2ed8f9a01] 2024-03-06 14:41:13 -0500
Branch: REL_16_STABLE [1b3029be5] 2024-03-06 14:41:13 -0500
Branch: REL_15_STABLE [3b671dcf5] 2024-03-06 14:41:13 -0500
Branch: REL_14_STABLE [a595c3075] 2024-03-06 14:41:13 -0500
Branch: REL_13_STABLE [d769f9d97] 2024-03-06 14:41:13 -0500
Branch: REL_12_STABLE [466376c9f] 2024-03-06 14:41:13 -0500
-->
     <para>
      Be more careful with <type>RECORD</type>-returning functions
      in <literal>FROM</literal> (Tom Lane)
     </para>

     <para>
      The output columns of such a function call must be defined by
      an <literal>AS</literal> clause that specifies the column names and
      data types.  If the actual function output value doesn't match that,
      an error is supposed to be thrown at runtime.  However, some code
      paths would examine the actual value prematurely, and potentially
      issue strange errors or suffer assertion failures if it doesn't
      match expectations.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6ee3261e9] 2024-03-12 18:16:25 -0400
Branch: REL_16_STABLE [40d1bdeb7] 2024-03-12 18:16:10 -0400
Branch: REL_15_STABLE [6f66fadad] 2024-03-12 18:16:10 -0400
Branch: REL_14_STABLE [649bbba11] 2024-03-12 18:16:10 -0400
Branch: REL_13_STABLE [28184f039] 2024-03-12 18:16:10 -0400
Branch: REL_12_STABLE [dc1503d5b] 2024-03-12 18:16:10 -0400
-->
     <para>
      Fix confusion about the return rowtype of SQL-language procedures
      (Tom Lane)
     </para>

     <para>
      A procedure implemented in SQL language that returns a single
      composite-type column would cause an assertion failure or core dump.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [d57b7cc33] 2024-02-16 16:02:00 +0200
Branch: master [75bcba6cb] 2024-02-21 02:51:41 +0200
Branch: REL_16_STABLE [760767182] 2024-03-11 03:06:55 +0200
Branch: REL_15_STABLE [84788ee5b] 2024-03-11 03:06:45 +0200
Branch: REL_14_STABLE [84cc1a552] 2024-03-11 03:06:15 +0200
Branch: REL_13_STABLE [445c7e38f] 2024-03-11 03:06:10 +0200
Branch: REL_12_STABLE [98bfb7558] 2024-03-11 02:53:07 +0200
-->
     <para>
      Add protective stack depth checks to some recursive functions
      (Egor Chindyaskin)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d163fdbfe] 2024-02-28 14:00:30 -0500
Branch: REL_16_STABLE [17db5436e] 2024-02-28 14:00:30 -0500
Branch: REL_15_STABLE [db8855b66] 2024-02-28 14:00:30 -0500
Branch: REL_14_STABLE [fe3b1b575] 2024-02-28 14:00:30 -0500
-->
     <para>
      Fix mis-rounding and overflow hazards
      in <function>date_bin()</function> (Moaaz Assali)
     </para>

     <para>
      In the case where the source timestamp is before the origin
      timestamp and their difference is already an exact multiple of the
      stride, the code incorrectly subtracted the stride anyway.  Also,
      detect some integer-overflow cases that would have produced
      incorrect results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4019285c0] 2024-04-28 13:42:13 -0400
Branch: REL_16_STABLE [3752e3d21] 2024-04-28 13:42:13 -0400
Branch: REL_15_STABLE [e6e3ee5b7] 2024-04-28 13:42:13 -0400
Branch: REL_14_STABLE [1748379b6] 2024-04-28 13:42:13 -0400
Branch: REL_13_STABLE [440b6251b] 2024-04-28 13:42:13 -0400
Branch: REL_12_STABLE [cb0ccefa0] 2024-04-28 13:42:13 -0400
-->
     <para>
      Detect integer overflow when adding or subtracting
      an <type>interval</type> to/from a <type>timestamp</type>
      (Joseph Koshakow)
     </para>

     <para>
      Some cases that should cause an out-of-range error produced an
      incorrect result instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ce571434a] 2024-02-09 12:29:41 -0500
Branch: REL_16_STABLE [4eb261165] 2024-02-09 12:29:41 -0500
Branch: REL_15_STABLE [26c89d105] 2024-02-09 12:29:41 -0500
Branch: REL_14_STABLE [d21690edb] 2024-02-09 12:29:41 -0500
Branch: REL_13_STABLE [ceb224b62] 2024-02-09 12:29:41 -0500
Branch: REL_12_STABLE [f38903d1e] 2024-02-09 12:29:41 -0500
-->
     <para>
      Avoid race condition in <function>pg_get_expr()</function>
      (Tom Lane)
     </para>

     <para>
      If the relation referenced by the argument is dropped concurrently,
      the function's intention is to return NULL, but sometimes it failed
      instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [165d921c9] 2024-02-08 12:45:26 +0200
Branch: REL_16_STABLE [e3e05adde] 2024-02-09 12:37:21 +0200
Branch: REL_15_STABLE [503299b7f] 2024-02-09 12:38:32 +0200
Branch: REL_14_STABLE [18388291a] 2024-02-09 12:39:42 +0200
Branch: REL_13_STABLE [4efaf4b09] 2024-02-09 12:39:54 +0200
Branch: REL_12_STABLE [d44060cfc] 2024-02-09 12:55:43 +0200
-->
     <para>
      Fix detection of old transaction IDs in XID status functions
      (Karina Litskevich)
     </para>

     <para>
      Transaction IDs more than 2<superscript>31</superscript>
      transactions in the past could be misidentified as recent,
      leading to misbehavior of <function>pg_xact_status()</function>
      or <function>txid_status()</function>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [935829743] 2024-04-13 08:34:20 -0700
Branch: REL_16_STABLE [4e62ba21a] 2024-04-13 08:35:06 -0700
Branch: REL_15_STABLE [7c490a18b] 2024-04-13 08:35:20 -0700
Branch: REL_14_STABLE [08059fc04] 2024-04-13 08:35:32 -0700
-->
     <para>
      Ensure that a table's freespace map won't return a page that's past
      the end of the table (Ronan Dunklau)
     </para>

     <para>
      Because the freespace map isn't WAL-logged, this was possible in
      edge cases involving an OS crash, a replica promote, or a PITR
      restore.  The result would be a <quote>could not read block</quote>
      error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: REL_16_STABLE [e79ceafe9] 2024-04-11 19:05:00 +0900
Branch: REL_15_STABLE [b82dca2a5] 2024-04-11 19:05:02 +0900
Branch: REL_14_STABLE [b714bc40c] 2024-04-11 19:05:04 +0900
Branch: REL_13_STABLE [01b01a77f] 2024-04-11 19:05:05 +0900
Branch: REL_12_STABLE [0341d4b10] 2024-04-11 19:05:07 +0900
-->
     <para>
      Fix file descriptor leakage when an error is thrown while waiting
      in <function>WaitEventSetWait</function> (Etsuro Fujita)
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: REL_16_STABLE [f6f61a4bd] 2024-04-04 17:25:00 +0900
Branch: REL_15_STABLE [3f96d113f] 2024-04-04 17:25:02 +0900
Branch: REL_14_STABLE [e10ca95ff] 2024-04-04 17:25:04 +0900
-->
     <para>
      Avoid corrupting exception stack if an FDW implements async append
      but doesn't configure any wait conditions for the Append plan node
      to wait for (Alexander Pyhalov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f5a465f1a] 2024-02-25 16:15:07 -0500
Branch: REL_16_STABLE [8c785d354] 2024-02-25 16:15:07 -0500
Branch: REL_15_STABLE [940489b46] 2024-02-25 16:15:07 -0500
Branch: REL_14_STABLE [09f09884c] 2024-02-25 16:15:07 -0500
Branch: REL_13_STABLE [43cca9de9] 2024-02-25 16:15:07 -0500
Branch: REL_12_STABLE [c0b4dad38] 2024-02-25 16:15:07 -0500
-->
     <para>
      Throw an error if an index is accessed while it is being reindexed
      (Tom Lane)
     </para>

     <para>
      Previously this was just an assertion check, but promote it into a
      regular runtime error.  This will provide a more on-point error
      message when reindexing a user-defined index expression that
      attempts to access its own table.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [a63224be4] 2024-05-01 13:21:21 +1200
Branch: REL_16_STABLE [68d358545] 2024-05-01 13:21:50 +1200
Branch: REL_15_STABLE [52f21f928] 2024-05-01 13:22:16 +1200
Branch: REL_14_STABLE [e6b0efc65] 2024-05-01 13:22:41 +1200
Branch: REL_13_STABLE [0a34bcd0c] 2024-05-01 13:23:05 +1200
Branch: REL_12_STABLE [e3f9dcabd] 2024-05-01 13:23:25 +1200
-->
     <para>
      Ensure that index-only scans on <type>name</type> columns return a
      fully-padded value (David Rowley)
     </para>

     <para>
      The value physically stored in the index is truncated, and
      previously a pointer to that value was returned to callers.  This
      provoked complaints when testing under valgrind.  In theory it could
      result in crashes, though none have been reported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [818fefd8f] 2024-02-20 13:43:51 +0900
Branch: REL_16_STABLE [59cea09f0] 2024-02-20 13:43:56 +0900
-->
     <para>
      Fix race condition that could lead to reporting an incorrect
      conflict cause when invalidating a replication slot (Bertrand
      Drouvot)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [aa79bde72] 2024-04-25 10:40:52 +0530
Branch: REL_16_STABLE [a9155efc7] 2024-04-25 10:52:34 +0530
Branch: REL_15_STABLE [28a8cc457] 2024-04-25 10:33:04 +0530
-->
     <para>
      Fix race condition in deciding whether a table sync operation is
      needed in logical replication (Vignesh C)
     </para>

     <para>
      An invalidation event arriving while a subscriber identifies which
      tables need to be synced would be forgotten about, so that any
      tables newly in need of syncing might not get processed in a timely
      fashion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [fbf9a7ac4] 2024-02-13 21:23:41 +0200
Branch: REL_16_STABLE [f2f09b825] 2024-02-13 21:24:45 +0200
Branch: REL_15_STABLE [d46c26961] 2024-02-13 21:25:27 +0200
Branch: REL_14_STABLE [9b8550fbd] 2024-02-13 21:25:39 +0200
Branch: REL_13_STABLE [e92375692] 2024-02-13 21:25:48 +0200
Branch: REL_12_STABLE [95cc48ca0] 2024-02-13 21:25:59 +0200
-->
     <para>
      Fix crash with DSM allocations larger than 4GB (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [f8c5317d0] 2024-03-12 10:18:32 +0200
Branch: REL_16_STABLE [539e328b1] 2024-03-12 10:18:44 +0200
Branch: REL_15_STABLE [4fce5f970] 2024-03-12 10:18:50 +0200
Branch: REL_14_STABLE [bf1f593e8] 2024-03-12 10:18:51 +0200
Branch: REL_13_STABLE [ad5cd55e6] 2024-03-12 10:18:53 +0200
Branch: REL_12_STABLE [df27d76d3] 2024-03-12 10:18:54 +0200
-->
     <para>
      Disconnect if a new server session's client socket cannot be put
      into non-blocking mode (Heikki Linnakangas)
     </para>

     <para>
      It was once theoretically possible for us to operate with a socket
      that's in blocking mode; but that hasn't worked fully in a long
      time, so fail at connection start rather than misbehave later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [453c46873] 2024-03-07 19:38:17 -0500
Branch: REL_16_STABLE [6a2c80e95] 2024-03-07 19:37:51 -0500
Branch: REL_15_STABLE [0fe82e45c] 2024-03-07 19:37:51 -0500
Branch: REL_14_STABLE [473babd42] 2024-03-07 19:37:51 -0500
Branch: REL_13_STABLE [9fbe07275] 2024-03-07 19:37:51 -0500
Branch: REL_12_STABLE [c42e5fdcf] 2024-03-07 19:37:51 -0500
-->
     <para>
      Fix inadequate error reporting
      with <application>OpenSSL</application> 3.0.0 and later (Heikki
      Linnakangas, Tom Lane)
     </para>

     <para>
      System-reported errors passed through by OpenSSL were reported with
      a numeric error code rather than anything readable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [65f438471] 2024-02-12 11:14:21 +1300
Branch: REL_16_STABLE [0460e4ecc] 2024-02-12 11:14:42 +1300
-->
     <para>
      Fix thread-safety of error reporting
      for <function>getaddrinfo()</function> on Windows (Thomas Munro)
     </para>

     <para>
      A multi-threaded <application>libpq</application> client program
      could get an incorrect or corrupted error message after a network
      lookup failure.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a584d03ce] 2024-02-09 11:21:08 -0500
Branch: REL_16_STABLE [52afe5632] 2024-02-09 11:21:08 -0500
Branch: REL_15_STABLE [806f98951] 2024-02-09 11:21:08 -0500
Branch: REL_14_STABLE [8ead39e38] 2024-02-09 11:21:08 -0500
Branch: REL_13_STABLE [8c5da20db] 2024-02-09 11:21:08 -0500
Branch: REL_12_STABLE [9fb1396a9] 2024-02-09 11:21:08 -0500
Branch: master [0028b55bc] 2024-02-09 11:11:39 -0500
Branch: REL_16_STABLE [9440d23a0] 2024-02-09 11:11:39 -0500
Branch: REL_15_STABLE [9f041b041] 2024-02-09 11:11:39 -0500
Branch: REL_14_STABLE [7d7cc7fd6] 2024-02-09 11:11:39 -0500
Branch: REL_13_STABLE [67f8cf0f0] 2024-02-09 11:11:39 -0500
Branch: REL_12_STABLE [95e960e81] 2024-02-09 11:11:39 -0500
-->
     <para>
      Avoid concurrent calls to <function>bindtextdomain()</function>
      in <application>libpq</application>
      and <application>ecpglib</application> (Tom Lane)
     </para>

     <para>
      Although GNU <application>gettext</application>'s implementation
      seems to be fine with concurrent calls, the version available on
      Windows is not.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6f0cef935] 2024-04-16 12:31:42 -0400
Branch: REL_16_STABLE [392e6e9e6] 2024-04-16 12:31:32 -0400
Branch: REL_15_STABLE [25f937217] 2024-04-16 12:31:32 -0400
Branch: REL_14_STABLE [463164639] 2024-04-16 12:31:32 -0400
Branch: REL_13_STABLE [02531e8ca] 2024-04-16 12:31:32 -0400
Branch: REL_12_STABLE [2b6a74afe] 2024-04-16 12:31:32 -0400
Branch: REL_16_STABLE [0018f0af5] 2024-04-18 20:47:37 -0400
Branch: REL_15_STABLE [1e7b1b026] 2024-04-18 20:47:37 -0400
Branch: REL_14_STABLE [df66319f7] 2024-04-18 20:47:37 -0400
Branch: REL_13_STABLE [481597fc6] 2024-04-18 20:47:37 -0400
Branch: REL_12_STABLE [61dd815e0] 2024-04-18 20:47:37 -0400
Branch: REL_16_STABLE [dd3fddc85] 2024-04-19 01:07:16 -0400
Branch: REL_15_STABLE [f7e891748] 2024-04-19 01:07:32 -0400
Branch: REL_14_STABLE [de84608e2] 2024-04-19 01:07:41 -0400
Branch: REL_13_STABLE [c6bfeab42] 2024-04-19 01:07:47 -0400
Branch: REL_12_STABLE [cd26f08e4] 2024-04-19 01:07:52 -0400
-->
     <para>
      Fix crash in <application>ecpg</application>'s preprocessor if
      the program tries to redefine a macro that was defined on the
      preprocessor command line (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [096a761d6] 2024-04-04 15:31:53 -0400
Branch: REL_16_STABLE [118558e6d] 2024-04-04 15:31:53 -0400
Branch: REL_15_STABLE [f159f1814] 2024-04-04 15:31:53 -0400
Branch: REL_14_STABLE [d3167ed3f] 2024-04-04 15:31:53 -0400
Branch: REL_13_STABLE [5ba29e945] 2024-04-04 15:31:53 -0400
Branch: REL_12_STABLE [360d007e3] 2024-04-04 15:31:53 -0400
-->
     <para>
      In <application>ecpg</application>, avoid issuing
      false <quote>unsupported feature will be passed to server</quote>
      warnings (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [e77a1c58e] 2024-02-19 11:38:18 +0900
Branch: REL_16_STABLE [88e03d055] 2024-02-19 11:38:44 +0900
Branch: REL_15_STABLE [b5cb6022b] 2024-02-19 11:38:47 +0900
Branch: REL_14_STABLE [a05bb9add] 2024-02-19 11:38:49 +0900
Branch: REL_13_STABLE [c031ce97b] 2024-02-19 11:38:52 +0900
Branch: REL_12_STABLE [771240f97] 2024-02-19 11:38:54 +0900
-->
     <para>
      Ensure that the string result
      of <application>ecpg</application>'s <function>intoasc()</function>
      function is correctly zero-terminated (Oleg Tselebrovskiy)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fce2ce797] 2024-03-04 12:00:48 -0500
Branch: REL_16_STABLE [b78f4d22b] 2024-03-04 12:00:39 -0500
-->
     <para>
      In <application>initdb</application>'s <option>-c</option> option,
      match parameter names case-insensitively (Tom Lane)
     </para>

     <para>
      The server treats parameter names case-insensitively, so this code
      should too.  This avoids putting redundant entries into the
      generated <filename>postgresql.conf</filename> file.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f463de59d] 2024-04-08 17:00:07 -0400
Branch: REL_16_STABLE [a85e3ba1c] 2024-04-08 17:00:07 -0400
Branch: REL_15_STABLE [4f1d33d70] 2024-04-08 17:00:07 -0400
-->
     <para>
      In <application>psql</application>, avoid leaking a query result
      after the query is cancelled (Tom Lane)
     </para>

     <para>
      This happened only when cancelling a non-last query in a query
      string made with <literal>\;</literal> separators.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [7e65ad197] 2024-03-21 23:31:57 +0100
Branch: REL_16_STABLE [5863bacb8] 2024-03-21 23:31:57 +0100
Branch: REL_15_STABLE [12128be62] 2024-03-21 23:31:57 +0100
Branch: REL_14_STABLE [be01c8c34] 2024-03-21 23:31:57 +0100
Branch: REL_13_STABLE [affc46b76] 2024-03-21 23:31:57 +0100
Branch: REL_12_STABLE [d82cb467b] 2024-03-21 23:31:57 +0100
Branch: REL_14_STABLE [6ebd43725] 2024-03-22 01:01:30 +0100
Branch: REL_13_STABLE [d5c6affb8] 2024-03-22 01:01:30 +0100
Branch: REL_12_STABLE [82c2192d9] 2024-03-22 01:01:30 +0100
-->
     <para>
      Fix <application>pg_dumpall</application> so that role comments, if
      present, will be dumped regardless of the setting
      of <option>--no-role-passwords</option> (Daniel Gustafsson,
      &Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [c1fc502f5] 2024-02-13 13:47:12 +0100
Branch: REL_16_STABLE [103235888] 2024-02-13 13:47:12 +0100
Branch: REL_15_STABLE [29f005238] 2024-02-13 13:47:12 +0100
-->
     <para>
      Skip files named <filename>.DS_Store</filename>
      in <application>pg_basebackup</application>,
      <application>pg_checksums</application>,
      and <application>pg_rewind</application> (Daniel Gustafsson)
     </para>

     <para>
      This avoids problems on macOS, where the Finder may create such
      files.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5392dd3d2] 2024-04-10 15:45:58 -0400
Branch: REL_16_STABLE [48f216dc6] 2024-04-10 15:45:58 -0400
Branch: REL_15_STABLE [d85db0a8e] 2024-04-10 15:45:59 -0400
Branch: REL_14_STABLE [dc5824a06] 2024-04-10 15:45:59 -0400
Branch: REL_13_STABLE [f5cee411a] 2024-04-10 15:45:59 -0400
Branch: REL_12_STABLE [5e9d8bed0] 2024-04-10 15:45:59 -0400
-->
     <para>
      Fix <application>PL/pgSQL</application>'s parsing of single-line
      comments (<literal>--</literal>-style comments) following
      expressions (Erik Wienhold, Tom Lane)
     </para>

     <para>
      This mistake caused parse errors if such a comment followed
      a <literal>WHEN</literal> expression in
      a <application>PL/pgSQL</application> <command>CASE</command>
      statement.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [b1fe8efdf] 2024-03-24 00:09:24 +0200
Branch: REL_16_STABLE [3676b846b] 2024-03-23 23:02:30 +0200
Branch: REL_15_STABLE [0d466bce9] 2024-03-23 23:02:43 +0200
Branch: REL_14_STABLE [4e8529da4] 2024-03-23 23:03:10 +0200
Branch: REL_13_STABLE [5cc1f2626] 2024-03-23 23:03:12 +0200
Branch: REL_12_STABLE [d603e6744] 2024-03-24 00:08:13 +0200
Branch: master [ab65dfb0f] 2024-03-24 00:09:24 +0200
Branch: REL_16_STABLE [a6ddb8ad0] 2024-03-23 23:02:30 +0200
Branch: REL_15_STABLE [54e6184db] 2024-03-23 23:02:43 +0200
Branch: REL_14_STABLE [5df5d9cd7] 2024-03-23 23:03:10 +0200
Branch: REL_13_STABLE [e2c241416] 2024-03-23 23:03:12 +0200
Branch: REL_12_STABLE [50f8611d0] 2024-03-23 23:03:14 +0200
-->
     <para>
      In <filename>contrib/amcheck</filename>, don't report false match
      failures due to short- versus long-header values (Andrey Borodin,
      Michael Zhilin)
     </para>

     <para>
      A variable-length datum in a heap tuple or index tuple could have
      either a short or a long header, depending on compression parameters
      that applied when it was made.  Treat these cases as equivalent
      rather than complaining if there's a difference.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [bb616ed3e] 2024-04-14 18:19:58 +0200
Branch: REL_16_STABLE [8cea358b1] 2024-04-14 18:24:38 +0200
Branch: master [2f20ced1e] 2024-04-14 18:07:15 +0200
Branch: REL_16_STABLE [ccd8f0fa1] 2024-04-14 18:17:09 +0200
Branch: REL_15_STABLE [3cd413511] 2024-04-14 18:17:29 +0200
Branch: REL_14_STABLE [ad23af83d] 2024-04-14 18:18:07 +0200
-->
     <para>
      Fix bugs in BRIN output functions (Tomas Vondra)
     </para>

     <para>
      These output functions are only used for displaying index entries
      in <filename>contrib/pageinspect</filename>, so the errors are of
      limited practical concern.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [c399248b3] 2024-03-11 12:27:11 +1300
Branch: REL_16_STABLE [6a9e2cb2b] 2024-03-11 12:27:46 +1300
Branch: REL_15_STABLE [ab64b275a] 2024-03-11 12:28:11 +1300
Branch: REL_14_STABLE [628c3f2e1] 2024-03-11 12:28:40 +1300
Branch: REL_13_STABLE [20b85b3da] 2024-03-11 12:29:03 +1300
Branch: REL_12_STABLE [9301e0f41] 2024-03-11 12:29:24 +1300
-->
     <para>
      In <filename>contrib/postgres_fdw</filename>, avoid emitting
      requests to sort by a constant (David Rowley)
     </para>

     <para>
      This could occur in cases involving <literal>UNION ALL</literal>
      with constant-emitting subqueries.  Sorting by a constant is useless
      of course, but it also risks being misinterpreted by the remote
      server, leading to <quote>ORDER BY
      position <replaceable>N</replaceable> is not in select list</quote>
      errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a3021aafc] 2024-04-21 13:46:20 -0400
Branch: REL_16_STABLE [75929b6cf] 2024-04-21 13:46:20 -0400
Branch: REL_15_STABLE [6c85e3359] 2024-04-21 13:46:20 -0400
Branch: REL_14_STABLE [3ed6e1698] 2024-04-21 13:46:20 -0400
Branch: REL_13_STABLE [0e56b2b94] 2024-04-21 13:46:20 -0400
Branch: REL_12_STABLE [ce1c30ece] 2024-04-21 13:46:20 -0400
-->
     <para>
      Make <filename>contrib/postgres_fdw</filename> set the remote
      session's time zone to <literal>GMT</literal>
      not <literal>UTC</literal> (Tom Lane)
     </para>

     <para>
      This should have the same results for practical purposes.
      However, <literal>GMT</literal> is recognized by hard-wired code in
      the server, while <literal>UTC</literal> is looked up in the
      timezone database.  So the old code could fail in the unlikely event
      that the remote server's timezone database is missing entries.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: REL_16_STABLE [7c93f31de] 2024-04-16 12:25:48 +0900
Branch: REL_15_STABLE [689ba4f1c] 2024-04-16 12:26:10 +0900
Branch: REL_14_STABLE [6fa5e67e8] 2024-04-16 12:26:15 +0900
Branch: REL_13_STABLE [bb418aeee] 2024-04-16 12:26:17 +0900
Branch: REL_12_STABLE [4b0e5d601] 2024-04-16 12:26:21 +0900
-->
     <para>
      In <filename>contrib/xml2</filename>, avoid use of library functions
      that have been deprecated in recent versions
      of <application>libxml2</application> (Dmitry Koval)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [53c8d6c9f] 2024-04-10 12:13:46 +1200
Branch: REL_16_STABLE [bf1cfe77e] 2024-04-10 10:46:15 +1200
Branch: REL_15_STABLE [74992929a] 2024-04-10 12:14:04 +1200
Branch: REL_14_STABLE [7fe32eaa4] 2024-04-10 12:15:07 +1200
Branch: REL_13_STABLE [4f90750b5] 2024-04-10 12:15:41 +1200
Branch: REL_12_STABLE [01b55203a] 2024-04-10 12:15:59 +1200
-->
     <para>
      Fix incompatibility with LLVM 18 (Thomas Munro, Dmitry Dolgov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8a92b70c1] 2024-03-26 11:44:49 -0400
Branch: REL_16_STABLE [7651fd387] 2024-03-26 11:44:49 -0400
Branch: REL_15_STABLE [3c3f4fd74] 2024-03-26 11:44:49 -0400
Branch: REL_14_STABLE [d82605bcd] 2024-03-26 11:44:49 -0400
Branch: REL_13_STABLE [243e99532] 2024-03-26 11:44:49 -0400
Branch: REL_12_STABLE [7124e7d52] 2024-03-26 11:44:49 -0400
-->
     <para>
      Allow <literal>make check</literal> to work with
      the <application>musl</application> C library (Thomas Munro, Bruce
      Momjian, Tom Lane)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16-2">
  <title>Release 16.2</title>

  <formalpara>
  <title>Release date:</title>
  <para>2024-02-08</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 16.1.
   For information about new features in major release 16, see
   <xref linkend="release-16"/>.
  </para>

  <sect2 id="release-16-2-migration">
   <title>Migration to Version 16.2</title>

   <para>
    A dump/restore is not required for those running 16.X.
   </para>

   <para>
    However, one bug was fixed that could have resulted in corruption of
    GIN indexes during concurrent updates.  If you suspect such
    corruption, reindex affected indexes after installing this update.
   </para>

   <para>
    Also, if you are upgrading from a version earlier than 16.1,
    see <xref linkend="release-16-1"/>.
   </para>
  </sect2>

  <sect2 id="release-16-2-changes">
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [5a9167c39] 2024-02-05 11:01:23 +0200
Branch: REL_16_STABLE [d6a61cb3b] 2024-02-05 11:02:56 +0200
Branch: REL_15_STABLE [f2fdea198] 2024-02-05 11:03:26 +0200
Branch: REL_14_STABLE [f4f288352] 2024-02-05 11:03:43 +0200
Branch: REL_13_STABLE [d541ce3b6] 2024-02-05 11:04:08 +0200
Branch: REL_12_STABLE [2699fc035] 2024-02-05 11:04:22 +0200
Branch: master [b96115acb] 2024-02-05 11:01:30 +0200
Branch: REL_16_STABLE [fb3836855] 2024-02-05 11:03:03 +0200
Branch: REL_15_STABLE [06f36bc01] 2024-02-05 11:03:28 +0200
Branch: REL_14_STABLE [a45c950ae] 2024-02-05 11:03:43 +0200
Branch: REL_13_STABLE [b73d21648] 2024-02-05 11:04:10 +0200
Branch: REL_12_STABLE [add8bc9b8] 2024-02-05 11:04:23 +0200
-->
     <para>
      Tighten security restrictions within <command>REFRESH MATERIALIZED
      VIEW CONCURRENTLY</command> (Heikki Linnakangas)
     </para>

     <para>
      One step of a concurrent refresh command was run under weak security
      restrictions.  If a materialized view's owner could persuade a
      superuser or other high-privileged user to perform a concurrent
      refresh on that view, the view's owner could control code executed
      with the privileges of the user running <command>REFRESH</command>.
      Fix things so that all user-determined code is run as the view's
      owner, as expected.
     </para>

     <para>
      The only known exploit for this error does not work
      in <productname>PostgreSQL</productname> 16.0 and later, so it may
      be that v16 is not vulnerable in practice.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Pedro
      Gallegos for reporting this problem.
      (CVE-2024-0985) <!-- not CVE-2023-5869 as claimed in commit msg -->
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [9dce22033] 2023-09-27 13:02:21 +0200
Branch: REL_16_STABLE [2cf50585e] 2023-11-17 10:18:38 +0100
Branch: REL_15_STABLE [aef521849] 2023-11-17 10:21:34 +0100
Branch: REL_14_STABLE [75a20a4b4] 2023-11-17 10:27:45 +0100
Branch: REL_13_STABLE [10912f7d4] 2023-11-17 11:46:31 +0100
Branch: REL_12_STABLE [3b991f81c] 2023-11-17 11:47:17 +0100
Branch: REL_12_STABLE [c922b2410] 2023-12-11 12:02:01 +0100
-->
     <para>
      Fix memory leak when performing JIT inlining (Andres Freund,
      Daniel Gustafsson)
     </para>

     <para>
      There have been multiple reports of backend processes suffering
      out-of-memory conditions after sufficiently many JIT compilations.
      This fix should resolve that.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_16_STABLE [62f120203] 2024-02-01 12:34:21 -0500
Branch: REL_15_STABLE [12ec16d11] 2024-02-01 12:34:21 -0500
Branch: REL_14_STABLE [e031995d5] 2024-02-01 12:34:21 -0500
Branch: REL_13_STABLE [7af96a66f] 2024-02-01 12:34:21 -0500
Branch: REL_12_STABLE [2e822a1d6] 2024-02-01 12:34:21 -0500
-->
     <para>
      Avoid generating incorrect partitioned-join plans (Richard Guo)
     </para>

     <para>
      Some uncommon situations involving lateral references could create
      incorrect plans.  Affected queries could produce wrong answers, or
      odd failures such as <quote>variable not found in subplan target
      list</quote>, or executor crashes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [29f114b6f] 2024-01-11 15:28:22 -0500
Branch: REL_16_STABLE [80bece312] 2024-01-11 15:28:13 -0500
Branch: REL_15_STABLE [a0b4fda44] 2024-01-11 15:28:13 -0500
Branch: REL_14_STABLE [ea1d54288] 2024-01-11 15:28:13 -0500
Branch: REL_13_STABLE [bfd28bb07] 2024-01-11 15:28:13 -0500
Branch: REL_12_STABLE [69c12c417] 2024-01-11 15:28:13 -0500
-->
     <para>
      Fix incorrect wrapping of subquery output expressions in
      PlaceHolderVars (Tom Lane)
     </para>

     <para>
      This fixes incorrect results when a subquery is underneath an outer
      join and has an output column that laterally references something
      outside the outer join's scope.  The output column might not appear
      as NULL when it should do so due to the action of the outer join.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d641b827a] 2024-01-10 13:36:33 -0500
Branch: REL_16_STABLE [ee9553218] 2024-01-10 13:36:34 -0500
Branch: REL_15_STABLE [c3f52fd5d] 2024-01-10 13:36:34 -0500
-->
     <para>
      Fix misprocessing of window function run conditions (Richard Guo)
     </para>

     <para>
      This oversight could lead to <quote>WindowFunc not found in subplan
      target lists</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [2bcf0785c] 2024-01-22 22:45:02 +1300
Branch: REL_16_STABLE [74f770ef2] 2024-01-22 22:45:33 +1300
-->
     <para>
      Fix detection of inner-side uniqueness for Memoize plans
      (Richard Guo)
     </para>

     <para>
      This mistake could lead to <quote>cache entry already
      complete</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [36f5594c0] 2023-11-09 15:46:16 -0500
Branch: REL_16_STABLE [6bf2efb38] 2023-11-09 15:46:16 -0500
-->
     <para>
      Fix computation of nullingrels when constant-folding field selection
      (Richard Guo)
     </para>

     <para>
      Failure to do this led to errors like <quote>wrong varnullingrels
      (b) (expected (b 3)) for Var 2/2</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [a4f7d33a9] 2023-11-09 11:23:42 +0000
Branch: REL_16_STABLE [06a546382] 2023-11-09 11:27:04 +0000
Branch: REL_15_STABLE [c0bfdaf2b] 2023-11-09 11:28:25 +0000
-->
     <para>
      Skip inappropriate actions when <command>MERGE</command> causes a
      cross-partition update (Dean Rasheed)
     </para>

     <para>
      When executing a <literal>MERGE UPDATE</literal> action on a
      partitioned table, if the <literal>UPDATE</literal> is turned into
      a <literal>DELETE</literal> and <literal>INSERT</literal> due to
      changing a partition key column, skip firing <literal>AFTER
      UPDATE ROW</literal> triggers, as well as other post-update actions
      such as RLS checks.  These actions would typically fail, which is
      why a regular <literal>UPDATE</literal> doesn't do them in such
      cases; <literal>MERGE</literal> shouldn't either.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [a0ff37173] 2023-12-21 12:55:22 +0000
Branch: REL_16_STABLE [7f07384dc] 2023-12-21 12:53:48 +0000
Branch: REL_15_STABLE [7e8c6d7af] 2023-12-21 12:51:55 +0000
-->
     <para>
      Cope with <literal>BEFORE ROW DELETE</literal> triggers in
      cross-partition <command>MERGE</command> updates (Dean Rasheed)
     </para>

     <para>
      If such a trigger attempted to prevent the update by returning
      NULL, <command>MERGE</command> would suffer an error or assertion
      failure.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6545ba96c] 2024-01-14 12:38:41 -0500
Branch: REL_16_STABLE [23e0ba59c] 2024-01-14 12:38:41 -0500
Branch: REL_15_STABLE [1a4e54617] 2024-01-14 12:38:41 -0500
Branch: REL_14_STABLE [c7edaeec5] 2024-01-14 12:38:41 -0500
-->
     <para>
      Prevent access to a no-longer-pinned buffer in <literal>BEFORE ROW
      UPDATE</literal> triggers (Alexander Lakhin, Tom Lane)
     </para>

     <para>
      If the tuple being updated had just been updated and moved to
      another page by another session, there was a narrow window where
      we would attempt to fetch data from the new tuple version without
      any pin on its buffer.  In principle this could result in garbage
      data appearing in non-updated columns of the proposed new tuple.
      The odds of problems in practice seem rather low, however.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [2a67b5a60] 2024-01-07 09:10:19 +0200
Branch: REL_16_STABLE [714a987bc] 2024-01-07 09:32:58 +0200
Branch: REL_15_STABLE [1a7c03e6f] 2024-01-07 09:10:40 +0200
Branch: REL_14_STABLE [3bdaa8fc6] 2024-01-07 09:10:49 +0200
Branch: REL_13_STABLE [60de25c6e] 2024-01-07 09:11:00 +0200
Branch: REL_12_STABLE [72d5b2776] 2024-01-07 09:18:43 +0200
Branch: master [6d94cc6ca] 2024-01-08 20:00:20 +0200
Branch: REL_16_STABLE [20a566cd4] 2024-01-08 19:57:09 +0200
Branch: REL_15_STABLE [6eecc3a62] 2024-01-08 19:57:03 +0200
Branch: REL_14_STABLE [97e64911d] 2024-01-08 19:57:58 +0200
Branch: REL_13_STABLE [17b6f39f1] 2024-01-08 19:58:38 +0200
Branch: REL_12_STABLE [a5e2853c3] 2024-01-08 19:58:51 +0200
-->
     <para>
      Avoid requesting an oversize shared-memory area in parallel hash
      join (Thomas Munro, Andrei Lepikhov, Alexander Korotkov)
     </para>

     <para>
      The limiting value was too large, allowing <quote>invalid DSA memory
      alloc request size</quote> errors to occur with sufficiently large
      expected hash table sizes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9cd0d77df] 2024-01-05 20:08:34 +0900
Branch: REL_16_STABLE [37c551663] 2024-01-05 20:10:46 +0900
-->
     <para>
      Fix corruption of local buffer state when an error occurs while
      trying to extend a temporary table (Tender Wang)
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [ae69c4fcf] 2024-01-04 20:38:25 +1300
Branch: REL_16_STABLE [6298673f4] 2024-01-04 20:40:11 +1300
-->
     <para>
      Fix use of wrong tuple slot while
      evaluating <literal>DISTINCT</literal> aggregates that have multiple
      arguments (David Rowley)
     </para>

     <para>
      This mistake could lead to errors such as <quote>attribute 1 of type
      record has wrong type</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [60f227316] 2023-11-28 12:00:14 +0200
Branch: REL_16_STABLE [9fee3232a] 2023-11-28 11:59:45 +0200
Branch: REL_15_STABLE [2873fbfe0] 2023-11-28 11:59:50 +0200
Branch: REL_14_STABLE [59c62a21f] 2023-11-28 11:59:51 +0200
Branch: REL_13_STABLE [e434d3620] 2023-11-28 11:59:52 +0200
Branch: REL_12_STABLE [b8a606e21] 2023-11-28 11:59:53 +0200
-->
     <para>
      Avoid assertion failures in <function>heap_update()</function>
      and <function>heap_delete()</function> when a tuple to be updated by
      a foreign-key enforcement trigger fails the extra visibility
      crosscheck (Alexander Lakhin)
     </para>

     <para>
      This error had no impact in non-assert builds.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1b2c6b756] 2023-11-08 14:06:26 +0900
Branch: REL_16_STABLE [4dccf9575] 2023-11-08 14:06:36 +0900
Branch: REL_15_STABLE [7e18c0bd6] 2023-11-08 14:06:39 +0900
Branch: REL_14_STABLE [59fc39c0d] 2023-11-08 14:06:42 +0900
-->
     <para>
      Fix overly tight assertion
      about <varname>false_positive_rate</varname> parameter of
      BRIN bloom operator classes (Alexander Lakhin)
     </para>

     <para>
      This error had no impact in non-assert builds, either.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [bb812ab09] 2024-01-24 14:20:01 +0900
Branch: REL_16_STABLE [51193e7a7] 2024-01-24 14:20:08 +0900
Branch: REL_15_STABLE [ad6fbbeeb] 2024-01-24 14:20:10 +0900
Branch: REL_14_STABLE [5a7833f49] 2024-01-24 14:20:11 +0900
Branch: REL_13_STABLE [bfec14d06] 2024-01-24 14:20:13 +0900
Branch: REL_12_STABLE [2f7242837] 2024-01-24 14:20:14 +0900
-->
     <para>
      Fix possible failure during <command>ALTER TABLE ADD
      COLUMN</command> on a complex inheritance tree (Tender Wang)
     </para>

     <para>
      If a grandchild table would inherit the new column via multiple
      intermediate parents, the command failed with <quote>tuple already
      updated by self</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3e91dba8b] 2024-01-31 13:15:21 +0900
Branch: REL_16_STABLE [f33e83285] 2024-01-31 13:16:43 +0900
Branch: REL_15_STABLE [41fa4b31c] 2024-01-31 13:16:46 +0900
Branch: REL_14_STABLE [dde5b01c3] 2024-01-31 13:16:47 +0900
Branch: REL_13_STABLE [4d0e8a008] 2024-01-31 13:16:49 +0900
Branch: REL_12_STABLE [056109782] 2024-01-31 13:16:50 +0900
-->
     <para>
      Fix problems with duplicate token names in <command>ALTER TEXT
      SEARCH CONFIGURATION ... MAPPING</command> commands (Tender Wang,
      Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [50b797dc9] 2024-01-29 08:05:59 +0900
Branch: REL_16_STABLE [f57a580fd] 2024-01-29 08:06:03 +0900
-->
     <para>
      Fix <command>DROP ROLE</command> with duplicate role names
      (Michael Paquier)
     </para>

     <para>
      Previously this led to a <quote>tuple already updated by
      self</quote> failure.  Instead, ignore the duplicate.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [28f84f72f] 2023-11-19 21:03:38 +0100
Branch: REL_16_STABLE [ee32b824d] 2023-11-19 21:03:50 +0100
Branch: REL_15_STABLE [0177fc773] 2023-11-19 21:04:16 +0100
Branch: REL_14_STABLE [9dd50e92e] 2023-11-19 21:04:28 +0100
Branch: REL_13_STABLE [1e468ea4e] 2023-11-19 21:04:39 +0100
Branch: REL_12_STABLE [4f8d3c5b5] 2023-11-19 21:04:47 +0100
-->
     <para>
      Properly lock the associated table during <command>DROP
      STATISTICS</command> (Tomas Vondra)
     </para>

     <para>
      Failure to acquire the lock could result in <quote>tuple
      concurrently deleted</quote> errors if the <command>DROP</command>
      executes concurrently with <command>ANALYZE</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [743ddafc7] 2023-11-16 10:05:14 -0500
Branch: REL_16_STABLE [f07a3039c] 2023-11-16 10:05:14 -0500
Branch: REL_15_STABLE [9057ddbef] 2023-11-16 10:05:14 -0500
Branch: REL_14_STABLE [9bd0f74ea] 2023-11-16 10:05:14 -0500
Branch: REL_13_STABLE [5c11104c7] 2023-11-16 10:05:14 -0500
Branch: REL_12_STABLE [abd1b1325] 2023-11-16 10:05:14 -0500
-->
     <para>
      Fix function volatility checking for <literal>GENERATED</literal>
      and <literal>DEFAULT</literal> expressions (Tom Lane)
     </para>

     <para>
      These places could fail to detect insertion of a volatile function
      default-argument expression, or decide that a polymorphic function
      is volatile although it is actually immutable on the datatype of
      interest.  This could lead to improperly rejecting or accepting
      a <literal>GENERATED</literal> clause, or to mistakenly applying the
      constant-default-value optimization in <command>ALTER TABLE ADD
      COLUMN</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ad98fb142] 2024-01-13 13:46:27 -0500
Branch: REL_16_STABLE [7e2561e1a] 2024-01-13 13:46:27 -0500
Branch: REL_15_STABLE [2a46a0df4] 2024-01-13 13:46:27 -0500
Branch: REL_14_STABLE [db122d426] 2024-01-13 13:46:27 -0500
Branch: REL_13_STABLE [98e03f957] 2024-01-13 13:46:27 -0500
Branch: REL_12_STABLE [3b4d85cf1] 2024-01-13 13:46:27 -0500
Branch: master [96c019ffa] 2024-01-13 13:54:11 -0500
Branch: REL_16_STABLE [56dcd71de] 2024-01-13 13:54:11 -0500
Branch: REL_15_STABLE [d41358f4b] 2024-01-13 13:54:11 -0500
Branch: REL_14_STABLE [7ceeb57ba] 2024-01-13 13:54:11 -0500
Branch: REL_13_STABLE [475b3ea3c] 2024-01-13 13:54:11 -0500
Branch: REL_12_STABLE [d29a4fbac] 2024-01-13 13:54:11 -0500
-->
     <para>
      Detect that a new catalog cache entry became stale while detoasting
      its fields (Tom Lane)
     </para>

     <para>
      We expand any out-of-line fields in a catalog tuple before inserting
      it into the catalog caches.  That involves database access which
      might cause invalidation of catalog cache entries &mdash; but the
      new entry isn't in the cache yet, so we would miss noticing that it
      should get invalidated.  The result is a race condition in which an
      already-stale cache entry could get made, and then persist
      indefinitely.  This would lead to hard-to-predict misbehavior.
      Fix by rechecking the tuple's visibility after detoasting.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [0e3e8fbd3] 2023-11-09 09:50:23 +0000
Branch: REL_16_STABLE [c396aca2b] 2023-11-09 09:53:05 +0000
Branch: REL_15_STABLE [308a69a98] 2023-11-09 09:54:22 +0000
Branch: REL_14_STABLE [dea12b40d] 2023-11-09 09:55:39 +0000
Branch: REL_13_STABLE [4f4a0010a] 2023-11-09 09:56:31 +0000
Branch: REL_12_STABLE [b17a02be2] 2023-11-09 09:57:52 +0000
-->
     <para>
      Fix edge-case integer overflow detection bug on some platforms (Dean
      Rasheed)
     </para>

     <para>
      Computing <literal>0 - INT64_MIN</literal> should result in an
      overflow error, and did on most platforms.  However, platforms with
      neither integer overflow builtins nor 128-bit integers would fail to
      spot the overflow, instead returning <literal>INT64_MIN</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [25cd2d640] 2024-01-26 13:39:45 -0500
Branch: REL_16_STABLE [7204aea83] 2024-01-26 13:39:37 -0500
Branch: REL_15_STABLE [86b6243a8] 2024-01-26 13:39:37 -0500
Branch: REL_14_STABLE [3eb8a87f6] 2024-01-26 13:39:37 -0500
Branch: REL_13_STABLE [425127bed] 2024-01-26 13:39:37 -0500
Branch: REL_12_STABLE [c3bdb25fb] 2024-01-26 13:39:37 -0500
-->
     <para>
      Detect Julian-date overflow when adding or subtracting
      an <type>interval</type> to/from a <type>timestamp</type> (Tom Lane)
     </para>

     <para>
      Some cases that should cause an out-of-range error produced an
      incorrect result instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [b218fbb7a] 2023-11-18 14:41:20 +0000
Branch: REL_16_STABLE [72d0c135b] 2023-11-18 14:46:02 +0000
Branch: REL_15_STABLE [2851aa7d1] 2023-11-18 14:47:04 +0000
Branch: REL_14_STABLE [2ffcebdba] 2023-11-18 14:48:10 +0000
Branch: REL_13_STABLE [428770aad] 2023-11-18 14:49:18 +0000
Branch: REL_12_STABLE [f499d2b20] 2023-11-18 14:50:00 +0000
-->
     <para>
      Add more checks for overflow in <function>interval_mul()</function>
      and <function>interval_div()</function> (Dean Rasheed)
     </para>

     <para>
      Some cases that should cause an out-of-range error produced an
      incorrect result instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [14f2f9eb1] 2023-11-28 08:35:50 +0900
Branch: REL_16_STABLE [07cb7bc1c] 2023-11-28 08:35:56 +0900
-->
     <para>
      Allow <function>scram_SaltedPassword()</function> to be interrupted
      (Bowen Shi)
     </para>

     <para>
      With large <varname>scram_iterations</varname> values, this function
      could take a long time to run.  Allow it to be interrupted by query
      cancel requests.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [235c09efb] 2024-02-01 17:12:50 +0900
Branch: REL_16_STABLE [781bc121d] 2024-02-01 17:13:09 +0900
Branch: REL_15_STABLE [171d21f50] 2024-02-01 17:13:11 +0900
-->
     <para>
      Ensure cached statistics are discarded after a change
      to <varname>stats_fetch_consistency</varname> (Shinya Kato)
     </para>

     <para>
      In some code paths, it was possible for stale statistics to be
      returned.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [059de3ca4] 2023-12-26 17:57:48 -0500
Branch: REL_16_STABLE [e87252ceb] 2023-12-26 17:57:48 -0500
Branch: REL_15_STABLE [76dd3d94a] 2023-12-26 17:57:48 -0500
Branch: REL_14_STABLE [bf4f30a0f] 2023-12-26 17:57:48 -0500
Branch: REL_13_STABLE [cb88f44ec] 2023-12-26 17:57:48 -0500
Branch: REL_12_STABLE [ea61b1cf6] 2023-12-26 17:57:48 -0500
-->
     <para>
      Make the <structname>pg_file_settings</structname> view check
      validity of unapplied values for settings
      with <literal>backend</literal>
      or <literal>superuser-backend</literal> context (Tom Lane)
     </para>

     <para>
      Invalid values were not noted in the view as intended.  This escaped
      detection because there are very few settings in these groups.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [a11c9c42e] 2023-12-01 16:05:41 +0100
Branch: REL_16_STABLE [267f33f68] 2023-12-01 16:09:54 +0100
Branch: REL_15_STABLE [15d485921] 2023-12-01 16:14:22 +0100
Branch: REL_14_STABLE [e846fc491] 2023-12-01 16:17:38 +0100
Branch: REL_13_STABLE [3c49fa2af] 2023-12-01 16:23:18 +0100
Branch: REL_12_STABLE [5d40b3c4f] 2023-12-01 16:27:18 +0100
-->
     <para>
      Match collation too when matching an existing index to a new
      partitioned index (Peter Eisentraut)
     </para>

     <para>
      Previously we could accept an index that has a different collation
      from the corresponding element of the partition key, possibly
      leading to misbehavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [0ae3b4662] 2024-01-18 16:30:11 +0900
Branch: REL_16_STABLE [c030e263e] 2024-01-18 16:31:38 +0900
Branch: REL_15_STABLE [a0c19de11] 2024-01-18 16:31:46 +0900
Branch: REL_14_STABLE [b6f2e019d] 2024-01-18 16:31:50 +0900
Branch: master [8013850c8] 2024-01-18 15:04:24 +0900
Branch: REL_16_STABLE [7ce65c6f7] 2024-01-18 15:04:31 +0900
Branch: REL_15_STABLE [1cf2dba84] 2024-01-18 15:04:35 +0900
Branch: REL_14_STABLE [b685b41cf] 2024-01-18 15:04:39 +0900
-->
     <para>
      Avoid failure if a child index is dropped concurrently
      with <command>REINDEX INDEX</command> on a partitioned index
      (Fei Changhong)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [6a1ea02c4] 2024-01-29 13:46:22 +0200
Branch: REL_16_STABLE [b899e00e7] 2024-01-29 13:46:30 +0200
Branch: REL_15_STABLE [e43425f48] 2024-01-29 13:46:42 +0200
Branch: REL_14_STABLE [f120c0872] 2024-01-29 13:46:43 +0200
Branch: REL_13_STABLE [e74c91665] 2024-01-29 13:46:45 +0200
Branch: REL_12_STABLE [e6511fe64] 2024-01-29 13:46:48 +0200
-->
     <para>
      Fix insufficient locking when cleaning up an incomplete split of
      a GIN index's internal page (Fei Changhong, Heikki Linnakangas)
     </para>

     <para>
      The code tried to do this with shared rather than exclusive lock on
      the buffer.  This could lead to index corruption if two processes
      attempted the cleanup concurrently.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5c62ecf6e] 2023-11-13 11:44:35 -0500
Branch: REL_16_STABLE [f76b975d5] 2023-11-13 11:44:48 -0500
Branch: REL_15_STABLE [4c73ec604] 2023-11-13 11:44:57 -0500
Branch: REL_14_STABLE [d900e74e0] 2023-11-13 11:45:04 -0500
Branch: REL_13_STABLE [c859d688b] 2023-11-13 11:45:09 -0500
Branch: REL_12_STABLE [5a6937ec9] 2023-11-13 11:45:13 -0500
-->
     <para>
      Avoid premature release of buffer pin in GIN index insertion
      (Tom Lane)
     </para>

     <para>
      If an index root page split occurs concurrently with our own
      insertion, the code could fail with <quote>buffer NNNN is not owned
      by resource owner</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [903737c5b] 2023-12-21 12:43:36 -0500
Branch: REL_16_STABLE [0977bd64e] 2023-12-21 12:43:36 -0500
Branch: REL_15_STABLE [ab04c1901] 2023-12-21 12:43:36 -0500
Branch: REL_14_STABLE [375f441bd] 2023-12-21 12:43:36 -0500
Branch: REL_13_STABLE [cc3865150] 2023-12-21 12:43:36 -0500
Branch: REL_12_STABLE [1771ec9a8] 2023-12-21 12:43:36 -0500
-->
     <para>
      Avoid failure with partitioned SP-GiST indexes (Tom Lane)
     </para>

     <para>
      Trying to use an index of this kind could lead to <quote>No such
      file or directory</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [59bd34c2f] 2023-12-15 13:55:05 -0500
Branch: REL_16_STABLE [152bfc0af] 2023-12-15 13:55:05 -0500
-->
     <para>
      Fix ownership tests for large objects (Tom Lane)
     </para>

     <para>
      Operations on large objects that require ownership privilege failed
      with <quote>unrecognized class ID: 2613</quote>, unless run by a
      superuser.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [59bd34c2f] 2023-12-15 13:55:05 -0500
Branch: REL_16_STABLE [152bfc0af] 2023-12-15 13:55:05 -0500
Branch: REL_15_STABLE [7a99fb6e1] 2023-12-15 13:55:05 -0500
Branch: REL_14_STABLE [f552f2be2] 2023-12-15 13:55:05 -0500
Branch: REL_13_STABLE [55b5c67da] 2023-12-15 13:55:05 -0500
Branch: REL_12_STABLE [ba66f2533] 2023-12-15 13:55:05 -0500
-->
     <para>
      Fix ownership change reporting for large objects (Tom Lane)
     </para>

     <para>
      A no-op <command>ALTER LARGE OBJECT OWNER</command> command (that
      is, one selecting the existing owner) passed the wrong class ID to
      the <varname>PostAlterHook</varname>, probably confusing any
      extension using that hook.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: REL_16_STABLE [db69101a1] 2023-12-14 09:59:47 +0100
Branch: REL_15_STABLE [8dd70828b] 2023-12-14 09:59:52 +0100
-->
     <para>
      Fix reporting of I/O timing data in <literal>EXPLAIN
      (BUFFERS)</literal> (Michael Paquier)
     </para>

     <para>
      The numbers labeled as <quote>shared/local</quote> actually refer
      only to shared buffers, so change that label
      to <quote>shared</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [df220714e] 2024-02-01 13:44:19 -0800
Branch: REL_16_STABLE [6d423e9ff] 2024-02-01 13:44:22 -0800
Branch: REL_15_STABLE [d493bed28] 2024-02-01 13:44:22 -0800
Branch: master [0b6517a3b] 2024-02-01 13:44:19 -0800
Branch: REL_16_STABLE [48a6bf5c4] 2024-02-01 13:44:22 -0800
Branch: REL_15_STABLE [8fa4a1ac6] 2024-02-01 13:44:23 -0800
-->
     <para>
      Ensure durability of <command>CREATE DATABASE</command> (Noah Misch)
     </para>

     <para>
      If an operating system crash occurred during or shortly
      after <command>CREATE DATABASE</command>, recovery could fail, or
      subsequent connections to the new database could fail.  If a base
      backup was taken in that window, similar problems could be observed
      when trying to use the backup.  The symptom would be that the
      database directory, <filename>PG_VERSION</filename> file, or
      <filename>pg_filenode.map</filename> file was missing or empty.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1d35f705e] 2024-01-25 17:07:56 +0900
Branch: REL_16_STABLE [edbd1b41a] 2024-01-29 09:04:51 +0900
Branch: REL_15_STABLE [8b34cff33] 2024-01-29 09:04:55 +0900
-->
     <para>
      Add more <literal>LOG</literal> messages when starting and ending
      recovery from a backup (Andres Freund)
     </para>

     <para>
      This change provides additional information in the postmaster log
      that may be useful for diagnosing recovery problems.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8a7cbfce1] 2023-12-12 17:05:18 +0100
Branch: REL_16_STABLE [0e2c05af9] 2023-12-12 17:05:27 +0100
Branch: REL_15_STABLE [f5d8f59ca] 2023-12-12 17:05:29 +0100
Branch: REL_14_STABLE [0cfd3ddfe] 2023-12-12 17:05:33 +0100
Branch: REL_13_STABLE [d99294e77] 2023-12-12 17:05:34 +0100
Branch: REL_12_STABLE [4d45ecc92] 2023-12-12 17:05:36 +0100
-->
     <para>
      Prevent standby servers from incorrectly processing dead index
      tuples during subtransactions (Fei Changhong)
     </para>

     <para>
      The <structfield>startedInRecovery</structfield> flag was not
      correctly set for a subtransaction.  This affects only processing of
      dead index tuples.  It could allow a query in a subtransaction to
      ignore index entries that it should return (if they are already dead
      on the primary server, but not dead to the standby transaction), or
      to prematurely mark index entries as dead that are not yet dead on
      the primary.  It is not clear that the latter case has any serious
      consequences, but it's not the intended behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [21ef4d4d8] 2024-01-23 10:38:07 +0200
Branch: REL_16_STABLE [c5a6d5337] 2024-01-23 10:53:23 +0200
-->
     <para>
      Fix signal handling in walreceiver processes (Heikki Linnakangas)
     </para>

     <para>
      Revert a change that made walreceivers non-responsive
      to <systemitem>SIGTERM</systemitem> while waiting for the
      replication connection to be established.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [cd7f19da3] 2023-12-08 16:09:03 +1300
Branch: REL_16_STABLE [8ca56620c] 2023-12-08 16:10:23 +1300
Branch: REL_15_STABLE [b9f687f5a] 2023-12-08 16:11:12 +1300
-->
     <para>
      Fix integer overflow hazard in checking whether a record will fit
      into the WAL decoding buffer (Thomas Munro)
     </para>

     <para>
      This bug appears to be only latent except when running a
      32-bit <productname>PostgreSQL</productname> build on a 64-bit
      platform.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [8d7d2197f] 2023-12-11 08:50:43 +0530
Branch: REL_16_STABLE [01cc92fa6] 2023-12-11 08:36:17 +0530
Branch: REL_15_STABLE [332b43063] 2023-12-11 08:23:33 +0530
Branch: REL_14_STABLE [3f86867d5] 2023-12-11 08:10:46 +0530
Branch: REL_13_STABLE [b47ea4f3d] 2023-12-11 07:57:50 +0530
Branch: REL_12_STABLE [e81e617f3] 2023-12-11 07:45:45 +0530
-->
     <para>
      Fix deadlock between a logical replication apply worker, its
      tablesync worker, and a session process trying to alter the
      subscription (Shlok Kyal)
     </para>

     <para>
      One edge of the deadlock loop did not involve a lock wait, so the
      deadlock went undetected and would persist until manual
      intervention.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [360392fa2] 2023-11-27 08:49:55 +0530
Branch: REL_16_STABLE [d7ca9209c] 2023-11-27 08:59:12 +0530
Branch: REL_15_STABLE [a77fb8c68] 2023-11-27 09:14:17 +0530
-->
     <para>
      Ensure that column default values are correctly transmitted by
      the <application>pgoutput</application> logical replication plugin
      (Nikhil Benesch)
     </para>

     <para>
      <command>ALTER TABLE ADD COLUMN</command> with a constant default
      value for the new column avoids rewriting existing tuples, instead
      expecting that reading code will insert the correct default into a
      tuple that lacks that column.  If replication was subsequently
      initiated on the table, <application>pgoutput</application> would
      transmit NULL instead of the correct default for such a column,
      causing incorrect replication on the subscriber.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [eeb0ebad7] 2023-11-22 11:44:14 +0530
Branch: REL_16_STABLE [1b6da28e0] 2023-11-22 11:27:38 +0530
Branch: REL_15_STABLE [57aae65ae] 2023-11-22 11:14:35 +0530
-->
     <para>
      Fix failure of logical replication's initial sync for a table with
      no columns (Vignesh C)
     </para>

     <para>
      This case generated an improperly-formatted <command>COPY</command>
      command.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [5c3166905] 2024-01-12 13:41:36 -0800
Branch: REL_16_STABLE [4c03ac7e2] 2024-01-12 13:42:09 -0800
Branch: master [dd3ca8cbb] 2024-01-18 14:59:59 -0800
Branch: REL_16_STABLE [5b5318c38] 2024-01-18 15:00:15 -0800
-->
     <para>
      Re-validate a subscription's connection string before use (Vignesh C)
     </para>

     <para>
      This is meant to detect cases where a subscription was created
      without a password (which is allowed to superusers) but then the
      subscription owner is changed to a non-superuser.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [aaf09c592] 2024-01-03 17:40:41 -0500
Branch: REL_16_STABLE [fb464a1ae] 2024-01-03 17:40:38 -0500
Branch: REL_15_STABLE [a0d016393] 2024-01-03 17:40:38 -0500
Branch: REL_14_STABLE [9b042e27e] 2024-01-03 17:40:38 -0500
Branch: REL_13_STABLE [5810888c5] 2024-01-03 17:40:38 -0500
Branch: REL_12_STABLE [c20f2aab6] 2024-01-03 17:40:38 -0500
-->
     <para>
      Return the correct status code when a new client disconnects without
      responding to the server's password challenge (Liu Lang, Tom Lane)
     </para>

     <para>
      In some cases we'd treat this as a loggable error, which was not the
      intention and tends to create log spam, since common clients
      like <application>psql</application> frequently do this.  It may
      also confuse extensions that
      use <varname>ClientAuthentication_hook</varname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c82207a54] 2023-11-28 12:34:03 -0500
Branch: REL_16_STABLE [efa8f6064] 2023-11-28 12:34:03 -0500
Branch: REL_15_STABLE [5dd30bb54] 2023-11-28 12:34:03 -0500
Branch: REL_14_STABLE [b2b1f1288] 2023-11-28 12:34:03 -0500
Branch: REL_13_STABLE [efb804682] 2023-11-28 12:34:03 -0500
Branch: REL_12_STABLE [0bd682246] 2023-11-28 12:34:03 -0500
-->
     <para>
      Fix incompatibility with <application>OpenSSL</application> 3.2
      (Tristan Partin, Bo Andreson)
     </para>

     <para>
      Use the BIO <quote>app_data</quote> field for our private storage,
      instead of assuming it's okay to use the <quote>data</quote> field.
      This mistake didn't cause problems before, but with 3.2 it leads
      to crashes and complaints about double frees.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0a5c46a7a] 2023-12-11 11:51:56 -0500
Branch: REL_16_STABLE [ebbd499d4] 2023-12-11 11:51:56 -0500
Branch: REL_15_STABLE [551d4b28e] 2023-12-11 11:51:56 -0500
Branch: REL_14_STABLE [07ce24326] 2023-12-11 11:51:56 -0500
Branch: REL_13_STABLE [87b46ad90] 2023-12-11 11:51:56 -0500
Branch: REL_12_STABLE [271d24f31] 2023-12-11 11:51:56 -0500
-->
     <para>
      Be more wary about <application>OpenSSL</application> not
      setting <varname>errno</varname> on error (Tom Lane)
     </para>

     <para>
      If <varname>errno</varname> isn't set, assume the cause of the
      reported failure is read EOF.  This fixes rare cases of strange
      error reports like <quote>could not accept SSL connection:
      Success</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_16_STABLE [501cfd07d] 2023-11-23 13:30:13 +0200
Branch: REL_15_STABLE [481d7d1c0] 2023-11-23 13:31:51 +0200
Branch: REL_14_STABLE [555276f85] 2023-11-23 13:31:57 +0200
-->
     <para>
      Fix file descriptor leakage when a foreign data
      wrapper's <function>ForeignAsyncRequest</function> function fails
      (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [45da69371] 2024-01-12 21:40:23 -0800
Branch: REL_16_STABLE [41820e640] 2024-01-12 21:39:35 -0800
-->
     <para>
      Fix minor memory leak in connection string validation
      for <command>CREATE SUBSCRIPTION</command> (Jeff Davis)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e4e63cd98] 2024-02-02 15:34:29 -0500
Branch: REL_16_STABLE [a15378100] 2024-02-02 15:34:29 -0500
Branch: REL_15_STABLE [3766b8b64] 2024-02-02 15:34:29 -0500
Branch: REL_14_STABLE [329b96882] 2024-02-02 15:34:29 -0500
Branch: REL_13_STABLE [29df29dad] 2024-02-02 15:34:29 -0500
Branch: REL_12_STABLE [4493bfb70] 2024-02-02 15:34:29 -0500
-->
     <para>
      Report <systemitem>ENOMEM</systemitem> errors from file-related system
      calls as <literal>ERRCODE_OUT_OF_MEMORY</literal>,
      not <literal>ERRCODE_INTERNAL_ERROR</literal> (Alexander Kuzmenkov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [57b440ec1] 2024-01-18 16:11:16 -0500
Branch: REL_16_STABLE [00f941356] 2024-01-18 16:10:57 -0500
Branch: REL_15_STABLE [de2d393a8] 2024-01-18 16:10:57 -0500
Branch: REL_14_STABLE [b7e8f27d1] 2024-01-18 16:10:57 -0500
-->
     <para>
      In <application>PL/pgSQL</application>, support SQL commands that
      are <command>CREATE FUNCTION</command>/<command>CREATE
      PROCEDURE</command> with SQL-standard bodies (Tom Lane)
     </para>

     <para>
      Previously, such cases failed with parsing errors due to the
      semicolon(s) appearing in the function body.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [b8ba7344e] 2023-12-05 12:43:24 +0100
Branch: REL_16_STABLE [878aa41f8] 2023-12-05 12:43:24 +0100
Branch: REL_15_STABLE [1171c6e74] 2023-12-05 12:43:24 +0100
Branch: REL_14_STABLE [f89681816] 2023-12-05 12:43:24 +0100
Branch: master [c6605c1bd] 2024-01-16 12:27:52 +0100
Branch: REL_16_STABLE [39aab1108] 2024-01-16 12:27:52 +0100
Branch: REL_15_STABLE [2b656cbd2] 2024-01-16 12:27:52 +0100
Branch: REL_14_STABLE [7a7c8c98a] 2024-01-16 12:27:52 +0100
-->
     <para>
      Fix <application>libpq</application>'s
      handling of errors in pipelines (&Aacute;lvaro Herrera)
     </para>

     <para>
      The pipeline state could get out of sync if an error is returned
      for reasons other than a query problem (for example, if the
      connection is lost).  Potentially this would lead to a busy-loop in
      the calling application.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1a5594b95] 2023-11-08 16:44:08 +0100
Branch: REL_16_STABLE [42f832685] 2023-11-08 16:44:08 +0100
Branch: REL_15_STABLE [0e28091d5] 2023-11-08 16:44:08 +0100
Branch: REL_14_STABLE [99fa98766] 2023-11-08 16:44:08 +0100
-->
     <para>
      Make <application>libpq</application>'s
      <function>PQsendFlushRequest()</function> function flush the client
      output buffer under the same rules as
      other <literal>PQsend</literal> functions (Jelte Fennema-Nio)
     </para>

     <para>
      In pipeline mode, it may still be necessary to
      call <function>PQflush()</function> as well; but this change removes
      some inconsistency.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [01eca6a91] 2023-11-27 09:40:44 +0900
Branch: REL_16_STABLE [8984480b5] 2023-11-27 09:40:49 +0900
Branch: REL_15_STABLE [b97226815] 2023-11-27 09:40:50 +0900
Branch: REL_14_STABLE [c3b79223f] 2023-11-27 09:40:52 +0900
Branch: REL_13_STABLE [09f680d11] 2023-11-27 09:40:55 +0900
Branch: REL_12_STABLE [0217a7444] 2023-11-27 09:40:57 +0900
-->
     <para>
      Avoid race condition when <application>libpq</application>
      initializes OpenSSL support concurrently in two different threads
      (Willi Mann, Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d053a879b] 2023-11-23 13:30:18 -0500
Branch: REL_16_STABLE [85eb77185] 2023-11-23 13:30:18 -0500
Branch: REL_15_STABLE [a50053777] 2023-11-23 13:30:18 -0500
Branch: REL_14_STABLE [8f23e6a45] 2023-11-23 13:30:18 -0500
Branch: REL_13_STABLE [5abdfd88f] 2023-11-23 13:30:18 -0500
Branch: REL_12_STABLE [18fad508b] 2023-11-23 13:30:19 -0500
-->
     <para>
      Fix timing-dependent failure in GSSAPI data transmission (Tom Lane)
     </para>

     <para>
      When using GSSAPI encryption in non-blocking
      mode, <application>libpq</application> sometimes failed
      with <quote>GSSAPI caller failed to retransmit all data needing to
      be retried</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3d185cfc0] 2024-01-10 18:09:29 -0500
Branch: REL_16_STABLE [ba33775fd] 2024-01-10 18:09:29 -0500
-->
     <para>
      Change <application>initdb</application> to always un-comment
      the <filename>postgresql.conf</filename> entries for
      the <literal>lc_<replaceable>xxx</replaceable></literal> parameters
      (Kyotaro Horiguchi)
     </para>

     <para>
      <application>initdb</application> used to work this way before v16,
      and now it does again.  The change
      caused <application>initdb</application>'s <option>--no-locale</option>
      option to not have the intended effect
      on <varname>lc_messages</varname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a70f2a57f] 2023-11-13 17:04:26 -0500
Branch: REL_16_STABLE [64d2467fc] 2023-11-13 17:04:26 -0500
Branch: REL_15_STABLE [f15147df6] 2023-11-13 17:04:10 -0500
Branch: REL_14_STABLE [15439205d] 2023-11-13 17:04:10 -0500
Branch: REL_13_STABLE [9e08789d4] 2023-11-13 17:04:10 -0500
Branch: REL_12_STABLE [891afa84c] 2023-11-13 17:04:10 -0500
Branch: master [1e3f461e8] 2023-11-14 00:31:39 -0500
Branch: REL_16_STABLE [f1674ac6b] 2023-11-14 00:31:39 -0500
Branch: REL_15_STABLE [63c1b4d88] 2023-11-14 00:31:39 -0500
Branch: REL_14_STABLE [c532be99d] 2023-11-14 00:31:39 -0500
Branch: REL_13_STABLE [7836f6838] 2023-11-14 00:31:39 -0500
Branch: REL_12_STABLE [e43790342] 2023-11-14 00:31:39 -0500
-->
     <para>
      In <application>pg_dump</application>, don't dump RLS policies or
      security labels for extension member objects (Tom Lane, Jacob
      Champion)
     </para>

     <para>
      Previously, commands would be included in the dump to set these
      properties, which is really incorrect since they should be
      considered as internal affairs of the extension.  Moreover, the
      restoring user might not have adequate privilege to set them, and
      indeed the dumping user might not have enough privilege to dump them
      (since dumping RLS policies requires acquiring lock on their table).
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7418767f1] 2023-12-29 10:57:11 -0500
Branch: REL_16_STABLE [b2c9936a7] 2023-12-29 10:57:11 -0500
Branch: REL_15_STABLE [1e0841426] 2023-12-29 10:57:11 -0500
Branch: REL_14_STABLE [aa2e323ee] 2023-12-29 10:57:11 -0500
Branch: REL_13_STABLE [8d4e8b746] 2023-12-29 10:57:11 -0500
Branch: REL_12_STABLE [69d7edb06] 2023-12-29 10:57:11 -0500
-->
     <para>
      In <application>pg_dump</application>, don't dump an extended
      statistics object if its underlying table isn't being dumped
      (Rian McGuire, Tom Lane)
     </para>

     <para>
      This conforms to the behavior for other dependent objects such as
      indexes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [30e54d5c5] 2023-12-20 22:37:28 +0100
Branch: REL_16_STABLE [5b5db413d] 2023-12-20 22:37:28 +0100
-->
     <para>
      Properly detect out-of-memory in one code path
      in <application>pg_dump</application> (Daniel Gustafsson)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [49f7c6c44] 2024-01-22 17:48:30 +0100
Branch: REL_16_STABLE [07b53de70] 2024-01-22 17:48:30 +0100
Branch: REL_15_STABLE [3fd36be52] 2024-01-22 17:48:30 +0100
Branch: REL_14_STABLE [85ecff891] 2024-01-22 17:48:30 +0100
-->
     <para>
      Make it an error for a <application>pgbench</application> script to
      end with an open pipeline (Anthonin Bonnefoy)
     </para>

     <para>
      Previously, <application>pgbench</application> would behave oddly if
      a <command>\startpipeline</command> command lacked a
      matching <command>\endpipeline</command>.  This seems like a
      scripting mistake rather than a case
      that <application>pgbench</application> needs to handle nicely, so
      throw an error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9034a2d51] 2024-01-07 15:19:50 -0500
Branch: REL_16_STABLE [cf6f802bf] 2024-01-07 15:19:50 -0500
Branch: REL_15_STABLE [940ab02b5] 2024-01-07 15:19:50 -0500
Branch: REL_14_STABLE [90e8b86fc] 2024-01-07 15:19:50 -0500
Branch: REL_13_STABLE [9e7432faf] 2024-01-07 15:19:50 -0500
Branch: REL_12_STABLE [1c7443521] 2024-01-07 15:19:50 -0500
-->
     <para>
      Fix crash in <filename>contrib/intarray</filename> if an array with
      an element equal to <literal>INT_MAX</literal> is inserted into
      a <literal>gist__int_ops</literal> index
      (Alexander Lakhin, Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [208470136] 2023-12-19 18:19:05 +0900
Branch: REL_16_STABLE [7f68b1462] 2023-12-19 18:19:15 +0900
Branch: REL_15_STABLE [2e08440d6] 2023-12-19 18:19:16 +0900
Branch: REL_14_STABLE [bfbe4a146] 2023-12-19 18:19:18 +0900
Branch: REL_13_STABLE [586c6a091] 2023-12-19 18:19:19 +0900
Branch: REL_12_STABLE [f610d4f11] 2023-12-19 18:19:21 +0900
-->
     <para>
      Report a better error
      when <filename>contrib/pageinspect</filename>'s
      <function>hash_bitmap_info()</function> function is applied to a
      partitioned hash index (Alexander Lakhin, Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a8dd62ef4] 2023-12-19 15:20:39 +0900
Branch: REL_16_STABLE [b4948ed66] 2023-12-19 15:20:48 +0900
Branch: REL_15_STABLE [b745f1680] 2023-12-19 15:20:50 +0900
Branch: REL_14_STABLE [f729fdab4] 2023-12-19 15:20:52 +0900
Branch: REL_13_STABLE [b4c1d255c] 2023-12-19 15:20:53 +0900
Branch: REL_12_STABLE [bd2d3c928] 2023-12-19 15:20:55 +0900
-->
     <para>
      Report a better error
      when <filename>contrib/pgstattuple</filename>'s
      <function>pgstathashindex()</function> function is applied to a
      partitioned hash index (Alexander Lakhin)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9886744a3] 2024-01-10 10:41:57 +0900
Branch: REL_16_STABLE [714bfb781] 2024-01-12 13:53:07 +0900
Branch: REL_15_STABLE [33d1be06a] 2024-01-12 13:53:10 +0900
Branch: REL_14_STABLE [4c6944223] 2024-01-12 13:53:12 +0900
Branch: REL_13_STABLE [c8aab699e] 2024-01-12 13:53:13 +0900
Branch: REL_12_STABLE [9e70e6564] 2024-01-12 13:53:14 +0900
Branch: master [b83747a8a] 2024-01-11 10:39:58 +0900
Branch: REL_16_STABLE [506c77f9b] 2024-01-12 13:59:51 +0900
Branch: REL_15_STABLE [7e7d827f5] 2024-01-12 13:59:58 +0900
Branch: REL_14_STABLE [4a7475e9a] 2024-01-12 14:00:00 +0900
Branch: REL_13_STABLE [2a0eb80ae] 2024-01-12 14:00:01 +0900
Branch: REL_12_STABLE [e50a52b2b] 2024-01-12 14:00:02 +0900
-->
     <para>
      On Windows, suppress autorun options when launching subprocesses
      in <application>pg_ctl</application>
      and <application>pg_regress</application> (Kyotaro Horiguchi)
     </para>

     <para>
      When launching a child process via <filename>cmd.exe</filename>,
      pass the <option>/D</option> flag to prevent executing any autorun
      commands specified in the registry.  This avoids possibly-surprising
      side effects.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [97287bdfa] 2024-01-29 12:08:57 -0600
Branch: REL_16_STABLE [1b924a86e] 2024-01-29 12:09:03 -0600
Branch: REL_15_STABLE [3726c1cb0] 2024-01-29 12:09:08 -0600
-->
     <para>
      Move <function>is_valid_ascii()</function>
      from <filename>mb/pg_wchar.h</filename>
      to <filename>utils/ascii.h</filename> (Jubilee Young)
     </para>

     <para>
      This change avoids the need to
      include <filename>&lt;simd.h&gt;</filename>
      in <filename>pg_wchar.h</filename>, which was causing problems for
      some third-party code.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [400928b83] 2024-01-29 12:06:13 -0500
Branch: REL_16_STABLE [e02fea093] 2024-01-29 12:06:07 -0500
Branch: REL_15_STABLE [3f8ac13b1] 2024-01-29 12:06:07 -0500
Branch: REL_14_STABLE [29e25a6b1] 2024-01-29 12:06:08 -0500
Branch: REL_13_STABLE [7c53b1977] 2024-01-29 12:06:08 -0500
Branch: REL_12_STABLE [b2fd1dab9] 2024-01-29 12:06:08 -0500
-->
     <para>
      Fix compilation failures with <application>libxml2</application>
      version 2.12.0 and later (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [7636725b9] 2023-12-06 14:10:39 +0900
Branch: REL_16_STABLE [6248a2bb9] 2023-12-06 14:11:41 +0900
Branch: REL_15_STABLE [87ed81a87] 2023-12-06 14:11:44 +0900
Branch: REL_14_STABLE [c49b6cab1] 2023-12-06 14:11:46 +0900
Branch: REL_13_STABLE [7d5a74033] 2023-12-06 14:11:47 +0900
-->
     <para>
      Fix compilation failure of <literal>WAL_DEBUG</literal> code on
      Windows (Bharath Rupireddy)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [58c3151bb] 2023-12-26 16:16:37 -0500
Branch: REL_16_STABLE [b0115e7e2] 2023-12-26 16:16:29 -0500
Branch: REL_15_STABLE [5f8d6d709] 2023-12-26 16:16:29 -0500
Branch: REL_14_STABLE [7978eee02] 2023-12-26 16:16:29 -0500
Branch: REL_13_STABLE [48e797164] 2023-12-26 16:16:29 -0500
Branch: REL_12_STABLE [1613e2fae] 2023-12-26 16:16:29 -0500
Branch: master [a46972e30] 2023-12-26 17:03:02 -0500
Branch: REL_16_STABLE [c72049dbc] 2023-12-26 17:03:24 -0500
-->
     <para>
      Suppress compiler warnings from Python's header files
      (Peter Eisentraut, Tom Lane)
     </para>

     <para>
      Our preferred compiler options provoke warnings about constructs
      appearing in recent versions of Python's header files.  When using
      <application>gcc</application>, we can suppress these warnings with
      a pragma.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [d282e88e5] 2024-01-25 13:44:54 +1300
Branch: REL_16_STABLE [60ba7cae7] 2024-01-25 13:45:22 +1300
Branch: REL_15_STABLE [67f7aaa38] 2024-01-25 13:46:07 +1300
Branch: REL_14_STABLE [364283c92] 2024-01-25 13:46:38 +1300
Branch: REL_13_STABLE [70a82f40a] 2024-01-25 13:47:20 +1300
Branch: REL_12_STABLE [d060cb658] 2024-01-25 13:47:35 +1300
-->
     <para>
      Avoid deprecation warning when compiling with LLVM 18 (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [272a7c303] 2024-02-01 15:57:53 -0500
Branch: REL_16_STABLE [b4fb76fb5] 2024-02-01 15:57:53 -0500
Branch: REL_15_STABLE [970b1aeeb] 2024-02-01 15:57:53 -0500
Branch: REL_14_STABLE [35b8b2c4a] 2024-02-01 15:57:53 -0500
Branch: REL_13_STABLE [ac3afc3f7] 2024-02-01 15:57:53 -0500
Branch: REL_12_STABLE [b59ae79b7] 2024-02-01 15:57:53 -0500
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2024a for DST law changes in Greenland, Kazakhstan, and
      Palestine, plus corrections for the Antarctic stations Casey and
      Vostok.  Also historical corrections for Vietnam, Toronto, and
      Miquelon.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16-1">
  <title>Release 16.1</title>

  <formalpara>
  <title>Release date:</title>
  <para>2023-11-09</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 16.0.
   For information about new features in major release 16, see
   <xref linkend="release-16"/>.
  </para>

  <sect2 id="release-16-1-migration">
   <title>Migration to Version 16.1</title>

   <para>
    A dump/restore is not required for those running 16.X.
   </para>

   <para>
    However, several mistakes have been discovered that could lead to
    certain types of indexes yielding wrong search results or being
    unnecessarily inefficient.  It is advisable
    to <command>REINDEX</command> potentially-affected indexes after
    installing this update.  See the fourth through seventh changelog
    entries below.
   </para>
  </sect2>

  <sect2 id="release-16-1-changes">
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3b0776fde] 2023-11-06 10:38:00 -0500
Branch: REL_16_STABLE [d3d1e2509] 2023-11-06 10:38:00 -0500
Branch: REL_15_STABLE [4f4a422fb] 2023-11-06 10:38:00 -0500
Branch: REL_14_STABLE [9146d0d65] 2023-11-06 10:38:00 -0500
Branch: REL_13_STABLE [d3de70fdb] 2023-11-06 10:38:00 -0500
Branch: REL_12_STABLE [e911afd09] 2023-11-06 10:38:00 -0500
Branch: REL_11_STABLE [8c6633f4d] 2023-11-06 10:38:00 -0500
-->
     <para>
      Fix handling of unknown-type arguments
      in <literal>DISTINCT</literal> <type>"any"</type> aggregate
      functions (Tom Lane)
     </para>

     <para>
      This error led to a <type>text</type>-type value being interpreted
      as an <type>unknown</type>-type value (that is, a zero-terminated
      string) at runtime.  This could result in disclosure of server
      memory following the <type>text</type> value.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Jingzhou Fu
      for reporting this problem.
      (CVE-2023-5868)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [18b585155] 2023-11-06 10:56:43 -0500
Branch: REL_16_STABLE [e24daa94b] 2023-11-06 10:56:43 -0500
Branch: REL_15_STABLE [3bc6bc3ee] 2023-11-06 10:56:43 -0500
Branch: REL_14_STABLE [edc0a8d82] 2023-11-06 10:56:43 -0500
Branch: REL_13_STABLE [26c599beb] 2023-11-06 10:56:43 -0500
Branch: REL_12_STABLE [d267cea24] 2023-11-06 10:56:43 -0500
Branch: REL_11_STABLE [c48008f59] 2023-11-06 10:56:43 -0500
-->
     <para>
      Detect integer overflow while computing new array dimensions
      (Tom Lane)
     </para>

     <para>
      When assigning new elements to array subscripts that are outside the
      current array bounds, an undetected integer overflow could occur in
      edge cases.  Memory stomps that are potentially exploitable for
      arbitrary code execution are possible, and so is disclosure of
      server memory.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Pedro
      Gallegos for reporting this problem.
      (CVE-2023-5869)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [3a9b18b30] 2023-11-06 06:14:13 -0800
Branch: REL_16_STABLE [785412731] 2023-11-06 06:14:16 -0800
Branch: REL_15_STABLE [595c988c9] 2023-11-06 06:14:16 -0800
Branch: REL_14_STABLE [508acb901] 2023-11-06 06:14:17 -0800
Branch: REL_13_STABLE [28b609550] 2023-11-06 06:14:17 -0800
Branch: REL_12_STABLE [2893f2f40] 2023-11-06 06:14:17 -0800
Branch: REL_11_STABLE [e082734c8] 2023-11-06 06:14:18 -0800
Author: Noah Misch <noah@leadboat.com>
Branch: master [b72de09a1] 2023-11-06 06:14:13 -0800
Branch: REL_16_STABLE [2c3c5ec49] 2023-11-06 06:14:16 -0800
Branch: REL_15_STABLE [fbc371909] 2023-11-06 06:14:16 -0800
Branch: REL_14_STABLE [ecd5d240c] 2023-11-06 06:14:17 -0800
Branch: REL_13_STABLE [2c7a2a00a] 2023-11-06 06:14:17 -0800
Branch: REL_12_STABLE [7bbf4d037] 2023-11-06 06:14:17 -0800
Branch: REL_11_STABLE [a27be40c1] 2023-11-06 06:14:18 -0800
-->
     <para>
      Prevent the <literal>pg_signal_backend</literal> role from
      signalling background workers and autovacuum processes
      (Noah Misch, Jelte Fennema-Nio)
     </para>

     <para>
      The documentation says that <literal>pg_signal_backend</literal>
      cannot issue signals to superuser-owned processes.  It was able to
      signal these background processes, though, because they advertise a
      role OID of zero.  Treat that as indicating superuser ownership.
      The security implications of cancelling one of these process types
      are fairly small so far as the core code goes (we'll just start
      another one), but extensions might add background workers that are
      more vulnerable.
     </para>

     <para>
      Also ensure that the <varname>is_superuser</varname> parameter is
      set correctly in such processes.  No specific security consequences
      are known for that oversight, but it might be significant for some
      extensions.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Hemanth Sandrana and Mahendrakar Srinivasarao
      for reporting this problem.
      (CVE-2023-5870)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [28d3c2ddc] 2023-09-26 14:14:49 +0300
Branch: REL_16_STABLE [d7f521325] 2023-09-26 14:15:01 +0300
Branch: REL_15_STABLE [c3c284b37] 2023-09-26 14:15:19 +0300
Branch: REL_14_STABLE [747cef5a5] 2023-09-26 14:15:28 +0300
Branch: REL_13_STABLE [db7394d4d] 2023-09-26 14:15:35 +0300
Branch: REL_12_STABLE [26917ebea] 2023-09-26 15:41:44 +0300
-->
     <para>
      Fix misbehavior during recursive page split in GiST index build
      (Heikki Linnakangas)
     </para>

     <para>
      Fix a case where the location of a page downlink was incorrectly
      tracked, and introduce some logic to allow recovering from such
      situations rather than silently doing the wrong thing.  This error
      could result in incorrect answers from subsequent index searches.
      It may be advisable to reindex all GiST indexes after installing
      this update.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [5f27b5f84] 2023-10-14 16:33:51 -0700
Branch: REL_16_STABLE [bf1c21c4f] 2023-10-14 16:33:54 -0700
Branch: REL_15_STABLE [782be0f71] 2023-10-14 16:33:54 -0700
Branch: REL_14_STABLE [0834df909] 2023-10-14 16:33:54 -0700
Branch: REL_13_STABLE [6fd1dbdb2] 2023-10-14 16:33:54 -0700
-->
     <para>
      Prevent de-duplication of btree index entries
      for <type>interval</type> columns (Noah Misch)
     </para>

     <para>
      There are <type>interval</type> values that are distinguishable but
      compare equal, for example <literal>24:00:00</literal>
      and <literal>1 day</literal>.  This breaks assumptions made by btree
      de-duplication, so <type>interval</type> columns need to be excluded
      from de-duplication.  This oversight can cause incorrect results
      from index-only scans.  Moreover, after
      updating <application>amcheck</application> will report an error for
      almost all such indexes.  Users should reindex any btree indexes
      on <type>interval</type> columns.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [394d51731] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [e7965226d] 2023-10-27 18:28:19 +0200
Branch: REL_15_STABLE [088233f8d] 2023-10-27 18:37:59 +0200
Branch: REL_14_STABLE [d1740e169] 2023-10-27 18:46:49 +0200
-->
     <para>
      Process <type>date</type> values more sanely in
      BRIN <literal>datetime_minmax_multi_ops</literal> indexes
      (Tomas Vondra)
     </para>

     <para>
      The distance calculation for dates was backward, causing poor
      decisions about which entries to merge.  The index still produces
      correct results, but is much less efficient than it should be.
      Reindexing BRIN <literal>minmax_multi</literal> indexes
      on <type>date</type> columns is advisable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [8da86d62a] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [497fc9208] 2023-10-27 18:28:28 +0200
Branch: REL_15_STABLE [d04a9283b] 2023-10-27 18:38:02 +0200
Branch: REL_14_STABLE [52c934cc1] 2023-10-27 18:46:53 +0200
Branch: master [b5489b75c] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [0635fe02b] 2023-10-27 18:28:04 +0200
Branch: REL_15_STABLE [daa7b0d7c] 2023-10-27 18:37:56 +0200
Branch: REL_14_STABLE [90c4da6d4] 2023-10-27 18:46:46 +0200
-->
     <para>
      Process large <type>timestamp</type> and <type>timestamptz</type>
      values more sanely in
      BRIN <literal>datetime_minmax_multi_ops</literal> indexes
      (Tomas Vondra)
     </para>

     <para>
      Infinities were mistakenly treated as having distance zero rather
      than a large distance from other values, causing poor decisions
      about which entries to merge.  Also, finite-but-very-large values
      (near the endpoints of the representable timestamp range) could
      result in internal overflows, again causing poor decisions.  The
      index still produces correct results, but is much less efficient
      than it should be.  Reindexing BRIN <literal>minmax_multi</literal>
      indexes on <type>timestamp</type> and <type>timestamptz</type>
      columns is advisable if the column contains, or has contained,
      infinities or large finite values.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [c6cf6d353] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [924e0e2ee] 2023-10-27 18:28:37 +0200
Branch: REL_15_STABLE [2fbb2fcb0] 2023-10-27 18:38:05 +0200
Branch: REL_14_STABLE [0fa73c5cd] 2023-10-27 18:46:56 +0200
-->
     <para>
      Avoid calculation overflows in
      BRIN <literal>interval_minmax_multi_ops</literal> indexes with
      extreme interval values (Tomas Vondra)
     </para>

     <para>
      This bug might have caused unexpected failures while trying to
      insert large interval values into such an index.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d9e46dfb7] 2023-10-13 01:12:31 +1300
Branch: REL_16_STABLE [595db9e9c] 2023-10-13 01:13:07 +1300
Branch: REL_15_STABLE [1e81d3e6e] 2023-10-13 01:13:36 +1300
Branch: REL_14_STABLE [d26f33c32] 2023-10-13 01:13:59 +1300
Branch: REL_13_STABLE [890a73ba3] 2023-10-13 01:14:22 +1300
Branch: REL_12_STABLE [3cc0c2517] 2023-10-13 01:14:46 +1300
Branch: REL_11_STABLE [2759924f3] 2023-10-13 01:15:12 +1300
Author: David Rowley <drowley@postgresql.org>
Branch: master [f0c409d9c] 2023-10-12 19:50:38 +1300
Branch: REL_16_STABLE [6352f1627] 2023-10-12 19:51:26 +1300
Branch: REL_15_STABLE [916adc7c5] 2023-10-12 19:52:05 +1300
Branch: REL_14_STABLE [cd15bff48] 2023-10-12 19:52:31 +1300
Branch: REL_13_STABLE [45c4b2a3a] 2023-10-12 19:52:58 +1300
Branch: REL_12_STABLE [cd259de50] 2023-10-12 19:53:23 +1300
Branch: REL_11_STABLE [07f261b31] 2023-10-12 19:53:50 +1300
-->
     <para>
      Fix partition step generation and runtime partition pruning for
      hash-partitioned tables with multiple partition keys (David Rowley)
     </para>

     <para>
      Some cases involving an <literal>IS NULL</literal> condition on one
      of the partition keys could result in a crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [1d5caec22] 2023-09-30 10:52:21 +0100
Branch: REL_16_STABLE [6d2de076c] 2023-09-30 10:54:29 +0100
Branch: REL_15_STABLE [3c1a1af91] 2023-09-30 10:55:24 +0100
-->
     <para>
      Fix inconsistent rechecking of concurrently-updated rows
      during <command>MERGE</command> (Dean Rasheed)
     </para>

     <para>
      In <literal>READ COMMITTED</literal> mode, an update that finds that
      its target row was just updated by a concurrent transaction will
      recheck the query's <literal>WHERE</literal> conditions on the
      updated row.  <command>MERGE</command> failed to ensure that the
      proper rows of other joined tables were used during this recheck,
      possibly resulting in incorrect decisions about whether the
      newly-updated row should be updated again
      by <command>MERGE</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [387f9ed0a] 2023-10-24 14:48:33 -0400
Branch: REL_16_STABLE [b1444a09d] 2023-10-24 14:48:34 -0400
Branch: REL_15_STABLE [1268e7378] 2023-10-24 14:48:34 -0400
Branch: REL_14_STABLE [8f4a6b9e4] 2023-10-24 14:48:34 -0400
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [01575ad78] 2023-10-26 11:53:56 +0900
Branch: REL_16_STABLE [178ee1d85] 2023-10-26 11:53:41 +0900
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [1f06b7fc6] 2023-10-26 17:32:38 +0900
Branch: REL_16_STABLE [2bf99b48d] 2023-10-26 17:29:32 +0900
-->
     <para>
      Correctly identify the target table in an
      inherited <command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>
      even when the parent table is excluded by constraints (Amit Langote,
      Tom Lane)
     </para>

     <para>
      If the initially-named table is excluded by constraints, but not all
      its inheritance descendants are, the first non-excluded descendant
      was identified as the primary target table.  This would lead to
      firing statement-level triggers associated with that table, rather
      than the initially-named table as should happen.  In v16, the same
      oversight could also lead to <quote>invalid perminfoindex 0 in RTE
      with relid NNNN</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [714780dcd] 2023-09-28 16:29:37 -0700
Branch: REL_16_STABLE [3fa81b62e] 2023-09-28 16:29:35 -0700
Branch: REL_15_STABLE [cac37c1a1] 2023-09-28 16:29:32 -0700
Branch: REL_14_STABLE [41486c4aa] 2023-09-28 16:29:29 -0700
Branch: REL_13_STABLE [d4724e94a] 2023-09-28 16:29:27 -0700
Branch: REL_12_STABLE [b36d72cbc] 2023-09-28 16:29:24 -0700
Branch: REL_11_STABLE [7c07305e6] 2023-09-28 16:29:22 -0700
-->
     <para>
      Fix edge case in btree mark/restore processing of ScalarArrayOpExpr
      clauses (Peter Geoghegan)
     </para>

     <para>
      When restoring an indexscan to a previously marked position, the
      code could miss required setup steps if the scan had advanced
      exactly to the end of the matches for a ScalarArrayOpExpr (that is,
      an <literal>indexcol = ANY(ARRAY[])</literal>) clause.  This could
      result in missing some rows that should have been fetched.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [0b053e78b] 2023-10-05 20:30:47 +1300
Branch: REL_16_STABLE [31b2b2d72] 2023-10-05 20:31:25 +1300
Branch: REL_15_STABLE [689af6db6] 2023-10-05 20:31:51 +1300
Branch: REL_14_STABLE [e4b95b9b0] 2023-10-05 20:32:14 +1300
-->
     <para>
      Fix intra-query memory leak in Memoize execution
      (Orlov Aleksej, David Rowley)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [237f8765d] 2023-10-28 14:05:01 -0400
Branch: REL_16_STABLE [07494a0df] 2023-10-28 14:04:43 -0400
Branch: REL_15_STABLE [592cb11fb] 2023-10-28 14:04:43 -0400
Branch: REL_14_STABLE [5d7515d7d] 2023-10-28 14:04:43 -0400
Branch: REL_13_STABLE [b7684473d] 2023-10-28 14:04:43 -0400
Branch: REL_12_STABLE [d8d7f282f] 2023-10-28 14:04:43 -0400
Branch: REL_11_STABLE [7ab6971c6] 2023-10-28 14:04:43 -0400
-->
     <para>
      Fix intra-query memory leak when a set-returning function repeatedly
      returns zero rows (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f73fa5a47] 2023-09-18 14:28:17 -0400
Branch: REL_16_STABLE [ec693a3f3] 2023-09-18 14:27:47 -0400
Branch: REL_15_STABLE [95f54f0d0] 2023-09-18 14:27:47 -0400
Branch: REL_14_STABLE [9baabfa38] 2023-09-18 14:27:47 -0400
Branch: REL_13_STABLE [e6e50ada0] 2023-09-18 14:27:47 -0400
Branch: REL_12_STABLE [123337079] 2023-09-18 14:27:47 -0400
Branch: REL_11_STABLE [db00be6d7] 2023-09-18 14:27:47 -0400
-->
     <para>
      Don't crash if <function>cursor_to_xmlschema()</function> is applied
      to a non-data-returning Portal (Boyu Yang)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [54ccfd658] 2023-09-27 14:32:51 +0530
Branch: REL_16_STABLE [8d05be931] 2023-09-27 14:20:57 +0530
-->
     <para>
      Fix improper sharing of origin filter condition across
      successive <function>pg_logical_slot_get_changes()</function> calls
      (Hou Zhijie)
     </para>

     <para>
      The origin condition set by one call of this function would be
      re-used by later calls that did not specify the origin argument.
      This was not intended.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [73635b6d6] 2023-10-31 16:42:08 +1300
Branch: REL_16_STABLE [a98f01c93] 2023-10-31 16:42:35 +1300
Branch: REL_15_STABLE [136068353] 2023-10-31 16:43:01 +1300
Branch: REL_14_STABLE [c5988e69f] 2023-10-31 16:43:28 +1300
Branch: REL_13_STABLE [b3c8d1d0e] 2023-10-31 16:44:00 +1300
Branch: REL_12_STABLE [efcb601d2] 2023-10-31 16:44:27 +1300
-->
     <para>
      Throw the intended error if <function>pgrowlocks()</function> is
      applied to a partitioned table (David Rowley)
     </para>

     <para>
      Previously, a not-on-point complaint <quote>only heap AM is
      supported</quote> would be raised.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [13503eb59] 2023-10-30 14:46:05 -0700
Branch: REL_16_STABLE [1a368dd3e] 2023-10-30 14:46:08 -0700
Branch: REL_15_STABLE [e633e9b13] 2023-10-30 14:46:08 -0700
Branch: REL_14_STABLE [0a7b183fd] 2023-10-30 14:46:09 -0700
Branch: REL_13_STABLE [123b0d111] 2023-10-30 14:46:09 -0700
Branch: REL_12_STABLE [975ae0553] 2023-10-30 14:46:09 -0700
Branch: REL_11_STABLE [bae063db4] 2023-10-30 14:46:09 -0700
-->
     <para>
      Handle invalid indexes more cleanly in assorted SQL functions
      (Noah Misch)
     </para>

     <para>
      Report an error if <function>pgstatindex()</function>,
      <function>pgstatginindex()</function>,
      <function>pgstathashindex()</function>,
      or <function>pgstattuple()</function> is applied to an invalid
      index.  If <function>brin_desummarize_range()</function>,
      <function>brin_summarize_new_values()</function>,
      <function>brin_summarize_range()</function>,
      or <function>gin_clean_pending_list()</function> is applied to an
      invalid index, do nothing except to report a debug-level message.
      Formerly these functions attempted to process the index, and might
      fail in strange ways depending on what the failed <command>CREATE
      INDEX</command> had left behind.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cf1c65070] 2023-09-25 11:50:28 -0400
Branch: REL_16_STABLE [8465efc1a] 2023-09-25 11:50:28 -0400
Branch: REL_15_STABLE [71bb73f60] 2023-09-25 11:50:28 -0400
Branch: REL_14_STABLE [a2799f53d] 2023-09-25 11:50:28 -0400
Branch: REL_13_STABLE [52a676ef4] 2023-09-25 11:50:28 -0400
Branch: REL_12_STABLE [4a81ed29d] 2023-09-25 11:50:28 -0400
Branch: REL_11_STABLE [0fb91ed2b] 2023-09-25 11:50:28 -0400
-->
     <para>
      Avoid premature memory allocation failure with long inputs
      to <function>to_tsvector()</function> (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5b7b38246] 2023-10-01 13:16:47 -0400
Branch: REL_16_STABLE [5c34a7374] 2023-10-01 13:16:59 -0400
Branch: REL_15_STABLE [55e188a15] 2023-10-01 13:17:06 -0400
Branch: REL_14_STABLE [cf12c4fd2] 2023-10-01 13:17:11 -0400
Branch: REL_13_STABLE [9da153846] 2023-10-01 13:17:15 -0400
Branch: REL_12_STABLE [2296bc362] 2023-10-01 13:17:20 -0400
Branch: REL_11_STABLE [7a310cae0] 2023-10-01 13:17:25 -0400
-->
     <para>
      Fix over-allocation of the constructed <type>tsvector</type>
      in <function>tsvectorrecv()</function> (Denis Erokhin)
     </para>

     <para>
      If the incoming vector includes position data, the binary receive
      function left wasted space (roughly equal to the size of the
      position data) in the finished <type>tsvector</type>.  In extreme
      cases this could lead to <quote>maximum total lexeme length
      exceeded</quote> failures for vectors that were under the length
      limit when emitted.  In any case it could lead to wasted space
      on-disk.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9b103f861] 2023-10-18 20:43:27 -0400
Branch: REL_16_STABLE [cfa4eba02] 2023-10-18 20:43:17 -0400
Branch: REL_15_STABLE [985ac5ce2] 2023-10-18 20:43:17 -0400
Branch: REL_14_STABLE [2c63dc035] 2023-10-18 20:43:17 -0400
Branch: REL_13_STABLE [817669ea2] 2023-10-18 20:43:17 -0400
-->
     <para>
      Improve checks for corrupt PGLZ compressed data (Flavien Guedez)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [f062cddaf] 2023-09-13 09:34:30 +0530
Branch: REL_16_STABLE [a81e5516f] 2023-09-13 09:48:31 +0530
-->
     <para>
      Fix <command>ALTER SUBSCRIPTION</command> so that a commanded change
      in the <literal>run_as_owner</literal> option is actually applied
      (Hou Zhijie)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [22655aa23] 2023-10-13 19:16:44 -0700
Branch: REL_16_STABLE [0002feb82] 2023-10-13 19:17:28 -0700
-->
     <para>
      Fix bulk table insertion into partitioned tables (Andres Freund)
     </para>

     <para>
      Improper sharing of insertion state across partitions could result
      in failures during <command>COPY FROM</command>, typically
      manifesting as <quote>could not read block NNNN in file XXXX: read
      only 0 of 8192 bytes</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [276393f53] 2023-10-01 10:18:41 -0400
Branch: REL_16_STABLE [910eb61b2] 2023-10-01 10:25:33 -0400
-->
     <para>
      In <command>COPY FROM</command>, avoid evaluating column default
      values that will not be needed by the command (Laurenz Albe)
     </para>

     <para>
      This avoids a possible error if the default value isn't actually
      valid for the column, or if the default's expression would fail in
      the current execution context.  Such edge cases sometimes arise
      while restoring dumps, for example.  Previous releases did not fail
      in this situation, so prevent v16 from doing so.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d8a09939a] 2023-10-01 12:09:26 -0400
Branch: REL_16_STABLE [ea0e7cd6b] 2023-10-01 12:09:26 -0400
Branch: REL_15_STABLE [95fd5c89f] 2023-10-01 12:09:26 -0400
Branch: REL_14_STABLE [a715c0212] 2023-10-01 12:09:26 -0400
-->
     <para>
      In <command>COPY FROM</command>, fail cleanly when an unsupported
      encoding conversion is needed (Tom Lane)
     </para>

     <para>
      Recent refactoring accidentally removed the intended error check for
      this, such that it ended in <quote>cache lookup failed for function
      0</quote> instead of a useful error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7704a1a72] 2023-11-02 11:47:33 -0400
Branch: REL_16_STABLE [82063edd4] 2023-11-02 11:47:33 -0400
Branch: REL_15_STABLE [ae33659d4] 2023-11-02 11:47:33 -0400
Branch: REL_14_STABLE [47c0f00cf] 2023-11-02 11:47:33 -0400
Branch: REL_13_STABLE [137227c6d] 2023-11-02 11:47:33 -0400
Branch: REL_12_STABLE [65810fc6d] 2023-11-02 11:47:33 -0400
Branch: REL_11_STABLE [6e1cca511] 2023-11-02 11:47:33 -0400 !! no live bug
-->
     <para>
      Avoid crash in <command>EXPLAIN</command> if a parameter marked to
      be displayed by <command>EXPLAIN</command> has a NULL boot-time
      value (Xing Guo, Aleksander Alekseev, Tom Lane)
     </para>

     <para>
      No built-in parameter fits this description, but an extension could
      define such a parameter.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [54b208f90] 2023-10-16 14:06:14 -0400
Branch: REL_16_STABLE [57e6e861d] 2023-10-16 14:06:15 -0400
Branch: REL_15_STABLE [0d1a7cd14] 2023-10-16 14:06:15 -0400
Branch: REL_14_STABLE [f6e1ee3cf] 2023-10-16 14:06:11 -0400
Branch: REL_13_STABLE [1e678175c] 2023-10-16 14:06:11 -0400
Branch: REL_12_STABLE [07eb22a77] 2023-10-16 14:06:11 -0400
Branch: REL_11_STABLE [a295684b8] 2023-10-16 14:06:12 -0400
-->
     <para>
      Ensure we have a snapshot while dropping <literal>ON COMMIT
      DROP</literal> temp tables (Tom Lane)
     </para>

     <para>
      This prevents possible misbehavior if any catalog entries for the
      temp tables have fields wide enough to require toasting (such as a
      very complex <literal>CHECK</literal> condition).
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [97550c071] 2023-10-17 10:41:48 -0500
Branch: REL_16_STABLE [ee06199fc] 2023-10-17 10:41:58 -0500
Branch: REL_15_STABLE [c9265ae80] 2023-10-17 10:42:06 -0500
Branch: REL_14_STABLE [54fc9dca5] 2023-10-17 10:42:12 -0500
Branch: REL_13_STABLE [ac1dfc303] 2023-10-17 10:42:17 -0500
Branch: REL_12_STABLE [e2e169042] 2023-10-17 10:42:22 -0500
Branch: REL_11_STABLE [d0e7f95b4] 2023-10-17 10:42:28 -0500
Author: Nathan Bossart <nathan@postgresql.org>
Branch: REL_14_STABLE [555bc89c9] 2023-10-17 16:11:03 -0500
Branch: REL_13_STABLE [ebc093fa6] 2023-10-17 16:11:08 -0500
Branch: REL_12_STABLE [0e32652a7] 2023-10-17 16:11:13 -0500
Branch: REL_11_STABLE [bc322c73c] 2023-10-17 16:11:18 -0500
-->
     <para>
      Avoid improper response to shutdown signals in child processes
      just forked by <function>system()</function> (Nathan Bossart)
     </para>

     <para>
      This fix avoids a race condition in which a child process that has
      been forked off by <function>system()</function>, but hasn't yet
      exec'd the intended child program, might receive and act on a signal
      intended for the parent server process.  That would lead to
      duplicate cleanup actions being performed, which will not end well.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [63a582222] 2023-10-16 17:33:08 +1300
Branch: REL_16_STABLE [5725e4ebe] 2023-10-16 17:21:41 +1300
Branch: REL_15_STABLE [5e39884d3] 2023-10-16 17:23:02 +1300
Branch: REL_14_STABLE [dc75748a9] 2023-10-16 17:23:25 +1300
Branch: REL_13_STABLE [67060be3d] 2023-10-16 17:24:35 +1300
Branch: REL_12_STABLE [43c979086] 2023-10-16 17:25:43 +1300
-->
     <para>
      Cope with torn reads of <filename>pg_control</filename> in frontend
      programs (Thomas Munro)
     </para>

     <para>
      On some file systems, reading <filename>pg_control</filename> may
      not be an atomic action when the server concurrently writes that
      file.  This is detectable via a bad CRC.  Retry a few times to see
      if the file becomes valid before we report error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [c558e6fd9] 2023-10-16 10:43:47 +1300
Branch: REL_16_STABLE [2371432cd] 2023-10-16 10:45:05 +1300
Branch: REL_15_STABLE [606be8a35] 2023-10-16 10:45:18 +1300
Branch: REL_14_STABLE [a56fe5cf0] 2023-10-16 10:47:01 +1300
Branch: REL_13_STABLE [ae9da357b] 2023-10-16 10:47:10 +1300
Branch: REL_12_STABLE [637e86ecc] 2023-10-16 10:47:33 +1300
Branch: REL_11_STABLE [f1634c968] 2023-10-16 10:52:40 +1300
-->
     <para>
      Avoid torn reads of <filename>pg_control</filename> in relevant SQL
      functions (Thomas Munro)
     </para>

     <para>
      Acquire the appropriate lock before
      reading <filename>pg_control</filename>, to ensure we get a
      consistent view of that file.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d8a295389] 2023-10-09 16:37:05 +1300
Branch: REL_16_STABLE [9154ededf] 2023-10-09 16:37:33 +1300
-->
     <para>
      Fix <quote>could not find pathkey item to sort</quote> errors
      occurring while planning aggregate functions with <literal>ORDER
      BY</literal> or <literal>DISTINCT</literal> options (David Rowley)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a956bd3fa] 2023-10-03 15:37:00 +0900
Branch: REL_16_STABLE [75f31a3f2] 2023-10-03 15:37:18 +0900
Branch: REL_15_STABLE [95e91da66] 2023-10-03 15:37:19 +0900
Branch: REL_14_STABLE [f91c87b31] 2023-10-03 15:37:21 +0900
Branch: REL_13_STABLE [a0b013625] 2023-10-03 15:37:23 +0900
Branch: REL_12_STABLE [9b3900cdb] 2023-10-03 15:37:24 +0900
-->
     <para>
      Avoid integer overflow when computing size of backend activity
      string array (Jakub Wartak)
     </para>

     <para>
      On 64-bit machines we will allow values
      of <varname>track_activity_query_size</varname> large enough to
      cause 32-bit overflow when multiplied by the allowed number of
      connections.  The code actually allocating the per-backend local
      array was careless about this though, and allocated the array
      incorrectly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [c181f2e2b] 2023-09-30 17:03:50 +0300
Branch: REL_16_STABLE [992d2ca81] 2023-09-30 17:07:24 +0300
Branch: REL_15_STABLE [5ae245664] 2023-09-30 17:07:32 +0300
Branch: REL_14_STABLE [2d4f99bc6] 2023-09-30 17:07:37 +0300
Branch: REL_13_STABLE [ed9247cd7] 2023-09-30 17:07:41 +0300
-->
     <para>
      Fix briefly showing inconsistent progress statistics
      for <command>ANALYZE</command> on inherited tables
      (Heikki Linnakangas)
     </para>

     <para>
      The block-level counters should be reset to zero at the same time we
      update the current-relation field.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [e64c733bb] 2023-10-02 12:39:35 +0300
Branch: REL_16_STABLE [4a97a43a7] 2023-10-02 12:49:25 +0300
Branch: REL_15_STABLE [0684d1949] 2023-10-02 12:49:29 +0300
Branch: REL_14_STABLE [594001864] 2023-10-02 12:50:32 +0300
-->
     <para>
      Fix the background writer to report any WAL writes it makes to the
      statistics counters (Nazir Bilal Yavuz)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [e221c0bef] 2023-09-26 09:29:47 +0900
Branch: REL_16_STABLE [280f70221] 2023-09-26 09:30:36 +0900
Branch: REL_15_STABLE [802fcb9ed] 2023-09-26 09:30:39 +0900
-->
     <para>
      Fix confusion about forced-flush behavior
      in <function>pgstat_report_wal()</function>
      (Ryoga Yoshida, Michael Paquier)
     </para>

     <para>
      This could result in some statistics about WAL I/O being forgotten
      in a shutdown.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [7369798a8] 2023-09-13 19:14:09 -0700
Branch: REL_16_STABLE [c4758649b] 2023-09-13 19:14:11 -0700
-->
     <para>
      Fix statistics tracking of temporary-table extensions (Karina
      Litskevich, Andres Freund)
     </para>

     <para>
      These were counted as normal-table writes when they should be
      counted as temp-table writes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d17ffc734] 2023-10-18 14:54:33 +0900
Branch: REL_16_STABLE [2308f18c0] 2023-10-18 14:54:39 +0900
-->
     <para>
      When <varname>track_io_timing</varname> is enabled, include the
      time taken by relation extension operations as write time
      (Nazir Bilal Yavuz)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [dc8d72c1c] 2023-09-25 14:42:17 -0400
Branch: REL_16_STABLE [055f786ea] 2023-09-25 14:42:17 -0400
Branch: REL_15_STABLE [0e59266a5] 2023-09-25 14:41:57 -0400
Branch: REL_14_STABLE [5cff431bc] 2023-09-25 14:41:57 -0400
Branch: REL_13_STABLE [8cfc3e80b] 2023-09-25 14:41:57 -0400
Branch: REL_12_STABLE [4435a8d5d] 2023-09-25 14:41:57 -0400
Branch: REL_11_STABLE [fdc7cf73b] 2023-09-25 14:41:57 -0400
-->
     <para>
      Track the dependencies of cached <command>CALL</command> statements,
      and re-plan them when needed (Tom Lane)
     </para>

     <para>
      DDL commands, such as replacement of a function that has been
      inlined into a <command>CALL</command> argument, can create the need
      to re-plan a <command>CALL</command> that has been cached by
      PL/pgSQL.  That was not happening, leading to misbehavior or strange
      errors such as <quote>cache lookup failed</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [5f3aa309a] 2023-09-22 11:18:25 +0200
Branch: REL_16_STABLE [f720875a4] 2023-09-22 11:18:25 +0200
Branch: REL_15_STABLE [9dc85806d] 2023-09-22 11:18:25 +0200
-->
     <para>
      Avoid a possible pfree-a-NULL-pointer crash after an error in
      OpenSSL connection setup (Sergey Shinderuk)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e0e492e5a] 2023-09-15 17:01:52 -0400
Branch: REL_16_STABLE [53630f12d] 2023-09-15 17:01:26 -0400
Branch: REL_15_STABLE [2679a107a] 2023-09-15 17:01:26 -0400
Branch: REL_14_STABLE [ae13f8166] 2023-09-15 17:01:26 -0400
Branch: REL_13_STABLE [c5b7f791d] 2023-09-15 17:01:26 -0400
Branch: REL_12_STABLE [d29812c0c] 2023-09-15 17:01:26 -0400
Branch: REL_11_STABLE [a374f6c61] 2023-09-15 17:01:26 -0400
-->
     <para>
      Track nesting depth correctly when
      inspecting <type>RECORD</type>-type Vars from outer query levels
      (Richard Guo)
     </para>

     <para>
      This oversight could lead to assertion failures, core dumps,
      or <quote>bogus varno</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [ee3a551e9] 2023-09-14 11:27:29 +1200
Branch: REL_16_STABLE [1a6900e58] 2023-09-14 11:27:16 +1200
Branch: REL_15_STABLE [17a3f1c34] 2023-09-14 11:27:00 +1200
Branch: REL_14_STABLE [6341cb0b0] 2023-09-14 11:27:43 +1200
-->
     <para>
      Track hash function and negator function dependencies of
      ScalarArrayOpExpr plan nodes (David Rowley)
     </para>

     <para>
      In most cases this oversight was harmless, since these functions
      would be unlikely to disappear while the node's original operator
      remains present.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [3acd0599b] 2023-09-13 14:58:22 +1200
Branch: REL_16_STABLE [f899c7f1e] 2023-09-13 15:06:07 +1200
Branch: REL_15_STABLE [a26cc0334] 2023-09-13 14:43:04 +1200
Branch: REL_14_STABLE [e2452c2a6] 2023-09-13 14:46:16 +1200
Branch: REL_13_STABLE [189097db8] 2023-09-13 14:48:00 +1200
Branch: REL_12_STABLE [012b80ad2] 2023-09-13 14:50:14 +1200
Branch: REL_11_STABLE [6ae57f190] 2023-09-13 14:52:34 +1200
-->
     <para>
      Fix error-handling bug in <type>RECORD</type> type cache management
      (Thomas Munro)
     </para>

     <para>
      An out-of-memory error occurring at just the wrong point could leave
      behind inconsistent state that would lead to an infinite loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6b18b3fe2] 2023-10-03 10:21:44 +0900
Branch: REL_16_STABLE [a06efbc3a] 2023-10-03 10:25:12 +0900
Branch: REL_15_STABLE [afc79591d] 2023-10-03 10:25:14 +0900
Branch: REL_14_STABLE [baeb8542c] 2023-10-03 10:25:15 +0900
Branch: REL_13_STABLE [6103d2cca] 2023-10-03 10:25:17 +0900
Branch: REL_12_STABLE [22b2e6e9d] 2023-10-03 10:25:19 +0900
-->
     <para>
      Treat out-of-memory failures as fatal while reading WAL
      (Michael Paquier)
     </para>

     <para>
      Previously this would be treated as a bogus-data condition, leading
      to the conclusion that we'd reached the end of WAL, which is
      incorrect and could lead to inconsistent WAL replay.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [bae868caf] 2023-09-23 10:26:24 +1200
Branch: REL_16_STABLE [ce497f648] 2023-09-23 10:27:02 +1200
Branch: REL_15_STABLE [f4d152edd] 2023-09-23 10:28:12 +1200
Branch: REL_14_STABLE [3ce3b53d7] 2023-09-23 10:28:40 +1200
Branch: REL_13_STABLE [6606c5716] 2023-09-23 10:29:44 +1200
Branch: REL_12_STABLE [e8f3c0687] 2023-09-23 10:29:56 +1200
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [becfbdd6c] 2023-09-26 10:53:38 +1300
Branch: REL_16_STABLE [10d0591ea] 2023-09-26 10:53:52 +1300
Branch: REL_15_STABLE [99d334a18] 2023-09-26 10:54:02 +1300
Branch: REL_14_STABLE [3d413c5a7] 2023-09-26 10:54:24 +1300
Branch: REL_13_STABLE [45d1fe8b5] 2023-09-26 10:54:47 +1300
Branch: REL_12_STABLE [bde2f1847] 2023-09-26 10:59:49 +1300
-->
     <para>
      Fix possible recovery failure due to trying to allocate memory based
      on a bogus WAL record length field (Thomas Munro, Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [dab889d60] 2023-10-22 10:04:55 +1300
Branch: REL_16_STABLE [174ccda5e] 2023-10-22 10:05:22 +1300
Branch: REL_15_STABLE [f72790b29] 2023-10-22 10:05:40 +1300
Branch: REL_14_STABLE [fb9a16a1a] 2023-10-22 10:05:59 +1300
-->
     <para>
      Fix <quote>could not duplicate handle</quote> error occurring on
      Windows when <varname>min_dynamic_shared_memory</varname> is set
      above zero (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [ef74c7197] 2023-10-10 11:01:13 -0700
Branch: REL_16_STABLE [b8963e8a2] 2023-10-10 11:01:55 -0700
Branch: REL_15_STABLE [b9bb02620] 2023-10-10 11:02:45 -0700
Branch: REL_14_STABLE [6615bb95a] 2023-10-10 11:02:56 -0700
Branch: REL_13_STABLE [469d367be] 2023-10-10 11:03:03 -0700
Branch: REL_12_STABLE [6dbd01b9f] 2023-10-10 11:03:10 -0700
Branch: REL_11_STABLE [04f0baa85] 2023-10-10 11:03:20 -0700
-->
     <para>
      Fix order of operations in <function>GenericXLogFinish</function>
      (Jeff Davis)
     </para>

     <para>
      This code violated the conditions required for crash safety by
      writing WAL before marking changed buffers dirty.  No core code uses
      this function, but extensions do (<filename>contrib/bloom</filename>
      does, for example).
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [af5b3c3d1] 2023-09-19 08:31:06 +0900
Branch: REL_16_STABLE [f171430f0] 2023-09-19 08:31:22 +0900
Branch: REL_15_STABLE [9e0ce80f3] 2023-09-19 08:31:24 +0900
Branch: REL_14_STABLE [bb65f3c1b] 2023-09-19 08:31:26 +0900
Branch: REL_13_STABLE [35e8ba3e5] 2023-09-19 08:31:27 +0900
Branch: REL_12_STABLE [99d27e55c] 2023-09-19 08:31:29 +0900
Branch: REL_11_STABLE [ddded779a] 2023-09-19 08:31:31 +0900
-->
     <para>
      Remove incorrect assertion in PL/Python exception handling
      (Alexander Lakhin)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5ba4cc309] 2023-10-29 12:56:35 -0400
Branch: REL_16_STABLE [67738dbf9] 2023-10-29 12:56:24 -0400
-->
     <para>
      Fix <application>pg_dump</application> to dump the
      new <literal>run_as_owner</literal> option of subscriptions
      (Philip Warner)
     </para>

     <para>
      Due to this oversight, subscriptions would always be restored
      with <literal>run_as_owner</literal> set
      to <literal>false</literal>, which is not equivalent to their
      behavior in pre-v16 releases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [06c0c3688] 2023-10-02 13:27:58 -0400
Branch: REL_16_STABLE [aaaf8fbb6] 2023-10-02 13:27:51 -0400
Branch: REL_15_STABLE [10e705bd2] 2023-10-02 13:27:51 -0400
Branch: REL_14_STABLE [829d91cc6] 2023-10-02 13:27:51 -0400
Branch: REL_13_STABLE [295953f8b] 2023-10-02 13:27:51 -0400
Branch: REL_12_STABLE [c02f29758] 2023-10-02 13:27:51 -0400
Branch: REL_11_STABLE [4f16152d9] 2023-10-02 13:27:51 -0400
-->
     <para>
      Fix <application>pg_restore</application> so that selective restores
      will include both table-level and column-level ACLs for selected
      tables (Euler Taveira, Tom Lane)
     </para>

     <para>
      Formerly, only the table-level ACL would get restored if both types
      were present.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [2e3dc8c14] 2023-09-25 14:27:33 +0200
Branch: REL_16_STABLE [fb9ddd0fa] 2023-09-25 14:34:06 +0200
Branch: REL_15_STABLE [8845d8597] 2023-09-25 14:34:06 +0200
Branch: REL_14_STABLE [26c291a15] 2023-09-25 14:34:06 +0200
Branch: REL_13_STABLE [d3946c4f6] 2023-09-25 14:34:05 +0200
Branch: REL_12_STABLE [af9f6cd1d] 2023-09-25 14:34:05 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_15_STABLE [04d2d605f] 2023-11-03 12:07:11 -0400
Branch: REL_14_STABLE [f9280e77e] 2023-11-03 12:07:25 -0400
Branch: REL_13_STABLE [2f1f49975] 2023-11-03 12:07:35 -0400
Branch: REL_12_STABLE [d3246a2ad] 2023-11-03 12:07:40 -0400
-->
     <para>
      Add logic to <application>pg_upgrade</application> to check for use
      of <type>abstime</type>, <type>reltime</type>,
      and <type>tinterval</type> data types (&Aacute;lvaro Herrera)
     </para>

     <para>
      These obsolete data types were removed
      in <productname>PostgreSQL</productname> version 12, so check to
      make sure they aren't present in an older database before claiming
      it can be upgraded.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [90ebcc32d] 2023-10-14 15:54:46 -0700
Branch: REL_16_STABLE [06ff06484] 2023-10-14 15:54:49 -0700
Branch: REL_15_STABLE [1102f4ece] 2023-10-14 15:54:49 -0700
Branch: REL_14_STABLE [0df88a686] 2023-10-14 15:54:49 -0700
Branch: REL_13_STABLE [3895e9153] 2023-10-14 15:54:50 -0700
Branch: REL_12_STABLE [73cda80a3] 2023-10-14 15:54:50 -0700
-->
     <para>
      Avoid false <quote>too many client connections</quote> errors
      in <application>pgbench</application> on Windows (Noah Misch)
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [fb56a1811] 2023-09-25 16:03:17 +0200
Branch: REL_16_STABLE [2143d96dc] 2023-09-25 16:03:17 +0200
-->
     <para>
      Fix <application>vacuumdb</application>'s handling of
      multiple <option>-N</option> switches (Nathan Bossart, Kuwamura
      Masaki)
     </para>

     <para>
      Multiple <option>-N</option> switches should exclude tables
      in multiple schemas, but in fact excluded nothing due to faulty
      construction of a generated query.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [5cfba1ad6] 2023-09-21 17:47:20 +1200
Branch: REL_16_STABLE [f7dbdab05] 2023-09-21 17:39:30 +1200
-->
     <para>
      Fix <application>vacuumdb</application> to honor
      its <option>--buffer-usage-limit</option> option in analyze-only
      mode (Ryoga Yoshida, David Rowley)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [6ec9e9975] 2023-10-30 14:46:05 -0700
Branch: REL_16_STABLE [3c6a05b80] 2023-10-30 14:46:08 -0700
Branch: REL_15_STABLE [6f81386a9] 2023-10-30 14:46:08 -0700
Branch: REL_14_STABLE [42496cba6] 2023-10-30 14:46:09 -0700
Branch: REL_13_STABLE [f31ccb575] 2023-10-30 14:46:09 -0700
Branch: REL_12_STABLE [3a205c916] 2023-10-30 14:46:09 -0700
Branch: REL_11_STABLE [e04509f32] 2023-10-30 14:46:09 -0700
-->
     <para>
      In <filename>contrib/amcheck</filename>, do not report interrupted
      page deletion as corruption (Noah Misch)
     </para>

     <para>
      This fix prevents false-positive reports of <quote>the first child
      of leftmost target page is not leftmost of its
      level</quote>, <quote>block NNNN is not leftmost</quote>
      or <quote>left link/right link pair in index XXXX not in
      agreement</quote>.  They appeared
      if <application>amcheck</application> ran after an unfinished btree
      index page deletion and before <command>VACUUM</command> had cleaned
      things up.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [849172ff4] 2023-10-29 11:14:37 +0000
Branch: REL_16_STABLE [ab73a37e9] 2023-10-29 11:14:36 +0000
Branch: REL_15_STABLE [5f0691839] 2023-10-29 11:14:35 +0000
Branch: REL_14_STABLE [162b38a06] 2023-10-29 11:14:34 +0000
Branch: REL_13_STABLE [35e6a5c20] 2023-10-29 11:14:34 +0000
Branch: REL_12_STABLE [f7cd7b265] 2023-10-29 11:14:33 +0000
Branch: REL_11_STABLE [c804ffb56] 2023-10-29 11:14:32 +0000
-->
     <para>
      Fix failure of <filename>contrib/btree_gin</filename> indexes
      on <type>interval</type> columns,
      when an indexscan using the <literal>&lt;</literal>
      or <literal>&lt;=</literal> operator is performed (Dean Rasheed)
     </para>

     <para>
      Such an indexscan failed to return all the entries it should.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [76200e5ee] 2023-10-19 05:13:23 +1300
Branch: REL_16_STABLE [774185056] 2023-10-19 05:14:07 +1300
Branch: REL_15_STABLE [b60e3ac76] 2023-10-19 05:15:38 +1300
Branch: REL_14_STABLE [0a8b7d5c1] 2023-10-19 05:16:00 +1300
Branch: REL_13_STABLE [53c4dabe1] 2023-10-19 05:16:24 +1300
Branch: REL_12_STABLE [7da915e33] 2023-10-19 05:17:27 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [37d5babb5] 2023-10-18 22:47:23 +1300
Branch: REL_16_STABLE [74d19ec09] 2023-10-18 22:53:56 +1300
Branch: REL_15_STABLE [eed1feb3f] 2023-10-18 22:59:46 +1300
Branch: REL_14_STABLE [82d9a782a] 2023-10-18 23:04:09 +1300
Branch: REL_13_STABLE [f28956b23] 2023-10-18 23:16:48 +1300
Branch: REL_12_STABLE [15ddc9725] 2023-10-18 23:18:16 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [f90b4a846] 2023-10-19 03:01:55 +1300
Branch: REL_16_STABLE [60596f148] 2023-10-19 03:07:18 +1300
Branch: REL_15_STABLE [b2e097788] 2023-10-19 03:03:27 +1300
Branch: REL_14_STABLE [ee3e4c41f] 2023-10-19 03:03:46 +1300
Branch: REL_13_STABLE [981292c19] 2023-10-19 03:04:00 +1300
Branch: REL_12_STABLE [d701f0d1f] 2023-10-19 03:04:09 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: REL_13_STABLE [7c070e224] 2023-10-24 11:23:08 +1300
Branch: REL_12_STABLE [9ad986276] 2023-10-24 11:23:21 +1300
-->
     <para>
      Add support for LLVM 16 and 17 (Thomas Munro, Dmitry Dolgov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [06843df4a] 2023-09-29 14:07:30 -0400
Branch: REL_16_STABLE [75c562653] 2023-09-29 14:07:30 -0400
Branch: REL_15_STABLE [be3398ea1] 2023-09-29 14:07:30 -0400
Branch: REL_14_STABLE [e9d1560d3] 2023-09-29 14:07:30 -0400
Branch: REL_13_STABLE [1b64e374c] 2023-09-29 14:07:30 -0400
Branch: REL_12_STABLE [d8ceb98e4] 2023-09-29 14:07:30 -0400
Branch: REL_11_STABLE [4d10fda52] 2023-09-29 14:07:30 -0400
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3aa021b29] 2023-09-26 21:06:21 -0400
Branch: REL_16_STABLE [e73d6a0df] 2023-09-26 21:06:21 -0400
Branch: REL_15_STABLE [78f17fb97] 2023-09-26 21:06:21 -0400
Branch: REL_14_STABLE [5d60e8ed3] 2023-09-26 21:06:21 -0400
Branch: REL_13_STABLE [53cc19bfa] 2023-09-26 21:06:21 -0400
Branch: REL_12_STABLE [abe423712] 2023-09-26 21:06:21 -0400
Branch: REL_11_STABLE [0e0de20c8] 2023-09-26 21:06:21 -0400
-->
     <para>
      Suppress assorted build-time warnings on
      recent <productname>macOS</productname> (Tom Lane)
     </para>

     <para>
      <productname>Xcode 15</productname> (released
      with <productname>macOS Sonoma</productname>) changed the linker's
      behavior in a way that causes many duplicate-library warnings while
      building <productname>PostgreSQL</productname>.  These were
      harmless, but they're annoying so avoid citing the same libraries
      twice.  Also remove use of the <option>-multiply_defined
      suppress</option> linker switch, which apparently has been a no-op
      for a long time, and is now actively complained of.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6fc3a138b] 2023-09-27 14:40:23 +0900
Branch: REL_16_STABLE [641db601b] 2023-09-27 14:41:15 +0900
Branch: REL_15_STABLE [8a9e4e84e] 2023-09-27 14:41:21 +0900
Branch: REL_14_STABLE [e4d7ad30f] 2023-09-27 14:41:23 +0900
Branch: REL_13_STABLE [a64b8b035] 2023-09-27 14:41:26 +0900
-->
     <para>
      When building <filename>contrib/unaccent</filename>'s rules file,
      fall back to using <literal>python</literal>
      if <literal>--with-python</literal> was not given and make
      variable <literal>PYTHON</literal> was not set (Japin Li)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5fd3e06f6] 2023-10-28 11:54:40 -0400
Branch: REL_16_STABLE [d1537afe3] 2023-10-28 11:54:51 -0400
Branch: REL_15_STABLE [85b98a70b] 2023-10-28 11:54:59 -0400
Branch: REL_14_STABLE [877e7b4b9] 2023-10-28 11:55:06 -0400
Branch: REL_13_STABLE [d94612873] 2023-10-28 11:55:14 -0400
Branch: REL_12_STABLE [7180bb827] 2023-10-28 11:55:22 -0400
Branch: REL_11_STABLE [64fc5e005] 2023-10-28 11:55:30 -0400
-->
     <para>
      Remove <literal>PHOT</literal> (Phoenix Islands Time) from the
      default timezone abbreviations list (Tom Lane)
     </para>

     <para>
      Presence of this abbreviation in the default list can cause failures
      on recent Debian and Ubuntu releases, as they no longer install the
      underlying tzdb entry by default.  Since this is a made-up
      abbreviation for a zone with a total human population of about two
      dozen, it seems unlikely that anyone will miss it.  If someone does,
      they can put it back via a custom abbreviations file.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16">
  <title>Release 16</title>

  <formalpara>
   <title>Release date:</title>
   <para>2023-09-14</para>
  </formalpara>

  <sect2 id="release-16-highlights">
   <title>Overview</title>

   <para>
    <productname>PostgreSQL</productname> 16 contains many new features
    and enhancements, including:
   </para>

   <itemizedlist>

    <listitem>
     <para>
      Allow parallelization of <literal>FULL</literal> and internal right <literal>OUTER</literal> hash joins
     </para>
    </listitem>

    <listitem>
     <para>
      Allow logical replication from standby servers
     </para>
    </listitem>

    <listitem>
     <para>
      Allow logical replication subscribers to apply large transactions in parallel
     </para>
    </listitem>

    <listitem>
     <para>
      Allow monitoring of <acronym>I/O</acronym> statistics using the new <structname>pg_stat_io</structname> view
     </para>
    </listitem>

    <listitem>
     <para>
      Add <acronym>SQL/JSON</acronym> constructors and identity functions
     </para>
    </listitem>

    <listitem>
     <para>
      Improve performance of vacuum freezing
     </para>
    </listitem>

    <listitem>
     <para>
      Add support for regular expression matching of user and database names in <filename>pg_hba.conf</filename>, and user names in <filename>pg_ident.conf</filename>
     </para>
    </listitem>

   </itemizedlist>

   <para>
    The above items and other new features of
    <productname>PostgreSQL</productname> 16 are explained in more detail
    in the sections below.
   </para>

  </sect2>

  <sect2  id="release-16-migration">

   <title>Migration to Version 16</title>

   <para>
    A dump/restore using <xref linkend="app-pg-dumpall"/> or use of
    <xref linkend="pgupgrade"/> or logical replication is required for
    those wishing to migrate data from any previous release.  See <xref
    linkend="upgrading"/> for general information on migrating to new
    major releases.
   </para>

   <para>
    Version 16 contains a number of changes that may affect compatibility
    with previous releases.  Observe the following incompatibilities:
   </para>

   <itemizedlist>

<!--
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 <link
      linkend="plpgsql-open-bound-cursor"><application>PL/pgSQL</application></link>
      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 <link
      linkend="plpgsql-cursor-opening"><command>OPEN</command></link>,
      and will not match the variable name.  To restore the previous
      behavior, assign the desired portal name to the cursor variable
      before <command>OPEN</command>.
     </para>
    </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-02-24 [d95952325] Disallow NULLS NOT DISTINCT indexes for primary keys
-->

    <listitem>
     <para>
      Disallow <link linkend="sql-createindex"><literal>NULLS NOT
      DISTINCT</literal></link> indexes for primary keys (Daniel
      Gustafsson)
     </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 <link linkend="sql-reindex"><command>REINDEX
      DATABASE</command></link> and <link
      linkend="app-reindexdb"><application>reindexdb</application></link>
      to not process indexes on system catalogs (Simon Riggs)
     </para>

     <para>
      Processing such indexes is still possible using <command>REINDEX
      SYSTEM</command> and <link linkend="app-reindexdb"><command>reindexdb
      --system</command></link>.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-11 [8bf6ec3ba] Improve handling of inherited GENERATED expressions.
-->

    <listitem>
     <para>
      Tighten <link
      linkend="ddl-generated-columns"><literal>GENERATED</literal></link>
      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>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [5c1b66280] Rework design of functions in pg_walinspect
-->

    <listitem>
     <para>
      Remove <link
      linkend="pgwalinspect"><application>pg_walinspect</application></link>
      functions
      <function>pg_get_wal_records_info_till_end_of_wal()</function>
      and <function>pg_get_wal_stats_till_end_of_wal()</function>
      (Bharath Rupireddy)
     </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-02-15 [5352ca22e] Rename force_parallel_mode to debug_parallel_query
Author: David Rowley <drowley@postgresql.org>
2023-04-14 [0981846b9] Remove old GUC name mapping for "force_parallel_mode"
-->

    <listitem>
     <para>
      Rename server variable
      <varname>force_parallel_mode</varname> to <link
      linkend="guc-debug-parallel-query"><varname>debug_parallel_query</varname></link>
      (David Rowley)
     </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 <link linkend="sql-createview">create
      views</link> manually with <literal>ON SELECT</literal> rules
      (Tom Lane)
     </para>
    </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-24 [1118cd37e] Remove vacuum_defer_cleanup_age
-->

    <listitem>
     <para>
      Remove the server variable
      <varname>vacuum_defer_cleanup_age</varname> (Andres Freund)
     </para>

     <para>
      This has been unnecessary since <link
      linkend="guc-hot-standby-feedback"><varname>hot_standby_feedback</varname></link>
      and <link linkend="streaming-replication-slots">replication
      slots</link> were added.
     </para>
    </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-11-29 [cd4329d93] Remove promote_trigger_file.
-->

    <listitem>
     <para>
      Remove server variable <varname>promote_trigger_file</varname>
      (Simon Riggs)
     </para>

     <para>
      This was used to promote a standby to primary, but is now more easily
      accomplished with <link linkend="app-pg-ctl"><literal>pg_ctl
      promote</literal></link> or <link
      linkend="functions-recovery-control-table"><function>pg_promote()</function></link>.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-06-07 [b0f6c4371] Remove read-only server settings lc_collate and lc_ctype
-->

    <listitem>
     <para>
      Remove read-only server variables <varname>lc_collate</varname>
      and <varname>lc_ctype</varname> (Peter Eisentraut)
     </para>

     <para>
      Collations and locales can vary between databases so having them
      as read-only server variables was unhelpful.
     </para>
    </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-25 [e3ce2de09] Allow grant-level control of role inheritance behavior.
-->

    <listitem>
     <para>
      Role inheritance now controls the default
      inheritance status of member roles added during <link
      linkend="sql-grant"><command>GRANT</command></link> (Robert Haas)
     </para>

     <para>
      The role's default inheritance behavior can be overridden with the
      new <command>GRANT ... WITH INHERIT</command> clause.  This allows
      inheritance of some roles and not others because the members'
      inheritance status is set at <command>GRANT</command> time.
      Previously the inheritance status of member roles was controlled
      only by the role's inheritance status, and changes to a role's
      inheritance status affected all previous and future member roles.
     </para>
    </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-10 [cf5eb37c5] Restrict the privileges of CREATEROLE users.
Author: Robert Haas <rhaas@postgresql.org>
2023-01-24 [f1358ca52] Adjust interaction of CREATEROLE with role properties.
-->

    <listitem>
     <para>
      Restrict the privileges of <link
      linkend="sql-createrole"><literal>CREATEROLE</literal></link>
      and its ability to modify other roles (Robert Haas)
     </para>

     <para>
      Previously roles with <literal>CREATEROLE</literal> privileges could
      change many aspects of any non-superuser role.  Such changes,
      including adding members, now require the role requesting
      the change to have <literal>ADMIN OPTION</literal> permission.
      For example, they can now change the <literal>CREATEDB</literal>,
      <literal>REPLICATION</literal>, and <literal>BYPASSRLS</literal>
      properties only if they also have those permissions.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-01-26 [37e267335] Don't install postmaster symlink anymore
-->

    <listitem>
     <para>
      Remove symbolic links for the <application>postmaster</application>
      binary (Peter Eisentraut)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

  <sect2 id="release-16-changes">
   <title>Changes</title>

    <para>
     Below you will find a detailed account of the changes between
    <productname>PostgreSQL</productname> 16 and the previous major
    release.
    </para>

   <sect3 id="release-16-server">
    <title>Server</title>

    <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
        <literal>DISTINCT</literal> (David Rowley)
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [1349d2790] Improve performance of ORDER BY / DISTINCT aggregates
Author: David Rowley <drowley@postgresql.org>
2022-12-20 [3226f4728] Add enable_presorted_aggregate GUC
Author: David Rowley <drowley@postgresql.org>
2023-01-17 [da5800d5f] Don't presort ORDER BY/DISTINCT Aggrefs with volatile fu
-->

      <listitem>
       <para>
        Add the ability for aggregates having <literal>ORDER BY</literal>
        or <literal>DISTINCT</literal> to use pre-sorted data (David
        Rowley)
       </para>

       <para>
        The new server variable <link
        linkend="guc-enable-presorted-aggregate"><varname>enable_presorted_aggregate</varname></link>
        can be used to disable this.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-16 [9bfd2822b] Enable use of Memoize atop an Append that came from UNIO
-->

      <listitem>
       <para>
        Allow memoize atop a <literal>UNION ALL</literal> (Richard Guo)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-05 [16dc2703c] Support "Right Anti Join" plan shapes.
-->

      <listitem>
       <para>
        Allow anti-joins to be performed with the non-nullable input as
        the inner relation (Richard Guo)
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-03-31 [11c2d6fdf] Parallel Hash Full Join.
-->

      <listitem>
       <para>
        Allow parallelization of <link
        linkend="queries-join"><literal>FULL</literal></link> and internal
        right <literal>OUTER</literal> hash joins (Melanie Plageman,
        Thomas Munro)
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-01-08 [cd9479af2] Improve GIN cost estimation
-->

      <listitem>
       <para>
        Improve the accuracy of <link
        linkend="gin"><literal>GIN</literal></link> index access optimizer
        costs (Ronan Dunklau)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-performance">
     <title>General Performance</title>

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-06 [00d1e02be] hio: Use ExtendBufferedRelBy() to extend tables more eff
Author: Andres Freund <andres@anarazel.de>
2023-04-06 [26158b852] Use ExtendBufferedRelTo() in XLogReadBufferExtended()
-->

      <listitem>
       <para>
        Allow more efficient addition of heap and index pages (Andres
        Freund)
       </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2022-09-08 [d977ffd92] Instrument freezing in autovacuum log reports.
Author: Peter Geoghegan <pg@bowt.ie>
2022-11-15 [9e5405993] Deduplicate freeze plans in freeze WAL records.
Author: Peter Geoghegan <pg@bowt.ie>
2022-12-28 [1de58df4f] Add page-level freezing to VACUUM.
-->

      <listitem>
       <para>
        During non-freeze operations, perform page <link
        linkend="vacuum-for-wraparound">freezing</link> where appropriate
        (Peter Geoghegan)
       </para>

       <para>
        This makes full-table freeze vacuums less necessary.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-12-23 [ed1a88dda] Allow window functions to adjust their frameOptions
-->

      <listitem>
       <para>
        Allow window functions to use the faster <link
        linkend="syntax-window-functions"><literal>ROWS</literal></link>
        mode internally when <literal>RANGE</literal> mode is active but
        unnecessary (David Rowley)
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-01-27 [456fa635a] Teach planner about more monotonic window functions
-->

      <listitem>
       <para>
        Allow optimization of always-increasing window functions <link
        linkend="functions-window-table"><function>ntile()</function></link>,
        <function>cume_dist()</function> and
        <function>percent_rank()</function> (David Rowley)
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-01-23 [16fd03e95] Allow parallel aggregate on string_agg and array_agg
-->

      <listitem>
       <para>
        Allow aggregate functions <link
        linkend="functions-aggregate-table"><function>string_agg()</function></link>
        and <function>array_agg()</function> to be parallelized (David
        Rowley)
       </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 <link
        linkend="ddl-partitioning-overview"><literal>RANGE</literal></link>
        and <literal>LIST</literal> partition lookups (Amit Langote,
        Hou Zhijie, David Rowley)
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-04-07 [1cbbee033] Add VACUUM/ANALYZE BUFFER_USAGE_LIMIT option
Author: David Rowley <drowley@postgresql.org>
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 <link
        linkend="sql-vacuum"><command>VACUUM</command></link>/<link
        linkend="sql-analyze"><command>ANALYZE</command></link>
        option is <literal>BUFFER_USAGE_LIMIT</literal>, and the <link
        linkend="app-vacuumdb"><application>vacuumdb</application></link>
        option is <option>--buffer-usage-limit</option>.
        The default value is set by server variable <link
        linkend="guc-vacuum-buffer-usage-limit"><varname>vacuum_buffer_usage_limit</varname></link>,
        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 <link
        linkend="guc-wal-sync-method"><literal>wal_sync_method=fdatasync</literal></link>
        on <systemitem class="osname">Windows</systemitem> (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 <link linkend="storage-hot"><acronym>HOT</acronym></link>
        updates if only <literal>BRIN</literal>-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 <link
        linkend="guc-update-process-title">process title</link> (David
        Rowley)
       </para>
      </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-11 [37a6e5df3] Optimize xid/subxid searches in XidInMVCCSnapshot().
Author: John Naylor <john.naylor@postgresql.org>
2022-08-26 [121d2d3d7] Use SSE2 in is_valid_ascii() where available.
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 <type>xid</type>/<type>subxid</type> searches and
        <acronym>ASCII</acronym> string detection to use vector operations
        (Nathan Bossart, John Naylor)
       </para>

       <para>
        <acronym>ASCII</acronym> detection is particularly useful for
        <link linkend="sql-copy"><command>COPY FROM</command></link>.
        Vector operations are also used for some C array searches.
       </para>

      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-29 [c6e0fe1f2] Improve performance of and reduce overheads of memory ma
-->

      <listitem>
       <para>
        Reduce overhead of memory allocations (Andres Freund, 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 <link
        linkend="monitoring-pg-stat-io-view"><structname>pg_stat_io</structname></link>
        view to track <acronym>I/O</acronym> 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 <link
        linkend="pg-stat-all-tables-view"><structname>pg_stat_*_tables</structname></link>
        and <link
        linkend="monitoring-pg-stat-all-indexes-view"><structname>pg_stat_*_indexes</structname></link>.
       </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 <literal>pg_stat_*_tables</literal> column is <link
        linkend="monitoring-pg-stat-all-tables-view"><structfield>n_tup_newpage_upd</structfield></link>.
       </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 <link
        linkend="view-pg-locks"><structname>pg_locks</structname></link>
        system view (Masahiko Sawada, Noriyoshi Shinoda)
       </para>

       <para>
        The transaction id is displayed in the
        <structfield>transactionid</structfield> column and
        the speculative insertion token is displayed in the
        <structfield>objid</structfield> column.
       </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 <link
        linkend="view-pg-prepared-statements"><structname>pg_prepared_statements</structname></link>
        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 <link
        linkend="pg-stat-database-view"><structfield>stats_reset</structfield></link>
        is accurate (Andres Freund)
       </para>

       <para>
        Previously entries were created only 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 <acronym>I/O</acronym>
        accounting for temp relation writes shown in <link
        linkend="pg-stat-database-view"><structname>pg_stat_database</structname></link>
        (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 <link
        linkend="monitoring-stats-backend-funcs-table"><function>pg_stat_get_backend_subxact()</function></link>
        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 <link
        linkend="monitoring-stats-backend-funcs-table"><function>pg_stat_get_backend_idset()</function></link>,
        <function>pg_stat_get_backend_activity()</function>, 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()
-->

      <listitem>
       <para>
        Add wait event <link
        linkend="wait-event-timeout-table"><literal>SpinDelay</literal></link>
        to report spinlock sleep delays (Andres Freund)
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-14 [7bae3bbf6] Create a distinct wait event for POSIX DSM allocation.
-->

      <listitem>
       <para>
        Create new wait event <link
        linkend="wait-event-io-table"><literal>DSMAllocate</literal></link>
        to indicate waiting for dynamic shared memory allocation (Thomas
        Munro)
       </para>

       <para>
        Previously this type of wait was reported as
        <literal>DSMFillZeroWrite</literal>, which was also used by
        <function>mmap()</function> 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 <link
        linkend="guc-update-process-title">process title</link> of logical
        <acronym>WAL</acronym> senders (Tatsuhiro Nakamori)
       </para>

       <para>
        Physical <acronym>WAL</acronym> 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 <literal>REDO LSN</literal> information to <link
        linkend="guc-log-checkpoints"><varname>log_checkpoints</varname></link>
        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: Robert Haas <rhaas@postgresql.org>
2023-03-30 [c3afe8cf5] Add new predefined role pg_create_subscription.
-->

      <listitem>
       <para>
        Add predefined role <link
        linkend="predefined-roles"><literal>pg_create_subscription</literal></link>
        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 <link
        linkend="sql-createsubscription"><literal>password_required=false</literal></link>.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-01-13 [c44f6334c] Simplify permissions for LOCK TABLE.
-->

      <listitem>
       <para>
        Simplify permissions for <link linkend="sql-lock"><command>LOCK
        TABLE</command></link> (Jeff Davis)
       </para>

       <para>
        Previously a user's ability to perform <command>LOCK
        TABLE</command> at various lock levels was limited to the
        lock levels required by the commands they had permission
        to execute on the table.  For example, someone with <link
        linkend="sql-update"><command>UPDATE</command></link>
        permission could perform all lock levels except <literal>ACCESS
        SHARE</literal>, even though it was a lesser lock level.  Now users
        can issue lesser lock levels if they already have permission for
        greater lock levels.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->

      <listitem>
       <para>
        Allow <link linkend="sql-altergroup"><literal>ALTER GROUP group_name
        ADD USER user_name</literal></link> to be performed with <literal>ADMIN
        OPTION</literal> (Robert Haas)
       </para>

       <para>
        Previously <literal>CREATEROLE</literal> permission was required.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-25 [e3ce2de09] Allow grant-level control of role inheritance behavior.
-->

      <listitem>
       <para>
        Allow <link linkend="sql-grant"><command>GRANT</command></link>
        to use <literal>WITH ADMIN TRUE</literal>/<literal>FALSE</literal>
        syntax (Robert Haas)
       </para>

       <para>
        Previously only the <literal>WITH ADMIN OPTION</literal> syntax
        was supported.
       </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 the ability to <link
        linkend="sql-set-role"><command>SET ROLE</command></link> to the
        new role (Robert Haas, Shi Yu)
       </para>

       <para>
        This is controlled by server variable <link
        linkend="guc-createrole-self-grant"><varname>createrole_self_grant</varname></link>.
       </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 a non-bootstrap 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 <link linkend="sql-grant"><command>GRANT</command></link> to
        control permission to use <link linkend="sql-set-role"><command>SET
        ROLE</command></link> (Robert Haas)
       </para>

       <para>
        This is controlled by a new <literal>GRANT ... SET</literal>
        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 <literal>ADMIN OPTION</literal> will fail if
        there are privileges using that option;  <literal>CASCADE</literal>
        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 <link
        linkend="sql-grant"><command>GRANT</command></link> records
        (Robert Haas)
       </para>

       <para>
        This guarantees that <link
        linkend="catalog-pg-auth-members"><structname>pg_auth_members</structname></link>.<structfield>grantor</structfield>
        values are 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>

       <para>
        Restoring such users could lead to errors.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-03 [b762bbde3] Allow makeaclitem() to accept multiple privilege names.
-->

      <listitem>
       <para>
        Allow <link
        linkend="functions-aclitem-fn-table"><function>makeaclitem()</function></link>
        to accept multiple privilege names (Robins Tharakan)
       </para>

       <para>
        Previously only a single privilege name, like <link
        linkend="sql-select"><command>SELECT</command></link>, was
        accepted.
       </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
Author: Bruce Momjian <bruce@momjian.us>
2023-05-20 [9c0a0e2ed] rename "gss_accept_deleg" to "gss_accept_delegation".
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-20 [f4001a553] Fix remaining references to gss_accept_deleg.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-05-21 [a2eb99a01] Expand some more uses of "deleg" to "delegation" or "del
-->

      <listitem>
       <para>
        Add support for <productname>Kerberos</productname> credential
        delegation (Stephen Frost)
       </para>

       <para>
        This is enabled with server variable <link
        linkend="guc-gss-accept-delegation"><varname>gss_accept_delegation</varname></link>
        and <application>libpq</application> connection parameter <link
        linkend="libpq-connect-gssdelegation"><literal>gssdelegation</literal></link>.
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-03-27 [b57774300] Make SCRAM iteration count configurable
-->

      <listitem>
       <para>
        Allow the <acronym>SCRAM</acronym> iteration
        count to be set with server variable <link
        linkend="guc-scram-iterations"><varname>scram_iterations</varname></link>
        (Daniel Gustafsson)
       </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
-->

      <listitem>
       <para>
        Improve performance of server variable management (Tom Lane)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-27 [385366426] Introduce GUC_NO_RESET flag.
-->

      <listitem>
       <para>
        Tighten restrictions on which server variables can be reset
        (Masahiko Sawada)
       </para>

       <para>
        Previously, while certain variables, like <link
        linkend="guc-default-transaction-isolation"><varname>transaction_isolation</varname></link>,
        were not affected by <link linkend="sql-reset"><command>RESET
        ALL</command></link>, 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 <link
        linkend="config-setting-configuration-file"><filename>postgresql.conf</filename></link>
        items into new categories (Shinya Kato)
       </para>

       <para>
        This also affects the categories displayed in the <link
        linkend="view-pg-settings"><structname>pg_settings</structname></link>
        view.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-25 [d13b68411] Introduce variables for initial and max nesting depth on
-->

      <listitem>
       <para>
        Prevent configuration file recursion beyond 10 levels (Julien
        Rouhaud)
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-07 [7d71d3dd0] Refresh cost-based delay params more frequently in autov
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-20 [a9781ae11] Fix autovacuum cost debug logging
-->

      <listitem>
       <para>
        Allow <link linkend="autovacuum">autovacuum</link> 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 <link
        linkend="guc-archive-command"><varname>archive_command</varname></link>
        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 <link
        linkend="guc-archive-library"><varname>archive_library</varname></link>
        and <link
        linkend="guc-archive-command"><varname>archive_command</varname></link>
        from being set at the same time (Nathan Bossart)
       </para>

       <para>
        Previously <varname>archive_library</varname> would override
        <varname>archive_command</varname>.
       </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>
        This allows collection of a core dump for a
        stuck child process.  This is controlled by <link
        linkend="guc-send-abort-for-crash"><varname>send_abort_for_crash</varname></link>
        and <link
        linkend="guc-send-abort-for-kill"><varname>send_abort_for_kill</varname></link>.
        The postmaster's <option>-T</option> switch is now the same as
        setting <varname>send_abort_for_crash</varname>.
       </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 non-functional postmaster <option>-n</option> 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 <link
        linkend="predefined-roles"><literal>pg_use_reserved_connections</literal></link>
        membership (Nathan Bossart)
       </para>

       <para>
        The number of reserved slots is set by server variable <link
        linkend="guc-reserved-connections"><varname>reserved_connections</varname></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-09-17 [fdd8937c0] Fix huge_pages on Windows
-->

      <listitem>
       <para>
        Allow <link linkend="guc-huge-pages">huge pages</link> to
        work on newer versions of <systemitem class="osname">Windows
        10</systemitem> (Thomas Munro)
       </para>

       <para>
        This adds the special handling required to enable huge pages
        on newer versions of <systemitem class="osname">Windows
        10</systemitem>.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-04-08 [d4e71df6d] Add io_direct setting (developer-only).
Author: Thomas Munro <tmunro@postgresql.org>
2023-05-15 [319bae9a8] Rename io_direct to debug_io_direct.
-->

      <listitem>
       <para>
        Add <link
        linkend="guc-debug-io-direct"><varname>debug_io_direct</varname></link>
        setting for developer usage (Thomas Munro, Andres Freund,
        Bharath Rupireddy)
       </para>

       <para>
        While primarily for developers, <link
        linkend="guc-wal-sync-method"><literal>wal_sync_method=open_sync</literal></link>/<literal>open_datasync</literal>
        has been modified to not use direct <acronym>I/O</acronym> with
        <literal>wal_level=minimal</literal>;  this is now enabled with
        <literal>debug_io_direct=wal</literal>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-20 [cca186348] Add pg_dissect_walfile_name()
Author: Michael Paquier <michael@paquier.xyz>
2022-12-23 [13e0d7a60] Rename pg_dissect_walfile_name() to pg_split_walfile_nam
-->

      <listitem>
       <para>
        Add function <link
        linkend="functions-admin-backup-table"><function>pg_split_walfile_name()</function></link>
        to report the segment and timeline values of <acronym>WAL</acronym>
        file names (Bharath Rupireddy)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-pg-hba">
     <title><link linkend="auth-pg-hba-conf">pg_hba.conf</link></title>

     <itemizedlist>

<!--
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 <filename>pg_hba.conf</filename> (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 <filename>pg_hba.conf</filename>.
       </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 <link
        linkend="runtime-config-file-locations"><filename>pg_ident.conf</filename></link>
        to match <filename>pg_hba.conf</filename> (Jelte Fennema)
       </para>

       <para>
        Specifically, add support for <literal>all</literal>, role
        membership with <literal>+</literal>, 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 <filename>pg_hba.conf</filename> and
        <filename>pg_ident.conf</filename> (Julien Rouhaud)
       </para>

       <para>
        These are controlled by <literal>include</literal>,
        <literal>include_if_exists</literal>, and
        <literal>include_dir</literal>.  System views <link
        linkend="view-pg-hba-file-rules"><structname>pg_hba_file_rules</structname></link>
        and <link
        linkend="view-pg-ident-file-mappings"><structname>pg_ident_file_mappings</structname></link>
        now display the file name.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-27 [de3f0e3fe] Eliminate fixed token-length limit in hba.c.
-->

      <listitem>
       <para>
        Allow <filename>pg_hba.conf</filename> tokens to be of unlimited
        length (Tom Lane)
       </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 <link
        linkend="view-pg-hba-file-rules"><structname>pg_hba_file_rules</structname></link>
        (Julien Rouhaud)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-localization">
     <title><link linkend="charset">Localization</link></title>

     <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-03-10 [c45dc7ffb] initdb: derive encoding from locale for ICU; similar to
-->

      <listitem>
       <para>
        Determine the default encoding from the locale when using
        <acronym>ICU</acronym> (Jeff Davis)
       </para>

       <para>
        Previously the default was always <literal>UTF-8</literal>.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
      Date:   Fri Jun 16 10:27:32 2023 -0700
-->

      <listitem>
       <para>
        Have <link linkend="sql-createdatabase"><command>CREATE
        DATABASE</command></link> and <link
        linkend="sql-createcollation"><command>CREATE
        COLLATION</command></link>'s <literal>LOCALE</literal> options, and
        <link linkend="app-initdb"><application>initdb</application></link>
        and <link
        linkend="app-createdb"><application>createdb</application></link>
        <option>--locale</option> options, control
        non-<application>libc</application> collation providers (Jeff
        Davis)
       </para>

       <para>
        Previously they only controlled <application>libc</application>
        providers.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-10 [0d21d4b9b] Add standard collation UNICODE
-->

      <listitem>
       <para>
        Add predefined collations <literal>unicode</literal> and
        <literal>ucs_basic</literal> (Peter Eisentraut)
       </para>

       <para>
        This only works if <acronym>ICU</acronym> 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 <acronym>ICU</acronym> collation rules to be created
        (Peter Eisentraut)
       </para>

       <para>
        This is done using <link
        linkend="sql-createcollation"><command>CREATE
        COLLATION</command></link>'s new <literal>RULES</literal>
        clause, as well as new options for <link
        linkend="sql-createdatabase"><command>CREATE
        DATABASE</command></link>, <link
        linkend="app-createdb"><application>createdb</application></link>,
        and <link
        linkend="app-initdb"><application>initdb</application></link>.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-01-03 [bf03cfd16] Windows support in pg_import_system_collations
-->

      <listitem>
       <para>
        Allow <systemitem class="osname">Windows</systemitem> to import
        system locales automatically (Juan José Santamaría Flecha)
       </para>

       <para>
        Previously, only <acronym>ICU</acronym> locales could be imported
        on <systemitem class="osname">Windows</systemitem>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-16-logical">
    <title><link linkend="logical-replication">Logical Replication</link></title>

    <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-08 [0fdab27ad] Allow logical decoding on standbys
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 <link linkend="logicaldecoding">logical decoding</link>
       on standbys (Bertrand Drouvot, Andres Freund, Amit Khandekar)
      </para>

      <para>
       Snapshot <acronym>WAL</acronym> records are
       required for logical slot creation but cannot be
       created on standbys.  To avoid delays, the new function <link
       linkend="functions-snapshot-synchronization-table"><function>pg_log_standby_snapshot()</function></link>
       allows creation of such records.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-12-26 [5de94a041] Add 'logical_decoding_mode' GUC.
Author: Amit Kapila <akapila@postgresql.org>
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 <link
       linkend="guc-debug-logical-replication-streaming"><varname>debug_logical_replication_streaming</varname></link>.
      </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 <link linkend="sql-createsubscription"><command>CREATE
       SUBSCRIPTION</command></link> <option>STREAMING</option>
       option now supports <literal>parallel</literal> to enable
       application of large transactions by parallel workers.  The number
       of parallel workers is controlled by the new server variable <link
       linkend="guc-max-parallel-apply-workers-per-subscription"><varname>max_parallel_apply_workers_per_subscription</varname></link>.
       Wait events <link
       linkend="wait-event-activity-table"><literal>LogicalParallelApplyMain</literal></link>,
       <literal>LogicalParallelApplyStateChange</literal>, and
       <literal>LogicalApplySendData</literal> were also added.  Column
       <structfield>leader_pid</structfield> was added to system view <link
       linkend="monitoring-pg-stat-subscription"><structname>pg_stat_subscription</structname></link>
       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 <link
       linkend="logical-replication-architecture">logical replication
       apply</link> without a primary key (Onder Kalaci, Amit Kapila)
      </para>

      <para>
       Specifically, <literal>REPLICA IDENTITY FULL</literal> 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.  This is controlled
       by the new <literal>CREATE SUBSCRIPTION ... ORIGIN</literal> option.
      </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 <link
       linkend="sql-select"><command>SELECT</command></link> and
       <acronym>DML</acronym> actions as the table owner (Robert Haas)
      </para>

      <para>
       This improves security and now requires subscription
       owners to be either superusers or to have <link
       linkend="sql-set-role"><command>SET ROLE</command></link>
       permission on all roles owning tables in the replication set.
       The previous behavior of performing all operations as the
       subscription owner can be enabled with the subscription <link
       linkend="sql-createsubscription"><option>run_as_owner</option></link>
       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 <link
       linkend="guc-wal-retrieve-retry-interval"><varname>wal_retrieve_retry_interval</varname></link>
       operate on a per-subscription basis (Nathan Bossart)
      </para>

      <para>
       Previously the retry time was applied
       globally.  This also adds wait events <link
       linkend="wait-event-lwlock-table">><literal>LogicalRepLauncherDSA</literal></link>
       and <literal>LogicalRepLauncherHash</literal>.
      </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 <link linkend="sql-explain"><command>EXPLAIN</command></link>
       option <literal>GENERIC_PLAN</literal> to display the generic plan
       for a parameterized query (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 <link linkend="sql-copy"><command>COPY FROM</command></link>
       value to map to a column's <literal>DEFAULT</literal> (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 <link linkend="sql-copy"><command>COPY</command></link>
       into foreign tables to add rows in batches (Andrey Lepikhov,
       Etsuro Fujita)
      </para>

      <para>
       This is controlled by the <link
       linkend="postgres-fdw"><application>postgres_fdw</application></link>
       option <link
       linkend="postgres-fdw-options-cost-estimation"><option>batch_size</option></link>.
      </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 <literal>STORAGE</literal> type to be specified by <link
       linkend="sql-createtable"><command>CREATE TABLE</command></link>
       (Teodor Sigaev, Aleksander Alekseev)
      </para>

      <para>
       Previously only <link linkend="sql-altertable"><command>ALTER
       TABLE</command></link> could control this.
      </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-12 [3b00a944a] Support TRUNCATE triggers on foreign tables.
-->

     <listitem>
      <para>
       Allow <link linkend="sql-createtrigger">truncate triggers</link>
       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 <link
       linkend="sql-vacuum"><command>VACUUM</command></link> and <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       to only process <link
       linkend="storage-toast"><literal>TOAST</literal></link> tables
       (Nathan Bossart)
      </para>

      <para>
       This is accomplished by having <link
       linkend="sql-vacuum"><command>VACUUM</command></link>
       turn off <literal>PROCESS_MAIN</literal> or by <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       using the <option>--no-process-main</option> 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 <link linkend="sql-vacuum"><command>VACUUM</command></link>
       options to skip or update all <link
       linkend="vacuum-for-wraparound">frozen</link> statistics (Tom Lane,
       Nathan Bossart)
      </para>

      <para>
       The options are <literal>SKIP_DATABASE_STATS</literal> and
       <literal>ONLY_DATABASE_STATS</literal>.
      </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 <link linkend="sql-reindex"><command>REINDEX
       DATABASE</command></link> and <link
       linkend="sql-reindex"><command>REINDEX SYSTEM</command></link>
       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 <link linkend="sql-createstatistics"><command>CREATE
       STATISTICS</command></link> to generate a statistics name if none
       is specified (Simon Riggs)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-datatypes">
    <title>Data Types</title>

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-12-14 [6fcda9aba] Non-decimal integer literals
-->

     <listitem>
      <para>
       Allow non-decimal <link linkend="sql-syntax-bit-strings">integer
       literals</link> (Peter Eisentraut)
      </para>

      <para>
       For example, <literal>0x42F</literal>, <literal>0o273</literal>,
       and <literal>0b100101</literal>.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-23 [6dfacbf72] Add non-decimal integer support to type numeric.
-->

     <listitem>
      <para>
       Allow <link linkend="datatype-numeric"><type>NUMERIC</type></link>
       to process hexadecimal, octal, and binary integers of any size
       (Dean Rasheed)
      </para>

      <para>
       Previously only unquoted eight-byte integers were supported with
       these non-decimal bases.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-02-04 [faff8f8e4] Allow underscores in integer and numeric constants.
-->

     <listitem>
      <para>
       Allow underscores in integer and numeric <link
       linkend="sql-syntax-bit-strings">constants</link> (Peter Eisentraut,
       Dean Rasheed)
      </para>

      <para>
       This can improve readability for long strings of digits.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-01 [2ceea5adb] Accept "+infinity" in date and timestamp[tz] input.
-->

     <listitem>
      <para>
       Accept the spelling <literal>+infinity</literal> in datetime input
       (Vik Fearing)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-09 [bcc704b52] Reject combining "epoch" and "infinity" with other datet
-->

     <listitem>
      <para>
       Prevent the specification of <literal>epoch</literal> and
       <literal>infinity</literal> together with other fields in datetime
       strings (Joseph Koshakow)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-16 [5b3c59535] Tighten error checks in datetime input, and remove bogus
-->

     <listitem>
      <para>
       Remove undocumented support for date input in the form
       <literal>Y<replaceable>year</replaceable>M<replaceable>month</replaceable>D<replaceable>day</replaceable></literal>
       (Joseph Koshakow)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-09 [1939d2628] Add test scaffolding for soft error reporting from input
Author: Michael Paquier <michael@paquier.xyz>
2023-02-28 [b8da37b3a] Rework pg_input_error_message(), now renamed pg_input_er
-->

     <listitem>
      <para>
       Add functions <link
       linkend="functions-info-validity-table"><function>pg_input_is_valid()</function></link>
       and <function>pg_input_error_info()</function> to check for type
       conversion errors (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-general">
    <title>General Queries</title>

    <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-07-20 [bcedd8f5f] Make subquery aliases optional in the FROM clause.
-->

     <listitem>
      <para>
       Allow subqueries in the <literal>FROM</literal> clause to omit
       aliases (Dean Rasheed)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-05 [102a5c164] SQL JSON path enhanced numeric literals
-->

     <listitem>
      <para>
       Add support for enhanced numeric literals in
       <acronym>SQL/JSON</acronym> paths (Peter Eisentraut)
      </para>

      <para>
       For example, allow hexadecimal, octal, and binary integers and
       underscores between digits.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-functions">
    <title>Functions</title>

    <itemizedlist>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2023-03-29 [7081ac46a] SQL/JSON: add standard JSON constructor functions
-->

     <listitem>
      <para>
       Add <acronym>SQL/JSON</acronym> constructors (Nikita Glukhov,
       Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote)
      </para>

      <para>
       The new functions <link
       linkend="functions-json-creation-table"><function>JSON_ARRAY()</function></link>,
       <link
       linkend="functions-aggregate-table"><function>JSON_ARRAYAGG()</function></link>,
       <function>JSON_OBJECT()</function>, and
       <function>JSON_OBJECTAGG()</function> are part of the
       <acronym>SQL</acronym> standard.
      </para>
     </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2023-03-31 [6ee30209a] SQL/JSON: support the IS JSON predicate
-->

     <listitem>
      <para>
       Add <acronym>SQL/JSON</acronym> object checks (Nikita Glukhov,
       Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote,
       Andrew Dunstan)
      </para>

      <para>
       The <link linkend="functions-sqljson-misc"><literal>IS
       JSON</literal></link> checks include checks for values, arrays,
       objects, scalars, and unique keys.
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-02 [0a8de93a4] Speed up lexing of long JSON strings
-->

     <listitem>
      <para>
       Allow <acronym>JSON</acronym> string parsing to use vector
       operations (John Naylor)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-19 [5a617d75d] Fix ts_headline() to handle ORs and phrase queries more
-->

     <listitem>
      <para>
       Improve the handling of full text highlighting function <link
       linkend="textsearch-functions-table"><function>ts_headline()</function></link>
       for <literal>OR</literal> and <literal>NOT</literal> expressions
       (Tom Lane)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-18 [75bd846b6] Add functions to do timestamptz arithmetic in a non-defa
-->

     <listitem>
      <para>
       Add functions to add, subtract, and generate
       <type>timestamptz</type> values in a specified time zone (Przemyslaw
       Sztoch, Gurjeet Singh)
      </para>

      <para>
       The functions are <link
       linkend="functions-datetime-table"><function>date_add()</function></link>,
       <function>date_subtract()</function>, and <link
       linkend="functions-srf-series"><function>generate_series()</function></link>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-12 [533e02e92] Fix volatility marking of timestamptz_trunc_zone.
-->

     <listitem>
      <para>
       Change <link
       linkend="functions-datetime-table"><function>date_trunc(unit,
       timestamptz, time_zone)</function></link> to be an immutable
       function (Przemyslaw Sztoch)
      </para>

      <para>
       This allows the creation of expression indexes using this function.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-09-29 [0823d061b] Introduce SYSTEM_USER
-->

     <listitem>
      <para>
       Add server variable <link
       linkend="functions-info-session-table"><literal>SYSTEM_USER</literal></link>
       (Bertrand Drouvot)
      </para>

      <para>
       This reports the authentication method and its authenticated user.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [888f2ea0a] Add array_sample() and array_shuffle() functions.
-->

     <listitem>
      <para>
       Add functions <link
       linkend="array-functions-table"><function>array_sample()</function></link>
       and <function>array_shuffle()</function> (Martin Kalcher)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-02-22 [2ddab010c] Implement ANY_VALUE aggregate
-->

     <listitem>
      <para>
       Add aggregate function <link
       linkend="functions-aggregate-table"><function>ANY_VALUE()</function></link>
       which returns any value from a set (Vik Fearing)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-09 [38d81760c] Invent random_normal() to provide normally-distributed r
-->

     <listitem>
      <para>
       Add function <link
       linkend="functions-math-random-table"><function>random_normal()</function></link>
       to supply normally-distributed random numbers (Paul Ramsey)
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-03-14 [d5d574146] Add support for the error functions erf() and erfc().
-->

     <listitem>
      <para>
       Add error function <link
       linkend="functions-math-func-table"><function>erf()</function></link>
       and its complement <function>erfc()</function> (Dean Rasheed)
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-10-20 [40c7fcbbe] Improve the accuracy of numeric power() for integer expo
-->

     <listitem>
      <para>
       Improve the accuracy of numeric <link
       linkend="functions-math-func-table"><function>power()</function></link>
       for integer exponents (Dean Rasheed)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-15 [483bdb2af] Support [NO] INDENT option in XMLSERIALIZE().
-->

     <listitem>
      <para>
       Add <link
       linkend="datatype-xml-creating"><function>XMLSERIALIZE()</function></link>
       option <literal>INDENT</literal> to pretty-print its output
       (Jim Jones)
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-10-31 [10932ed5e] Enable pg_collation_actual_version() to work on the defa
-->

     <listitem>
      <para>
       Change <link
       linkend="functions-admin-collation"><function>pg_collation_actual_version()</function></link>
       to return a reasonable value for the default collation (Jeff Davis)
      </para>

      <para>
       Previously it returned <literal>NULL</literal>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-29 [283129e32] Support pg_read_[binary_]file (filename, missing_ok).
-->

     <listitem>
      <para>
       Allow <link
       linkend="functions-admin-genfile-table"><function>pg_read_file()</function></link>
       and <function>pg_read_binary_file()</function> to ignore missing
       files (Kyotaro Horiguchi)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-07 [ce1215d9b] Add support for unit "B" to pg_size_bytes()
-->

     <listitem>
      <para>
       Add byte specification (<literal>B</literal>) to <link
       linkend="functions-admin-dbsize"><function>pg_size_bytes()</function></link>
       (Peter Eisentraut)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-27 [3ea7329c9] Simplify the implementations of the to_reg* functions.
-->

     <listitem>
      <para>
       Allow <link
       linkend="functions-info-catalog-table"><function>to_reg</function></link>*
       functions to accept numeric <acronym>OID</acronym>s as input
       (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-plpgsql">
    <title><link linkend="plpgsql">PL/pgSQL</link></title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-04 [d3d53f955] Add a way to get the current function's OID in pl/pgsql.
-->

     <listitem>
      <para>
       Add the ability to get the current function's <acronym>OID</acronym>
       in <application>PL/pgSQL</application> (Pavel Stehule)
      </para>

      <para>
       This is accomplished with <link
       linkend="plpgsql-statements-diagnostics"><command>GET DIAGNOSTICS
       variable = PG_ROUTINE_OID</command></link>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-libpq">
    <title><link linkend="libpq">libpq</link></title>

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [3a465cc67] libpq: Add support for require_auth to control authorize
-->

     <listitem>
      <para>
       Add <application>libpq</application> connection option <link
       linkend="libpq-connect-require-auth"><option>require_auth</option></link>
       to specify a list of acceptable authentication methods (Jacob
       Champion)
      </para>

      <para>
       This can also be used to disallow certain authentication methods.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-03-29 [7f5b19817] Support connection load balancing in libpq
Author: Fujii Masao <fujii@postgresql.org>
2023-04-21 [0a16512d4] doc: Add documentation for PGLOADBALANCEHOSTS environmen
-->

     <listitem>
      <para>
       Allow multiple <application>libpq</application>-specified hosts
       to be randomly selected (Jelte Fennema)
      </para>

      <para>
       This is enabled with <link
       linkend="libpq-connect-load-balance-hosts"><literal>load_balance_hosts=random</literal></link>
       and can be used for load balancing.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-24 [36f40ce2d] libpq: Add sslcertmode option to control client certific
-->

     <listitem>
      <para>
       Add <application>libpq</application> option <link
       linkend="libpq-connect-sslcertmode"><option>sslcertmode</option></link>
       to control transmission of the client certificate (Jacob Champion)
      </para>

      <para>
       The option values are <literal>disable</literal>,
       <literal>allow</literal>, and <literal>require</literal>.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-05 [8eda73146] Allow to use system CA pool for certificate verification
-->

     <listitem>
      <para>
       Allow <application>libpq</application> to use the system certificate
       pool for certificate verification (Jacob Champion, Thomas Habets)
      </para>

      <para>
       This is enabled with <link
       linkend="libpq-connect-sslrootcert"><literal>sslrootcert=system</literal></link>,
       which also enables <link
       linkend="libpq-connect-sslmode"><literal>sslmode=verify-full</literal></link>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-client-apps">
    <title>Client Applications</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-12 [83f1c7b74] Fix ECPG's handling of type names that match SQL keyword
-->

     <listitem>
      <para>
       Allow <link linkend="ecpg"><command>ECPG</command></link>
       variable declarations to use typedef names that match unreserved
       <acronym>SQL</acronym> keywords (Tom Lane)
      </para>

      <para>
       This change does prevent keywords which match C typedef names from
       being processed as keywords in later <command>EXEC SQL</command>
       blocks.
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-16-psql">
     <title><xref linkend="app-psql"/></title>

     <itemizedlist>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-07-25 [a45388d6e] Add xheader_width pset option to psql
-->

      <listitem>
       <para>
        Allow <application>psql</application> to control the maximum
        width of header lines in expanded format (Platon Pronko)
       </para>

       <para>
        This is controlled by <link
        linkend="app-psql-meta-command-pset-xheader-width"><option>xheader_width</option></link>.
       </para>
      </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-07 [d913928c9] psql: Add support for \dpS and \zS.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-19 [d65ddaca9] Add psql \drg command to display role
-->

      <listitem>
       <para>
        Add <application>psql</application> command <link
        linkend="app-psql-meta-command-drg"><command>\drg</command></link>
        to show role membership details (Pavel Luzanov)
       </para>

       <para>
        The <literal>Member of</literal> output column has been removed
        from <command>\du</command> and <command>\dg</command> because
        this new command displays this information in more detail.
       </para>
      </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-07 [d913928c9] psql: Add support for \dpS and \zS.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-19 [d65ddaca9] Add psql \drg command to display role
-->

      <listitem>
       <para>
        Allow <application>psql</application>'s access privilege commands
        to show system objects (Nathan Bossart)
       </para>

       <para>
        The options are <link
        linkend="app-psql-meta-command-dp-lc"><command>\dpS</command></link>
        and <link
        linkend="app-psql-meta-command-z"><command>\zS</command></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-08 [bd95816f7] psql: Add information in \d+ about foreign partitions an
-->

      <listitem>
       <para>
        Add <literal>FOREIGN</literal> designation
        to <application>psql</application> <link
        linkend="app-psql-meta-command-d"><command>\d+</command></link>
        for foreign table children and partitions (Ian Lawrence Barwick)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-02 [3dfae91f7] Show "internal name" not "source code" in psql's \df+ co
-->

      <listitem>
       <para>
        Prevent <link
        linkend="app-psql-meta-command-df-uc"><command>\df+</command></link>
        from showing function source code (Isaac Morland)
       </para>

       <para>
        Function bodies are more easily viewed with <link
        linkend="app-psql-meta-command-sf"><command>\sf</command></link>.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-15 [5b66de343] psql: Add command to use extended query protocol
-->

      <listitem>
       <para>
        Allow <application>psql</application> to submit queries using
        the extended query protocol (Peter Eisentraut)
       </para>

       <para>
        Passing arguments to such queries is done
        using the new <application>psql</application> <link
        linkend="app-psql-meta-command-bind"><command>\bind</command></link>
        command.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-06 [00beecfe8] psql: add an optional execution-count limit to \watch.
-->

      <listitem>
       <para>
        Allow <application>psql</application> <link
        linkend="app-psql-meta-command-watch"><command>\watch</command></link>
        to limit the number of executions (Andrey Borodin)
       </para>

       <para>
        The <command>\watch</command> options can now be named when
        specified.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-16 [6f9ee74d4] Improve handling of psql \watch's interval argument
-->

      <listitem>
       <para>
        Detect invalid values for <application>psql</application> <link
        linkend="app-psql-meta-command-watch"><command>\watch</command></link>,
        and allow zero to specify no delay (Andrey Borodin)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-21 [b0d8f2d98] Add SHELL_ERROR and SHELL_EXIT_CODE magic variables to p
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-06 [31ae2aa9d] psql: set SHELL_ERROR and SHELL_EXIT_CODE in more places
-->

      <listitem>
       <para>
        Allow <application>psql</application> scripts to obtain the exit
        status of shell commands and queries
       (Corey Huinker, Tom Lane)
       </para>

       <para>
        The new <application>psql</application> control variables are <link
        linkend="app-psql-variables-shell-error"><literal>SHELL_ERROR</literal></link>
        and <link
        linkend="app-psql-variables-shell-exit-code"><literal>SHELL_EXIT_CODE</literal></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-15 [f6c750d31] Improve tab completion of ALTER TYPE in psql
Author: Michael Paquier <michael@paquier.xyz>
2022-09-06 [4cbe57974] Add psql tab compression for SET COMPRESSION with ALTER
Author: Michael Paquier <michael@paquier.xyz>
2022-09-10 [6afcab6ac] Add psql tab compression for ALTER TABLE .. { OF | NOT O
Author: Michael Paquier <michael@paquier.xyz>
2022-10-05 [9aa58d48f] Add a few new patterns to the tab completion of psql
Author: Michael Paquier <michael@paquier.xyz>
2022-10-24 [3cf2f7af7] Improve tab completion for ALTER STATISTICS &lt;name&gt; SET i
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-01 [2ea5de296] psql: Improve tab completion for ALTER TABLE on identity
Author: Michael Paquier <michael@paquier.xyz>
2022-11-18 [07f7237c2] psql: Improve tab completion for GRANT/REVOKE
Author: Michael Paquier <michael@paquier.xyz>
2022-12-12 [9d0cf5749] Add support for GRANT SET in psql tab completion
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-06 [a3bc631ea] Improve tab completion for ALTER FUNCTION/PROCEDURE/ROUT
Author: Michael Paquier <michael@paquier.xyz>
2023-01-12 [2ff5ca86e] Add support for tab completion after ALTER EXTENSION ADD
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-19 [9e1e9d656] Add missed case for tab completion of GRANT/REVOKE MAINT
Author: Amit Kapila <akapila@postgresql.org>
2023-04-07 [96c498d2f] Add tab-completion for newly added SUBSCRIPTION options.
-->

      <listitem>
       <para>
        Various <application>psql</application> tab completion improvements
        (Vignesh C, Aleksander Alekseev, Dagfinn Ilmari Mannsåker,
        Shi Yu, Michael Paquier, Ken Kato, Peter Smith)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-pgdump">
     <title><link linkend="app-pgdump"><application>pg_dump</application></link></title>

     <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-14 [a563c24c9] Allow pg_dump to include/exclude child tables automatica
-->

      <listitem>
       <para>
        Add <application>pg_dump</application> control of dumping child
        tables and partitions (Gilles Darold)
       </para>

       <para>
        The new options are <option>--table-and-children</option>,
        <option>--exclude-table-and-children</option>, and
        <option>--exclude-table-data-and-children</option>.
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-02-23 [0da243fed] Add LZ4 compression to pg_dump
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-01 [0070b66fe] pg_dump: Use only LZ4 frame format for compression
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-05 [84adc8e20] pg_dump: Add support for zstd compression-->

      <listitem>
       <para>
        Add <application>LZ4</application> and
        <application>Zstandard</application> compression to
        <application>pg_dump</application> (Georgios Kokolatos, Justin
        Pryzby)
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-06 [2820adf77] Support long distance matching for zstd compression
-->

      <listitem>
       <para>
        Allow <application>pg_dump</application> and <link
        linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
        to use <literal>long</literal> mode for compression (Justin Pryzby)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-02 [5e73a6048] Switch pg_dump to use compression specifications
-->

      <listitem>
       <para>
        Improve <application>pg_dump</application> to accept a more
        consistent compression syntax (Georgios Kokolatos)
       </para>

       <para>
        Options like <option>--compress=gzip:5</option>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-16-server-apps">
    <title>Server Applications</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us> 2023-03-22
     [3e51b278d] Add "-c name=value" switch to initdb.
-->

     <listitem>
      <para>
       Add <link
       linkend="app-initdb"><application>initdb</application></link>
       option to set server variables for the duration of
       <application>initdb</application> and all future server starts
       (Tom Lane)
      </para>

      <para>
       The option is <option>-c name=value</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-13 [08951a7c9] createuser: Add support for more clause types through ne
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-21 [2dcd1578c] Rename some createuser options.
-->

     <listitem>
      <para>
       Add options to <link
       linkend="app-createuser"><application>createuser</application></link>
       to control more user options (Shinya Kato)
      </para>

      <para>
       Specifically, the new options control the valid-until date,
       bypassing of row-level security, and role membership.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-21 [2dcd1578c] Rename some createuser options.
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-23 [381d19b3e] Document deprecated createuser option.
-->

     <listitem>
      <para>
       Deprecate <link
       linkend="app-createuser"><application>createuser</application></link>
       option <option>--role</option> (Nathan Bossart)
      </para>

      <para>
       This option could be easily confused with new
       <application>createuser</application> role membership options,
       so option <option>--member-of</option> has been added with the
       same functionality.  The <option>--role</option> option can still
       be used.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-07-31 [7781f4e3e] Add - -schema and - -exclude-schema options to vacuumdb.
-->

     <listitem>
      <para>
       Allow control of <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       schema processing (Gilles Darold)
      </para>

      <para>
       These are controlled by options <option>--schema</option> and
       <option>--exclude-schema</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>
       Use new <link linkend="sql-vacuum"><command>VACUUM</command></link>
       options to improve the performance of <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       (Tom Lane, Nathan Bossart)
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-03-09 [9637badd9] pg_upgrade: copy locale and encoding information to new
-->

     <listitem>
      <para>
       Have <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       set the new cluster's locale and encoding (Jeff Davis)
      </para>

      <para>
       This removes the requirement that the new cluster be created with
       the same locale and encoding settings.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-12-16 [746915c68] pg_upgrade: Add - -copy option
-->

     <listitem>
      <para>
       Add <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       option to specify the default transfer mode (Peter Eisentraut)
      </para>

      <para>
       The option is <option>--copy</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-30 [d18655cc0] Refactor code parsing compression option values (-Z/- -co
-->

     <listitem>
      <para>
       Improve <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       to accept numeric compression options (Georgios Kokolatos,
       Michael Paquier)
      </para>

      <para>
       Options like <option>--compress=server-5</option> 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 <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       to handle tablespaces stored in the <envar>PGDATA</envar> 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 <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       option <option>--save-fullpage</option> 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 <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       options <option>-t</option>/<option>--timeline</option> 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 <link
       linkend="app-pgverifybackup"><application>pg_verifybackup</application></link>
       (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 <link
       linkend="app-pgrewind"><application>pg_rewind</application></link>
       to properly track timeline changes (Heikki Linnakangas)
      </para>

      <para>
       Previously if <application>pg_rewind</application> 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 <link
       linkend="app-pgreceivewal"><application>pg_receivewal</application></link>
       and <link
       linkend="app-pgrecvlogical"><application>pg_recvlogical</application></link>
       cleanly exit on <literal>SIGTERM</literal> (Christoph Berg)
      </para>

      <para>
       This signal is often used by <application>systemd</application>.
      </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 <acronym>ICU</acronym> support by default (Jeff Davis)
      </para>

      <para>
       This removes <link linkend="installation">build
       flag</link> <option>--with-icu</option> and adds flag
       <option>--without-icu</option>.
      </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 <acronym>SIMD</acronym> 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 <acronym>SIMD</acronym> (Single
       Instruction Multiple Data) (<acronym>NEON</acronym>) instructions
       on <acronym>ARM</acronym> 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 <systemitem class="osname">Windows</systemitem>
       binaries built with <productname>MSVC</productname> use
       <literal>RandomizedBaseAddress</literal> (<acronym>ASLR</acronym>)
       (Michael Paquier)
      </para>

      <para>
       This was already enabled on <productname>MinGW</productname> 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 exporting their symbols by default
       (Andres Freund, Tom Lane)
      </para>

      <para>
       Functions that need to be called from the core backend
       or other extensions must now be explicitly marked
       <literal>PGDLLEXPORT</literal>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-07 [495ed0ef2] Make Windows 10 the minimal runtime requirement for WIN3
-->

     <listitem>
      <para>
       Require <systemitem class="osname">Windows 10</systemitem> or
       newer versions (Michael Paquier, Juan José Santamaría Flecha)
      </para>

      <para>
       Previously <systemitem class="osname">Windows Vista</systemitem> and
       <systemitem class="osname">Windows XP</systemitem> 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 <productname>Perl</productname> 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 <productname>Bison</productname> 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 <productname>Flex</productname> 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 <acronym>MIT</acronym> Kerberos for
       <acronym>GSSAPI</acronym> 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 <productname>Visual Studio 2013</productname>
       (Michael Paquier)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-08 [9db300ce6] Remove HP-UX port.
-->

     <listitem>
      <para>
       Remove support for <systemitem class="osname">HP-UX</systemitem>
       (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-08 [0ad5b48e5] Remove HP/Intel Itanium support.
-->

     <listitem>
      <para>
       Remove support for <productname>HP/Intel Itanium</productname>
       (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-12 [718aa43a4] Further tidy-up for old CPU architectures.
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-12 [14168d3c6] Doc: Acknowledge historically supported CPUs and OSes.
-->

     <listitem>
      <para>
       Remove support for <productname>M68K</productname>,
       <productname>M88K</productname>, <productname>M32R</productname>,
       and <productname>SuperH</productname> <acronym>CPU</acronym>
       architectures (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-17 [98ae2c84a] libpq: Remove code for SCM credential authentication
-->

     <listitem>
      <para>
       Remove <link linkend="libpq"><application>libpq</application></link>
       support for <acronym>SCM</acronym> credential authentication
       (Michael Paquier)
      </para>

      <para>
       Backend support for this authentication method was removed in
       <productname>PostgresSQL</productname> 9.1.
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-09-21 [e6927270c] meson: Add initial version of meson based build system
-->

     <listitem>
      <para>
       Add <link
       linkend="install-meson"><application>meson</application></link>
       build system (Andres Freund, Nazir Bilal Yavuz, Peter Eisentraut)
      </para>

      <para>
       This eventually will replace the <productname>Autoconf</productname>
       and <systemitem class="osname">Windows</systemitem>-based
       <productname>MSVC</productname> build systems.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-10-20 [c8e4030d1] Make finding openssl program a configure or meson option
-->

     <listitem>
      <para>
       Allow control of the location of the
       <application>openssl</application> binary used by the build system
       (Peter Eisentraut)
      </para>

      <para>
       Make finding <application>openssl</application>
       program a <application>configure</application> or
       <application>meson</application> option
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-12-07 [d3b111e32] Add option to specify segment size in blocks
-->

     <listitem>
      <para>
       Add build option to allow testing of small table segment sizes
       (Andres Freund)
      </para>

      <para>
       The build options are <link
       linkend="configure-option-with-segsize"><option>--with-segsize-blocks</option></link>
       and <option>-Dsegsize_blocks</option>.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-23 [b90f0b574] Add non-destructive modes to pgindent
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-23 [62e1e28bf] Fix pgindent - -show-diff option.
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-24 [124937163] Improve exclude pattern file processing in pgindent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-27 [a1c4cd6f2] Allow multiple - -excludes options in pgindent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-08 [068a243b7] pgindent: more ways to find files to indent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-12 [dab07e8c6] pgindent: filter files for the - -commit option
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-13 [b16259b3c] Remove obsolete pgindent options - -code-base and - -build
-->

     <listitem>
      <para>
       Add <link
       linkend="source"><application>pgindent</application></link> options
       (Andrew Dunstan)
      </para>

      <para>
       The new options are <option>--show-diff</option>,
       <option>--silent-diff</option>, <option>--commit</option>,
       and <option>--help</option>, and allow multiple
       <option>--exclude</option> options.  Also require the typedef file
       to be explicitly specified.  Options <option>--code-base</option>
       and <option>--build</option> were also removed.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-02-12 [4e831f4ce] Import pg_bsd_indent sources.
-->

     <listitem>
      <para>
       Add <link
       linkend="source"><application>pg_bsd_indent</application></link>
       source code to the main tree (Tom Lane)
      </para>
     </listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2022-10-19 [d1e2a380c] Enhance make_ctags and make_etags.
-->

     <listitem>
      <para>
       Improve <application>make_ctags</application> and
       <application>make_etags</application> (Yugo Nagata)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-28 [90189eefc] Save a few bytes in pg_attribute
-->

     <listitem>
      <para>
       Adjust <link
       linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>
       columns for efficiency (Peter Eisentraut)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-modules">
    <title>Additional Modules</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-02 [ff720a597] Fix planner to consider matches to boolean columns in ex
-->

     <listitem>
      <para>
       Improve use of extension-based indexes on boolean columns (Zongliang
       Quan, Tom Lane)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [a290378a3] Add support for Daitch-Mokotoff Soundex in contrib/fuzzy
-->

     <listitem>
      <para>
       Add support for Daitch-Mokotoff Soundex to <link
       linkend="fuzzystrmatch"><application>fuzzystrmatch</application></link>
       (Dag Lem)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-06 [d4bfe4128] autho_explain: Add GUC to log query parameters
-->

     <listitem>
      <para>
       Allow <link
       linkend="auto-explain"><application>auto_explain</application></link>
       to log values passed to parameterized statements (Dagfinn Ilmari
       Mannsåker)
      </para>

      <para>
       This affects queries using server-side <link
       linkend="sql-prepare"><command>PREPARE</command></link>/<link
       linkend="sql-execute"><command>EXECUTE</command></link>
       and client-side parse/bind.  Logging is controlled by <link
       linkend="auto-explain-configuration-parameters-log-parameter-max-length"><literal>auto_explain.log_parameter_max_length</literal></link>;
       by default query parameters will be logged with no length
       restriction.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-26 [9d2d9728b] Make auto_explain print the query identifier in verbose
-->

     <listitem>
      <para>
       Have <link
       linkend="auto-explain"><application>auto_explain</application></link>'s
       <option>log_verbose</option> mode honor the value of <link
       linkend="guc-compute-query-id"><varname>compute_query_id</varname></link>
       (Atsushi Torikoshi)
      </para>

      <para>
       Previously even if
       <varname>compute_query_id</varname> was enabled, <link
       linkend="auto-explain-configuration-parameters-log-verbose"><option>log_verbose</option></link>
       was not showing the query identifier.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-06 [b1665bf01] Allow hyphens in ltree labels
-->

     <listitem>
      <para>
       Change the maximum length of <link
       linkend="ltree"><application>ltree</application></link> labels
       from 256 to 1000 and allow hyphens (Garen Torikian)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-08 [daa8365a9] Reflect normalization of query strings for utilities in
-->

     <listitem>
      <para>
       Have <link
       linkend="pgstatstatements"><structname>pg_stat_statements</structname></link>
       normalize constants used in utility commands (Michael Paquier)
      </para>

      <para>
       Previously constants appeared instead of placeholders, e.g.,
       <literal>$1</literal>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-23 [c31cf1c03] pg_walinspect: Add pg_get_wal_fpi_info()
Author: Michael Paquier <michael@paquier.xyz>
2023-03-10 [9ecb134a9] pg_walinspect: pg_get_wal_fpi_info() -> pg_get_wal_block
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 <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       function <link
       linkend="pgwalinspect-funcs-pg-get-wal-block-info"><function>pg_get_wal_block_info()</function></link>
       to report <acronym>WAL</acronym> block information (Michael Paquier,
       Melanie Plageman, Bharath Rupireddy)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [5c1b66280] Rework design of functions in pg_walinspect
-->

     <listitem>
      <para>
       Change how <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       functions <link
       linkend="pgwalinspect-funcs-pg-get-wal-records-info"><function>pg_get_wal_records_info()</function></link>
       and <link
       linkend="pgwalinspect-funcs-pg-get-wal-stats"><function>pg_get_wal_stats()</function></link>
       interpret ending <acronym>LSN</acronym>s (Bharath Rupireddy)
      </para>

      <para>
       Previously ending <acronym>LSN</acronym>s which represent
       nonexistent <acronym>WAL</acronym> locations would generate
       an error, while they will now be interpreted as the end of the
       <acronym>WAL</acronym>.
      </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.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-19 [50547a3fa] Fix wal_consistency_checking enhanced desc output.
-->

     <listitem>
      <para>
       Add detailed descriptions of <acronym>WAL</acronym> records in <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       and <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       (Melanie Plageman, Peter Geoghegan)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-02 [1fd3dd204] Add bt_multi_page_stats() function to contrib/pageinspec
-->

     <listitem>
      <para>
       Add <link
       linkend="pageinspect"><application>pageinspect</application></link>
       function <link
       linkend="pageinspect-b-tree-funcs"><function>bt_multi_page_stats()</function></link>
       to report statistics on multiple pages (Hamid Akhtar)
      </para>

      <para>
       This is similar to <function>bt_page_stats()</function> except it
       can report on a range of pages.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-02 [1fd3dd204] Add bt_multi_page_stats() function to contrib/pageinspec
-->

     <listitem>
      <para>
       Add empty range output column to <link
       linkend="pageinspect"><application>pageinspect</application></link>
       function <link
       linkend="pageinspect-brin-funcs"><function>brin_page_items()</function></link>
       (Tomas Vondra)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-02-17 [35739b87d] Redesign archive modules
-->

     <listitem>
      <para>
       Redesign archive modules to be more flexible (Nathan Bossart)
      </para>

      <para>
       Initialization changes will require modules written for older
       versions of Postgres to be updated.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-04-06 [1d477a907] Fix row tracking in pg_stat_statements with extended que
-->

     <listitem>
      <para>
       Correct inaccurate <link
       linkend="pgstatstatements"><application>pg_stat_statements</application></link>
       row tracking extended query protocol statements (Sami Imseih)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [f3fa31327] Add pg_buffercache_usage_counts() to contrib/pg_bufferca
-->

     <listitem>
      <para>
       Add <link
       linkend="pgbuffercache"><application>pg_buffercache</application></link>
       function <function>pg_buffercache_usage_counts()</function> to
       report usage totals (Nathan Bossart)
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-13 [2589434ae] pg_buffercache: Add pg_buffercache_summary()
-->

     <listitem>
      <para>
       Add <link
       linkend="pgbuffercache"><application>pg_buffercache</application></link>
       function <function>pg_buffercache_summary()</function> to report
       summarized buffer statistics (Melih Mutlu)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-20 [72a5b1fc8] Add @extschema:name@ and no_relocate options to extensio
-->

     <listitem>
      <para>
       Allow the schemas of required extensions to be
       referenced in extension scripts using the new syntax
       <literal>@extschema:referenced_extension_name@</literal>
       (Regina Obe)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-20 [72a5b1fc8] Add @extschema:name@ and no_relocate options to extensio
-->

     <listitem>
      <para>
       Allow required extensions to
       be marked as non-relocatable using <link
       linkend="extend-extensions-files-no-relocate"><literal>no_relocate</literal></link>
       (Regina Obe)
      </para>

      <para>
       This allows <literal>@extschema:referenced_extension_name@</literal>
       to be treated as a constant for the lifetime of the extension.
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-16-pgfdw">
     <title><link linkend="postgres-fdw"><application>postgres_fdw</application></link></title>

     <itemizedlist>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2023-04-06 [983ec2300] postgres_fdw: Add support for parallel abort.
-->

      <listitem>
       <para>
        Allow <application>postgres_fdw</application> to do aborts in
        parallel (Etsuro Fujita)
       </para>

       <para>
        This is enabled with
        <application>postgres_fdw</application> option <link
        linkend="postgres-fdw-options-transaction-management"><option>parallel_abort</option></link>.
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-12-30 [8ad51b5f4] Sample postgres_fdw tables remotely during ANALYZE
-->

      <listitem>
       <para>
        Make <link linkend="sql-analyze"><command>ANALYZE</command></link>
        on foreign <application>postgres_fdw</application> tables more
        efficient (Tomas Vondra)
       </para>

       <para>
        The <application>postgres_fdw</application> option <link
        linkend="postgres-fdw-options-cost-estimation"><option>analyze_sampling</option></link>
        controls the sampling method.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-17 [31e5b5029] postgres_fdw: be more wary about shippability of reg* co
-->

      <listitem>
       <para>
        Restrict shipment of <link
        linkend="datatype-oid"><type>reg</type></link>* type constants
        in <application>postgres_fdw</application> to those referencing
        built-in objects or extensions marked as shippable (Tom Lane)
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-01-23 [e4602483e] dblink, postgres_fdw: Handle interrupts during connectio
-->

      <listitem>
       <para>
        Have <application>postgres_fdw</application> and <link
        linkend="dblink"><application>dblink</application></link> handle
        interrupts during connection establishment (Andres Freund)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-16-acknowledgements">
   <title>Acknowledgments</title>

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

   <simplelist>
    <member>Abhijit Menon-Sen</member>
    <member>Adam Mackler</member>
    <member>Adrian Klaver</member>
    <member>Ahsan Hadi</member>
    <member>Ajin Cherian</member>
    <member>Ajit Awekar</member>
    <member>Alan Hodgson</member>
    <member>Aleksander Alekseev</member>
    <member>Alex Denman</member>
    <member>Alex Kozhemyakin</member>
    <member>Alexander Korolev</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Pyhalov</member>
    <member>Alexey Borzov</member>
    <member>Alexey Ermakov</member>
    <member>Alexey Makhmutov</member>
    <member>Álvaro Herrera</member>
    <member>Amit Kapila</member>
    <member>Amit Khandekar</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Anastasia Lubennikova</member>
    <member>Anban Company</member>
    <member>Andreas Dijkman</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Scherbaum</member>
    <member>Andrei Zubkov</member>
    <member>Andres Freund</member>
    <member>Andrew Alsup</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Gierth</member>
    <member>Andrew Kesper</member>
    <member>Andrey Borodin</member>
    <member>Andrey Lepikhov</member>
    <member>Andrey Sokolov</member>
    <member>Ankit Kumar Pandey</member>
    <member>Ante Kresic</member>
    <member>Anton Melnikov</member>
    <member>Anton Sidyakin</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Arne Roland</member>
    <member>Artem Anisimov</member>
    <member>Arthur Zakirov</member>
    <member>Ashutosh Bapat</member>
    <member>Ashutosh Sharma</member>
    <member>Asim Praveen</member>
    <member>Atsushi Torikoshi</member>
    <member>Ayaki Tachikake</member>
    <member>Balazs Szilfai</member>
    <member>Benoit Lobréau</member>
    <member>Bernd Helmle</member>
    <member>Bertrand Drouvot</member>
    <member>Bharath Rupireddy</member>
    <member>Bilva Sanaba</member>
    <member>Bob Krier</member>
    <member>Boris Zentner</member>
    <member>Brad Nicholson</member>
    <member>Brar Piening</member>
    <member>Bruce Momjian</member>
    <member>Bruno da Silva</member>
    <member>Carl Sopchak</member>
    <member>Cary Huang</member>
    <member>Changhong Fei</member>
    <member>Chris Travers</member>
    <member>Christoph Berg</member>
    <member>Christophe Pettus</member>
    <member>Corey Huinker</member>
    <member>Craig Ringer</member>
    <member>Curt Kolovson</member>
    <member>Dag Lem</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Watzinger</member>
    <member>Daniel Westermann</member>
    <member>Daniele Varrazzo</member>
    <member>Daniil Anisimov</member>
    <member>Danny Shemesh</member>
    <member>Dave Page</member>
    <member>David Christensen</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Gilman</member>
    <member>David Kimura</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Turon</member>
    <member>David Zhang</member>
    <member>Davinder Singh</member>
    <member>Dean Rasheed</member>
    <member>Denis Laxalde</member>
    <member>Dilip Kumar</member>
    <member>Dimos Stamatakis</member>
    <member>Dmitriy Kuzmin</member>
    <member>Dmitry Astapov</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Koval</member>
    <member>Dong Wook Lee</member>
    <member>Dongming Liu</member>
    <member>Drew DeVault</member>
    <member>Duncan Sands</member>
    <member>Ed Maste</member>
    <member>Egor Chindyaskin</member>
    <member>Ekaterina Kiryanova</member>
    <member>Elena Indrupskaya</member>
    <member>Emmanuel Quincerot</member>
    <member>Eric Mutta</member>
    <member>Erik Rijkers</member>
    <member>Erki Eessaar</member>
    <member>Erwin Brandstetter</member>
    <member>Etsuro Fujita</member>
    <member>Eugeny Zhuzhnev</member>
    <member>Euler Taveira</member>
    <member>Evan Jones</member>
    <member>Evgeny Morozov</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Farias de Oliveira</member>
    <member>Florin Irion</member>
    <member>Franz-Josef Färber</member>
    <member>Garen Torikian</member>
    <member>Georgios Kokolatos</member>
    <member>Gilles Darold</member>
    <member>Greg Stark</member>
    <member>Guillaume Lelarge</member>
    <member>Gunnar Bluth</member>
    <member>Gunnar Morling</member>
    <member>Gurjeet Singh</member>
    <member>Haiyang Wang</member>
    <member>Haiying Tang</member>
    <member>Hamid Akhtar</member>
    <member>Hans Buschmann</member>
    <member>Hao Wu</member>
    <member>Hayato Kuroda</member>
    <member>Heath Lord</member>
    <member>Heikki Linnakangas</member>
    <member>Himanshu Upadhyaya</member>
    <member>Hisahiro Kauchi</member>
    <member>Hongyu Song</member>
    <member>Hubert Lubaczewski</member>
    <member>Hung Nguyen</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Ilya Gladyshev</member>
    <member>Ilya Nenashev</member>
    <member>Isaac Morland</member>
    <member>Israel Barth Rubio</member>
    <member>Jacob Champion</member>
    <member>Jacob Speidel</member>
    <member>Jaime Casanova</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Inform</member>
    <member>James Vanns</member>
    <member>Jan Wieck</member>
    <member>Japin Li</member>
    <member>Jeevan Ladhe</member>
    <member>Jeff Davis</member>
    <member>Jeff Janes</member>
    <member>Jehan-Guillaume de Rorthais</member>
    <member>Jelte Fennema</member>
    <member>Jian He</member>
    <member>Jim Jones</member>
    <member>Jinbao Chen</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Naylor</member>
    <member>Jonathan Katz</member>
    <member>Josef Simanek</member>
    <member>Joseph Koshakow</member>
    <member>Juan José Santamaría Flecha</member>
    <member>Julien Rouhaud</member>
    <member>Julien Roze</member>
    <member>Junwang Zhao</member>
    <member>Justin Pryzby</member>
    <member>Justin Zhang</member>
    <member>Karina Litskevich</member>
    <member>Karl O. Pinc</member>
    <member>Keisuke Kuroda</member>
    <member>Ken Kato</member>
    <member>Kevin McKibbin</member>
    <member>Kieran McCusker</member>
    <member>Kirk Wolak</member>
    <member>Konstantin Knizhnik</member>
    <member>Koshi Shibagaki</member>
    <member>Kotaro Kawamoto</member>
    <member>Kui Liu</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lakshmi Narayanan Sreethar</member>
    <member>Laurence Parry</member>
    <member>Laurenz Albe</member>
    <member>Luca Ferrari</member>
    <member>Lukas Fittl</member>
    <member>Maciek Sakrejda</member>
    <member>Magnus Hagander</member>
    <member>Maja Zaloznik</member>
    <member>Marcel Hofstetter</member>
    <member>Marina Polyakova</member>
    <member>Mark Dilger</member>
    <member>Marko Tiikkaja</member>
    <member>Markus Winand</member>
    <member>Martijn van Oosterhout</member>
    <member>Martin Jurca</member>
    <member>Martin Kalcher</member>
    <member>Mary Xu</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masao Fujii</member>
    <member>Mason Sharp</member>
    <member>Matheus Alcantara</member>
    <member>Mats Kindahl</member>
    <member>Matthias van de Meent</member>
    <member>Matthijs van der Vleuten</member>
    <member>Maxim Orlov</member>
    <member>Maxim Yablokov</member>
    <member>Mehmet Emin Karakas</member>
    <member>Melanie Plageman</member>
    <member>Melih Mutlu</member>
    <member>Micah Gates</member>
    <member>Michael Banck</member>
    <member>Michael Paquier</member>
    <member>Michail Nikolaev</member>
    <member>Michel Pelletier</member>
    <member>Mike Oh</member>
    <member>Mikhail Gribkov</member>
    <member>Mingli Zhang</member>
    <member>Miroslav Bendik</member>
    <member>Mitsuru Hinata</member>
    <member>Myo Wai Thant</member>
    <member>Naeem Akhter</member>
    <member>Naoki Okano</member>
    <member>Nathan Bossart</member>
    <member>Nazir Bilal Yavuz</member>
    <member>Neha Sharma</member>
    <member>Nick Babadzhanian</member>
    <member>Nicola Contu</member>
    <member>Nikhil Shetty</member>
    <member>Nikita Glukhov</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nishant Sharma</member>
    <member>Nitin Jadhav</member>
    <member>Noah Misch</member>
    <member>Noboru Saito</member>
    <member>Noriyoshi Shinoda</member>
    <member>Nuko Yokohama</member>
    <member>Oleg Bartunov</member>
    <member>Oleg Tselebrovskiy</member>
    <member>Olly Betts</member>
    <member>Onder Kalaci</member>
    <member>Onur Tirtir</member>
    <member>Pablo Federico</member>
    <member>Palle Girgensohn</member>
    <member>Paul Guo</member>
    <member>Paul Jungwirth</member>
    <member>Paul Ramsey</member>
    <member>Pavel Borisov</member>
    <member>Pavel Kulakov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Stehule</member>
    <member>Peifeng Qiu</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Smith</member>
    <member>Phil Florent</member>
    <member>Philippe Godfrin</member>
    <member>Platon Pronko</member>
    <member>Przemyslaw Sztoch</member>
    <member>Rachel Heaton</member>
    <member>Ranier Vilela</member>
    <member>Regina Obe</member>
    <member>Reid Thompson</member>
    <member>Reiner Peterke</member>
    <member>Richard Guo</member>
    <member>Riivo Kolka</member>
    <member>Rishu Bagga</member>
    <member>Robert Haas</member>
    <member>Robert Sjöblom</member>
    <member>Robert Treat</member>
    <member>Roberto Mello</member>
    <member>Robins Tharakan</member>
    <member>Roman Zharkov</member>
    <member>Ronan Dunklau</member>
    <member>Rushabh Lathia</member>
    <member>Ryo Matsumura</member>
    <member>Samay Sharma</member>
    <member>Sami Imseih</member>
    <member>Sandeep Thakkar</member>
    <member>Sandro Santilli</member>
    <member>Sebastien Flaesch</member>
    <member>Sébastien Lardière</member>
    <member>Sehrope Sarkuni</member>
    <member>Sergey Belyashov</member>
    <member>Sergey Pankov</member>
    <member>Sergey Shinderuk</member>
    <member>Shi Yu</member>
    <member>Shinya Kato</member>
    <member>Sho Kato</member>
    <member>Shruthi Gowda</member>
    <member>Shveta Mallik</member>
    <member>Simon Riggs</member>
    <member>Sindy Senorita</member>
    <member>Sirisha Chamarthi</member>
    <member>Sravan Kumar</member>
    <member>Stéphane Tachoires</member>
    <member>Stephen Frost</member>
    <member>Steve Chavez</member>
    <member>Stone Tickle</member>
    <member>Sven Klemm</member>
    <member>Takamichi Osumi</member>
    <member>Takeshi Ideriha</member>
    <member>Tatsuhiro Nakamori</member>
    <member>Tatsuo Ishii</member>
    <member>Teja Mupparti</member>
    <member>Tender Wang</member>
    <member>Teodor Sigaev</member>
    <member>Thiago Nunes</member>
    <member>Thom Brown</member>
    <member>Thomas Habets</member>
    <member>Thomas Mc Kay</member>
    <member>Thomas Munro</member>
    <member>Tim Carey-Smith</member>
    <member>Tim Field</member>
    <member>Timo Stolz</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tor Erik Linnerud</member>
    <member>Torsten Förtsch</member>
    <member>Tristan Partin</member>
    <member>Troy Frericks</member>
    <member>Tushar Ahuja</member>
    <member>Valerie Woolard</member>
    <member>Vibhor Kumar</member>
    <member>Victor Spirin</member>
    <member>Victoria Shepard</member>
    <member>Vignesh C</member>
    <member>Vik Fearing</member>
    <member>Vitaly Burovoy</member>
    <member>Vitaly Davydov</member>
    <member>Wang Wei</member>
    <member>Wenjing Zeng</member>
    <member>Whale Song</member>
    <member>Will Mortensen</member>
    <member>Wolfgang Walther</member>
    <member>Xin Wen</member>
    <member>Xing Guo</member>
    <member>Xingwang Xu</member>
    <member>XueJing Zhao</member>
    <member>Yanliang Lei</member>
    <member>Youmiu Mo</member>
    <member>Yugo Nagata</member>
    <member>Yura Sokolov</member>
    <member>Yuta Katsuragi</member>
    <member>Zhen Mingyang</member>
    <member>Zheng Li</member>
    <member>Zhihong Yu</member>
    <member>Zhijie Hou</member>
    <member>Zongliang Quan</member>
    <member>Zuming Jiang</member>
   </simplelist>
  </sect2>

 </sect1>
