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

 <sect1 id="release-17-4">
  <title>Release 17.4</title>

  <formalpara>
  <title>Release date:</title>
  <para>2025-02-20</para>
  </formalpara>

  <para>
   This release contains a few fixes from 17.3.
   For information about new features in major release 17, see
   <xref linkend="release-17"/>.
  </para>

  <sect2 id="release-17-4-migration">
   <title>Migration to Version 17.4</title>

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

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [efdadeb22] 2025-02-14 18:09:19 -0500
Branch: REL_17_STABLE [a92db3d02] 2025-02-14 18:09:21 -0500
Branch: REL_16_STABLE [111f4dd27] 2025-02-14 18:09:23 -0500
Branch: REL_15_STABLE [22ffbbf24] 2025-02-14 18:09:24 -0500
Branch: REL_14_STABLE [985908df1] 2025-02-14 18:09:25 -0500
Branch: REL_13_STABLE [1f7a05324] 2025-02-14 18:09:27 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9f45e6a91] 2025-02-15 16:20:21 -0500
Branch: REL_17_STABLE [3abe6e04c] 2025-02-15 16:20:21 -0500
Branch: REL_16_STABLE [991a60a9f] 2025-02-15 16:20:21 -0500
Branch: REL_15_STABLE [e782a63cc] 2025-02-15 16:20:21 -0500
Branch: REL_14_STABLE [c08309584] 2025-02-15 16:20:21 -0500
Branch: REL_13_STABLE [d6d29b213] 2025-02-15 16:20:21 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a7f95859e] 2025-02-16 12:46:35 -0500
Branch: REL_17_STABLE [3977bd298] 2025-02-16 12:46:35 -0500
Branch: REL_16_STABLE [644b7d686] 2025-02-16 12:46:35 -0500
Branch: REL_15_STABLE [2226a2e26] 2025-02-16 12:46:35 -0500
Branch: REL_14_STABLE [f864a4cdf] 2025-02-16 12:46:35 -0500
Branch: REL_13_STABLE [9f052613e] 2025-02-16 12:46:35 -0500
-->
     <para>
      Improve behavior of <application>libpq</application>'s quoting
      functions (Andres Freund, Tom Lane)
      <ulink url="&commit_baseurl;a92db3d02">&sect;</ulink>
      <ulink url="&commit_baseurl;3abe6e04c">&sect;</ulink>
      <ulink url="&commit_baseurl;3977bd298">&sect;</ulink>
     </para>

     <para>
      The changes made for CVE-2025-1094 had one serious oversight:
      <function>PQescapeLiteral()</function>
      and <function>PQescapeIdentifier()</function> failed to honor their
      string length parameter, instead always reading to the input
      string's trailing null.  This resulted in including unwanted text in
      the output, if the caller intended to truncate the string via the
      length parameter.  With very bad luck it could cause a crash due to
      reading off the end of memory.
     </para>

     <para>
      In addition, modify all these quoting functions so that when invalid
      encoding is detected, an invalid sequence is substituted for just
      the first byte of the presumed character, not all of it.  This
      reduces the risk of problems if a calling application performs
      additional processing on the quoted string.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5b94e2753] 2025-02-12 17:11:43 +0900
Branch: REL_17_STABLE [ff6d9cfcb] 2025-02-12 17:11:47 +0900
-->
     <para>
      Fix small memory leak
      in <application>pg_createsubscriber</application> (Ranier Vilela)
      <ulink url="&commit_baseurl;ff6d9cfcb">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [b64d83115] 2025-02-12 08:15:53 -0500
Branch: REL_17_STABLE [c9a1d2135] 2025-02-12 08:15:53 -0500
Branch: REL_16_STABLE [01cdb98e4] 2025-02-12 08:15:54 -0500
-->
     <para>
      Fix meson build system to correctly detect availability of
      the <filename>bsd_auth.h</filename> system header
      (Nazir Bilal Yavuz)
      <ulink url="&commit_baseurl;c9a1d2135">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-17-3">
  <title>Release 17.3</title>

  <formalpara>
  <title>Release date:</title>
  <para>2025-02-13</para>
  </formalpara>

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

  <sect2 id="release-17-3-migration">
   <title>Migration to Version 17.3</title>

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

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [5dc1e42b4] 2025-02-10 10:03:37 -0500
Branch: REL_17_STABLE [43a77239d] 2025-02-10 10:03:38 -0500
Branch: REL_16_STABLE [92e4170f4] 2025-02-10 10:03:39 -0500
Branch: REL_15_STABLE [370c94d4c] 2025-02-10 10:03:39 -0500
Branch: REL_14_STABLE [e0ef3d776] 2025-02-10 10:03:40 -0500
Branch: REL_13_STABLE [c906bfe1b] 2025-02-10 10:03:40 -0500
Branch: master [4dc289635] 2025-02-10 10:03:37 -0500
Branch: REL_17_STABLE [7d43ca6fe] 2025-02-10 10:03:38 -0500
Branch: REL_16_STABLE [6e05b195d] 2025-02-10 10:03:39 -0500
Branch: REL_15_STABLE [703b3fd5d] 2025-02-10 10:03:39 -0500
Branch: REL_14_STABLE [5bc33cbea] 2025-02-10 10:03:40 -0500
Branch: REL_13_STABLE [db3eb0e82] 2025-02-10 10:03:40 -0500
Branch: master [3e98c8ce5] 2025-02-10 10:03:37 -0500
Branch: REL_17_STABLE [61ad93cdd] 2025-02-10 10:03:38 -0500
Branch: REL_16_STABLE [56aa2dcdd] 2025-02-10 10:03:39 -0500
Branch: REL_15_STABLE [b1756da75] 2025-02-10 10:03:39 -0500
Branch: REL_14_STABLE [2ae54ae17] 2025-02-10 10:03:40 -0500
Branch: REL_13_STABLE [5df4e1632] 2025-02-10 10:03:40 -0500
Branch: master [ac00ff1c9] 2025-02-10 10:03:37 -0500
Branch: REL_17_STABLE [02d4d87ac] 2025-02-10 10:03:38 -0500
Branch: REL_16_STABLE [01784793f] 2025-02-10 10:03:39 -0500
Branch: REL_15_STABLE [de4b92f33] 2025-02-10 10:03:39 -0500
Branch: REL_14_STABLE [46ddf98df] 2025-02-10 10:03:40 -0500
Branch: REL_13_STABLE [4ea3f5ef3] 2025-02-10 10:03:40 -0500
Branch: master [979205e47] 2025-02-10 12:12:14 -0500
Branch: REL_17_STABLE [05abb0f83] 2025-02-10 12:12:53 -0500
Branch: REL_16_STABLE [41343f840] 2025-02-10 12:12:56 -0500
Branch: REL_15_STABLE [a085fa731] 2025-02-10 12:12:58 -0500
Branch: REL_14_STABLE [4a6825c76] 2025-02-10 12:12:59 -0500
Branch: REL_13_STABLE [7beb2af5e] 2025-02-10 12:13:02 -0500
Branch: REL_13_STABLE [00f1a1f66] 2025-02-10 10:03:40 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5bf12323b] 2025-02-10 16:30:03 -0500
Branch: REL_17_STABLE [85c1fcc65] 2025-02-10 16:30:31 -0500
Branch: REL_16_STABLE [0075a5c6c] 2025-02-10 16:30:37 -0500
Branch: REL_15_STABLE [9862de917] 2025-02-10 16:30:54 -0500
Branch: REL_14_STABLE [e1f1b030d] 2025-02-10 16:31:01 -0500
Branch: REL_13_STABLE [f9fceef6e] 2025-02-10 16:31:09 -0500
-->
     <para>
      Harden <function>PQescapeString</function> and allied functions
      against invalidly-encoded input strings (Andres Freund, Noah Misch)
      <ulink url="&commit_baseurl;43a77239d">&sect;</ulink>
      <ulink url="&commit_baseurl;7d43ca6fe">&sect;</ulink>
      <ulink url="&commit_baseurl;61ad93cdd">&sect;</ulink>
      <ulink url="&commit_baseurl;02d4d87ac">&sect;</ulink>
      <ulink url="&commit_baseurl;05abb0f83">&sect;</ulink>
      <ulink url="&commit_baseurl;85c1fcc65">&sect;</ulink>
     </para>

     <para>
      Data-quoting functions supplied by <application>libpq</application>
      now fully check the encoding validity of their input.  If invalid
      characters are detected, they report an error if possible.  For the
      ones that lack an error return convention, the output string is
      adjusted to ensure that the server will report invalid encoding and
      no intervening processing will be fooled by bytes that might happen
      to match single quote, backslash, etc.
     </para>

     <para>
      The purpose of this change is to guard against SQL-injection attacks
      that are possible if one of these functions is used to quote crafted
      input.  There is no hazard when the resulting string is sent
      directly to a <productname>PostgreSQL</productname> server (which
      would check its encoding anyway), but there is a risk when it is
      passed through <application>psql</application> or other client-side
      code.  Historically such code has not carefully vetted encoding, and
      in many cases it's not clear what it should do if it did detect such
      a problem.
     </para>

     <para>
      This fix is effective only if the data-quoting function, the server,
      and any intermediate processing agree on the character encoding
      that's being used.  Applications that insert untrusted input into
      SQL commands should take special care to ensure that that's true.
     </para>

     <para>
      Applications and drivers that quote untrusted input without using
      these <application>libpq</application> functions may be at risk of
      similar problems.  They should first confirm the data is valid in
      the encoding expected by the server.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Stephen Fewer for reporting this problem.
      (CVE-2025-1094)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [a0ff56e2d] 2024-12-12 15:52:04 -0600
Branch: REL_17_STABLE [d09fbf645] 2024-12-12 15:52:04 -0600
-->
     <para>
      Restore auto-truncation of database and user names appearing in
      connection requests (Nathan Bossart)
      <ulink url="&commit_baseurl;d09fbf645">&sect;</ulink>
     </para>

     <para>
      This reverts a v17 change that proved to cause trouble for some
      users.  Over-length names should be truncated in an encoding-aware
      fashion, but for now just return to the former behavior of blind
      truncation at <literal>NAMEDATALEN-1</literal> bytes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [34486b609] 2024-12-28 16:08:50 -0500
Branch: REL_17_STABLE [15b4c46c3] 2024-12-28 16:08:50 -0500
Branch: REL_16_STABLE [41a252c2c] 2024-12-28 16:08:50 -0500
Branch: REL_15_STABLE [3d1ecc92a] 2024-12-28 16:08:50 -0500
Branch: REL_14_STABLE [c58b0c43d] 2024-12-28 16:08:50 -0500
Branch: REL_13_STABLE [70d067cec] 2024-12-28 16:08:50 -0500
-->
     <para>
      Exclude parallel workers from connection privilege checks and limits
      (Tom Lane)
      <ulink url="&commit_baseurl;15b4c46c3">&sect;</ulink>
     </para>

     <para>
      Do not
      check <literal>datallowconn</literal>, <literal>rolcanlogin</literal>,
      and <literal>ACL_CONNECT</literal> privileges when starting a
      parallel worker, instead assuming that it's enough for the leader
      process to have passed similar checks originally.  This avoids, for
      example, unexpected failures of parallelized queries when the leader
      is running as a role that lacks login privilege.  In the same vein,
      enforce <literal>ReservedConnections</literal>,
      <literal>datconnlimit</literal>, and <literal>rolconnlimit</literal>
      limits only against regular backends, and count only regular
      backends while checking if the limits were already reached.  Those
      limits are meant to prevent excessive consumption of process slots
      for regular backends --- but parallel workers and other special
      processes have their own pools of process slots with their own limit
      checks.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1e5ef3a2a] 2024-12-03 15:50:03 +0100
Branch: REL_17_STABLE [5ffbbcfa1] 2024-12-03 15:50:03 +0100
-->
     <para>
      Drop <quote>Lock</quote> suffix from LWLock wait event names
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;5ffbbcfa1">&sect;</ulink>
     </para>

     <para>
      Refactoring unintentionally caused
      the <structname>pg_stat_activity</structname> view to show
      lock-related wait event names with a <quote>Lock</quote> suffix,
      which among other things broke joining it
      to <structname>pg_wait_events</structname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [31b0a8f04] 2024-12-19 11:08:55 -0500
Branch: REL_17_STABLE [9e85b20da] 2024-12-19 11:08:53 -0500
-->
     <para>
      Fix possible failure to return all matching tuples for a btree index
      scan with a ScalarArrayOp (<literal>= ANY</literal>) condition
      (Peter Geoghegan)
      <ulink url="&commit_baseurl;9e85b20da">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [1fe5a347e] 2024-12-09 14:23:21 +1300
Branch: REL_17_STABLE [9d5ce4f1a] 2024-12-09 14:24:07 +1300
Branch: REL_16_STABLE [c1d6506ac] 2024-12-09 14:24:34 +1300
Branch: REL_15_STABLE [d54378e98] 2024-12-09 14:24:54 +1300
-->
     <para>
      Fix possible re-use of stale results in window aggregates (David
      Rowley)
      <ulink url="&commit_baseurl;9d5ce4f1a">&sect;</ulink>
     </para>

     <para>
      A window aggregate with a <quote>run condition</quote> optimization
      and a pass-by-reference result type might incorrectly return the
      result from the previous partition instead of performing a fresh
      calculation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [578a7fe7b] 2024-12-21 23:42:39 +0200
Branch: REL_17_STABLE [7cfdb4d1e] 2024-12-21 23:42:52 +0200
Branch: REL_16_STABLE [9d8ab2c46] 2024-12-21 23:42:55 +0200
Branch: REL_15_STABLE [acd5c28db] 2024-12-21 23:42:57 +0200
Branch: REL_14_STABLE [41eafbb49] 2024-12-21 23:42:59 +0200
Branch: REL_13_STABLE [9c1afd344] 2024-12-21 23:45:56 +0200
-->
     <para>
      Keep <varname>TransactionXmin</varname> in sync
      with <varname>MyProc-&gt;xmin</varname> (Heikki Linnakangas)
      <ulink url="&commit_baseurl;7cfdb4d1e">&sect;</ulink>
     </para>

     <para>
      This oversight could permit a process to try to access data that had
      already been vacuumed away.  One known consequence is
      transient <quote>could not access status of transaction</quote>
      errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [af8cd1639] 2025-01-14 14:28:49 +0200
Branch: REL_17_STABLE [96e61b279] 2025-01-14 14:35:11 +0200
Branch: REL_16_STABLE [91fc447c2] 2025-01-14 14:41:01 +0200
Branch: REL_15_STABLE [ce7c406f0] 2025-01-14 14:29:11 +0200
Branch: REL_14_STABLE [fce17c3a5] 2025-01-14 14:29:13 +0200
Branch: REL_13_STABLE [f217c4105] 2025-01-14 18:54:56 +0200
-->
     <para>
      Fix race condition that could cause failure to add a newly-inserted
      catalog entry to a catalog cache list (Heikki Linnakangas)
      <ulink url="&commit_baseurl;96e61b279">&sect;</ulink>
     </para>

     <para>
      This could result, for example, in failure to use a newly-created
      function within an existing session.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [81772a495] 2025-01-25 11:28:14 -0800
Branch: REL_17_STABLE [1587f7b9f] 2025-01-25 11:28:18 -0800
Branch: master [d28cd3e7b] 2025-01-25 11:28:14 -0800
Branch: REL_17_STABLE [f4af4515b] 2025-01-25 11:28:18 -0800
Branch: REL_16_STABLE [9311fcb86] 2025-01-25 11:28:18 -0800
Branch: REL_15_STABLE [dc02b98bd] 2025-01-25 11:28:19 -0800
Branch: REL_14_STABLE [25e99483c] 2025-01-25 11:28:19 -0800
Branch: REL_13_STABLE [8bfd2ceba] 2025-01-25 11:28:19 -0800
-->
     <para>
      Prevent possible catalog corruption when a system catalog is
      vacuumed concurrently with an update (Noah Misch)
      <ulink url="&commit_baseurl;1587f7b9f">&sect;</ulink>
      <ulink url="&commit_baseurl;f4af4515b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [38c579b08] 2024-12-20 23:57:02 +1300
Branch: REL_17_STABLE [0350b876b] 2024-12-20 23:57:18 +1300
Branch: REL_16_STABLE [ba02d24ba] 2024-12-20 23:57:26 +1300
Branch: REL_15_STABLE [fb540b6aa] 2024-12-20 23:57:34 +1300
Branch: REL_14_STABLE [23c743b64] 2024-12-20 23:57:53 +1300
Branch: REL_13_STABLE [228091216] 2024-12-20 23:58:08 +1300
Branch: REL_17_STABLE [66aaabe7a] 2025-01-08 10:43:40 +1300
Branch: REL_16_STABLE [c957d7444] 2025-01-08 10:46:45 +1300
Branch: REL_15_STABLE [3181befdc] 2025-01-08 10:47:43 +1300
Branch: REL_14_STABLE [f154f028d] 2025-01-08 10:48:01 +1300
Branch: REL_13_STABLE [a1d17a894] 2025-01-08 10:48:57 +1300
Branch: REL_17_STABLE [45aef9f6b] 2025-01-08 17:02:30 +1300
Branch: REL_16_STABLE [9defaaa1d] 2025-01-08 17:03:25 +1300
Branch: REL_15_STABLE [190054e61] 2025-01-08 17:03:45 +1300
Branch: REL_14_STABLE [049c8cb9a] 2025-01-08 17:04:26 +1300
Branch: REL_13_STABLE [417d41c65] 2025-01-08 17:14:15 +1300
-->
     <para>
      Fix data corruption when relation truncation fails (Thomas Munro)
      <ulink url="&commit_baseurl;0350b876b">&sect;</ulink>
      <ulink url="&commit_baseurl;66aaabe7a">&sect;</ulink>
      <ulink url="&commit_baseurl;45aef9f6b">&sect;</ulink>
     </para>

     <para>
      The filesystem calls needed to perform relation truncation could
      fail, leaving inconsistent state on disk (for example, effectively
      reviving deleted data).  We can't really prevent that, but we can
      recover by dint of making such failures into PANICs, so that
      consistency is restored by replaying from WAL up to just before the
      attempted truncation.  This isn't a hugely desirable behavior, but
      such failures are rare enough that it seems an acceptable solution.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [75818b3af] 2024-12-03 10:12:05 +1300
Branch: REL_17_STABLE [d4ffbf47b] 2024-12-03 10:19:47 +1300
Branch: REL_16_STABLE [ad5aa7bfd] 2024-12-03 10:20:10 +1300
Branch: REL_15_STABLE [a501fe5a9] 2024-12-03 10:20:22 +1300
Branch: REL_14_STABLE [7d0b91a28] 2024-12-03 10:12:56 +1300
Branch: REL_13_STABLE [1168acbca] 2024-12-03 10:13:49 +1300
-->
     <para>
      Prevent checkpoints from starting during relation truncation
      (Robert Haas)
      <ulink url="&commit_baseurl;d4ffbf47b">&sect;</ulink>
     </para>

     <para>
      This avoids a race condition wherein the modified file might not get
      fsync'd before completing the checkpoint, creating a risk of data
      corruption if the operating system crashes soon after.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [ff90ee614] 2024-12-28 07:16:22 -0800
Branch: REL_17_STABLE [fa6131377] 2024-12-28 07:16:26 -0800
Branch: REL_16_STABLE [5d94aa4dc] 2024-12-28 07:16:26 -0800
Branch: REL_15_STABLE [83bb52375] 2024-12-28 07:16:26 -0800
Branch: REL_14_STABLE [536acda0b] 2024-12-28 07:16:27 -0800
Branch: REL_13_STABLE [102546322] 2024-12-28 07:16:27 -0800
-->
     <para>
      Avoid possibly losing an update of
      <structname>pg_database</structname>.<structfield>datfrozenxid</structfield>
      when <command>VACUUM</command> runs concurrently with
      a <command>REASSIGN OWNED</command> that changes that database's
      owner (Kirill Reshke)
      <ulink url="&commit_baseurl;fa6131377">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ea68ea632] 2025-01-22 11:58:20 -0500
Branch: REL_17_STABLE [2b72fed2d] 2025-01-22 11:58:20 -0500
Branch: REL_16_STABLE [8c57f5485] 2025-01-22 11:58:20 -0500
Branch: REL_15_STABLE [cdeed4de7] 2025-01-22 11:58:20 -0500
Branch: REL_14_STABLE [308599305] 2025-01-22 11:58:20 -0500
Branch: REL_13_STABLE [001c09d8b] 2025-01-22 11:58:20 -0500
-->
     <para>
      Fix incorrect <structfield>tg_updatedcols</structfield> values
      passed to <literal>AFTER UPDATE</literal> triggers (Tom Lane)
      <ulink url="&commit_baseurl;2b72fed2d">&sect;</ulink>
     </para>

     <para>
      In some cases the <structfield>tg_updatedcols</structfield> bitmap
      could describe the set of columns updated by an earlier command in
      the same transaction, fooling the trigger into doing the wrong
      thing.
     </para>

     <para>
      Also, prevent memory bloat caused by making too many copies of
      the <structfield>tg_updatedcols</structfield> bitmap.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [9b21f203d] 2025-01-21 14:53:46 +0100
Branch: REL_17_STABLE [2f30847d1] 2025-01-21 14:53:46 +0100
Branch: REL_16_STABLE [ddab512eb] 2025-01-21 14:53:46 +0100
Branch: REL_15_STABLE [1bc092519] 2025-01-21 14:53:46 +0100
-->
     <para>
      Fix detach of a partition that has its own foreign-key constraint
      referencing a partitioned table (Amul Sul)
      <ulink url="&commit_baseurl;2f30847d1">&sect;</ulink>
     </para>

     <para>
      In common cases, foreign keys are defined on a partitioned table's
      top level; but if instead one is defined on a partition and
      references a partitioned table, and the referencing partition is
      detached, the relevant <structname>pg_constraint</structname>
      entries were updated incorrectly.  This led to errors
      like <quote>could not find ON INSERT check triggers of foreign key
      constraint</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [09d09d429] 2024-11-27 13:50:27 +0100
Branch: REL_17_STABLE [6e793582b] 2024-11-27 13:50:27 +0100
-->
     <para>
      Fix <function>pg_get_constraintdef</function>'s support
      for <literal>NOT NULL</literal> constraints on domains
      (Álvaro Herrera)
      <ulink url="&commit_baseurl;6e793582b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3220ceaf7] 2024-12-07 13:12:32 -0500
Branch: REL_17_STABLE [765f76d8c] 2024-12-07 13:12:32 -0500
Branch: REL_16_STABLE [26c233b8b] 2024-12-07 13:12:32 -0500
Branch: REL_15_STABLE [d2f59497a] 2024-12-07 13:12:32 -0500
Branch: REL_14_STABLE [5882a4ba0] 2024-12-07 13:12:32 -0500
Branch: REL_13_STABLE [f2eba400b] 2024-12-07 13:12:32 -0500
-->
     <para>
      Fix mis-processing of <function>to_timestamp</function>'s
      <literal>FF<replaceable>n</replaceable></literal> format codes
      (Tom Lane)
      <ulink url="&commit_baseurl;765f76d8c">&sect;</ulink>
     </para>

     <para>
      An integer format code immediately
      preceding <literal>FF<replaceable>n</replaceable></literal> would
      consume all available digits, leaving none
      for <literal>FF<replaceable>n</replaceable></literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [a93e2a1e2] 2025-01-12 13:35:12 +0000
Branch: REL_17_STABLE [d037cc2af] 2025-01-12 13:36:44 +0000
-->
     <para>
      When deparsing a <literal>PASSING</literal> clause in a SQL/JSON
      query function, ensure that variable names are double-quoted when
      necessary (Dean Rasheed)
      <ulink url="&commit_baseurl;d037cc2af">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [d673eefd4] 2025-01-12 12:54:32 +0000
Branch: REL_17_STABLE [61b12135f] 2025-01-12 12:56:52 +0000
Branch: REL_16_STABLE [77763f3be] 2025-01-12 12:58:14 +0000
Branch: REL_15_STABLE [7c0379516] 2025-01-12 12:59:40 +0000
Branch: REL_14_STABLE [dc8cd9cd0] 2025-01-12 13:01:22 +0000
Branch: REL_13_STABLE [8f137f038] 2025-01-12 13:02:56 +0000
-->
     <para>
      When deparsing an <literal>XMLTABLE()</literal> expression, ensure
      that XML namespace names are double-quoted when necessary (Dean
      Rasheed)
      <ulink url="&commit_baseurl;61b12135f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [27a1f8d10] 2025-01-10 22:02:58 +0100
Branch: REL_17_STABLE [8ed9bf0a3] 2025-01-10 22:02:58 +0100
Branch: REL_16_STABLE [c35bbdfbc] 2025-01-10 22:02:58 +0100
Branch: REL_15_STABLE [830215a4c] 2025-01-10 22:02:58 +0100
Branch: REL_14_STABLE [83ffb9f20] 2025-01-10 22:02:58 +0100
Branch: REL_13_STABLE [84b8f6d9f] 2025-01-10 22:02:58 +0100
Branch: master [97698cc51] 2025-01-12 23:44:39 +0100
Branch: REL_17_STABLE [dc24c9ad5] 2025-01-12 23:44:39 +0100
Branch: REL_16_STABLE [116036d81] 2025-01-12 23:44:39 +0100
Branch: REL_15_STABLE [9ad7a32b2] 2025-01-12 23:44:39 +0100
Branch: REL_14_STABLE [9e596a099] 2025-01-12 23:44:39 +0100
Branch: REL_13_STABLE [7b1f50d8c] 2025-01-12 23:44:39 +0100
-->
     <para>
      Include the <literal>ldapscheme</literal> option
      in <function>pg_hba_file_rules()</function> output (Laurenz Albe)
      <ulink url="&commit_baseurl;8ed9bf0a3">&sect;</ulink>
      <ulink url="&commit_baseurl;dc24c9ad5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [231006451] 2025-01-10 14:30:25 +1300
Branch: REL_17_STABLE [5db9367e5] 2025-01-10 14:31:31 +1300
-->
     <para>
      Fix planning of pre-sorted <literal>UNION</literal> operations for
      cases where the input column datatypes don't all match (David
      Rowley)
      <ulink url="&commit_baseurl;5db9367e5">&sect;</ulink>
     </para>

     <para>
      This error could lead to sorting data with the wrong sort operator,
      with consequences ranging from no visible problem to core dumps.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a43d7a8c7] 2024-11-19 18:26:19 -0500
Branch: REL_17_STABLE [c1ebef3c1] 2024-11-19 18:26:19 -0500
Branch: REL_16_STABLE [f286f64bc] 2024-11-19 18:26:19 -0500
Branch: REL_15_STABLE [fd3383ff1] 2024-11-19 18:26:19 -0500
Branch: REL_14_STABLE [44a4a521d] 2024-11-19 18:26:19 -0500
Branch: REL_13_STABLE [6b66dba3f] 2024-11-19 18:26:19 -0500
-->
     <para>
      Don't merge <literal>UNION</literal> operations if their column
      collations aren't consistent (Tom Lane)
      <ulink url="&commit_baseurl;c1ebef3c1">&sect;</ulink>
     </para>

     <para>
      Previously we ignored collations when deciding if it's safe to
      merge <literal>UNION</literal> steps into a single
      N-way <literal>UNION</literal> operation.  This was arguably valid
      before the introduction of nondeterministic collations, but it's not
      anymore, since the collation in use can affect the definition of
      uniqueness.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5c9d8636d] 2024-11-28 17:33:16 -0500
Branch: REL_17_STABLE [72822a99d] 2024-11-28 17:33:16 -0500
Branch: REL_16_STABLE [85990e2fd] 2024-11-28 17:33:16 -0500
Branch: master [e032e4c7d] 2024-11-30 12:42:19 -0500
Branch: REL_17_STABLE [78883cd90] 2024-11-30 12:42:20 -0500
Branch: REL_16_STABLE [7b456f040] 2024-11-30 12:42:20 -0500
-->
     <para>
      Prevent <quote>wrong varnullingrels</quote> planner errors after
      pulling up a subquery that's underneath an outer join (Tom Lane)
      <ulink url="&commit_baseurl;72822a99d">&sect;</ulink>
      <ulink url="&commit_baseurl;78883cd90">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [e28033fe1] 2025-01-02 18:06:00 +0900
Branch: REL_17_STABLE [297b280ab] 2025-01-02 17:59:32 +0900
Branch: REL_16_STABLE [a1a9120c7] 2025-01-02 18:02:02 +0900
-->
     <para>
      Ignore nulling-relation marker bits when looking up statistics
      (Richard Guo)
      <ulink url="&commit_baseurl;297b280ab">&sect;</ulink>
     </para>

     <para>
      This oversight could lead to failure to use relevant statistics
      about expressions, or to <quote>corrupt MVNDistinct
      entry</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [bf826ea06] 2025-01-16 20:40:07 -0500
Branch: REL_17_STABLE [0671a71e0] 2025-01-16 20:40:07 -0500
Branch: REL_16_STABLE [94c02bd33] 2025-01-16 20:40:07 -0500
Branch: REL_15_STABLE [724ebebb1] 2025-01-16 20:40:07 -0500
Branch: REL_14_STABLE [5f725648f] 2025-01-16 20:40:07 -0500
Branch: REL_13_STABLE [45004f527] 2025-01-16 20:40:07 -0500
-->
     <para>
      Fix missed expression processing for partition pruning steps
      (Tom Lane)
      <ulink url="&commit_baseurl;0671a71e0">&sect;</ulink>
     </para>

     <para>
      This oversight could lead to <quote>unrecognized node type</quote>
      errors, and perhaps other problems, in queries accessing partitioned
      tables.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2bdf1b2a2] 2024-12-28 12:30:42 -0500
Branch: REL_17_STABLE [14141bbbc] 2024-12-28 12:30:42 -0500
-->
     <para>
      Give the slotsync worker process its own process slot (Tom Lane, Hou
      Zhijie)
      <ulink url="&commit_baseurl;14141bbbc">&sect;</ulink>
     </para>

     <para>
      This was overlooked in the addition of the slotsync worker, with the
      result that its process slot effectively came out of the pool meant
      for regular backend processes.  This could result in failure to
      launch the worker, or to subsequent failures of connection requests
      that should have succeeded according to the configured settings,
      if the number of regular backend processes
      approached <varname>max_connections</varname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [84f1b0b03] 2024-12-17 15:24:45 -0600
Branch: REL_17_STABLE [18452b70a] 2024-12-17 15:24:45 -0600
Branch: REL_16_STABLE [2a7402322] 2024-12-17 15:24:45 -0600
Branch: REL_15_STABLE [9f7b7d516] 2024-12-17 15:24:45 -0600
Branch: REL_14_STABLE [84dc1303c] 2024-12-17 15:24:45 -0600
Branch: REL_13_STABLE [853cef097] 2024-12-17 15:24:45 -0600
-->
     <para>
      Allow dshash tables to grow past 1GB (Matthias van de Meent)
      <ulink url="&commit_baseurl;18452b70a">&sect;</ulink>
     </para>

     <para>
      This avoids errors like <quote>invalid DSA memory alloc request
      size</quote>.  The case can occur for example in transactions that
      process several million tables.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [720e52984] 2025-01-14 15:12:56 +0900
Branch: REL_17_STABLE [e027ee990] 2025-01-14 15:13:14 +0900
Branch: REL_16_STABLE [bfda7d8dd] 2025-01-14 15:13:15 +0900
Branch: REL_15_STABLE [9e9f30139] 2025-01-14 15:13:17 +0900
Branch: REL_14_STABLE [e35ff6520] 2025-01-14 15:13:19 +0900
Branch: REL_13_STABLE [332023e2d] 2025-01-14 15:13:20 +0900
-->
     <para>
      Avoid possible integer overflow
      in <function>bringetbitmap()</function> (James Hunter, Evgeniy
      Gorbanyov)
      <ulink url="&commit_baseurl;e027ee990">&sect;</ulink>
     </para>

     <para>
      Since the result is only used for statistical purposes, the effects
      of this error were mostly cosmetic.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [69ab44651] 2025-01-09 07:39:05 +0100
Branch: REL_17_STABLE [ffd9b8134] 2025-01-09 07:44:30 +0100
-->
     <para>
      Correct miscalculation of SLRU bank numbers (Yura Sokolov)
      <ulink url="&commit_baseurl;ffd9b8134">&sect;</ulink>
     </para>

     <para>
      This error led to using a smaller number of banks than intended,
      causing more contention but no functional misbehavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [73f6b9a3b] 2025-01-20 16:43:29 +1300
Branch: REL_17_STABLE [44f400fbc] 2025-01-20 16:43:39 +1300
Branch: REL_16_STABLE [b4b52c911] 2025-01-20 16:55:11 +1300
-->
     <para>
      Ensure that an already-set process latch doesn't prevent the
      postmaster from noticing socket events (Thomas Munro)
      <ulink url="&commit_baseurl;44f400fbc">&sect;</ulink>
     </para>

     <para>
      An extremely heavy workload of backends launching workers and
      workers exiting could prevent the postmaster from responding to
      incoming client connections in a timely fashion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6cf1647d8] 2025-01-20 09:29:42 +0900
Branch: REL_17_STABLE [e6767c0ed] 2025-01-20 09:30:33 +0900
Branch: REL_16_STABLE [2c2e1d4f4] 2025-01-20 09:30:36 +0900
Branch: REL_15_STABLE [26554facc] 2025-01-20 09:30:37 +0900
Branch: REL_14_STABLE [a2d4f806c] 2025-01-20 09:30:39 +0900
Branch: REL_13_STABLE [0f0431e91] 2025-01-20 09:30:40 +0900
-->
     <para>
      Prevent streaming standby servers from looping infinitely when
      reading a WAL record that crosses pages (Kyotaro Horiguchi,
      Alexander Kukushkin)
      <ulink url="&commit_baseurl;e6767c0ed">&sect;</ulink>
     </para>

     <para>
      This would happen when the record's continuation is on a page that
      needs to be read from a different WAL source.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [8b9cbf492] 2024-12-10 13:51:59 -0800
Branch: REL_17_STABLE [4bd9de3f4] 2024-12-10 13:52:02 -0800
Branch: REL_16_STABLE [ac4a2b403] 2024-12-10 13:52:02 -0800
Branch: REL_15_STABLE [839da50bd] 2024-12-10 13:52:02 -0800
Branch: REL_14_STABLE [315264d70] 2024-12-10 13:52:02 -0800
Branch: REL_13_STABLE [6151769f6] 2024-12-10 13:52:02 -0800
-->
     <para>
      Fix unintended promotion of FATAL errors to PANIC during early
      process startup (Noah Misch)
      <ulink url="&commit_baseurl;4bd9de3f4">&sect;</ulink>
     </para>

     <para>
      This fixes some unlikely cases that would result in <quote>PANIC:
      proc_exit() called in child process</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3f9b96217] 2024-12-07 15:56:28 -0500
Branch: REL_17_STABLE [ec7b89cc5] 2024-12-07 15:56:28 -0500
Branch: REL_16_STABLE [be5db08ed] 2024-12-07 15:56:28 -0500
Branch: REL_15_STABLE [0e4fa06ba] 2024-12-07 15:56:28 -0500
Branch: REL_14_STABLE [1a34cf0f4] 2024-12-07 15:56:28 -0500
Branch: REL_13_STABLE [725d98102] 2024-12-07 15:56:28 -0500
Branch: master [c82003760] 2024-12-07 14:28:16 -0500
Branch: REL_17_STABLE [5b44a317a] 2024-12-07 14:28:16 -0500
Branch: REL_16_STABLE [faad01835] 2024-12-07 14:28:16 -0500
Branch: REL_15_STABLE [d40191467] 2024-12-07 14:28:16 -0500
Branch: REL_14_STABLE [d9d5e1b48] 2024-12-07 14:28:16 -0500
Branch: REL_13_STABLE [531cbd8b7] 2024-12-07 14:28:16 -0500
-->
     <para>
      Fix cases where an operator family member operator or support
      procedure could become a dangling reference (Tom Lane)
      <ulink url="&commit_baseurl;ec7b89cc5">&sect;</ulink>
      <ulink url="&commit_baseurl;5b44a317a">&sect;</ulink>
     </para>

     <para>
      In some cases a data type could be dropped while references to its
      OID still remain in <structname>pg_amop</structname>
      or <structname>pg_amproc</structname>.  While that caused no
      immediate issues, an attempt to drop the owning operator family
      would fail, and <application>pg_dump</application> would produce
      bogus output when dumping the operator family.  This fix causes
      creation and modification of operator families/classes to add
      needed dependency entries so that dropping a data type will also
      drop any dependent operator family elements.  That does not help
      vulnerable pre-existing operator families, though, so a band-aid has
      also been added to <command>DROP OPERATOR FAMILY</command> to
      prevent failure when dropping a family that has dangling members.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [c9b3d4909] 2024-12-30 13:33:09 +0900
Branch: REL_17_STABLE [836435424] 2024-12-30 13:33:58 +0900
Branch: REL_16_STABLE [e3a27fd06] 2024-12-30 13:33:59 +0900
Branch: REL_15_STABLE [da8bd5d42] 2024-12-30 13:34:01 +0900
Branch: REL_14_STABLE [c53d90bb4] 2025-01-08 08:47:19 +0900
Branch: REL_13_STABLE [a786cf04d] 2025-01-08 08:47:24 +0900
Author: Michael Paquier <michael@paquier.xyz>
Branch: REL_17_STABLE [bbe68c13a] 2024-12-23 12:48:06 +0900
Branch: REL_16_STABLE [4d45e7490] 2024-12-23 12:48:08 +0900
Branch: REL_15_STABLE [6c9b39754] 2024-12-23 12:48:09 +0900
Branch: REL_14_STABLE [cfd6cbcf9] 2024-12-23 12:48:10 +0900
Branch: REL_13_STABLE [ba230ce40] 2024-12-23 12:48:12 +0900
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [ea792bfd9] 2024-11-21 15:14:02 +0900
Branch: REL_17_STABLE [afe9b0d9f] 2024-11-21 15:14:11 +0900
Branch: REL_16_STABLE [e749eaf46] 2024-11-21 15:14:13 +0900
Branch: REL_15_STABLE [6fc30c24c] 2024-11-21 15:14:15 +0900
-->
     <para>
      Fix multiple memory leaks in logical decoding output (Vignesh C,
      Masahiko Sawada, Boyu Yang)
      <ulink url="&commit_baseurl;836435424">&sect;</ulink>
      <ulink url="&commit_baseurl;bbe68c13a">&sect;</ulink>
      <ulink url="&commit_baseurl;afe9b0d9f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [73a392d23] 2024-12-09 20:58:23 +0100
Branch: REL_17_STABLE [9add1bbfa] 2024-12-09 20:58:23 +0100
Branch: REL_16_STABLE [be9dac9af] 2024-12-09 20:58:23 +0100
-->
     <para>
      Fix small memory leak when
      updating the <varname>application_name</varname>
      or <varname>cluster_name</varname> settings (Tofig Aliev)
      <ulink url="&commit_baseurl;9add1bbfa">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [3c5f9f12c] 2024-12-03 17:50:57 +0100
Branch: REL_17_STABLE [9abdc1841] 2024-12-03 17:50:57 +0100
-->
     <para>
      Avoid crash when a background process tries to check a new value
      of <varname>synchronized_standby_slots</varname> (Álvaro Herrera)
      <ulink url="&commit_baseurl;9abdc1841">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b9aa4166f] 2025-01-30 15:36:44 -0500
Branch: REL_17_STABLE [1e25cdb21] 2025-01-30 15:36:07 -0500
Branch: REL_16_STABLE [f7a08b6e9] 2025-01-30 15:36:07 -0500
Branch: REL_15_STABLE [b296e55b4] 2025-01-30 15:36:07 -0500
Branch: REL_14_STABLE [6a33bb35c] 2025-01-30 15:36:07 -0500
Branch: REL_13_STABLE [49a38238e] 2025-01-30 15:36:07 -0500
-->
     <para>
      Avoid integer overflow while
      testing <varname>wal_skip_threshold</varname> condition (Tom Lane)
      <ulink url="&commit_baseurl;1e25cdb21">&sect;</ulink>
     </para>

     <para>
      A transaction that created a very large relation could mistakenly
      decide to ensure durability by copying the relation into WAL instead
      of fsync'ing it, thereby negating the point
      of <varname>wal_skip_threshold</varname>.  (This only matters
      when <varname>wal_level</varname> is set
      to <literal>minimal</literal>, else a WAL copy is required anyway.)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [4ba84de45] 2024-11-25 14:42:35 -0800
Branch: REL_17_STABLE [718af10da] 2024-11-25 14:42:38 -0800
Branch: REL_16_STABLE [c1285bbeb] 2024-11-25 14:42:39 -0800
Branch: REL_15_STABLE [941e0c0df] 2024-11-25 14:42:39 -0800
Branch: REL_14_STABLE [2690a4f5d] 2024-11-25 14:42:40 -0800
Branch: REL_13_STABLE [01745fb04] 2024-11-25 14:42:40 -0800
-->
     <para>
      Fix unsafe order of operations during cache lookups (Noah Misch)
      <ulink url="&commit_baseurl;718af10da">&sect;</ulink>
     </para>

     <para>
      The only known consequence was a usually-harmless <quote>you don't
      own a lock of type ExclusiveLock</quote> warning
      during <command>GRANT TABLESPACE</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [ccc8194e4] 2024-12-04 16:58:25 +0700
Branch: REL_17_STABLE [83ce20d67] 2024-12-04 16:59:12 +0700
-->
     <para>
      Avoid potential use-after-free in parallel vacuum (Vallimaharajan G,
      John Naylor)
      <ulink url="&commit_baseurl;83ce20d67">&sect;</ulink>
     </para>

     <para>
      This bug seems to have no consequences in standard builds, but it's
      theoretically a hazard.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [78c09bd9f] 2024-11-22 15:29:47 +1300
Branch: REL_17_STABLE [8a9a51518] 2024-11-22 15:29:28 +1300
Branch: REL_16_STABLE [6de14dbb3] 2024-11-22 15:29:18 +1300
Branch: REL_15_STABLE [15ab513fe] 2024-11-22 15:29:00 +1300
Branch: REL_14_STABLE [7ca388fd0] 2024-11-22 15:30:37 +1300
Branch: REL_13_STABLE [8aefd8b6f] 2024-11-22 15:32:02 +1300
-->
     <para>
      Fix possible <quote>failed to resolve name</quote> failures when
      using JIT on older ARM platforms (Thomas Munro)
      <ulink url="&commit_baseurl;8a9a51518">&sect;</ulink>
     </para>

     <para>
      This could occur as a consequence of inconsistency about the default
      setting of <option>-moutline-atomics</option> between gcc and clang.
      At least Debian and Ubuntu are known to ship gcc and clang compilers
      that target armv8-a but differ on the use of outline atomics by
      default.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [8f4ee9626] 2024-12-19 13:11:39 +1300
Branch: REL_17_STABLE [7b8d45d27] 2024-12-19 13:12:18 +1300
Branch: REL_16_STABLE [093fc156b] 2024-12-19 13:12:41 +1300
Branch: REL_15_STABLE [ef178d38b] 2024-12-19 13:13:01 +1300
Branch: REL_14_STABLE [bdb07d241] 2024-12-19 13:13:31 +1300
Branch: REL_13_STABLE [2c7887c9d] 2024-12-19 13:13:51 +1300
-->
     <para>
      Fix assertion failure in <literal>WITH RECURSIVE ... UNION</literal>
      queries (David Rowley)
      <ulink url="&commit_baseurl;7b8d45d27">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [94131cd53] 2024-11-20 12:03:47 -0500
Branch: REL_17_STABLE [fea81aee8] 2024-11-20 12:03:47 -0500
Branch: REL_16_STABLE [fe084039e] 2024-11-20 12:03:47 -0500
Branch: REL_15_STABLE [9b9689e26] 2024-11-20 12:03:47 -0500
Branch: REL_14_STABLE [3eb26524c] 2024-11-20 12:03:47 -0500
Branch: REL_13_STABLE [630520c22] 2024-11-20 12:03:47 -0500
-->
     <para>
      Avoid assertion failure in rule deparsing if a set operation leaf
      query contains set operations (Man Zeng, Tom Lane)
      <ulink url="&commit_baseurl;fea81aee8">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3eea7a0c9] 2024-12-09 14:38:19 -0500
Branch: REL_17_STABLE [556f7b7bc] 2024-12-09 14:38:19 -0500
Branch: REL_16_STABLE [bb649b553] 2024-12-09 14:38:19 -0500
Branch: REL_15_STABLE [4089b9bd6] 2024-12-09 14:38:19 -0500
Branch: REL_14_STABLE [8a95ad3b2] 2024-12-09 14:38:19 -0500
Branch: REL_13_STABLE [4d20bad5e] 2024-12-09 14:38:19 -0500
-->
     <para>
      Avoid edge-case assertion failure in parallel query startup (Tom Lane)
      <ulink url="&commit_baseurl;556f7b7bc">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [da99fedf8] 2024-12-09 10:45:28 +0900
Branch: REL_17_STABLE [dc5f90541] 2024-12-09 10:46:03 +0900
Branch: REL_16_STABLE [ae77bcc3a] 2024-12-09 10:46:09 +0900
Branch: REL_15_STABLE [1df1e1e78] 2024-12-09 10:46:10 +0900
-->
     <para>
      Fix assertion failure at shutdown when writing out the statistics
      file (Michael Paquier)
      <ulink url="&commit_baseurl;dc5f90541">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [235328ee4] 2025-01-29 13:35:43 +0700
Branch: REL_17_STABLE [6555fe197] 2025-01-29 13:55:43 +0700
-->
     <para>
      Avoid valgrind complaints about string hashing code (John Naylor)
      <ulink url="&commit_baseurl;6555fe197">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5b8728cd7] 2024-11-25 18:09:09 -0500
Branch: REL_17_STABLE [97be02ad0] 2024-11-25 18:09:10 -0500
Branch: REL_16_STABLE [4aba56adc] 2024-11-25 18:09:10 -0500
Branch: REL_15_STABLE [80cd33bad] 2024-11-25 18:09:10 -0500
Branch: REL_14_STABLE [a1168855e] 2024-11-25 18:09:10 -0500
Branch: REL_13_STABLE [48a6cd1ae] 2024-11-25 18:09:11 -0500
-->
     <para>
      In <function>NULLIF()</function>, avoid passing a read-write
      expanded object pointer to the data type's equality function
      (Tom Lane)
      <ulink url="&commit_baseurl;97be02ad0">&sect;</ulink>
     </para>

     <para>
      The equality function could modify or delete the object if it's
      given a read-write pointer, which would be bad if we decide to
      return it as the <function>NULLIF()</function> result.  There is
      probably no problem with any built-in equality function, but it's
      easy to demonstrate a failure with one coded in PL/pgSQL.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0da39aa76] 2025-01-29 15:31:55 -0500
Branch: REL_17_STABLE [6e41e9e5e] 2025-01-29 15:31:55 -0500
Branch: REL_16_STABLE [6655d931c] 2025-01-29 15:31:55 -0500
Branch: REL_15_STABLE [bb85d0935] 2025-01-29 15:31:55 -0500
Branch: REL_14_STABLE [c05268e6e] 2025-01-29 15:31:55 -0500
-->
     <para>
      Ensure that expression preprocessing is applied to a default null
      value in <command>INSERT</command> (Tom Lane)
      <ulink url="&commit_baseurl;6e41e9e5e">&sect;</ulink>
     </para>

     <para>
      If the target column is of a domain type, the planner must insert a
      coerce-to-domain step not just a null constant, and this expression
      missed going through some required processing steps.  There is no
      known consequence with domains based on core data types, but in
      theory an error could occur with domains based on extension types.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [ee937f040] 2024-11-22 16:28:24 +0200
Branch: REL_17_STABLE [969583553] 2024-11-22 16:29:22 +0200
-->
     <para>
      Avoid data loss when starting a bulk write on a relation fork that
      already contains data (Matthias van de Meent)
      <ulink url="&commit_baseurl;969583553">&sect;</ulink>
     </para>

     <para>
      Any pre-existing data was overwritten with zeroes.  This is not an
      issue for core <productname>PostgreSQL</productname>, which never
      does that.  Some extensions would like to, however.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: REL_17_STABLE [9af2b3435] 2025-02-06 11:35:51 -0800
-->
     <para>
      Avoid crash if a server process tried to iterate over a shared radix
      tree that it didn't create (Masahiko Sawada)
      <ulink url="&commit_baseurl;9af2b3435">&sect;</ulink>
     </para>

     <para>
      There is no code in core <productname>PostgreSQL</productname> that
      does this, but an extension might wish to.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [29dfffae0] 2025-01-11 11:45:56 -0500
Branch: REL_17_STABLE [e98df02df] 2025-01-11 11:45:56 -0500
Branch: REL_16_STABLE [33a4e656d] 2025-01-11 11:45:56 -0500
Branch: REL_15_STABLE [71bb9c4b2] 2025-01-11 11:45:56 -0500
Branch: REL_14_STABLE [bcb4db0d3] 2025-01-11 11:45:56 -0500
Branch: REL_13_STABLE [02a38bc84] 2025-01-11 11:45:56 -0500
-->
     <para>
      Repair memory leaks in PL/Python (Mat Arye, Tom Lane)
      <ulink url="&commit_baseurl;e98df02df">&sect;</ulink>
     </para>

     <para>
      Repeated use of <function>PLyPlan.execute</function>
      or <function>plpy.cursor</function> resulted in memory leakage for
      the duration of the calling PL/Python function.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [32a2aa77e] 2024-11-25 11:44:29 +0100
Branch: REL_17_STABLE [f979197eb] 2024-11-25 12:27:10 +0100
Branch: REL_16_STABLE [07c77803c] 2024-11-25 12:27:19 +0100
Branch: REL_15_STABLE [a5f9cbde9] 2024-11-25 12:27:26 +0100
Branch: REL_14_STABLE [17d081a6f] 2024-11-25 13:11:18 +0100
Branch: REL_13_STABLE [f230e27a2] 2024-11-25 13:11:49 +0100
-->
     <para>
      Fix PL/Tcl to compile with Tcl 9 (Peter Eisentraut)
      <ulink url="&commit_baseurl;f979197eb">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2f696453d] 2024-12-01 14:15:37 -0500
Branch: REL_17_STABLE [a963abd54] 2024-12-01 14:15:37 -0500
Branch: REL_16_STABLE [cca34f68c] 2024-12-01 14:15:37 -0500
Branch: REL_15_STABLE [60b47525c] 2024-12-01 14:15:37 -0500
Branch: REL_14_STABLE [52c7a44e9] 2024-12-01 14:15:37 -0500
Branch: REL_13_STABLE [e359cbb84] 2024-12-01 14:15:37 -0500
-->
     <para>
      In the <application>ecpg</application> preprocessor, fix possible
      misprocessing of cursors that reference out-of-scope variables
      (Tom Lane)
      <ulink url="&commit_baseurl;a963abd54">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [94b914f60] 2025-01-15 01:23:02 +0900
Branch: REL_17_STABLE [ba2dbedd5] 2025-01-15 01:24:24 +0900
Branch: REL_16_STABLE [5c7c34db2] 2025-01-15 01:25:05 +0900
Branch: REL_15_STABLE [71ef47cf0] 2025-01-15 01:25:19 +0900
Branch: REL_14_STABLE [d06ab3c0c] 2025-01-15 01:25:31 +0900
Branch: REL_13_STABLE [226c9048d] 2025-01-15 01:25:52 +0900
-->
     <para>
      In <application>ecpg</application>, fix compile-time warnings about
      unsupported use of <literal>COPY ... FROM STDIN</literal> (Ryo
      Kanbayashi)
      <ulink url="&commit_baseurl;ba2dbedd5">&sect;</ulink>
     </para>

     <para>
      Previously, the intended warning was not issued due to a typo.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6cddecdfb] 2025-01-29 14:24:36 -0500
Branch: REL_17_STABLE [0b713b94b] 2025-01-29 14:24:36 -0500
Branch: REL_16_STABLE [998c4fc7c] 2025-01-29 14:24:36 -0500
Branch: REL_15_STABLE [b17e3970c] 2025-01-29 14:24:36 -0500
Branch: REL_14_STABLE [54f9afea7] 2025-01-29 14:24:36 -0500
Branch: REL_13_STABLE [98df8bace] 2025-01-29 14:24:36 -0500
-->
     <para>
      Fix <application>psql</application> to safely handle file path names
      that are encoded in SJIS (Tom Lane)
      <ulink url="&commit_baseurl;0b713b94b">&sect;</ulink>
     </para>

     <para>
      Some two-byte characters in SJIS have a second byte that is equal to
      ASCII backslash (<literal>\</literal>).  These characters were
      corrupted by path name normalization, preventing access to files
      whose names include such characters.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [25ec329af] 2024-11-28 09:14:41 +0100
Branch: REL_17_STABLE [4527b9e26] 2024-11-28 12:09:53 +0100
-->
     <para>
      Add <application>psql</application> tab completion for <literal>COPY
      (MERGE INTO)</literal> (Jian He)
      <ulink url="&commit_baseurl;4527b9e26">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9a45a89c3] 2025-01-14 18:50:24 -0500
Branch: REL_17_STABLE [a0dfeae0d] 2025-01-14 18:50:24 -0500
Branch: REL_16_STABLE [b935691b8] 2025-01-14 18:50:24 -0500
Branch: REL_15_STABLE [a3b709cf7] 2025-01-14 18:50:24 -0500
Branch: REL_14_STABLE [02e69313a] 2025-01-14 18:50:24 -0500
Branch: REL_13_STABLE [cfd7aadeb] 2025-01-14 18:50:24 -0500
-->
     <para>
      Fix use of wrong version of <function>pqsignal()</function>
      in <application>pgbench</application>
      and <application>psql</application> (Fujii Masao, Tom Lane)
      <ulink url="&commit_baseurl;a0dfeae0d">&sect;</ulink>
     </para>

     <para>
      This error could lead to misbehavior when using
      the <option>-T</option> option in <application>pgbench</application>
      or the <command>\watch</command> command
      in <application>psql</application>, due to interrupted system calls
      not being resumed as expected.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [530f89e64] 2024-12-15 14:14:14 -0500
Branch: REL_17_STABLE [ff9dc96f3] 2024-12-15 14:14:15 -0500
Branch: REL_16_STABLE [076b09123] 2024-12-15 14:14:15 -0500
Branch: REL_15_STABLE [ff88db910] 2024-12-15 14:14:15 -0500
Branch: REL_14_STABLE [2a23dbcf3] 2024-12-15 14:14:15 -0500
Branch: REL_13_STABLE [ec0dc2c59] 2024-12-15 14:14:15 -0500
-->
     <para>
      Fix misexecution of some nested <command>\if</command> constructs
      in <application>pgbench</application> (Michail Nikolaev)
      <ulink url="&commit_baseurl;ff9dc96f3">&sect;</ulink>
     </para>

     <para>
      An <command>\if</command> command appearing within a false
      (not-being-executed) <command>\if</command> branch was incorrectly
      treated the same as <command>\elif</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [af35fe501] 2024-11-27 23:01:53 +0900
Branch: REL_17_STABLE [adb103fca] 2024-11-27 23:03:04 +0900
Branch: REL_16_STABLE [1cf646957] 2024-11-27 23:03:44 +0900
Branch: REL_15_STABLE [1e46f7351] 2024-11-27 23:04:29 +0900
Branch: REL_14_STABLE [0f13e1a78] 2024-11-27 23:04:55 +0900
Branch: REL_13_STABLE [f1cb5e51f] 2024-11-27 23:05:24 +0900
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fb056564e] 2025-02-07 13:41:42 -0500
Branch: REL_17_STABLE [e35d396ec] 2025-02-07 13:41:42 -0500
Branch: REL_16_STABLE [21b815f92] 2025-02-07 13:41:42 -0500
Branch: REL_15_STABLE [499d1cf55] 2025-02-07 13:41:43 -0500
Branch: REL_14_STABLE [5addea71c] 2025-02-07 13:41:43 -0500
Branch: REL_13_STABLE [b6decfc1d] 2025-02-07 13:41:43 -0500
-->
     <para>
      In <application>pgbench</application>, fix possible misdisplay of
      progress messages during table initialization (Yushi Ogiwara, Tatsuo
      Ishii, Fujii Masao)
      <ulink url="&commit_baseurl;adb103fca">&sect;</ulink>
      <ulink url="&commit_baseurl;e35d396ec">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [ff1975ddd] 2025-02-05 00:45:49 +0200
Branch: REL_17_STABLE [1b8a9533f] 2025-02-05 00:45:43 +0200
Branch: REL_16_STABLE [d54d5668b] 2025-02-05 00:45:37 +0200
Branch: REL_15_STABLE [f1e0b078b] 2025-02-05 00:45:29 +0200
Branch: REL_14_STABLE [f2205448b] 2025-02-05 00:45:16 +0200
Branch: REL_13_STABLE [c24311c1f] 2025-02-05 00:46:06 +0200
-->
     <para>
      Make <application>pg_controldata</application> more robust against
      corrupted <filename>pg_control</filename> files (Ilyasov Ian, Anton
      Voloshin)
      <ulink url="&commit_baseurl;1b8a9533f">&sect;</ulink>
     </para>

     <para>
      Since <application>pg_controldata</application> will attempt to
      print the contents of <filename>pg_control</filename> even if the
      CRC check fails, it must take care not to misbehave for invalid
      field values.  This patch fixes some issues triggered by invalid
      timestamps and apparently-negative WAL segment sizes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7b8cb9cd6] 2024-12-13 14:21:36 -0500
Branch: REL_17_STABLE [ad950ea98] 2024-12-13 14:21:36 -0500
Branch: REL_16_STABLE [782cc1aa3] 2024-12-13 14:21:36 -0500
Branch: REL_15_STABLE [6978129b4] 2024-12-13 14:21:36 -0500
Branch: REL_14_STABLE [c7f3c414f] 2024-12-13 14:21:36 -0500
Branch: REL_13_STABLE [b6df2d6e5] 2024-12-13 14:21:36 -0500
-->
     <para>
      Fix possible crash in <application>pg_dump</application> with
      identity sequences attached to tables that are extension members
      (Tom Lane)
      <ulink url="&commit_baseurl;ad950ea98">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3f0632470] 2024-12-17 22:31:26 -0500
Branch: REL_17_STABLE [04b860198] 2024-12-17 22:31:26 -0500
Branch: REL_16_STABLE [8cfff087b] 2024-12-17 22:31:26 -0500
-->
     <para>
      Fix memory leak in <application>pg_restore</application>
      with zstd-compressed data (Tom Lane)
      <ulink url="&commit_baseurl;04b860198">&sect;</ulink>
     </para>

     <para>
      The leak was per-decompression-operation, so would be most
      noticeable with a dump containing many tables or large objects.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [970b97eeb] 2025-01-09 16:04:23 +1300
Branch: REL_17_STABLE [faee3185a] 2025-01-09 16:05:01 +1300
Branch: REL_16_STABLE [be7489662] 2025-01-09 16:05:08 +1300
Branch: REL_15_STABLE [6b6901a26] 2025-01-09 16:05:16 +1300
Branch: REL_14_STABLE [8f40d4612] 2025-01-09 16:05:25 +1300
Branch: REL_13_STABLE [bd0564f61] 2025-01-09 16:05:36 +1300
Branch: master [026762dae] 2025-01-09 15:00:58 +1300
Branch: REL_17_STABLE [af109e339] 2025-01-09 15:00:23 +1300
Branch: REL_16_STABLE [0bff6f1da] 2025-01-09 14:59:47 +1300
Branch: REL_15_STABLE [70a7a3761] 2025-01-09 14:58:18 +1300
Branch: REL_14_STABLE [1636c5e56] 2025-01-09 14:57:52 +1300
Branch: REL_13_STABLE [d02486cc8] 2025-01-09 14:57:02 +1300
-->
     <para>
      Fix <application>pg_basebackup</application> to correctly
      handle <filename>pg_wal.tar</filename> files exceeding 2GB on
      Windows (Davinder Singh, Thomas Munro)
      <ulink url="&commit_baseurl;faee3185a">&sect;</ulink>
      <ulink url="&commit_baseurl;af109e339">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [969bbd0fa] 2024-12-14 16:07:18 -0500
Branch: REL_17_STABLE [3652de36e] 2024-12-14 16:07:18 -0500
Branch: REL_16_STABLE [31daa10fa] 2024-12-14 16:07:18 -0500
-->
     <para>
      Use SQL-standard function bodies in the declarations
      of <filename>contrib/earthdistance</filename>'s SQL-language
      functions (Tom Lane, Ronan Dunklau)
      <ulink url="&commit_baseurl;3652de36e">&sect;</ulink>
     </para>

     <para>
      This change allows their references
      to <filename>contrib/cube</filename> to be resolved during extension
      creation, reducing the risk of search-path-based failures and
      possible attacks.
     </para>

     <para>
      In particular, this restores their usability in contexts like
      generated columns, for which <productname>PostgreSQL</productname>
      v17 restricts the search path on security grounds.  We have received
      reports of databases failing to be upgraded to v17 because of that.
      This patch has been included in v16 to provide a workaround:
      updating the <filename>earthdistance</filename> extension to this
      version beforehand should allow an upgrade to succeed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [957ba9ff1] 2024-12-17 17:48:55 +0100
Branch: REL_17_STABLE [3668c1d50] 2024-12-17 17:50:13 +0100
-->
     <para>
      Detect version mismatch
      between <filename>contrib/pageinspect</filename>'s SQL declarations
      and the underlying shared library (Tomas Vondra)
      <ulink url="&commit_baseurl;3668c1d50">&sect;</ulink>
     </para>

     <para>
      Previously, such a mismatch could result in a crash while
      calling <function>brin_page_items()</function>.  Instead throw an
      error recommending updating the extension.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c431986de] 2024-12-23 15:14:30 -0500
Branch: REL_17_STABLE [89962bfef] 2024-12-23 15:14:30 -0500
-->
     <para>
      When trying to cancel a remote query
      in <filename>contrib/postgres_fdw</filename>, re-issue the cancel
      request a few times if it didn't seem to do anything (Tom Lane)
      <ulink url="&commit_baseurl;89962bfef">&sect;</ulink>
     </para>

     <para>
      This fixes a race condition where we might try to cancel a just-sent
      query before the remote server has started to process it, so that
      the initial cancel request is ignored.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5980f1884] 2024-11-25 12:50:17 -0500
Branch: REL_17_STABLE [e266a0ed6] 2024-11-25 12:50:17 -0500
Branch: REL_16_STABLE [1f4aadec4] 2024-11-25 12:50:17 -0500
Branch: REL_15_STABLE [851c6ff18] 2024-11-25 12:50:17 -0500
Branch: REL_14_STABLE [2fc0199a5] 2024-11-25 12:50:17 -0500
Branch: REL_13_STABLE [32057a0f7] 2024-11-25 12:50:17 -0500
-->
     <para>
      Update configuration probes that determine the compiler switches
      needed to access ARM CRC instructions (Tom Lane)
      <ulink url="&commit_baseurl;e266a0ed6">&sect;</ulink>
     </para>

     <para>
      On ARM platforms where the baseline CPU target lacks CRC
      instructions, we need to supply a <option>-march</option> switch to
      persuade the compiler to compile such instructions.  Recent versions
      of gcc reject the value we were trying, leading to silently falling
      back to software CRC.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: REL_17_STABLE [0951d4ee4] 2025-02-07 15:09:13 +0100
Branch: REL_16_STABLE [60516fc8b] 2025-02-07 15:09:13 +0100
-->
     <para>
      Fix meson build system to support old OpenSSL libraries on Windows
      (Darek Slusarczyk)
      <ulink url="&commit_baseurl;0951d4ee4">&sect;</ulink>
     </para>

     <para>
      Add support for the legacy library
      names <filename>ssleay32</filename>
      and <filename>libeay32</filename>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [2571c1d5c] 2024-12-25 18:14:18 +0200
Branch: REL_17_STABLE [c80acbc6f] 2024-12-25 18:14:26 +0200
Branch: REL_16_STABLE [4e0d71ff2] 2024-12-25 18:14:30 +0200
Branch: master [07f902bd7] 2024-12-25 19:22:25 +0200
Branch: REL_17_STABLE [d8b0c6411] 2024-12-25 19:22:33 +0200
Branch: REL_16_STABLE [643efb18b] 2024-12-25 19:22:41 +0200
-->
     <para>
      In Windows builds using meson, ensure all libcommon and libpgport
      functions are exported (Vladlen Popolitov, Heikki Linnakangas)
      <ulink url="&commit_baseurl;c80acbc6f">&sect;</ulink>
      <ulink url="&commit_baseurl;d8b0c6411">&sect;</ulink>
     </para>

     <para>
      This fixes <quote>unresolved external symbol</quote> build errors
      for extensions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master Release: REL_17_BR [7c655a04a] 2024-05-26 17:34:45 -0400
Branch: REL_16_STABLE [1250adfdf] 2024-11-26 15:41:58 -0500
-->
     <para>
      Fix meson configuration process to correctly detect
      OSSP's <filename>uuid.h</filename> header file under MSVC
      (Andrew Dunstan)
      <ulink url="&commit_baseurl;7c655a04a">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [4ee130c6e] 2024-11-26 18:09:05 +0100
Branch: REL_17_STABLE [e00c1e249] 2024-11-26 18:09:14 +0100
Branch: REL_16_STABLE [766b0b40a] 2024-11-26 18:09:23 +0100
-->
     <para>
      When building with meson, install <filename>pgevent</filename>
      in <replaceable>pkglibdir</replaceable>
      not <replaceable>bindir</replaceable> (Peter Eisentraut)
      <ulink url="&commit_baseurl;e00c1e249">&sect;</ulink>
     </para>

     <para>
      This matches the behavior of the make-based build system and the old
      MSVC build system.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [02ed3c2bd] 2025-01-24 10:26:12 +0100
Branch: REL_17_STABLE [24c5b73eb] 2025-01-24 10:26:59 +0100
Branch: REL_16_STABLE [155d6162e] 2025-01-24 10:55:24 +0100
-->
     <para>
      When building with meson, install <filename>sepgsql.sql</filename>
      under <filename>share/contrib/</filename>
      not <filename>share/extension/</filename> (Peter Eisentraut)
      <ulink url="&commit_baseurl;24c5b73eb">&sect;</ulink>
     </para>

     <para>
      This matches what the make-based build system does.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [60c513f8f] 2025-01-20 16:49:15 -0500
Branch: REL_17_STABLE [e292ba333] 2025-01-20 16:49:15 -0500
Branch: REL_16_STABLE [d62403c51] 2025-01-20 16:49:15 -0500
Branch: REL_15_STABLE [48bc95d0d] 2025-01-20 16:49:15 -0500
Branch: REL_14_STABLE [20b4819d0] 2025-01-20 16:49:15 -0500
Branch: REL_13_STABLE [6397819c8] 2025-01-20 16:49:15 -0500
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2025a for DST law changes in Paraguay, plus historical
      corrections for the Philippines (Tom Lane)
      <ulink url="&commit_baseurl;e292ba333">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-17-2">
  <title>Release 17.2</title>

  <formalpara>
  <title>Release date:</title>
  <para>2024-11-21</para>
  </formalpara>

  <para>
   This release contains a few fixes from 17.1.
   For information about new features in major release 17, see
   <xref linkend="release-17"/>.
  </para>

  <sect2 id="release-17-2-migration">
   <title>Migration to Version 17.2</title>

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

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_17_STABLE [6bfacd368] 2024-11-16 12:58:26 -0500
Branch: REL_16_STABLE [ee33d5847] 2024-11-16 12:58:26 -0500
Branch: REL_15_STABLE [17db248f3] 2024-11-16 12:58:26 -0500
Branch: REL_14_STABLE [099e711b7] 2024-11-16 12:58:26 -0500
-->
     <para>
      Repair ABI break for extensions that work with
      struct <structname>ResultRelInfo</structname> (Tom Lane)
      <ulink url="&commit_baseurl;6bfacd368">&sect;</ulink>
     </para>

     <para>
      Last week's minor releases unintentionally broke binary
      compatibility with <application>timescaledb</application> and
      several other extensions.  Restore the affected structure to its
      previous size, so that such extensions need not be rebuilt.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [7b88529f4] 2024-11-15 20:39:56 -0800
Branch: REL_17_STABLE [1c05004a8] 2024-11-15 20:39:59 -0800
Branch: REL_16_STABLE [b0918c128] 2024-11-15 20:39:59 -0800
Branch: REL_15_STABLE [edf80895f] 2024-11-15 20:39:59 -0800
Branch: REL_14_STABLE [be062bfa5] 2024-11-15 20:40:00 -0800
Branch: REL_13_STABLE [07c6e0f61] 2024-11-15 20:40:00 -0800
Branch: REL_12_STABLE [c46333865] 2024-11-15 20:40:00 -0800
-->
     <para>
      Restore functionality of <command>ALTER {ROLE|DATABASE} SET
      role</command> (Tom Lane, Noah Misch)
      <ulink url="&commit_baseurl;1c05004a8">&sect;</ulink>
     </para>

     <para>
      The fix for CVE-2024-10978 accidentally caused settings
      for <varname>role</varname> to not be applied if they come from
      non-interactive sources, including previous <command>ALTER
      {ROLE|DATABASE}</command> commands and
      the <varname>PGOPTIONS</varname> environment variable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [e5ed873b1] 2024-11-15 17:06:11 -0800
Branch: REL_17_STABLE [568e78a65] 2024-11-15 17:06:08 -0800
Branch: REL_16_STABLE [f35391133] 2024-11-15 17:06:05 -0800
Branch: REL_15_STABLE [91771b3fb] 2024-11-15 17:06:02 -0800
Branch: REL_14_STABLE [26c4e8968] 2024-11-15 17:06:00 -0800
Branch: REL_13_STABLE [15dc1abb1] 2024-11-15 17:05:57 -0800
-->
     <para>
      Fix cases where a logical replication
      slot's <structfield>restart_lsn</structfield> could go backwards
      (Masahiko Sawada)
      <ulink url="&commit_baseurl;568e78a65">&sect;</ulink>
     </para>

     <para>
      Previously, restarting logical replication could sometimes cause the
      slot's restart point to be recomputed as an older value than had
      previously been advertised
      in <structname>pg_replication_slots</structname>.  This is bad,
      since for example WAL files might have been removed on the basis of
      the later <structfield>restart_lsn</structfield> value, in which
      case replication would fail to restart.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [90bcc7c2d] 2024-11-15 12:53:12 +0100
Branch: REL_17_STABLE [cb844d66b] 2024-11-15 12:53:12 +0100
Branch: REL_16_STABLE [ea1649c35] 2024-11-15 12:53:12 +0100
Branch: REL_15_STABLE [e28cf2fbc] 2024-11-15 12:53:12 +0100
Branch: REL_14_STABLE [ba2535841] 2024-11-15 12:53:12 +0100
-->
     <para>
      Avoid deleting still-needed WAL files
      during <application>pg_rewind</application>
      (Polina Bungina, Alexander Kukushkin)
      <ulink url="&commit_baseurl;cb844d66b">&sect;</ulink>
     </para>

     <para>
      Previously, in unlucky cases, it was possible
      for <application>pg_rewind</application> to remove important WAL
      files from the rewound demoted primary.  In particular this happens
      if those files have been marked for archival (i.e.,
      their <filename>.ready</filename> files were created) but not yet
      archived.  Then the newly promoted node no longer has such files
      because of them having been recycled, but likely they are needed
      for recovery in the demoted node.
      If <application>pg_rewind</application> removes them, recovery is
      not possible anymore.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [818119afc] 2024-11-15 11:31:58 +0900
Branch: REL_17_STABLE [1d6a03ea4] 2024-11-15 11:32:13 +0900
Branch: REL_16_STABLE [afa20845d] 2024-11-15 11:32:16 +0900
Branch: REL_15_STABLE [154c5b42a] 2024-11-15 11:32:18 +0900
-->
     <para>
      Fix race conditions associated with dropping shared statistics
      entries (Kyotaro Horiguchi, Michael Paquier)
      <ulink url="&commit_baseurl;1d6a03ea4">&sect;</ulink>
     </para>

     <para>
      These bugs could lead to loss of statistics data, assertion
      failures, or <quote>can only drop stats once</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [93063e2e4] 2024-11-12 20:57:45 -0500
Branch: REL_17_STABLE [7af6d1306] 2024-11-12 20:57:43 -0500
Branch: REL_16_STABLE [05aac2e83] 2024-11-12 20:57:41 -0500
Branch: REL_15_STABLE [16a2bb079] 2024-11-12 20:57:39 -0500
Branch: REL_14_STABLE [2a30b6836] 2024-11-12 20:57:37 -0500
Branch: REL_13_STABLE [e493ea866] 2024-11-12 20:57:35 -0500
-->
     <para>
      Count index scans in <filename>contrib/bloom</filename> indexes in
      the statistics views, such as the
      <structname>pg_stat_user_indexes</structname>.<structfield>idx_scan</structfield>
      counter (Masahiro Ikeda)
      <ulink url="&commit_baseurl;7af6d1306">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [db22b9002] 2024-11-12 01:44:20 +0200
Branch: REL_17_STABLE [a6fa869cf] 2024-11-12 01:51:20 +0200
Branch: REL_16_STABLE [b242aba02] 2024-11-12 01:53:40 +0200
Branch: REL_15_STABLE [713b8546a] 2024-11-12 01:54:30 +0200
Branch: REL_14_STABLE [247e7647f] 2024-11-12 01:54:35 +0200
Branch: REL_13_STABLE [5411e8213] 2024-11-12 01:54:38 +0200
-->
     <para>
      Fix crash when checking to see if an index's opclass options have
      changed (Alexander Korotkov)
      <ulink url="&commit_baseurl;a6fa869cf">&sect;</ulink>
     </para>

     <para>
      Some forms of <command>ALTER TABLE</command> would fail if the
      table has an index with non-default operator class options.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b69bdcee9] 2024-11-15 18:23:38 -0500
Branch: REL_17_STABLE [5f28e6ba7] 2024-11-15 18:23:38 -0500
Branch: REL_16_STABLE [b6312becc] 2024-11-15 18:23:38 -0500
Branch: REL_15_STABLE [2496c3f6f] 2024-11-15 18:23:38 -0500
Branch: REL_14_STABLE [2bdd3b248] 2024-11-15 18:23:38 -0500
-->
     <para>
      Avoid assertion failure caused by disconnected NFA sub-graphs in
      regular expression parsing (Tom Lane)
      <ulink url="&commit_baseurl;5f28e6ba7">&sect;</ulink>
     </para>

     <para>
      This bug does not appear to have any visible consequences in
      non-assert builds.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-17-1">
  <title>Release 17.1</title>

  <formalpara>
  <title>Release date:</title>
  <para>2024-11-14</para>
  </formalpara>

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

  <sect2 id="release-17-1-migration">
   <title>Migration to Version 17.1</title>

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

   <para>
    However, if you have ever detached a partition from a partitioned
    table that has a foreign-key reference to another partitioned table,
    and not dropped the former partition, then you may have catalog and/or
    data corruption to repair, as detailed in the fifth changelog entry
    below.
   </para>

   <para>
    Also, in the uncommon case that a
    database's <varname>LC_CTYPE</varname> setting is <literal>C</literal>
    while its <varname>LC_COLLATE</varname> setting is some other locale,
    indexes on textual columns should be reindexed, as described in the
    sixth changelog entry below.
   </para>
  </sect2>

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

   <itemizedlist>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [cd7ab5753] 2024-11-11 09:00:00 -0600
Branch: REL_17_STABLE [edcda9bb4] 2024-11-11 09:00:00 -0600
Branch: REL_16_STABLE [562289460] 2024-11-11 09:00:00 -0600
Branch: REL_15_STABLE [6db5ea8de] 2024-11-11 09:00:00 -0600
Branch: REL_14_STABLE [4e51030af] 2024-11-11 09:00:00 -0600
Branch: REL_13_STABLE [952ff31e2] 2024-11-11 09:00:00 -0600
Branch: REL_12_STABLE [448525e8a] 2024-11-11 09:00:00 -0600
-->
     <para>
      Ensure cached plans are marked as dependent on the calling role when
      RLS applies to a non-top-level table reference (Nathan Bossart)
      <ulink url="&commit_baseurl;edcda9bb4">&sect;</ulink>
     </para>

     <para>
      If a CTE, subquery, sublink, security invoker view, or coercion
      projection in a query references a table with row-level security
      policies, we neglected to mark the resulting plan as potentially
      dependent on which role is executing it.  This could lead to later
      query executions in the same session using the wrong plan, and then
      returning or hiding rows that should have been hidden or returned
      instead.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Wolfgang Walther for reporting this problem.
      (CVE-2024-10976)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [bf8835ea9] 2024-11-11 10:19:52 +0900
Branch: REL_17_STABLE [a5cc4c667] 2024-11-11 10:19:56 +0900
Branch: REL_16_STABLE [67d28bd02] 2024-11-11 10:19:58 +0900
Branch: REL_15_STABLE [d2c3e31c1] 2024-11-11 10:19:59 +0900
Branch: REL_14_STABLE [e6c945476] 2024-11-11 10:20:01 +0900
Branch: REL_13_STABLE [7b49707b7] 2024-11-11 10:20:02 +0900
Branch: REL_12_STABLE [2a951ef0a] 2024-11-11 10:20:03 +0900
-->
     <para>
      Make <application>libpq</application> discard error messages
      received during SSL or GSS protocol negotiation (Jacob Champion)
      <ulink url="&commit_baseurl;a5cc4c667">&sect;</ulink>
     </para>

     <para>
      An error message received before encryption negotiation is completed
      might have been injected by a man-in-the-middle, rather than being
      real server output.  Reporting it opens the door to various security
      hazards; for example, the message might spoof a query result that a
      careless user could mistake for correct output.  The best answer
      seems to be to discard such data and rely only
      on <application>libpq</application>'s own report of the connection
      failure.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Jacob Champion for reporting this problem.
      (CVE-2024-10977)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5a2fed911] 2024-11-11 10:29:54 -0500
Branch: REL_17_STABLE [cd82afdda] 2024-11-11 10:29:54 -0500
Branch: REL_16_STABLE [ae340d031] 2024-11-11 10:29:54 -0500
Branch: REL_15_STABLE [a5d2e6205] 2024-11-11 10:29:54 -0500
Branch: REL_14_STABLE [2a68808e2] 2024-11-11 10:29:54 -0500
Branch: REL_13_STABLE [76123ded6] 2024-11-11 10:29:54 -0500
Branch: REL_12_STABLE [4c9d96f74] 2024-11-11 10:29:54 -0500
Branch: master [73c9f91a1] 2024-11-11 17:05:53 -0500
Branch: REL_17_STABLE [f4f5d27d8] 2024-11-11 17:05:53 -0500
Branch: REL_16_STABLE [95f5a5237] 2024-11-11 17:05:53 -0500
Branch: REL_15_STABLE [109a32380] 2024-11-11 17:05:53 -0500
Branch: REL_14_STABLE [00b94e8e2] 2024-11-11 17:05:53 -0500
Branch: REL_13_STABLE [dc7378793] 2024-11-11 17:05:53 -0500
Branch: REL_12_STABLE [0edad8654] 2024-11-11 17:05:53 -0500
-->
     <para>
      Fix unintended interactions between <command>SET SESSION
      AUTHORIZATION</command> and <command>SET ROLE</command> (Tom Lane)
      <ulink url="&commit_baseurl;cd82afdda">&sect;</ulink>
      <ulink url="&commit_baseurl;f4f5d27d8">&sect;</ulink>
     </para>

     <para>
      The SQL standard mandates that <command>SET SESSION
      AUTHORIZATION</command> have a side-effect of doing <command>SET
      ROLE NONE</command>.  Our implementation of that was flawed,
      creating more interaction between the two settings than intended.
      Notably, rolling back a transaction that had done <command>SET
      SESSION AUTHORIZATION</command> would revert <literal>ROLE</literal>
      to <literal>NONE</literal> even if that had not been the previous
      state, so that the effective user ID might now be different from
      what it had been before the transaction.  Transiently
      setting <varname>session_authorization</varname> in a
      function <literal>SET</literal> clause had a similar effect.
      A related bug was that if a parallel worker
      inspected <literal>current_setting('role')</literal>, it
      saw <literal>none</literal> even when it should see something else.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Tom Lane for reporting this problem.
      (CVE-2024-10978)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [b7e3a52a8] 2024-11-11 06:23:43 -0800
Branch: REL_17_STABLE [3ebcfa54d] 2024-11-11 06:23:46 -0800
Branch: REL_16_STABLE [8fe3e697a] 2024-11-11 06:23:47 -0800
Branch: REL_15_STABLE [e530835c6] 2024-11-11 06:23:47 -0800
Branch: REL_14_STABLE [d15ec27c9] 2024-11-11 06:23:47 -0800
Branch: REL_13_STABLE [e428cd058] 2024-11-11 06:23:48 -0800
Branch: REL_12_STABLE [2ab12d860] 2024-11-11 06:23:48 -0800
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_14_STABLE [f89bd92c9] 2024-11-11 10:42:32 -0500
Branch: REL_13_STABLE [6bccd7b03] 2024-11-11 10:42:32 -0500
Branch: REL_12_STABLE [b1e58defb] 2024-11-11 10:42:32 -0500
Branch: master [a34c33fd2] 2024-11-11 12:20:08 -0500
Branch: REL_17_STABLE [4cd4f3b97] 2024-11-11 12:20:08 -0500
Branch: REL_16_STABLE [88269df4d] 2024-11-11 12:20:08 -0500
Branch: REL_16_STABLE [168579e23] 2024-11-11 12:27:06 -0500
Author: Noah Misch <noah@leadboat.com>
Branch: REL_16_STABLE [c335264c9] 2024-11-11 10:55:18 -0800
Branch: REL_15_STABLE [16ed4f4d0] 2024-11-11 10:56:05 -0800
Branch: REL_14_STABLE [c1fff7b1b] 2024-11-11 10:56:09 -0800
Branch: REL_13_STABLE [9f97c31c2] 2024-11-11 10:56:12 -0800
Branch: REL_12_STABLE [1e457468f] 2024-11-11 10:56:14 -0800
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c4252c9ef] 2024-11-11 13:57:21 -0500
Branch: REL_17_STABLE [8d19f3fea] 2024-11-11 13:57:21 -0500
Branch: REL_16_STABLE [64df88700] 2024-11-11 13:57:40 -0500
Branch: REL_15_STABLE [c834b375a] 2024-11-11 13:57:41 -0500
Branch: REL_14_STABLE [256e34653] 2024-11-11 13:57:41 -0500
Branch: REL_13_STABLE [0bd9560d9] 2024-11-11 13:57:41 -0500
Branch: REL_12_STABLE [9fc1c3a02] 2024-11-11 13:57:41 -0500
-->
     <para>
      Prevent trusted PL/Perl code from changing environment variables
      (Andrew Dunstan, Noah Misch)
      <ulink url="&commit_baseurl;3ebcfa54d">&sect;</ulink>
      <ulink url="&commit_baseurl;4cd4f3b97">&sect;</ulink>
      <ulink url="&commit_baseurl;8d19f3fea">&sect;</ulink>
     </para>

     <para>
      The ability to manipulate process environment variables such
      as <literal>PATH</literal> gives an attacker opportunities to
      execute arbitrary code.  Therefore, <quote>trusted</quote> PLs must
      not offer the ability to do that.  To fix <literal>plperl</literal>,
      replace <varname>%ENV</varname> with a tied hash that rejects any
      modification attempt with a warning.
      Untrusted <literal>plperlu</literal> retains the ability to change
      the environment.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Coby Abrams for reporting this problem.
      (CVE-2024-10979)
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [53af9491a] 2024-10-22 16:01:18 +0200
Branch: REL_17_STABLE [5914a22f6] 2024-10-22 16:01:18 +0200
Branch: REL_16_STABLE [2aaf2a28b] 2024-10-22 16:01:18 +0200
Branch: REL_15_STABLE [5d83bad6b] 2024-10-22 16:01:18 +0200
Branch: REL_14_STABLE [46a8c27a7] 2024-10-22 16:01:18 +0200
Branch: REL_13_STABLE [d20194cea] 2024-10-22 16:01:18 +0200
Branch: master [2d5fe5140] 2024-10-30 10:54:03 +0100
Branch: REL_17_STABLE [936ab6de9] 2024-10-30 10:54:03 +0100
Branch: REL_16_STABLE [f7d510a38] 2024-10-30 10:54:03 +0100
Branch: REL_15_STABLE [1b216fcef] 2024-10-30 10:54:03 +0100
-->
     <para>
      Fix updates of catalog state for foreign-key constraints when
      attaching or detaching table partitions (Jehan-Guillaume de
      Rorthais, Tender Wang, Álvaro Herrera)
      <ulink url="&commit_baseurl;5914a22f6">&sect;</ulink>
      <ulink url="&commit_baseurl;936ab6de9">&sect;</ulink>
     </para>

     <para>
      If the referenced table is partitioned, then different catalog
      entries are needed for a referencing table that is stand-alone
      versus one that is a partition.  <literal>ATTACH/DETACH
      PARTITION</literal> commands failed to perform this conversion
      correctly.  In particular, after <literal>DETACH</literal> the now
      stand-alone table would be missing foreign-key enforcement triggers,
      which could result in the table later containing rows that fail the
      foreign-key constraint.  A subsequent re-<literal>ATTACH</literal>
      could fail with surprising errors, too.
     </para>

     <para>
      The way to fix this is to do <command>ALTER TABLE DROP
      CONSTRAINT</command> on the now stand-alone table for each faulty
      constraint, and then re-add the constraint.  If re-adding the
      constraint fails, then some erroneous data has crept in.  You will
      need to manually re-establish consistency between the referencing
      and referenced tables, then re-add the constraint.
     </para>

     <para>
      This query can be used to identify broken constraints and construct
      the commands needed to recreate them:
<programlisting>
SELECT conrelid::pg_catalog.regclass AS "constrained table",
       conname AS constraint,
       confrelid::pg_catalog.regclass AS "references",
       pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;',
                         conrelid::pg_catalog.regclass, conname) AS "drop",
       pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;',
                         conrelid::pg_catalog.regclass, conname,
                         pg_catalog.pg_get_constraintdef(oid)) AS "add"
FROM pg_catalog.pg_constraint c
WHERE contype = 'f' AND conparentid = 0 AND
   (SELECT count(*) FROM pg_catalog.pg_constraint c2
    WHERE c2.conparentid = c.oid) &lt;&gt;
   (SELECT count(*) FROM pg_catalog.pg_inherits i
    WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND
      EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table
              WHERE partrelid = i.inhparent));
</programlisting>
      Since it is possible that one or more of the <literal>ADD
      CONSTRAINT</literal> steps will fail, you should save the query's
      output in a file and then attempt to perform each step.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: REL_17_STABLE [8148e7124] 2024-11-06 14:44:35 -0800
-->
     <para>
      Fix test for <literal>C</literal> locale
      when <varname>LC_COLLATE</varname> is different
      from <varname>LC_CTYPE</varname> (Jeff Davis)
      <ulink url="&commit_baseurl;8148e7124">&sect;</ulink>
     </para>

     <para>
      When using <literal>libc</literal> as the default collation
      provider, the test to see if <literal>C</literal> locale is in use
      for collation accidentally checked <varname>LC_CTYPE</varname>
      not <varname>LC_COLLATE</varname>.  This has no impact in the
      typical case where those settings are the same, nor if both are
      not <literal>C</literal> (nor its alias <literal>POSIX</literal>).
      However, if <varname>LC_CTYPE</varname> is <literal>C</literal>
      while <varname>LC_COLLATE</varname> is some other locale, wrong
      query answers could ensue, and corruption of indexes on strings was
      possible.  Users of databases with such settings should reindex
      affected indexes after installing this update.
      The converse case with <varname>LC_COLLATE</varname>
      being <literal>C</literal> while <varname>LC_CTYPE</varname> is some
      other locale would cause performance degradation, but no actual
      errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [075acdd93] 2024-11-08 17:25:24 +0900
Branch: REL_17_STABLE [a0cdfc889] 2024-11-08 17:19:35 +0900
Branch: REL_16_STABLE [f734b6b4d] 2024-11-08 17:19:13 +0900
Branch: REL_15_STABLE [33040b171] 2024-11-08 17:18:55 +0900
Branch: REL_14_STABLE [62df5484f] 2024-11-08 17:18:38 +0900
Branch: REL_13_STABLE [054701a2b] 2024-11-08 17:18:21 +0900
Branch: REL_12_STABLE [9c4757491] 2024-11-08 17:18:04 +0900
Branch: master [90fe6251c] 2024-11-08 16:07:22 +0900
Branch: REL_17_STABLE [b6484ca95] 2024-11-08 16:07:13 +0900
Branch: REL_16_STABLE [dd2f8ebee] 2024-11-08 16:07:05 +0900
Branch: REL_15_STABLE [0a620659c] 2024-11-08 16:06:58 +0900
Branch: REL_14_STABLE [96f9b29a3] 2024-11-08 16:06:46 +0900
Branch: REL_13_STABLE [ff65f695c] 2024-11-08 16:06:12 +0900
Branch: REL_12_STABLE [46d9be5ef] 2024-11-08 16:05:33 +0900
-->
     <para>
      Don't use partitionwise joins or grouping if the query's collation
      for the key column doesn't match the partition key's collation (Jian
      He, Webbo Han)
      <ulink url="&commit_baseurl;a0cdfc889">&sect;</ulink>
      <ulink url="&commit_baseurl;b6484ca95">&sect;</ulink>
     </para>

     <para>
      Such plans could produce incorrect results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [f00ab1fd1] 2024-11-08 11:21:11 +0900
Branch: REL_17_STABLE [78b1c553b] 2024-11-08 11:24:26 +0900
-->
     <para>
      Avoid planner failure after converting an <literal>IS NULL</literal>
      test on a <literal>NOT NULL</literal> column to
      constant <literal>FALSE</literal> (Richard Guo)
      <ulink url="&commit_baseurl;78b1c553b">&sect;</ulink>
     </para>

     <para>
      This bug typically led to errors such as <quote>variable not found
      in subplan target lists</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5a4416192] 2024-10-09 17:07:53 -0400
Branch: REL_17_STABLE [a3c4a91f1] 2024-10-09 17:07:53 -0400
-->
     <para>
      Avoid possible planner crash while inlining a SQL function whose
      arguments contain certain array-related constructs (Tom Lane, Nathan
      Bossart)
      <ulink url="&commit_baseurl;a3c4a91f1">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [dddb5640c] 2024-10-03 12:53:03 +0100
Branch: REL_17_STABLE [d7d297f84] 2024-10-03 12:50:38 +0100
Branch: master [259a0a99f] 2024-10-03 13:48:32 +0100
Branch: REL_17_STABLE [34ae54af9] 2024-10-03 13:45:37 +0100
-->
     <para>
      Fix possible wrong answers or <quote>wrong varnullingrels</quote>
      planner errors for <literal>MERGE ... WHEN NOT MATCHED BY
      SOURCE</literal> actions (Dean Rasheed)
      <ulink url="&commit_baseurl;d7d297f84">&sect;</ulink>
      <ulink url="&commit_baseurl;34ae54af9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9f954177b] 2024-10-12 14:56:08 -0400
Branch: REL_17_STABLE [54889ea64] 2024-10-12 14:56:08 -0400
Branch: REL_16_STABLE [64635c8af] 2024-10-12 14:56:08 -0400
Branch: REL_15_STABLE [4f3bccbaa] 2024-10-12 14:56:08 -0400
Branch: REL_14_STABLE [4ca708eb3] 2024-10-12 14:56:08 -0400
Branch: REL_13_STABLE [76de4b182] 2024-10-12 14:56:08 -0400
-->
     <para>
      Fix possible <quote>could not find pathkey item to sort</quote>
      error when the output of a <literal>UNION ALL</literal> member query
      needs to be sorted, and the sort column is an expression (Andrei
      Lepikhov, Tom Lane)
      <ulink url="&commit_baseurl;54889ea64">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [763d65ae2] 2024-10-30 10:57:19 -0400
Branch: REL_17_STABLE [c177726ae] 2024-10-30 10:57:17 -0400
-->
     <para>
      Fix edge case in B-tree ScalarArrayOp index scans (Peter Geoghegan)
      <ulink url="&commit_baseurl;c177726ae">&sect;</ulink>
     </para>

     <para>
      When a scrollable cursor with a plan of this kind was backed up to its
      starting point and then run forward again, wrong answers were
      possible.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [68ad9816c] 2024-10-21 15:08:22 -0400
Branch: REL_17_STABLE [3685ad618] 2024-10-21 15:08:22 -0400
Branch: REL_16_STABLE [6c3b2d204] 2024-10-21 15:08:22 -0400
Branch: REL_15_STABLE [c80a1e048] 2024-10-21 15:08:22 -0400
Branch: REL_14_STABLE [5e94f616c] 2024-10-21 15:08:22 -0400
Branch: REL_13_STABLE [beab395a4] 2024-10-21 15:08:22 -0400
Branch: REL_12_STABLE [6a57a457c] 2024-10-21 15:08:22 -0400
-->
     <para>
      Fix assertion failure or confusing error message for <literal>COPY
      (<replaceable>query</replaceable>) TO ...</literal>, when
      the <replaceable>query</replaceable> is rewritten by a <literal>DO
      INSTEAD NOTIFY</literal> rule (Tender Wang, Tom Lane)
      <ulink url="&commit_baseurl;3685ad618">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [089aac631] 2024-10-17 08:44:50 +0900
Branch: REL_17_STABLE [c06a4746b] 2024-10-17 08:45:56 +0900
-->
     <para>
      Fix validation
      of <command>COPY</command>'s <literal>FORCE_NOT_NULL</literal>
      and <literal>FORCE_NULL</literal> options (Joel Jacobson)
      <ulink url="&commit_baseurl;c06a4746b">&sect;</ulink>
     </para>

     <para>
      Some incorrect usages are now rejected as they should be.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [11c87216d] 2024-10-20 12:20:55 +0900
Branch: REL_17_STABLE [7148cb3e3] 2024-10-20 12:21:12 +0900
Branch: REL_16_STABLE [fa4f11854] 2024-10-20 12:21:03 +0900
-->
     <para>
      Fix server crash when a <function>json_objectagg()</function> call
      contains a volatile function (Amit Langote)
      <ulink url="&commit_baseurl;7148cb3e3">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [98c7c7152] 2024-10-17 22:11:59 +1300
Branch: REL_17_STABLE [4ac5d33a8] 2024-10-17 22:10:29 +1300
Branch: REL_16_STABLE [53edc9485] 2024-10-17 22:08:13 +1300
Branch: REL_15_STABLE [1831545ca] 2024-10-17 22:04:05 +1300
Branch: REL_14_STABLE [20d948994] 2024-10-17 22:01:54 +1300
Branch: REL_13_STABLE [45329466f] 2024-10-17 22:00:38 +1300
Branch: REL_12_STABLE [4fa80a6d7] 2024-10-17 22:00:16 +1300
-->
     <para>
      Fix detection of skewed data during parallel hash join (Thomas
      Munro)
      <ulink url="&commit_baseurl;4ac5d33a8">&sect;</ulink>
     </para>

     <para>
      After repartitioning the inner side of a hash join because one
      partition has accumulated too many tuples, we check to see if all
      the partition's tuples went into the same child partition, which
      suggests that they all have the same hash value and further
      repartitioning cannot improve matters.  This check malfunctioned in
      some cases, allowing repeated futile repartitioning which would
      eventually end in a resource-exhaustion error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [a9ed7d944] 2024-10-07 17:51:14 -0700
Branch: REL_17_STABLE [2fe4167bc] 2024-10-07 17:54:19 -0700
-->
     <para>
      Avoid crash when <command>ALTER DATABASE SET</command> is used to
      set a server parameter that requires search-path-based lookup, such
      as <varname>default_text_search_config</varname> (Jeff Davis)
      <ulink url="&commit_baseurl;2fe4167bc">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [68dfecbef] 2024-10-05 14:46:44 -0400
Branch: REL_17_STABLE [fee8cb947] 2024-10-05 14:46:44 -0400
-->
     <para>
      Avoid repeated lookups of opclasses and collations while creating a
      new index on a partitioned table (Tom Lane)
      <ulink url="&commit_baseurl;fee8cb947">&sect;</ulink>
     </para>

     <para>
      This was problematic mainly because some of the lookups would be
      done with a restricted <varname>search_path</varname>, leading to
      unexpected failures if the <command>CREATE INDEX</command> command
      referenced objects outside <literal>pg_catalog</literal>.
     </para>

     <para>
      This fix also prevents comments on the parent partitioned index from
      being copied to child indexes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [49a23441c] 2024-10-29 08:41:33 +0900
Branch: REL_17_STABLE [bb584e831] 2024-10-29 08:41:53 +0900
-->
     <para>
      Add missing dependency from a partitioned table to a non-built-in
      access method specified in <literal>CREATE TABLE ... USING</literal>
      (Michael Paquier)
      <ulink url="&commit_baseurl;bb584e831">&sect;</ulink>
     </para>

     <para>
      Dropping the access method should be blocked when a table exists
      that depends on it, but it was not, allowing subsequent odd
      behavior.  Note that this fix only prevents problems for partitioned
      tables created after this update.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [adbb27ac8] 2024-10-05 13:50:02 +1300
Branch: REL_17_STABLE [9c7acc333] 2024-10-05 13:54:35 +1300
Branch: REL_16_STABLE [ce17de580] 2024-10-05 14:01:24 +1300
-->
     <para>
      Disallow locale names containing non-ASCII characters (Thomas Munro)
      <ulink url="&commit_baseurl;9c7acc333">&sect;</ulink>
     </para>

     <para>
      This is only an issue on Windows, as such locale names are not used
      elsewhere.  They are problematic because it's quite unclear what
      encoding such names are represented in (since the locale itself
      defines the encoding to use).  In
      recent <productname>PostgreSQL</productname> releases, an abort in
      the Windows runtime library could occur because of confusion about
      that.
     </para>

     <para>
      Anyone who encounters the new error message should either create a
      new duplicated locale with an ASCII-only name using Windows Locale
      Builder, or consider using BCP 47-compliant locale names
      like <literal>tr-TR</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [1a43de5e0] 2024-10-21 09:49:21 +0300
Branch: REL_17_STABLE [234f6d09e] 2024-10-21 09:49:29 +0300
Branch: REL_16_STABLE [22665f210] 2024-10-21 09:49:32 +0300
Branch: REL_15_STABLE [d97419b85] 2024-10-21 09:49:35 +0300
Branch: REL_14_STABLE [520ec2474] 2024-10-21 09:49:38 +0300
Branch: REL_13_STABLE [8e607a5a4] 2024-10-21 09:49:41 +0300
Branch: REL_12_STABLE [e2ec3afeb] 2024-10-21 09:49:50 +0300
-->
     <para>
      Fix race condition in committing a serializable transaction (Heikki
      Linnakangas)
      <ulink url="&commit_baseurl;234f6d09e">&sect;</ulink>
     </para>

     <para>
      Mis-processing of a recently committed transaction could lead to an
      assertion failure or a <quote>could not access status of
      transaction</quote> error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [cf4401fe6] 2024-10-01 15:44:03 +0900
Branch: REL_17_STABLE [f250cb29d] 2024-10-01 15:44:07 +0900
Branch: REL_16_STABLE [7de9b64a5] 2024-10-01 15:44:09 +0900
Branch: REL_15_STABLE [41ab45680] 2024-10-01 15:44:11 +0900
Branch: REL_14_STABLE [5f1510787] 2024-10-01 15:44:12 +0900
Branch: REL_13_STABLE [7bfaa4671] 2024-10-01 15:44:14 +0900
Branch: REL_12_STABLE [34d751ba7] 2024-10-01 15:44:15 +0900
-->
     <para>
      Fix race condition in <command>COMMIT PREPARED</command>
      that resulted in orphaned 2PC files (wuchengwen)
      <ulink url="&commit_baseurl;f250cb29d">&sect;</ulink>
     </para>

     <para>
      A concurrent <command>PREPARE TRANSACTION</command> could
      cause <command>COMMIT PREPARED</command> to not remove the on-disk
      two-phase state file for the completed transaction.  There was no
      immediate ill effect, but a subsequent crash-and-recovery could fail
      with <quote>could not access status of transaction</quote>,
      requiring manual removal of the orphaned file to restore service.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [09620ea09] 2024-09-27 09:40:09 +0900
Branch: REL_17_STABLE [1532599a8] 2024-09-27 09:40:14 +0900
Branch: REL_16_STABLE [afbd3dc7d] 2024-09-27 09:40:16 +0900
Branch: REL_15_STABLE [a613edc5c] 2024-09-27 09:40:18 +0900
Branch: REL_14_STABLE [6530b869c] 2024-09-27 09:40:19 +0900
Branch: REL_13_STABLE [911eda9f3] 2024-09-27 09:40:21 +0900
Branch: REL_12_STABLE [2f33e68a5] 2024-09-27 09:40:22 +0900
-->
     <para>
      Avoid invalid memory accesses after skipping an invalid toast index
      during <command>VACUUM FULL</command> (Tender Wang)
      <ulink url="&commit_baseurl;1532599a8">&sect;</ulink>
     </para>

     <para>
      A list tracking yet-to-be-rebuilt indexes was not properly updated
      in this code path, risking assertion failures or crashes later on.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [a07e03fd8] 2024-09-24 15:25:18 -0700
Branch: REL_17_STABLE [fd27b878c] 2024-09-24 15:25:21 -0700
Branch: REL_16_STABLE [63f019805] 2024-09-24 15:25:22 -0700
Branch: REL_15_STABLE [8590c942c] 2024-09-24 15:25:23 -0700
Branch: REL_14_STABLE [82c2d9e02] 2024-09-24 15:25:23 -0700
Branch: REL_13_STABLE [a8ad1929d] 2024-09-24 15:25:24 -0700
Branch: REL_12_STABLE [7354b680a] 2024-09-24 15:25:25 -0700
Branch: master [aac2c9b4f] 2024-09-24 15:25:18 -0700
Branch: REL_17_STABLE [3b7a689e1] 2024-09-24 15:25:22 -0700
Branch: REL_16_STABLE [51ff46de2] 2024-09-24 15:25:22 -0700
Branch: REL_15_STABLE [5c837f8fa] 2024-09-24 15:25:23 -0700
Branch: REL_14_STABLE [f51b34b3e] 2024-09-24 15:25:23 -0700
Branch: REL_13_STABLE [14c57cb63] 2024-09-24 15:25:24 -0700
Branch: REL_12_STABLE [cafcc3ad0] 2024-09-24 15:25:25 -0700
Branch: master [0d5a3d757] 2024-09-29 15:54:25 -0700
Branch: REL_17_STABLE [da99df15c] 2024-09-29 15:54:28 -0700
Branch: REL_16_STABLE [4c922821e] 2024-09-29 15:54:28 -0700
Branch: REL_15_STABLE [159bf0f31] 2024-09-29 15:54:29 -0700
Branch: REL_14_STABLE [b9ee1339b] 2024-09-29 15:54:29 -0700
Branch: REL_13_STABLE [db1992455] 2024-09-29 15:54:29 -0700
Branch: REL_12_STABLE [5a33a39a8] 2024-09-29 15:54:30 -0700
Branch: master [e947224cb] 2024-10-24 09:16:14 -0700
Branch: REL_17_STABLE [e11907682] 2024-10-24 09:16:17 -0700
Branch: REL_16_STABLE [2d63c964f] 2024-10-24 09:16:18 -0700
Branch: REL_15_STABLE [d34ffbaa1] 2024-10-24 09:16:18 -0700
Branch: REL_14_STABLE [ad24b7565] 2024-10-24 09:16:19 -0700
Branch: REL_13_STABLE [3e5ea478d] 2024-10-24 09:16:19 -0700
Branch: REL_12_STABLE [a0c0078b1] 2024-10-24 09:16:20 -0700
Branch: master [30d47ec8c] 2024-10-29 09:39:55 -0700
Branch: REL_17_STABLE [9aef6f19a] 2024-10-29 09:39:58 -0700
Branch: REL_16_STABLE [370bc7740] 2024-10-29 09:39:58 -0700
Branch: REL_15_STABLE [0fe002d0c] 2024-10-29 09:39:59 -0700
Branch: REL_14_STABLE [11e3f288f] 2024-10-29 09:39:59 -0700
Branch: REL_13_STABLE [2a912bc1a] 2024-10-29 09:40:00 -0700
Branch: REL_12_STABLE [c2139db11] 2024-10-29 09:40:00 -0700
Branch: master [b412f402d] 2024-11-02 09:04:55 -0700
Branch: REL_17_STABLE [0bcb9d079] 2024-11-02 09:05:00 -0700
Branch: REL_16_STABLE [6c837c237] 2024-11-02 09:05:02 -0700
Branch: REL_15_STABLE [6d5b4031b] 2024-11-02 09:05:04 -0700
Branch: REL_14_STABLE [bb3054297] 2024-11-02 09:05:05 -0700
Branch: REL_13_STABLE [6b01cac0b] 2024-11-02 09:05:07 -0700
Branch: REL_12_STABLE [d729f1ea5] 2024-11-02 09:05:08 -0700
Branch: master [825c72c07] 2024-11-02 19:42:52 -0700
Branch: REL_17_STABLE [54bc22fbf] 2024-11-02 19:42:55 -0700
Branch: REL_16_STABLE [f8f9110b4] 2024-11-02 19:42:56 -0700
Branch: REL_15_STABLE [d14e94ac4] 2024-11-02 19:42:56 -0700
Branch: REL_14_STABLE [803655e66] 2024-11-02 19:42:57 -0700
Branch: REL_13_STABLE [4dc0c933f] 2024-11-02 19:42:57 -0700
Branch: REL_12_STABLE [766809db3] 2024-11-02 19:42:58 -0700
-->
     <para>
      Fix ways in which an <quote>in place</quote> catalog update could be
      lost (Noah Misch)
      <ulink url="&commit_baseurl;fd27b878c">&sect;</ulink>
      <ulink url="&commit_baseurl;3b7a689e1">&sect;</ulink>
      <ulink url="&commit_baseurl;da99df15c">&sect;</ulink>
      <ulink url="&commit_baseurl;e11907682">&sect;</ulink>
      <ulink url="&commit_baseurl;9aef6f19a">&sect;</ulink>
      <ulink url="&commit_baseurl;0bcb9d079">&sect;</ulink>
      <ulink url="&commit_baseurl;54bc22fbf">&sect;</ulink>
     </para>

     <para>
      Normal row updates write a new version of the row to preserve
      rollback-ability of the transaction.  However, certain system
      catalog updates are intentionally non-transactional and are done
      with an in-place update of the row.  These patches fix race
      conditions that could cause the effects of an in-place update to be
      lost.  As an example, it was possible to forget having set
      <structname>pg_class</structname>.<structfield>relhasindex</structfield>
      to true, preventing updates of the new index and thus causing index
      corruption.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: REL_17_STABLE [a4668c99f] 2024-10-25 06:51:06 -0700
Branch: REL_16_STABLE [d36b4d8ec] 2024-10-25 06:51:06 -0700
Branch: REL_15_STABLE [3baf804b7] 2024-10-25 06:51:07 -0700
Branch: REL_14_STABLE [dca68242a] 2024-10-25 06:51:07 -0700
Branch: REL_13_STABLE [67f30c79a] 2024-10-25 06:51:08 -0700
Branch: REL_12_STABLE [da9950456] 2024-10-25 06:51:08 -0700
-->
     <para>
      Reset catalog caches at end of recovery (Noah Misch)
      <ulink url="&commit_baseurl;a4668c99f">&sect;</ulink>
     </para>

     <para>
      This prevents scenarios wherein an in-place catalog update could be
      lost due to using stale data from a catalog cache.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [ac04aa84a] 2024-09-17 19:53:11 -0700
Branch: REL_17_STABLE Release: REL_17_0 [2370582ab] 2024-09-17 19:54:25 -0700
Branch: REL_16_STABLE [6f6521de9] 2024-09-17 19:54:25 -0700
Branch: REL_15_STABLE [884860bfc] 2024-09-17 19:54:26 -0700
Branch: REL_14_STABLE [5c698e898] 2024-09-17 19:54:26 -0700
Branch: REL_13_STABLE [916b8ae47] 2024-09-17 19:54:26 -0700
Branch: REL_12_STABLE [507b72bd9] 2024-09-17 19:54:26 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b8df69049] 2024-11-08 13:42:10 -0500
Branch: REL_17_STABLE [943b65358] 2024-11-08 13:42:01 -0500
Branch: REL_16_STABLE [06424e9a2] 2024-11-08 13:42:01 -0500
Branch: REL_15_STABLE [bcbdb176e] 2024-11-08 13:42:01 -0500
Branch: REL_14_STABLE [989ccd26c] 2024-11-08 13:42:01 -0500
Branch: REL_13_STABLE [62685876f] 2024-11-08 13:42:01 -0500
Branch: REL_12_STABLE [6e39ca6e7] 2024-11-08 13:42:01 -0500
-->
     <para>
      Avoid using parallel query while holding off interrupts
      (Francesco Degrassi, Noah Misch, Tom Lane)
      <ulink url="&commit_baseurl;2370582ab">&sect;</ulink>
      <ulink url="&commit_baseurl;943b65358">&sect;</ulink>
     </para>

     <para>
      This situation cannot arise normally, but it can be reached with
      test scenarios such as using a SQL-language function as B-tree
      support (which would be far too slow for production usage).  If it
      did occur it would result in an indefinite wait.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f8d9a9f21] 2024-10-06 16:03:48 -0400
Branch: REL_17_STABLE [3daeb539a] 2024-10-06 16:03:48 -0400
Branch: REL_16_STABLE [5de77b609] 2024-10-06 16:03:48 -0400
Branch: REL_15_STABLE [aef75219c] 2024-10-06 16:03:48 -0400
Branch: REL_14_STABLE [3922c9e9f] 2024-10-06 16:03:48 -0400
Branch: REL_13_STABLE [4a17acd0d] 2024-10-06 16:03:48 -0400
Branch: REL_12_STABLE [5c17f5a63] 2024-10-06 16:03:48 -0400
-->
     <para>
      Ignore not-yet-defined Portals in
      the <structname>pg_cursors</structname> view (Tom Lane)
      <ulink url="&commit_baseurl;3daeb539a">&sect;</ulink>
     </para>

     <para>
      It is possible for user-defined code that inspects this view to be
      called while a new cursor is being set up, and if that happens a
      null pointer dereference would ensue.  Avoid the problem by defining
      the view to exclude incompletely-set-up cursors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [022564f60] 2024-10-07 15:38:45 +0530
Branch: REL_17_STABLE [918107759] 2024-10-07 15:15:05 +0530
Branch: REL_16_STABLE [0f0e253db] 2024-10-07 15:04:05 +0530
Branch: REL_15_STABLE [8175a7d11] 2024-10-07 14:53:18 +0530
Branch: REL_14_STABLE [efe706e27] 2024-10-07 14:45:39 +0530
Branch: master [d759c1a0b] 2024-10-08 12:25:52 +0530
Branch: REL_17_STABLE [c4b8a916f] 2024-10-08 12:13:28 +0530
Branch: REL_16_STABLE [0c40d9019] 2024-10-08 12:01:35 +0530
Branch: REL_15_STABLE [5ce0dcc99] 2024-10-08 11:45:58 +0530
Branch: REL_14_STABLE [581092c90] 2024-10-08 11:30:26 +0530
-->
     <para>
      Avoid <quote>unexpected table_index_fetch_tuple call during logical
      decoding</quote> error while decoding a transaction involving
      insertion of a column default value (Takeshi Ideriha, Hou Zhijie)
      <ulink url="&commit_baseurl;918107759">&sect;</ulink>
      <ulink url="&commit_baseurl;c4b8a916f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [1b9b6cc34] 2024-10-16 12:08:05 -0700
Branch: REL_17_STABLE [eef9cc4dc] 2024-10-16 12:08:02 -0700
Branch: REL_16_STABLE [05e982cdc] 2024-10-16 12:08:00 -0700
Branch: REL_15_STABLE [4a675f318] 2024-10-16 12:07:58 -0700
Branch: REL_14_STABLE [5c1ed0a51] 2024-10-16 12:07:55 -0700
Branch: REL_13_STABLE [cb988b04d] 2024-10-16 12:07:52 -0700
Branch: REL_12_STABLE [53fa68b3b] 2024-10-16 12:07:50 -0700
-->
     <para>
      Reduce memory consumption of logical decoding (Masahiko Sawada)
      <ulink url="&commit_baseurl;eef9cc4dc">&sect;</ulink>
     </para>

     <para>
      Use a smaller default block size to store tuple data received during
      logical replication.  This reduces memory wastage, which has been
      reported to be severe while processing long-running transactions,
      even leading to out-of-memory failures.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c96de42c4] 2024-10-16 17:36:40 -0400
Branch: REL_17_STABLE [b5eef7539] 2024-10-16 17:36:29 -0400
Branch: REL_16_STABLE [25d639eea] 2024-10-16 17:36:29 -0400
Branch: REL_15_STABLE [b35231989] 2024-10-16 17:36:29 -0400
Branch: REL_14_STABLE [ab13c46ff] 2024-10-16 17:36:30 -0400
Branch: REL_13_STABLE [0d83ced3c] 2024-10-16 17:36:30 -0400
Branch: REL_12_STABLE [cf1443d67] 2024-10-16 17:36:30 -0400
-->
     <para>
      Fix behavior of stable functions called from
      a <command>CALL</command> statement's argument list, when
      the <command>CALL</command> is within a
      PL/pgSQL <literal>EXCEPTION</literal> block (Tom Lane)
      <ulink url="&commit_baseurl;b5eef7539">&sect;</ulink>
     </para>

     <para>
      As with a similar fix in our previous quarterly releases, this case
      allowed such functions to be 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 [920d51979] 2024-10-02 17:30:36 -0400
Branch: REL_17_STABLE [c7a201053] 2024-10-02 17:30:36 -0400
Branch: REL_16_STABLE [65f431aff] 2024-10-02 17:30:36 -0400
Branch: REL_15_STABLE [bb8c89dbc] 2024-10-02 17:30:36 -0400
Branch: REL_14_STABLE [e7af9b52f] 2024-10-02 17:30:36 -0400
Branch: REL_13_STABLE [2120eda94] 2024-10-02 17:30:36 -0400
Branch: REL_12_STABLE [47d8a15de] 2024-10-02 17:30:36 -0400
-->
     <para>
      Parse <application>libpq</application>'s <literal>keepalives</literal>
      connection option in the same way as other integer-valued options
      (Yuto Sasaki)
      <ulink url="&commit_baseurl;c7a201053">&sect;</ulink>
     </para>

     <para>
      The coding used here rejected trailing whitespace in the option
      value, unlike other cases.  This turns out to be problematic
      in <application>ecpg</application>'s usage, for example.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a0bff38d1] 2024-10-23 08:33:54 +0900
Branch: REL_17_STABLE [2c37cb26f] 2024-10-23 08:35:00 +0900
Branch: REL_16_STABLE [a1e613b81] 2024-10-23 08:35:02 +0900
Branch: REL_15_STABLE [335501fb2] 2024-10-23 08:35:04 +0900
Branch: REL_14_STABLE [9a51d4af1] 2024-10-23 08:35:05 +0900
Branch: REL_13_STABLE [fcafbaadf] 2024-10-23 08:35:07 +0900
Branch: REL_12_STABLE [9ecfd8a48] 2024-10-23 08:35:08 +0900
-->
     <para>
      In <application>ecpglib</application>, fix out-of-bounds read when
      parsing incorrect datetime input (Bruce Momjian, Pavel Nekrasov)
      <ulink url="&commit_baseurl;2c37cb26f">&sect;</ulink>
     </para>

     <para>
      It was possible to try to read the location just before the start of
      a constant array.  Real-world consequences seem minimal, though.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [1591b38d1] 2024-09-24 17:21:38 -0400
Branch: REL_17_STABLE [923a71584] 2024-09-24 17:21:38 -0400
-->
     <para>
      Fix <application>psql</application>'s describe commands to again
      work with pre-9.4 servers (Tom Lane)
      <ulink url="&commit_baseurl;923a71584">&sect;</ulink>
     </para>

     <para>
      Commands involving display of an ACL (permissions) column failed
      with very old <productname>PostgreSQL</productname> servers, due to
      use of a function not present in those versions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9f34cae14] 2024-10-14 12:27:51 +0900
Branch: REL_17_STABLE [8a6170860] 2024-10-14 12:27:57 +0900
Branch: REL_16_STABLE [6331972c7] 2024-10-14 12:28:01 +0900
-->
     <para>
      Avoid hanging if an interval less than 1ms is specified
      in <application>psql</application>'s <literal>\watch</literal>
      command (Andrey Borodin, Michael Paquier)
      <ulink url="&commit_baseurl;8a6170860">&sect;</ulink>
     </para>

     <para>
      Instead, treat this the same as an interval of zero (no wait between
      executions).
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b1008c1f0] 2024-11-04 14:36:11 -0500
Branch: REL_17_STABLE [e2a912909] 2024-11-04 14:36:04 -0500
-->
     <para>
      Fix failure to find replication password
      in <filename>~/.pgpass</filename> (Tom Lane)
      <ulink url="&commit_baseurl;e2a912909">&sect;</ulink>
     </para>

     <para>
      <application>pg_basebackup</application>
      and <application>pg_receivewal</application> failed to match an entry
      in <filename>~/.pgpass</filename> that
      had <literal>replication</literal> in the database name field, if
      no <option>-d</option> or <option>--dbname</option> switch was
      supplied.  This resulted in an unexpected prompt for password.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [0b1765d95] 2024-11-04 10:11:05 -0500
Branch: REL_17_STABLE [e36711442] 2024-11-04 10:19:37 -0500
-->
     <para>
      In <application>pg_combinebackup</application>, throw an error if an
      incremental backup file is present in a directory that is supposed to
      contain a full backup (Robert Haas)
      <ulink url="&commit_baseurl;e36711442">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [6c24801b1] 2024-11-04 09:55:02 -0500
Branch: REL_17_STABLE [0d635b615] 2024-11-04 10:04:26 -0500
-->
     <para>
      In <application>pg_combinebackup</application>, don't construct
      filenames containing double slashes (Robert Haas)
      <ulink url="&commit_baseurl;0d635b615">&sect;</ulink>
     </para>

     <para>
      This caused no functional problems, but the duplicate slashes were
      visible in error messages, which could create confusion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1ab67c9df] 2024-09-25 14:43:16 +0900
Branch: REL_17_STABLE [85cb21df6] 2024-09-25 14:44:50 +0900
Branch: REL_16_STABLE [1ea4d9c00] 2024-09-25 14:44:53 +0900
Branch: REL_15_STABLE [74eaa0544] 2024-09-25 14:44:56 +0900
Branch: REL_14_STABLE [60c618216] 2024-09-25 14:44:57 +0900
Branch: REL_13_STABLE [9db4598c9] 2024-09-25 14:44:59 +0900
Branch: REL_12_STABLE [ef57a7135] 2024-09-25 14:45:01 +0900
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [20cfec896] 2024-09-30 11:13:55 +0900
Branch: REL_17_STABLE [77f154681] 2024-09-30 11:15:56 +0900
Branch: REL_16_STABLE [653ce5b8b] 2024-09-30 11:16:15 +0900
Branch: REL_15_STABLE [92cc21d15] 2024-09-30 11:16:21 +0900
Branch: REL_14_STABLE [88e1153cb] 2024-09-30 11:16:27 +0900
Branch: REL_13_STABLE [9410f7cbf] 2024-09-30 11:17:23 +0900
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [8318f2b17] 2024-10-07 16:49:20 -0500
Branch: REL_17_STABLE [5bd26e652] 2024-10-07 16:49:20 -0500
Branch: REL_16_STABLE [eba8cc1af] 2024-10-07 16:49:20 -0500
Branch: REL_15_STABLE [6d047c6a9] 2024-10-07 16:49:20 -0500
Branch: REL_14_STABLE [ce6f27857] 2024-10-07 16:49:20 -0500
Branch: REL_13_STABLE [d4ade0baf] 2024-10-07 16:49:20 -0500
Branch: REL_12_STABLE [5e0431c32] 2024-10-07 16:49:20 -0500
-->
     <para>
      Avoid trying to reindex temporary tables and indexes
      in <application>vacuumdb</application> and in
      parallel <application>reindexdb</application> (VaibhaveS, Michael
      Paquier, Fujii Masao, Nathan Bossart)
      <ulink url="&commit_baseurl;85cb21df6">&sect;</ulink>
      <ulink url="&commit_baseurl;77f154681">&sect;</ulink>
      <ulink url="&commit_baseurl;5bd26e652">&sect;</ulink>
     </para>

     <para>
      Reindexing other sessions' temporary tables cannot work, but the
      check to skip them was missing in some code paths, leading to
      unwanted failures.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [9044fc1d4] 2024-11-06 23:17:18 +1300
Branch: REL_17_STABLE [b7467ab71] 2024-11-06 23:07:34 +1300
Branch: REL_16_STABLE [ee67b73f5] 2024-11-06 23:09:03 +1300
Branch: REL_15_STABLE [19bf81c06] 2024-11-06 23:09:28 +1300
Branch: REL_14_STABLE [0b022ddf3] 2024-11-06 23:09:50 +1300
Branch: REL_13_STABLE [e88d824a4] 2024-11-06 23:10:05 +1300
Branch: REL_12_STABLE [50c1453a3] 2024-11-06 23:10:20 +1300
-->
     <para>
      Fix incorrect LLVM-generated code on ARM64 platforms (Thomas
      Munro, Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;b7467ab71">&sect;</ulink>
     </para>

     <para>
      When using JIT compilation on ARM platforms, the generated code
      could not support relocation distances exceeding 32 bits, allowing
      unlucky placement of generated code to cause server crashes on
      large-memory systems.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [5d6187d2a] 2024-10-07 13:51:03 -0500
Branch: REL_17_STABLE [a356d23fd] 2024-10-07 13:51:03 -0500
Branch: REL_16_STABLE [8aaf88b63] 2024-10-07 13:51:03 -0500
Branch: REL_15_STABLE [01731eeea] 2024-10-07 13:51:03 -0500
Branch: REL_14_STABLE [5cea7168d] 2024-10-07 13:51:03 -0500
Branch: REL_13_STABLE [b255493ae] 2024-10-07 13:51:03 -0500
Branch: REL_12_STABLE [c91d0af0a] 2024-10-07 13:51:03 -0500
-->
     <para>
      Fix a few places that assumed that process start time (represented
      as a <type>time_t</type>) will fit into a <type>long</type> value
      (Max Johnson, Nathan Bossart)
      <ulink url="&commit_baseurl;a356d23fd">&sect;</ulink>
     </para>

     <para>
      On platforms where <type>long</type> is 32 bits (notably Windows),
      this coding would fail after Y2038.  Most of the failures appear
      only cosmetic, but notably <literal>pg_ctl start</literal> would
      hang.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [502e7bf7f] 2024-10-29 11:49:38 -0400
Branch: REL_17_STABLE [cad65907e] 2024-10-29 11:49:50 -0400
Branch: REL_16_STABLE [a0c8d600b] 2024-10-29 11:49:56 -0400
Branch: REL_15_STABLE [74f70cb86] 2024-10-29 11:50:00 -0400
Branch: REL_14_STABLE [dedced73e] 2024-10-29 11:50:05 -0400
Branch: REL_13_STABLE [8a8486175] 2024-10-29 11:50:10 -0400
Branch: REL_12_STABLE [8f1759c9b] 2024-10-29 11:50:14 -0400
Branch: master [b8ea0f675] 2024-09-14 17:55:02 -0400
Branch: REL_17_STABLE Release: REL_17_0 [6283ff201] 2024-09-14 17:55:02 -0400
Branch: REL_16_STABLE [2abc88958] 2024-09-14 17:55:03 -0400
Branch: REL_15_STABLE [2b94ee58b] 2024-09-14 17:55:03 -0400
Branch: REL_14_STABLE [b27622c90] 2024-09-14 17:55:03 -0400
Branch: REL_13_STABLE [b28b9b19b] 2024-09-14 17:55:03 -0400
Branch: REL_12_STABLE [205813da4] 2024-09-14 17:55:03 -0400
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2024b (Tom Lane)
      <ulink url="&commit_baseurl;cad65907e">&sect;</ulink>
      <ulink url="&commit_baseurl;6283ff201">&sect;</ulink>
     </para>

     <para>
      This <application>tzdata</application> release changes the old
      System-V-compatibility zone names to duplicate the corresponding
      geographic zones; for example <literal>PST8PDT</literal> is now an
      alias for <literal>America/Los_Angeles</literal>.  The main visible
      consequence is that for timestamps before the introduction of
      standardized time zones, the zone is considered to represent local
      mean solar time for the named location.  For example,
      in <literal>PST8PDT</literal>, <type>timestamptz</type> input such
      as <literal>1801-01-01 00:00</literal> would previously have been
      rendered as <literal>1801-01-01 00:00:00-08</literal>, but now it is
      rendered as <literal>1801-01-01 00:00:00-07:52:58</literal>.
     </para>

     <para>
      Also, historical corrections for Mexico, Mongolia, and Portugal.
      Notably, <literal>Asia/Choibalsan</literal> is now an alias
      for <literal>Asia/Ulaanbaatar</literal> rather than being a separate
      zone, mainly because the differences between those zones were found to
      be based on untrustworthy data.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

   <itemizedlist>
    <listitem>
     <para>
      New memory management system for <command>VACUUM</command>, which reduces
      memory consumption and can improve overall vacuuming performance.
     </para>
    </listitem>

    <listitem>
     <para>
      New <acronym>SQL/JSON</acronym> capabilities, including constructors,
      identity functions, and the <link
      linkend="functions-sqljson-table"><function>JSON_TABLE()</function></link>
      function, which converts JSON data into a table representation.
     </para>
    </listitem>

    <listitem>
     <para>
      Various query performance improvements, including for sequential reads
      using streaming I/O, write throughput under high concurrency, and
      searches over multiple values in a <link linkend="btree">btree</link>
      index.
     </para>
    </listitem>

    <listitem>
     <para>
      Logical replication enhancements, including:
      <itemizedlist>
       <listitem>
        <para>
         Failover control
        </para>
       </listitem>
       <listitem>
        <para>
         <link
          linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link>,
          a utility that creates logical replicas from physical standbys
        </para>
       </listitem>
       <listitem>
        <para>
         <link
          linkend="pgupgrade"><application>pg_upgrade</application></link> now
          preserves logical replication slots on publishers and full
          subscription state on subscribers.  This will allow upgrades
          to future major versions to continue logical replication without
          requiring copy to resynchronize.
        </para>
       </listitem>
      </itemizedlist>
     </para>
    </listitem>

    <listitem>
     <para>
      New client-side connection option, <link
      linkend="libpq-connect-sslnegotiation"><literal>sslnegotiation=direct</literal></link>,
      that performs a direct TLS handshake to avoid a round-trip negotiation.
     </para>
    </listitem>

    <listitem>
     <para>
      <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
      now supports incremental backup.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="sql-copy"><command>COPY</command></link> adds a new option,
      <literal>ON_ERROR ignore</literal>, that allows a copy operation to
      continue in the event of an error.
     </para>
    </listitem>
   </itemizedlist>

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

  </sect2>

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

   <title>Migration to Version 17</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 17 contains a number of changes that may affect compatibility
    with previous releases.  Observe the following incompatibilities:
   </para>

   <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-04 [2af07e2f7] Fix search_path to a safe value during maintenance opera
Author: Jeff Davis <jdavis@postgresql.org>
2024-07-16 [b4da732fd64] When creating materialized views, use REFRESH to load data.
-->

    <listitem>
     <para>
     Change functions to use a safe <xref linkend="guc-search-path"/>
     during maintenance operations (Jeff Davis)
     <ulink url="&commit_baseurl;2af07e2f7">&sect;</ulink>
     <ulink url="&commit_baseurl;b4da732fd64">&sect;</ulink>
     </para>

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

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-08-28 [165d581f1] Tighten handling of "ago" in interval values
Author: Michael Paquier <michael@paquier.xyz>
2023-08-28 [617f9b7d4] Tighten unit parsing in internal values
-->

    <listitem>
     <para>
     Restrict <literal>ago</literal> to only appear at the end in
     <type>interval</type> values (Joseph Koshakow)
     <ulink url="&commit_baseurl;165d581f1">&sect;</ulink>
     <ulink url="&commit_baseurl;617f9b7d4">&sect;</ulink>
     </para>

     <para>
     Also, prevent empty interval units from appearing multiple times.
     </para>
    </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-09-05 [f691f5b80] Remove the "snapshot too old" feature.
-->

    <listitem>
     <para>
     Remove server variable old_snapshot_threshold (Thomas Munro)
     <ulink url="&commit_baseurl;f691f5b80">&sect;</ulink>
     </para>

     <para>
     This variable allowed vacuum to remove rows that potentially could
     be still visible to running transactions, causing "snapshot too
     old" errors later if accessed.  This feature might be re-added
     to <application>PostgreSQL</application> later if an improved
     implementation is found.
     </para>
    </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-07-13 [a0363ab7a] Fix privilege check for SET SESSION AUTHORIZATION.
-->

    <listitem>
     <para>
     Change <link linkend="sql-set-session-authorization"><command>SET
     SESSION AUTHORIZATION</command></link> handling of the initial
     session user's superuser status (Joseph Koshakow)
     <ulink url="&commit_baseurl;a0363ab7a">&sect;</ulink>
     </para>

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

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-07-17 [884eee5bf] Remove db_user_namespace.
-->

    <listitem>
     <para>
     Remove feature which simulated per-database users (Nathan Bossart)
     <ulink url="&commit_baseurl;884eee5bf">&sect;</ulink>
     </para>

     <para>
     The feature, <literal>db_user_namespace</literal>, was rarely used.
     </para>
    </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-03-04 [cc09e6549] Remove the adminpack contrib extension
-->

     <listitem>
      <para>
      Remove <application>adminpack</application> contrib extension
      (Daniel Gustafsson)
      <ulink url="&commit_baseurl;cc09e6549">&sect;</ulink>
      </para>

      <para>
      This was used by now end-of-life <productname>pgAdmin
      III</productname>.
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-07-14 [d0c28601e] Remove wal_sync_method=fsync_writethrough on Windows.
-->

    <listitem>
     <para>
     Remove <xref linkend="guc-wal-sync-method"/> value
     <literal>fsync_writethrough</literal> on <systemitem
     class="osname">Windows</systemitem> (Thomas Munro)
     <ulink url="&commit_baseurl;d0c28601e">&sect;</ulink>
     </para>

     <para>
     This value was the same as <literal>fsync</literal> on <systemitem
     class="osname">Windows</systemitem>.
     </para>
    </listitem>

<!--
Author: Bruce Momjian <bruce@momjian.us>
2023-11-24 [344afc776] modify segno. for pg_walfile_name() and pg_walfile_name_
-->

    <listitem>
     <para>
     Change file boundary handling of two <acronym>WAL</acronym> file
     name functions (Kyotaro Horiguchi, Andres Freund, Bruce Momjian)
     <ulink url="&commit_baseurl;344afc776">&sect;</ulink>
     </para>

     <para>
     The functions <link
     linkend="functions-admin-backup-table"><function>pg_walfile_name()</function></link>
     and <function>pg_walfile_name_offset()</function> used to report
     the previous <acronym>LSN</acronym> segment number when the
     <acronym>LSN</acronym> was on a file segment boundary;  it now
     returns the current <acronym>LSN</acronym> segment.
     </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-12-11 [c7a3e6b46] Remove trace_recovery_messages
-->

    <listitem>
     <para>
     Remove server variable <literal>trace_recovery_messages</literal>
     since it is no longer needed (Bharath Rupireddy)
     <ulink url="&commit_baseurl;c7a3e6b46">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-08-16 [78806a950] Remove incorrect field from information schema
-->

    <listitem>
     <para>
     Remove <link
     linkend="information-schema">information schema</link> column
     <structname>element_types</structname>.<structfield>domain_default</structfield>
     (Peter Eisentraut)
     <ulink url="&commit_baseurl;78806a950">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Bruce Momjian <bruce@momjian.us>
2023-09-26 [15d5d7405] pgrowlocks: change lock mode output labels for consiste
-->

    <listitem>
     <para>
     Change <application><xref linkend="pgrowlocks"/></application>
     lock mode output labels (Bruce Momjian)
     <ulink url="&commit_baseurl;15d5d7405">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-27 [74604a37f] Remove buffers_backend and buffers_backend_fsync from pg
-->

    <listitem>
     <para>
     Remove <structfield>buffers_backend</structfield> and
     <structfield>buffers_backend_fsync</structfield> from <link
     linkend="monitoring-pg-stat-bgwriter-view"><structname>pg_stat_bgwriter</structname></link>
     (Bharath Rupireddy)
     <ulink url="&commit_baseurl;74604a37f">&sect;</ulink>
     </para>

     <para>
     These fields are considered redundant to similar columns in <link
     linkend="monitoring-pg-stat-io-view"><structname>pg_stat_io</structname></link>.
     </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-19 [13d00729d] Rename I/O timing statistics columns to shared_blk_{read
-->

    <listitem>
     <para>
     Rename I/O block read/write timing statistics columns of
     <application><xref linkend="pgstatstatements"/></application>
     (Nazir Bilal Yavuz)
     <ulink url="&commit_baseurl;13d00729d">&sect;</ulink>
     </para>

     <para>
     This renames <structfield>blk_read_time</structfield>
     to <structfield>shared_blk_read_time</structfield>,
     and <structfield>blk_write_time</structfield> to
     <structfield>shared_blk_write_time</structfield>.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-01-13 [4f622503d] Make attstattarget nullable
Author: Peter Eisentraut <peter@eisentraut.org>
2024-03-17 [012460ee9] Make stxstattarget nullable
-->

    <listitem>
     <para>
     Change <link
     linkend="catalog-pg-attribute"><structname>pg_attribute</structname>.<structfield>attstattarget</structfield></link>
     and
     <structname>pg_statistic_ext</structname>.<structfield>stxstattarget</structfield>
     to represent the default statistics target as <literal>NULL</literal>
     (Peter Eisentraut)
     <ulink url="&commit_baseurl;4f622503d">&sect;</ulink>
     <ulink url="&commit_baseurl;012460ee9">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-09 [f696c0cd5] Catalog changes preparing for builtin collation provider
-->

    <listitem>
     <para>
     Rename <link
     linkend="catalog-pg-collation"><structname>pg_collation</structname>.<structfield>colliculocale</structfield></link>
     to <structfield>colllocale</structfield> and
     <link linkend="catalog-pg-database"><structname>pg_database</structname>.<structfield>daticulocale</structfield></link>
     to <structfield>datlocale</structfield> (Jeff Davis)
     <ulink url="&commit_baseurl;f696c0cd5">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-02 [667e65aac] Use TidStore for dead tuple TIDs storage during lazy vac
Author: Masahiko Sawada <msawada@postgresql.org>
2024-06-14 [f1affb670] Reintroduce dead tuple counter in pg_stat_progress_vacuu
-->

    <listitem>
     <para>
     Rename <link
     linkend="vacuum-progress-reporting"><structname>pg_stat_progress_vacuum</structname></link>
     column <structfield>max_dead_tuples</structfield>
     to <structfield>max_dead_tuple_bytes</structfield>,
     rename <structfield>num_dead_tuples</structfield> to
     <structfield>num_dead_item_ids</structfield>, and add
     <structfield>dead_tuple_bytes</structfield> (Masahiko Sawada)
     <ulink url="&commit_baseurl;667e65aac">&sect;</ulink>
     <ulink url="&commit_baseurl;f1affb670">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-02-28 [bcdfa5f2e] Rename SLRU elements in view pg_stat_slru
-->

    <listitem>
     <para>
     Rename <acronym>SLRU</acronym> columns in system view <link
     linkend="monitoring-pg-stat-slru-view"><structname>pg_stat_slru</structname></link>
     (Alvaro Herrera)
     <ulink url="&commit_baseurl;bcdfa5f2e">&sect;</ulink>
     </para>

     <para>
     The column names accepted by <link
     linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_slru()</function></link>
     are also changed.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

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

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

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

    <sect4 id="release-17-optimizer">
     <title>Optimizer</title>

     <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-11-17 [f7816aec2] Extract column statistics from CTE references, if possib
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-26 [a65724dfa] Propagate pathkeys from CTEs up to the outer query.
-->

      <listitem>
       <para>
       Allow the optimizer to improve <acronym>CTE</acronym> plans by
       considering the statistics and sort order of columns referenced in earlier row
       output clauses (Jian Guo, Richard Guo, Tom Lane)
       <ulink url="&commit_baseurl;f7816aec2">&sect;</ulink>
       <ulink url="&commit_baseurl;a65724dfa">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-01-23 [b262ad440] Add better handling of redundant IS [NOT] NULL quals
Author: David Rowley <drowley@postgresql.org>
2024-04-12 [3af704098] Fix IS [NOT] NULL qual optimization for inheritance tabl
-->

      <listitem>
       <para>
       Improve optimization of <literal>IS NOT NULL</literal> and
       <literal>IS NULL</literal> query restrictions (David Rowley,
       Richard Guo, Andy Fan)
       <ulink url="&commit_baseurl;b262ad440">&sect;</ulink>
       <ulink url="&commit_baseurl;3af704098">&sect;</ulink>
       </para>

       <para>
       Remove <literal>IS NOT NULL</literal> restrictions from queries on
       <literal>NOT NULL</literal> columns and eliminate scans on
       <literal>NOT NULL</literal> columns if <literal>IS NULL</literal>
       is specified.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-03-04 [07c36c133] Support partition pruning on boolcol IS [NOT] UNKNOWN
-->

      <listitem>
       <para>
       Allow partition pruning on boolean columns on <literal>IS [NOT]
       UNKNOWN</literal> conditionals (David Rowley)
       <ulink url="&commit_baseurl;07c36c133">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-01-20 [075df6b20] Add planner support functions for range operators &lt;@ and
-->

      <listitem>
       <para>
       Improve optimization of range values when using containment
       operators &lt;@ and @&gt; (Kim Johan Andersson, Jian He)
       <ulink url="&commit_baseurl;075df6b20">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-02-15 [9f1337639] Pull up ANY-SUBLINK with the necessary lateral support.
-->

      <listitem>
       <para>
       Allow correlated <literal>IN</literal> subqueries to be transformed
       into joins (Andy Fan, Tom Lane)
       <ulink url="&commit_baseurl;9f1337639">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-10-05 [a8a968a82] Consider cheap startup paths in add_paths_to_append_rel
-->

      <listitem>
       <para>
       Improve optimization of the <literal>LIMIT</literal> clause
       on partitioned tables, inheritance parents, and <literal>UNION
       ALL</literal> queries (Andy Fan, David Rowley)
       <ulink url="&commit_baseurl;a8a968a82">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-14 [e08d74ca1] Allow plan nodes with initPlans to be considered paralle
-->

      <listitem>
       <para>
       Allow query nodes to be run in parallel in more cases (Tom Lane)
       <ulink url="&commit_baseurl;e08d74ca1">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-01-21 [0452b461b] Explore alternative orderings of group-by pathkeys durin
-->

      <listitem>
       <para>
       Allow <literal>GROUP BY</literal> columns to be internally
       ordered to match <literal>ORDER BY</literal> (Andrei Lepikhov,
       Teodor Sigaev)
       <ulink url="&commit_baseurl;0452b461b">&sect;</ulink>
       </para>

       <para>
       This can be disabled using server variable
       <xref linkend="guc-enable-groupby-reordering"/>.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-03-25 [66c0185a3] Allow planner to use Merge Append to efficiently impleme
-->

      <listitem>
       <para>
       Allow <literal>UNION</literal> (without <literal>ALL</literal>)
       to use MergeAppend (David Rowley)
       <ulink url="&commit_baseurl;66c0185a3">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-02-01 [9d1a5354f] Fix costing bug in MergeAppend
-->

      <listitem>
       <para>
       Fix MergeAppend plans to more accurately compute the number of
       rows that need to be sorted (Alexander Kuzmenkov)
       <ulink url="&commit_baseurl;9d1a5354f">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-07-04 [625d5b3ca] Allow Incremental Sorts on GiST and SP-GiST indexes
-->

      <listitem>
       <para>
       Allow  <link linkend="gist">GiST</link> and <link
       linkend="spgist">SP-GiST</link> indexes to be part of incremental
       sorts (Miroslav Bendik)
       <ulink url="&commit_baseurl;625d5b3ca">&sect;</ulink>
       </para>

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

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-11-27 [bc3c8db8a] Display length and bounds histograms in pg_stats
-->

      <listitem>
       <para>
       Add columns to <link
       linkend="view-pg-stats"><structname>pg_stats</structname></link>
       to report range-type histogram information (Egor Rogov, Soumyadeep
       Chakraborty)
       <ulink url="&commit_baseurl;bc3c8db8a">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-indexes">
     <title>Indexes</title>

     <itemizedlist>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2024-04-06 [5bf748b86] Enhance nbtree ScalarArrayOp execution.
-->

      <listitem>
       <para>
       Allow <link linkend="btree">btree</link> indexes to more
       efficiently find a set of values, such as those supplied by
       <literal>IN</literal> clauses using constants (Peter Geoghegan,
       Matthias van de Meent)
       <ulink url="&commit_baseurl;5bf748b86">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-12-08 [b43757171] Allow parallel CREATE INDEX for BRIN indexes
-->

      <listitem>
       <para>
       Allow <link linkend="brin"><acronym>BRIN</acronym></link> indexes
       to be created using parallel workers (Tomas Vondra, Matthias van
       de Meent)
       <ulink url="&commit_baseurl;b43757171">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-03 [6dbb49026] Combine freezing and pruning steps in VACUUM
-->

      <listitem>
       <para>
       Allow vacuum to more efficiently remove and freeze tuples (Melanie
       Plageman, Heikki Linnakangas)
       <ulink url="&commit_baseurl;6dbb49026">&sect;</ulink>
       </para>

       <para>
       <acronym>WAL</acronym> traffic caused by vacuum is also more
       compact.
       </para>
      </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2024-03-07 [ee1b30f12] Add template for adaptive radix tree
Author: Masahiko Sawada <msawada@postgresql.org>
2024-03-21 [30e144287] Add TIDStore, to store sets of TIDs (ItemPointerData) ef
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-02 [667e65aac] Use TidStore for dead tuple TIDs storage during lazy vac
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-03 [6dbb49026] Combine freezing and pruning steps in VACUUM
-->

      <listitem>
       <para>
       Allow vacuum to more efficiently store tuple references (Masahiko
       Sawada, John Naylor)
       <ulink url="&commit_baseurl;ee1b30f12">&sect;</ulink>
       <ulink url="&commit_baseurl;30e144287">&sect;</ulink>
       <ulink url="&commit_baseurl;667e65aac">&sect;</ulink>
       <ulink url="&commit_baseurl;6dbb49026">&sect;</ulink>
       </para>

       <para>
       Additionally, vacuum is no longer silently limited to one gigabyte
       of memory when <xref linkend="guc-maintenance-work-mem"/> or <xref
       linkend="guc-autovacuum-work-mem"/> are higher.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-01-18 [c120550ed] Optimize vacuuming of relations with no indexes.
-->

      <listitem>
       <para>
       Optimize vacuuming of relations with no indexes (Melanie Plageman)
       <ulink url="&commit_baseurl;c120550ed">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-04-06 [98f320eb2] Increase default vacuum_buffer_usage_limit to 2MB.
-->

      <listitem>
       <para>
       Increase default <xref linkend="guc-vacuum-buffer-usage-limit"/>
       to 2MB (Thomas Munro)
       <ulink url="&commit_baseurl;98f320eb2">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-26 [d365ae705] Optimize roles_is_member_of() with a Bloom filter.
-->

      <listitem>
       <para>
       Improve performance when checking roles with many memberships
       (Nathan Bossart)
       <ulink url="&commit_baseurl;d365ae705">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-25 [71e4cc6b8] Optimize WAL insertion lock acquisition and release with
-->

      <listitem>
       <para>
       Improve performance of heavily-contended <acronym>WAL</acronym>
       writes (Bharath Rupireddy)
       <ulink url="&commit_baseurl;71e4cc6b8">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-04-07 [c4ab7da60] Avoid needless large memcpys in libpq socket writing
-->

      <listitem>
       <para>
       Improve performance when transferring large blocks of data to a
       client (Melih Mutlu)
       <ulink url="&commit_baseurl;c4ab7da60">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-04-03 [210622c60] Provide vectored variant of ReadBuffer().
Author: Thomas Munro <tmunro@postgresql.org>
2024-04-08 [b7b0f3f27] Use streaming I/O in sequential scans.
Author: Thomas Munro <tmunro@postgresql.org>
2024-04-08 [041b96802] Use streaming I/O in ANALYZE.
-->

      <listitem>
       <para>
       Allow the grouping of file system reads with the new system variable
       <xref linkend="guc-io-combine-limit"/> (Thomas Munro, Andres Freund,
       Melanie Plageman, Nazir Bilal Yavuz)
       <ulink url="&commit_baseurl;210622c60">&sect;</ulink>
       <ulink url="&commit_baseurl;b7b0f3f27">&sect;</ulink>
       <ulink url="&commit_baseurl;041b96802">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-monitoring">
     <title>Monitoring</title>

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-30 [96f052613] Introduce pg_stat_checkpointer
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-12-25 [12915a58e] Enhance checkpointer restartpoint statistics
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-03-14 [e820db5b5] Improve documentation for pg_stat_checkpointer fields
-->

      <listitem>
       <para>
       Create system view <link
       linkend="monitoring-pg-stat-checkpointer-view"><structname>pg_stat_checkpointer</structname></link>
       (Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov)
       <ulink url="&commit_baseurl;96f052613">&sect;</ulink>
       <ulink url="&commit_baseurl;12915a58e">&sect;</ulink>
       <ulink url="&commit_baseurl;e820db5b5">&sect;</ulink>
       </para>

       <para>
       Relevant columns have been removed from <link
       linkend="pg-stat-bgwriter-view"><structname>pg_stat_bgwriter</structname></link>
       and added to this new system view.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-11-12 [23c8c0c8f] Add ability to reset all shared stats types in pg_stat_r
Author: Michael Paquier <michael@paquier.xyz>
2023-11-16 [2e8a0edc2] Add target "slru" to pg_stat_reset_shared()
Author: Michael Paquier <michael@paquier.xyz>
2023-11-14 [e5cca6288] Add support for pg_stat_reset_slru without argument
-->

      <listitem>
       <para>
       Improve control over resetting statistics (Atsushi Torikoshi,
       Bharath Rupireddy)
       <ulink url="&commit_baseurl;23c8c0c8f">&sect;</ulink>
       <ulink url="&commit_baseurl;2e8a0edc2">&sect;</ulink>
       <ulink url="&commit_baseurl;e5cca6288">&sect;</ulink>
       </para>

       <para>
       Allow <link
       linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared()</function></link>
       (with no arguments) and
       pg_stat_reset_shared(<literal>NULL</literal>) to reset all
       shared statistics.  Allow pg_stat_reset_shared('slru') and <link
       linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_slru()</function></link>
       (with no arguments) to reset <acronym>SLRU</acronym> statistics,
       which was already possible with pg_stat_reset_slru(NULL).
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-01-25 [1d35f705e] Add more LOG messages when starting and ending recovery
-->

      <listitem>
       <para>
       Add log messages related to <acronym>WAL</acronym> recovery from
       backups (Andres Freund)
       <ulink url="&commit_baseurl;1d35f705e">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-08-26 [e48b19c5d] Generate new LOG for "trust" connections under log_conne
-->

      <listitem>
       <para>
       Add <xref linkend="guc-log-connections"/> log line for
       <literal>trust</literal> connections (Jacob Champion)
       <ulink url="&commit_baseurl;e48b19c5d">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-11-21 [7c3fb505b] Log messages for replication slot acquisition and releas
-->

      <listitem>
       <para>
       Add log message to report walsender acquisition and release of
       replication slots (Bharath Rupireddy)
       <ulink url="&commit_baseurl;7c3fb505b">&sect;</ulink>
       </para>

       <para>
       This is enabled by the server variable <xref
       linkend="guc-log-replication-commands"/>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-08-20 [1e68e43d3] Add system view pg_wait_events
-->

      <listitem>
       <para>
       Add system view <link
       linkend="view-pg-wait-events"><structname>pg_wait_events</structname></link>
       that reports wait event types (Bertrand Drouvot)
       <ulink url="&commit_baseurl;1e68e43d3">&sect;</ulink>
       </para>

       <para>
       This is useful for adding descriptions
       to wait events reported in <link
       linkend="monitoring-pg-stat-activity-view"><structname>pg_stat_activity</structname></link>.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-10-13 [0013ba290] Add wait events for checkpoint delay mechanism.
-->

      <listitem>
       <para>
       Add <link linkend="view-pg-wait-events">wait events</link> for
       checkpoint delays (Thomas Munro)
       <ulink url="&commit_baseurl;0013ba290">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2023-07-11 [46ebdfe16] Report index vacuum progress.
-->

      <listitem>
       <para>
       Allow vacuum to report the progress of index processing (Sami
       Imseih)
       <ulink url="&commit_baseurl;46ebdfe16">&sect;</ulink>
       </para>

       <para>
       This appears in system view <link
       linkend="pg-stat-progress-vacuum-view"><structname>pg_stat_progress_vacuum</structname></link>
       columns <structfield>indexes_total</structfield> and
       <structfield>indexes_processed</structfield>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-privileges">
     <title>Privileges</title>

     <itemizedlist>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-13 [ecb0fd337] Reintroduce MAINTAIN privilege and pg_maintain predefine
-->

      <listitem>
       <para>
       Allow granting the right to perform maintenance operations
       (Nathan Bossart)
       <ulink url="&commit_baseurl;ecb0fd337">&sect;</ulink>
       </para>

       <para>
       The permission can be granted on a per-table basis using the <link
       linkend="ddl-priv-maintain"><literal>MAINTAIN</literal></link>
       privilege and on a per-role basis via the <link
       linkend="predefined-roles"><literal>pg_maintain</literal></link>
       predefined role.  Permitted operations are
       <command>VACUUM</command>, <command>ANALYZE</command>,
       <command>REINDEX</command>, <command>REFRESH MATERIALIZED
       VIEW</command>, <command>CLUSTER</command>, and <command>LOCK
       TABLE</command>.
       </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-02-14 [8d8afd48d] Allow pg_monitor to execute pg_current_logfile().
-->

      <listitem>
       <para>
       Allow roles with <link
       linkend="predefined-roles"><literal>pg_monitor</literal></link>
       membership to execute <link
       linkend="functions-info-session-table"><function>pg_current_logfile()</function></link>
       (Pavlo Golub, Nathan Bossart)
       <ulink url="&commit_baseurl;8d8afd48d">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-server-config">
     <title>Server Configuration</title>

     <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-03-29 [d3ae2a24f] Add allow_alter_system GUC.
-->

      <listitem>
       <para>
       Add system variable <xref linkend="guc-allow-alter-system"/>
       to disallow <link linkend="sql-altersystem"><command>ALTER
       SYSTEM</command></link> (Jelte Fennema-Nio, Gabriele Bartolini)
       <ulink url="&commit_baseurl;d3ae2a24f">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-10-21 [2d870b4ae] Allow ALTER SYSTEM to set unrecognized custom GUCs.
-->

      <listitem>
       <para>
       Allow <link linkend="sql-altersystem"><command>ALTER
       SYSTEM</command></link> to set unrecognized custom server variables
       (Tom Lane)
       <ulink url="&commit_baseurl;2d870b4ae">&sect;</ulink>
       </para>

       <para>
       This is also possible with <link linkend="sql-grant"><literal>GRANT
       ON PARAMETER</literal></link>.
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-02-15 [51efe38cb] Introduce transaction_timeout
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-02-16 [bf82f4379] Followup fixes for transaction_timeout
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-02-25 [28e858c0f] Improve documentation and GUC description for transactio
-->

      <listitem>
       <para>
       Add server variable <xref linkend="guc-transaction-timeout"/> to
       restrict the duration of transactions (Andrey Borodin, Japin Li,
       Junwang Zhao, Alexander Korotkov)
       <ulink url="&commit_baseurl;51efe38cb">&sect;</ulink>
       <ulink url="&commit_baseurl;bf82f4379">&sect;</ulink>
       <ulink url="&commit_baseurl;28e858c0f">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-13 [2d819a08a] Introduce "builtin" collation provider.
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-18 [846311051] Address more review comments on commit 2d819a08a1.
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-19 [f69319f2f] Support C.UTF-8 locale in the new builtin collation prov
Author: Jeff Davis <jdavis@postgresql.org>
2024-03-20 [9acae56ce] Inline basic UTF-8 functions.
-->

      <listitem>
       <para>
       Add a builtin platform-independent collation provider (Jeff Davis)
       <ulink url="&commit_baseurl;2d819a08a">&sect;</ulink>
       <ulink url="&commit_baseurl;846311051">&sect;</ulink>
       <ulink url="&commit_baseurl;f69319f2f">&sect;</ulink>
       <ulink url="&commit_baseurl;9acae56ce">&sect;</ulink>
       </para>

       <para>
       This supports <literal>C</literal> and <literal>C.UTF-8</literal>
       collations.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-06 [a14354cac] Add GUC parameter "huge_pages_status"
-->

      <listitem>
       <para>
       Add server variable <xref linkend="guc-huge-pages-status"/> to
       report the use of huge pages by Postgres (Justin Pryzby)
       <ulink url="&commit_baseurl;a14354cac">&sect;</ulink>
       </para>

       <para>
       This is useful when <xref linkend="guc-huge-pages"/> is set to
       <literal>try</literal>.
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-09-25 [7750fefdb] Add GUC for temporarily disabling event triggers
-->

      <listitem>
       <para>
       Add server variable to disable event triggers (Daniel Gustafsson)
       <ulink url="&commit_baseurl;7750fefdb">&sect;</ulink>
       </para>

       <para>
       The setting, <xref linkend="guc-event-triggers"/>, allows for the
       temporary disabling of event triggers for debugging.
       </para>
      </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-02-28 [53c2a97a9] Improve performance of subsystems on top of SLRU
-->

      <listitem>
       <para>
       Allow the <link
       linkend="monitoring-pg-stat-slru-view"><acronym>SLRU</acronym></link>
       cache sizes to be configured (Andrey Borodin, Dilip Kumar,
       Alvaro Herrera)
       <ulink url="&commit_baseurl;53c2a97a9">&sect;</ulink>
       </para>

       <para>
       The new server variables are <xref
       linkend="guc-commit-timestamp-buffers"/>,
       <xref linkend="guc-multixact-member-buffers"/>,
       <xref linkend="guc-multixact-offset-buffers"/>,
       <xref linkend="guc-notify-buffers"/>, <xref
       linkend="guc-serializable-buffers"/>, <xref
       linkend="guc-subtransaction-buffers"/>, and
       <xref linkend="guc-transaction-buffers"/>. <xref
       linkend="guc-commit-timestamp-buffers"/>, <xref
       linkend="guc-transaction-buffers"/>, and <xref
       linkend="guc-subtransaction-buffers"/> scale up automatically with
       <xref linkend="guc-shared-buffers"/>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-replication">
     <title>Streaming Replication and Recovery</title>

     <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-12-20 [dc2123400] Add support for incremental backup.
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-04-05 [f8ce4ed78] Allow copying files using clone/copy_file_range
-->

      <listitem>
       <para>
       Add support for incremental file system backup (Robert Haas,
       Jakub Wartak, Tomas Vondra)
       <ulink url="&commit_baseurl;dc2123400">&sect;</ulink>
       <ulink url="&commit_baseurl;f8ce4ed78">&sect;</ulink>
       </para>

       <para>
       Incremental backups can be created using <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>'s
       new <option>--incremental</option>
       option.  The new application <link
       linkend="app-pgcombinebackup"><application>pg_combinebackup</application></link>
       allows manipulation of base and incremental file system backups.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-12-20 [174c48050] Add a new WAL summarizer process.
Author: Nathan Bossart <nathan@postgresql.org>
2024-01-09 [d97ef756a] Fix documentation for wal_summary_keep_time.
Author: Robert Haas <rhaas@postgresql.org>
2024-01-09 [f896057e4] Document WAL summarization information functions.
Author: Robert Haas <rhaas@postgresql.org>
2024-01-11 [d9ef650fc] Add new function pg_get_wal_summarizer_state().
-->

      <listitem>
       <para>
       Allow the creation of <acronym>WAL</acronym> summarization files
       (Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski)
       <ulink url="&commit_baseurl;174c48050">&sect;</ulink>
       <ulink url="&commit_baseurl;d97ef756a">&sect;</ulink>
       <ulink url="&commit_baseurl;f896057e4">&sect;</ulink>
       <ulink url="&commit_baseurl;d9ef650fc">&sect;</ulink>
       </para>

       <para>
       These files record the block numbers that have changed within an
       <link linkend="datatype-pg-lsn"><acronym>LSN</acronym></link>
       range and are useful for incremental file
       system backups.  This is controlled by the server
       variables <xref linkend="guc-summarize-wal"/> and <xref
       linkend="guc-wal-summary-keep-time"/>, and introspected with <link
       linkend="functions-wal-summary"><function>pg_available_wal_summaries()</function></link>,
       <function>pg_wal_summary_contents()</function>, and
       <function>pg_get_wal_summarizer_state()</function>.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-03-13 [2041bc427] Add the system identifier to backup manifests.
-->

      <listitem>
       <para>
       Add the system identifier to file system <link
       linkend="backup-manifest-format">backup manifest</link> files
       (Amul Sul)
       <ulink url="&commit_baseurl;2041bc427">&sect;</ulink>
       </para>

       <para>
       This helps detect invalid <acronym>WAL</acronym> usage.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-03-21 [a145f424d] Allow dbname to be written as part of connstring via pg_
-->

      <listitem>
       <para>
       Allow connection string value
       <literal>dbname</literal> to be written when <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       writes connection information to
       <filename>postgresql.auto.conf</filename> (Vignesh C, Hayato Kuroda)
       <ulink url="&commit_baseurl;a145f424d">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-01-04 [007693f2a] Track conflict_reason in pg_replication_slots.
Author: Amit Kapila <akapila@postgresql.org>
2024-03-22 [6ae701b43] Track invalidation_reason in pg_replication_slots.
-->

      <listitem>
       <para>
       Add column <link
       linkend="view-pg-replication-slots"><structname>pg_replication_slots</structname>.<structfield>invalidation_reason</structfield></link>
       to report the reason for invalid slots (Shveta Malik, Bharath
       Rupireddy)
       <ulink url="&commit_baseurl;007693f2a">&sect;</ulink>
       <ulink url="&commit_baseurl;6ae701b43">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-03-25 [a11f330b5] Track last_inactive_time in pg_replication_slots.
Author: Amit Kapila <akapila@postgresql.org>
2024-03-27 [6d49c8d4b] Change last_inactive_time to inactive_since in pg_replic
Author: Amit Kapila <akapila@postgresql.org>
2024-04-05 [6f132ed69] Allow synced slots to have their inactive_since.
-->

      <listitem>
       <para>
       Add column <link
       linkend="view-pg-replication-slots"><structname>pg_replication_slots</structname>.<structfield>inactive_since</structfield></link>
       to report slot inactivity duration (Bharath Rupireddy)
       <ulink url="&commit_baseurl;a11f330b5">&sect;</ulink>
       <ulink url="&commit_baseurl;6d49c8d4b">&sect;</ulink>
       <ulink url="&commit_baseurl;6f132ed69">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-02-14 [ddd5f4f54] Add a slot synchronization function.
Author: Amit Kapila <akapila@postgresql.org>
2024-02-16 [7a424ece4] Add more LOG and DEBUG messages for slot synchronization
-->

      <listitem>
       <para>
       Add function <link
       linkend="functions-replication-table"><function>pg_sync_replication_slots()</function></link>
       to synchronize logical replication slots (Hou Zhijie, Shveta Malik,
       Ajin Cherian, Peter Eisentraut)
       <ulink url="&commit_baseurl;ddd5f4f54">&sect;</ulink>
       <ulink url="&commit_baseurl;7a424ece4">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-01-29 [732924043] Allow setting failover property in the replication comma
-->

      <listitem>
       <para>
       Add the <literal>failover</literal> property to the <link
       linkend="protocol-replication">replication protocol</link> (Hou
       Zhijie, Shveta Malik)
       <ulink url="&commit_baseurl;732924043">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-17-logical">
     <title><link linkend="logical-replication">Logical Replication</link></title>

     <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-03-25 [d44032d01] pg_createsubscriber: creates a new logical replica from
-->

      <listitem>
       <para>
       Add application <link
       linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link>
       to create a logical replica from a physical standby server
       (Euler Taveira)
       <ulink url="&commit_baseurl;d44032d01">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-10-26 [29d0a77fa] Migrate logical slots to the new node during an upgrade.
Author: Amit Kapila <akapila@postgresql.org>
2024-01-02 [9a17be1e2] Allow upgrades to preserve the full subscription's state
-->

      <listitem>
       <para>
       Have <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       migrate valid logical slots and subscriptions (Hayato Kuroda,
       Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal)
       <ulink url="&commit_baseurl;29d0a77fa">&sect;</ulink>
       <ulink url="&commit_baseurl;9a17be1e2">&sect;</ulink>
       </para>

       <para>
       This allows logical replication to continue
       quickly after the upgrade.  This only works for old
       <productname>PostgreSQL</productname> clusters that are version
       17 or later.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-01-25 [c393308b6] Allow to enable failover property for replication slots
-->

      <listitem>
       <para>
       Enable the failover of <link
       linkend="logical-replication-subscription-slot">logical slots</link>
       (Hou Zhijie, Shveta Malik, Ajin Cherian)
       <ulink url="&commit_baseurl;c393308b6">&sect;</ulink>
       </para>

       <para>
       This is controlled by an optional fifth argument to <link
       linkend="functions-replication-table"><function>pg_create_logical_replication_slot()</function></link>.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-02-22 [93db6cbda] Add a new slot sync worker to synchronize logical slots
Author: Amit Kapila <akapila@postgresql.org>
2024-03-06 [60c07820d] Doc: Improve replication slot synchronization section.
-->

      <listitem>
       <para>
       Add server variable <xref linkend="guc-sync-replication-slots"/>
       to enable failover logical slot synchronization (Shveta Malik,
       Hou Zhijie, Peter Smith)
       <ulink url="&commit_baseurl;93db6cbda">&sect;</ulink>
       <ulink url="&commit_baseurl;60c07820d">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-01-30 [776621a5e] Add a failover option to subscriptions.
Author: Amit Kapila <akapila@postgresql.org>
2024-02-07 [22f7e61a6] Clean-ups for 776621a5e4 and 7329240437.
-->

      <listitem>
       <para>
       Add logical replication failover control to <link
       linkend="sql-createsubscription"><literal>CREATE/ALTER
       SUBSCRIPTION</literal></link> (Shveta Malik, Hou Zhijie, Ajin
       Cherian)
       <ulink url="&commit_baseurl;776621a5e">&sect;</ulink>
       <ulink url="&commit_baseurl;22f7e61a6">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-07-14 [edca34243] Allow the use of a hash index on the subscriber during r
-->

      <listitem>
       <para>
       Allow the application of logical replication changes to use
       <link linkend="hash-index">hash</link> indexes on the subscriber
       (Hayato Kuroda)
       <ulink url="&commit_baseurl;edca34243">&sect;</ulink>
       </para>

       <para>
       Previously only <link linkend="btree">btree</link> indexes could
       be used for this purpose.
       </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-03 [5bec1d6bc] Improve eviction algorithm in ReorderBuffer using max-he
-->

      <listitem>
       <para>
       Improve <link linkend="logicaldecoding">logical decoding</link>
       performance in cases where there are many subtransactions
       (Masahiko Sawada)
       <ulink url="&commit_baseurl;5bec1d6bc">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-10-17 [79243de13] Restart the apply worker if the privileges have been rev
-->

      <listitem>
       <para>
       Restart apply workers if subscription owner's superuser privileges
       are revoked (Vignesh C)
       <ulink url="&commit_baseurl;79243de13">&sect;</ulink>
       </para>

       <para>
       This forces reauthentication.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-18 [173b56f1e] Add flush option to pg_logical_emit_message()
-->

      <listitem>
       <para>
       Add <literal>flush</literal> option to <link
       linkend="functions-replication-table"><function>pg_logical_emit_message()</function></link>
       (Michael Paquier)
       <ulink url="&commit_baseurl;173b56f1e">&sect;</ulink>
       </para>

       <para>
       This makes the message durable.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-03-08 [bf279ddd1] Introduce a new GUC 'standby_slot_names'.
Author: Amit Kapila <akapila@postgresql.org>
2024-07-01 [0f934b073] Rename standby_slot_names to synchronized_standby_slots.
-->

      <listitem>
       <para>
       Allow specification of physical standbys that must be synchronized
       before they are visible to subscribers (Hou Zhijie, Shveta Malik)
       <ulink url="&commit_baseurl;bf279ddd1">&sect;</ulink>
       <ulink url="&commit_baseurl;0f934b073">&sect;</ulink>
       </para>

       <para>
       The new server variable is <xref linkend="guc-synchronized-standby-slots"/>.
       </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-09-25 [13aeaf079] Add worker type to pg_stat_subscription.
-->

      <listitem>
       <para>
       Add worker type column to <link
       linkend="monitoring-pg-stat-subscription"><structname>pg_stat_subscription</structname></link>
       (Peter Smith)
       <ulink url="&commit_baseurl;13aeaf079">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-17-utility">
    <title>Utility Commands</title>

    <itemizedlist>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-01-16 [9e2d87011] Add new COPY option SAVE_ERROR_TO
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-01-19 [b725b7eec] Rename COPY option from SAVE_ERROR_TO to ON_ERROR
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-02-03 [40bbc8cf0] Improve documentation for COPY ... ON_ERROR ...
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-17 [a6d0fa5ef] Disallow specifying ON_ERROR option without value.
-->

     <listitem>
      <para>
      Add new <link linkend="sql-copy"><command>COPY</command></link>
      option <literal>ON_ERROR ignore</literal> to discard error rows
      (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo
      Nagata)
      <ulink url="&commit_baseurl;9e2d87011">&sect;</ulink>
      <ulink url="&commit_baseurl;b725b7eec">&sect;</ulink>
      <ulink url="&commit_baseurl;40bbc8cf0">&sect;</ulink>
      <ulink url="&commit_baseurl;a6d0fa5ef">&sect;</ulink>
      </para>

      <para>
      The default behavior is <literal>ON_ERROR stop</literal>.
      </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-01 [f5a227895] Add new COPY option LOG_VERBOSITY.
-->

     <listitem>
      <para>
      Add new <command>COPY</command> option
      <literal>LOG_VERBOSITY</literal> which reports <literal>COPY
      FROM</literal> ignored error rows (Bharath Rupireddy)
      <ulink url="&commit_baseurl;f5a227895">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-01-25 [729439607] Add progress reporting of skipped tuples during COPY FRO
-->

     <listitem>
      <para>
      Allow <literal>COPY FROM</literal> to report the number of skipped
      rows during processing (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;729439607">&sect;</ulink>
      </para>

      <para>
      This appears in system view column <link
      linkend="copy-progress-reporting"><structname>pg_stat_progress_copy</structname>.<structfield>tuples_skipped</structfield></link>.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-09-30 [f6d4c9cf1] Provide FORCE_NULL * and FORCE_NOT_NULL * options for CO
-->

     <listitem>
      <para>
      In <literal>COPY FROM</literal>, allow easy specification that all
      columns should be forced null or not null (Zhang Mingli)
      <ulink url="&commit_baseurl;f6d4c9cf1">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-01-16 [699586315] Support identity columns in partitioned tables
-->

     <listitem>
      <para>
      Allow partitioned tables to have identity columns (Ashutosh Bapat)
      <ulink url="&commit_baseurl;699586315">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-07-12 [8c852ba9a] Allow some exclusion constraints on partitions
-->

     <listitem>
      <para>
      Allow <link linkend="ddl-constraints-exclusion">exclusion
      constraints</link> on partitioned tables (Paul A. Jungwirth)
      <ulink url="&commit_baseurl;8c852ba9a">&sect;</ulink>
      </para>

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

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-01-13 [4f622503d] Make attstattarget nullable
-->

     <listitem>
      <para>
      Add clearer <link linkend="sql-altertable"><command>ALTER
      TABLE</command></link> method to set a column to the default
      statistics target (Peter Eisentraut)
      <ulink url="&commit_baseurl;4f622503d">&sect;</ulink>
      </para>

      <para>
      The new syntax is <literal>ALTER TABLE ... SET STATISTICS
      DEFAULT</literal>; using <literal>SET STATISTICS -1</literal>
      is still supported.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-01-04 [5d06e99a3] ALTER TABLE command to change generation expression
-->

     <listitem>
      <para>
      Allow <literal>ALTER TABLE</literal> to change a column's generation
      expression (Amul Sul)
      <ulink url="&commit_baseurl;5d06e99a3">&sect;</ulink>
      </para>

      <para>
      The syntax is <literal>ALTER TABLE ... ALTER COLUMN ... SET
      EXPRESSION</literal>.
      </para>
     </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-03-25 [374c7a229] Allow specifying an access method for partitioned tables
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-03-28 [e2395cdbe] ALTER TABLE: rework determination of access method ID
-->

     <listitem>
      <para>
      Allow specification of <link linkend="tableam">table access
      methods</link> on partitioned tables (Justin Pryzby, Soumyadeep
      Chakraborty, Michael Paquier)
      <ulink url="&commit_baseurl;374c7a229">&sect;</ulink>
      <ulink url="&commit_baseurl;e2395cdbe">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-03-08 [d61a6cad6] Add support for DEFAULT in ALTER TABLE .. SET ACCESS MET
-->

     <listitem>
      <para>
      Add <literal>DEFAULT</literal> setting for <literal>ALTER TABLE
      .. SET ACCESS METHOD</literal> (Michael Paquier)
      <ulink url="&commit_baseurl;d61a6cad6">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-10-16 [e83d1b0c4] Add support event triggers on authenticated login
-->

     <listitem>
      <para>
      Add support for <link linkend="sql-createeventtrigger">event
      triggers</link> that fire at connection time (Konstantin Knizhnik,
      Mikhail Gribkov)
      <ulink url="&commit_baseurl;e83d1b0c4">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-12-04 [f21848de2] Add support for REINDEX in event triggers
-->

     <listitem>
      <para>
      Add event trigger support for <link
      linkend="sql-reindex"><command>REINDEX</command></link> (Garrett
      Thornburg, Jian He)
      <ulink url="&commit_baseurl;f21848de2">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-07-19 [cdaedfc96] Support parenthesized syntax for CLUSTER without a table
-->

     <listitem>
      <para>
      Allow parenthesized syntax for <link
      linkend="sql-cluster"><command>CLUSTER</command></link> options if
      a table name is not specified (Nathan Bossart)
      <ulink url="&commit_baseurl;cdaedfc96">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-17-explain">
     <title><link linkend="sql-explain"><command>EXPLAIN</command></link></title>

     <itemizedlist>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-01-29 [5de890e36] Add EXPLAIN (MEMORY) to report planner memory consumptio
-->

      <listitem>
       <para>
       Allow <command>EXPLAIN</command> to report
       optimizer memory usage (Ashutosh Bapat)
       <ulink url="&commit_baseurl;5de890e36">&sect;</ulink>
       </para>

       <para>
       The option is called <literal>MEMORY</literal>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-04-03 [06286709e] Invent SERIALIZE option for EXPLAIN.
-->

      <listitem>
       <para>
       Add <command>EXPLAIN</command> option <literal>SERIALIZE</literal>
       to report the cost of converting data for network transmission
       (Stepan Rutz, Matthias van de Meent)
       <ulink url="&commit_baseurl;06286709e">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-19 [295c36c0c] Add local_blk_{read|write}_time I/O timing statistics fo
-->

      <listitem>
       <para>
       Add local I/O block read/write timing statistics to
       <command>EXPLAIN</command>'s <literal>BUFFERS</literal> output
       (Nazir Bilal Yavuz)
       <ulink url="&commit_baseurl;295c36c0c">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-19 [fd0398fcb] Improve EXPLAIN's display of SubPlan nodes and output pa
-->

      <listitem>
       <para>
       Improve <command>EXPLAIN</command>'s display of SubPlan nodes and
       output parameters (Tom Lane, Dean Rasheed)
       <ulink url="&commit_baseurl;fd0398fcb">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-09-08 [5a3423ad8] Add JIT deform_counter
-->

      <listitem>
       <para>
       Add <acronym>JIT</acronym> <literal>deform_counter</literal>
       details to <command>EXPLAIN</command> (Dmitry Dolgov)
       <ulink url="&commit_baseurl;5a3423ad8">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-11-14 [519fc1bd9] Support +/- infinity in the interval data type.
-->

     <listitem>
      <para>
      Allow the <type>interval</type> data type to support
      <literal>+/-infinity</literal> values (Joseph Koshakow, Jian He,
      Ashutosh Bapat)
      <ulink url="&commit_baseurl;519fc1bd9">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-24 [af1d39584] Allow more cases to pass the unsafe-use-of-new-enum-valu
-->

     <listitem>
      <para>
      Allow the use of an <link
      linkend="datatype-enum"><type>ENUM</type></link> added via <link
      linkend="sql-altertype"><command>ALTER TYPE</command></link> if
      the type was created in the same transaction (Tom Lane)
      <ulink url="&commit_baseurl;af1d39584">&sect;</ulink>
      </para>

      <para>
      This was previously disallowed.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-17-merge">
    <title><link linkend="sql-merge">MERGE</link></title>


    <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-02-29 [5f2e179bd] Support MERGE into updatable views.
-->

     <listitem>
      <para>
      Allow <command>MERGE</command> to modify updatable views (Dean
      Rasheed)
      <ulink url="&commit_baseurl;5f2e179bd">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-03-30 [0294df2f1] Add support for MERGE ... WHEN NOT MATCHED BY SOURCE.
-->

     <listitem>
      <para>
      Add <literal>WHEN NOT MATCHED BY SOURCE</literal> to
      <command>MERGE</command> (Dean Rasheed)
      <ulink url="&commit_baseurl;0294df2f1">&sect;</ulink>
      </para>

      <para>
      <literal>WHEN NOT MATCHED</literal> on target rows was already
      supported.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-03-17 [c649fa24a] Add RETURNING support to MERGE.
-->

     <listitem>
      <para>
      Allow <command>MERGE</command> to use the
      <literal>RETURNING</literal> clause (Dean Rasheed)
      <ulink url="&commit_baseurl;c649fa24a">&sect;</ulink>
      </para>

      <para>
      The new <literal>RETURNING</literal> function
      <function>merge_action()</function> reports on the
      <acronym>DML</acronym> that generated the row.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Amit Langote <amitlan@postgresql.org>
2024-04-04 [de3600452] Add basic JSON_TABLE() functionality
Author: Amit Langote <amitlan@postgresql.org>
2024-04-08 [bb766cde6] JSON_TABLE: Add support for NESTED paths and columns
-->

     <listitem>
      <para>
      Add function <link
      linkend="functions-sqljson-table"><function>JSON_TABLE()</function></link>
      to convert <type>JSON</type> data to a table representation (Nikita
      Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew
      Dunstan, Amit Langote, Jian He)
      <ulink url="&commit_baseurl;de3600452">&sect;</ulink>
      <ulink url="&commit_baseurl;bb766cde6">&sect;</ulink>
      </para>

      <para>
      This function can be used in the <literal>FROM</literal> clause of
      <command>SELECT</command> queries as a tuple source.
      </para>
     </listitem>

<!--
Author: Amit Langote <amitlan@postgresql.org>
2023-07-26 [03734a7fe] Add more SQL/JSON constructor functions
-->

     <listitem>
      <para>
      Add <acronym>SQL/JSON</acronym> constructor functions <link
      linkend="functions-json-creation-table"><function>JSON()</function></link>,
      <function>JSON_SCALAR()</function>, and
      <function>JSON_SERIALIZE()</function> (Nikita Glukhov, Teodor Sigaev,
      Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote)
      <ulink url="&commit_baseurl;03734a7fe">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Amit Langote <amitlan@postgresql.org>
2024-01-24 [aaaf9449e] Add soft error handling to some expression nodes
Author: Amit Langote <amitlan@postgresql.org>
2024-01-24 [1edb3b491] Adjust populate_record_field() to handle errors softly
Author: Amit Langote <amitlan@postgresql.org>
2024-03-21 [6185c9737] Add SQL/JSON query functions
Author: Amit Langote <amitlan@postgresql.org>
2024-04-18 [c0fc07518] SQL/JSON: Fix issues with DEFAULT .. ON ERROR / EMPTY
Author: Amit Langote <amitlan@postgresql.org>
2024-04-18 [ef744ebb7] SQL/JSON: Miscellaneous fixes and improvements
-->

     <listitem>
      <para>
      Add <acronym>SQL/JSON</acronym> query functions <link
      linkend="functions-sqljson-querying"><function>JSON_EXISTS()</function></link>,
      <function>JSON_QUERY()</function>, and
      <function>JSON_VALUE()</function> (Nikita Glukhov, Teodor Sigaev,
      Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote,
      Peter Eisentraut, Jian He)
      <ulink url="&commit_baseurl;aaaf9449e">&sect;</ulink>
      <ulink url="&commit_baseurl;1edb3b491">&sect;</ulink>
      <ulink url="&commit_baseurl;6185c9737">&sect;</ulink>
      <ulink url="&commit_baseurl;c0fc07518">&sect;</ulink>
      <ulink url="&commit_baseurl;ef744ebb7">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2024-01-25 [66ea94e8e] Implement various jsonpath methods
-->

     <listitem>
      <para>
      Add <link linkend="functions-sqljson-path-operators">jsonpath</link>
      methods to convert <type>JSON</type> values to other
      <type>JSON</type> data types (Jeevan Chalke)
      <ulink url="&commit_baseurl;66ea94e8e">&sect;</ulink>
      </para>

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

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-01-25 [8ba6fdf90] Support TZ and OF format codes in <function>to_timestamp()</function>.
-->

     <listitem>
      <para>
      Add <link
      linkend="functions-formatting-table"><function>to_timestamp()</function></link>
      time zone format specifiers (Tom Lane)
      <ulink url="&commit_baseurl;8ba6fdf90">&sect;</ulink>
      </para>

      <para>
      <literal>TZ</literal> accepts time zone abbreviations or numeric
      offsets, while <literal>OF</literal> accepts only numeric offsets.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-13 [97957fdba] Add support for AT LOCAL
-->

     <listitem>
      <para>
      Allow the session <link linkend="guc-timezone">time zone</link>
      to be specified by <literal>AT LOCAL</literal> (Vik Fearing)
      <ulink url="&commit_baseurl;97957fdba">&sect;</ulink>
      </para>

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

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-03-19 [794f10f6b] Add some UUID support functions
-->

     <listitem>
      <para>
      Add functions <link
      linkend="functions-uuid"><function>uuid_extract_timestamp()</function></link>
      and <function>uuid_extract_version()</function> to return
      <acronym>UUID</acronym> information (Andrey Borodin)
      <ulink url="&commit_baseurl;794f10f6b">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-03-27 [e6341323a] Add functions to generate random numbers in a specified
-->

     <listitem>
      <para>
      Add functions to generate random numbers in a specified range
      (Dean Rasheed)
      <ulink url="&commit_baseurl;e6341323a">&sect;</ulink>
      </para>

      <para>
      The functions are <link
      linkend="functions-math-random-table"><function>random(min,
      max)</function></link> and they take values of type
      <type>integer</type>, <type>bigint</type>, and <type>numeric</type>.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-08-23 [260a1f18d] Add to_bin() and to_oct().
-->

     <listitem>
      <para>
      Add functions to convert integers to binary and octal strings
      (Eric Radman, Nathan Bossart)
      <ulink url="&commit_baseurl;260a1f18d">&sect;</ulink>
      </para>

      <para>
      The functions are <link
      linkend="functions-string-other"><function>to_bin()</function></link>
      and <function>to_oct()</function>.
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-11-01 [a02b37fc0] Additional unicode primitive functions.
-->

     <listitem>
      <para>
      Add Unicode informational functions (Jeff Davis)
      <ulink url="&commit_baseurl;a02b37fc0">&sect;</ulink>
      </para>

      <para>
      Function <link
      linkend="functions-info-version"><function>unicode_version()</function></link>
      returns the Unicode version,
      <function>icu_unicode_version()</function>
      returns the <acronym>ICU</acronym> version, and
      <function>unicode_assigned()</function> returns if the characters
      are assigned Unicode codepoints.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-11-06 [526fe0d79] Add XMLText function (SQL/XML X038)
-->

     <listitem>
      <para>
      Add function <link
      linkend="functions-producing-xml-xmltext"><function>xmltext()</function></link>
      to convert text to a single <type>XML</type> text node (Jim Jones)
      <ulink url="&commit_baseurl;526fe0d79">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-20 [1218ca995] Add to_regtypemod function to extract typemod from a str
-->

     <listitem>
      <para>
      Add function <link
      linkend="functions-info-catalog-table"><function>to_regtypemod()</function></link>
      to return the type modifier of a type specification (David Wheeler,
      Erik Wienhold)
      <ulink url="&commit_baseurl;1218ca995">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-30 [b154d8a6d] Add pg_basetype() function to extract a domain's base ty
-->

     <listitem>
      <para>
      Add <link
      linkend="functions-info-catalog-table"><function>pg_basetype()</function></link>
      function to return a domain's base type (Steve Chavez)
      <ulink url="&commit_baseurl;b154d8a6d">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-14 [d1162cfda] Add pg_column_toast_chunk_id().
-->

     <listitem>
      <para>
      Add function <link
      linkend="functions-admin-dbsize"><function>pg_column_toast_chunk_id()</function></link>
      to return a value's <link
      linkend="storage-toast"><acronym>TOAST</acronym></link> identifier
      (Yugo Nagata)
      <ulink url="&commit_baseurl;d1162cfda">&sect;</ulink>
      </para>

      <para>
      This returns <literal>NULL</literal> if the value is not stored
      in <acronym>TOAST</acronym>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-01-04 [5e8674dc8] In plpgsql, allow %TYPE and %ROWTYPE to be followed by a
-->

     <listitem>
      <para>
      Allow plpgsql <link
      linkend="plpgsql-declaration-type"><literal>%TYPE</literal></link>
      and <literal>%ROWTYPE</literal> specifications to represent arrays
      of non-array types (Quan Zongliang, Pavel Stehule)
      <ulink url="&commit_baseurl;5e8674dc8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-01-05 [43b46aae1] Clean up some edge cases in plpgsql's %TYPE parsing.
-->

     <listitem>
      <para>
      Allow plpgsql <literal>%TYPE</literal> specification to reference
      composite column (Tom Lane)
      <ulink url="&commit_baseurl;43b46aae1">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Joe Conway <mail@joeconway.com>
2024-01-09 [a7be2a6c2] Add new function, PQchangePassword(), to libpq
-->

     <listitem>
      <para>
      Add libpq function to change role passwords (Joe Conway)
      <ulink url="&commit_baseurl;a7be2a6c2">&sect;</ulink>
      </para>

      <para>
      The new function, <link
      linkend="libpq-PQchangePassword"><function>PQchangePassword()</function></link>,
      hashes the new password before sending it to the server.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-04 [28b572656] libpq: Add support for Close on portals and statements
-->

     <listitem>
      <para>
      Add libpq functions to close portals and prepared statements
      (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;28b572656">&sect;</ulink>
      </para>

      <para>
      The functions are <link
      linkend="libpq-PQclosePrepared"><function>PQclosePrepared()</function></link>,
      <link
      linkend="libpq-PQclosePortal"><function>PQclosePortal()</function></link>,
      <link
      linkend="libpq-PQsendClosePrepared"><function>PQsendClosePrepared()</function></link>,
      and <link
      linkend="libpq-PQsendClosePortal"><function>PQsendClosePortal()</function></link>.
      </para>
     </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2024-03-12 [61461a300] libpq: Add encrypted and non-blocking query cancellation
-->

     <listitem>
      <para>
      Add libpq <acronym>API</acronym> which allows for blocking and
      non-blocking <link linkend="libpq-cancel">cancel requests</link>,
      with encryption if already in use (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;61461a300">&sect;</ulink>
      </para>

      <para>
      Previously only blocking, unencrypted cancel requests were supported.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-04-02 [f5e4dedfa] Expose PQsocketPoll via libpq
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-06-13 [105024a47] Improve the granularity of PQsocketPoll's timeout parame
-->

     <listitem>
      <para>
      Add libpq function <link
      linkend="libpq-PQsocketPoll"><function>PQsocketPoll()</function></link>
      to allow polling of network sockets (Tristan Partin, Tom Lane)
      <ulink url="&commit_baseurl;f5e4dedfa">&sect;</ulink>
      <ulink url="&commit_baseurl;105024a47">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-01-16 [4794c2d31] libpq: Add PQsendPipelineSync()
-->

     <listitem>
      <para>
      Add libpq function <link
      linkend="libpq-PQsendPipelineSync"><function>PQsendPipelineSync()</function></link>
      to send a pipeline synchronization point (Anton Kirilov)
      <ulink url="&commit_baseurl;4794c2d31">&sect;</ulink>
      </para>

      <para>
      This is similar to <link
      linkend="libpq-PQpipelineSync"><function>PQpipelineSync()</function></link>
      but it does not flush to the server unless the size threshold of
      the output buffer is reached.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-04-06 [4643a2b26] Support retrieval of results in chunks with libpq.
-->

     <listitem>
      <para>
      Add libpq function <link
      linkend="libpq-PQsetChunkedRowsMode"><function>PQsetChunkedRowsMode()</function></link>
      to allow retrieval of results in chunks (Daniel V&eacute;rit&eacute;)
      <ulink url="&commit_baseurl;4643a2b26">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-08 [d39a49c1e] Support TLS handshake directly without SSLRequest negoti
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-08 [91044ae4b] Send ALPN in TLS handshake, require it in direct SSL con
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-04-24 [44e27f0a6] Support disallowing SSL renegotiation when using LibreSS
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-04-24 [d80f2ce29] Support SSL_R_VERSION_TOO_LOW when using LibreSSL
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-29 [03a0e0d4b] libpq: Enforce ALPN in direct SSL connections
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-04-29 [17a834a04] Reject SSL connection if ALPN is used but there's no com
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-05-11 [407e0b023] Change ALPN protocol ID to IANA-approved "postgresql"
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-05-16 [fb5718f35] Remove option to fall back from direct to postgres SSL n
-->

     <listitem>
      <para>
      Allow <acronym>TLS</acronym> connections without requiring a
      network round-trip negotiation (Greg Stark, Heikki Linnakangas,
      Peter Eisentraut, Michael Paquier, Daniel Gustafsson)
      <ulink url="&commit_baseurl;d39a49c1e">&sect;</ulink>
      <ulink url="&commit_baseurl;91044ae4b">&sect;</ulink>
      <ulink url="&commit_baseurl;44e27f0a6">&sect;</ulink>
      <ulink url="&commit_baseurl;d80f2ce29">&sect;</ulink>
      <ulink url="&commit_baseurl;03a0e0d4b">&sect;</ulink>
      <ulink url="&commit_baseurl;17a834a04">&sect;</ulink>
      <ulink url="&commit_baseurl;407e0b023">&sect;</ulink>
      <ulink url="&commit_baseurl;fb5718f35">&sect;</ulink>
      </para>

      <para>
      This is enabled with the client-side option <link
      linkend="libpq-connect-sslnegotiation"><literal>sslnegotiation=direct</literal></link>,
      requires <acronym>ALPN</acronym>, and only works on
      <productname>PostgreSQL</productname> 17 and later servers.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-17-psql">
     <title><xref linkend="app-psql"/></title>

     <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-11-13 [d1379ebf4] Improve default and empty privilege outputs in psql.
-->

     <listitem>
      <para>
      Improve <application>psql</application> display of default and
      empty privileges (Erik Wienhold, Laurenz Albe)
      <ulink url="&commit_baseurl;d1379ebf4">&sect;</ulink>
      </para>

      <para>
      Command <literal>\dp</literal> now displays <literal>(none)</literal>
      for empty privileges;  default still displays as empty.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-11-13 [d1379ebf4] Improve default and empty privilege outputs in psql.
-->

     <listitem>
      <para>
      Have backslash commands honor <literal>\pset null</literal> (Erik
      Wienhold, Laurenz Albe)
      <ulink url="&commit_baseurl;d1379ebf4">&sect;</ulink>
      </para>

      <para>
      Previously <literal>\pset null</literal> was ignored.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-08-29 [f347ec76e] Allow \watch queries to stop on minimum rows returned
-->

     <listitem>
      <para>
      Allow <application>psql</application>'s <literal>\watch</literal>
      to stop after a minimum number of rows returned (Greg Sabino Mullane)
      <ulink url="&commit_baseurl;f347ec76e">&sect;</ulink>
      </para>

      <para>
      The parameter is <literal>min_rows</literal>.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-04-02 [cafe10565] Allow SIGINT to cancel psql database reconnections.
-->

     <listitem>
      <para>
      Allow <application>psql</application> connection attempts to be
      canceled with control-C (Tristan Partin)
      <ulink url="&commit_baseurl;cafe10565">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-04-06 [90f517821] Re-implement psql's FETCH_COUNT feature atop libpq's chu
-->

     <listitem>
      <para>
      Allow <application>psql</application> to honor
      <literal>FETCH_COUNT</literal> for non-<command>SELECT</command>
      queries (Daniel V&eacute;rit&eacute;)
      <ulink url="&commit_baseurl;90f517821">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-06-30 [c951e9042] Add tab completion for CREATE SCHEMA in psql
Author: Michael Paquier <michael@paquier.xyz>
2023-10-13 [d16eb83ab] psql: Add completion support for AT [ LOCAL | TIME ZONE
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-11-28 [cd3424748] psql: Add tab completion for view options.
Author: Michael Paquier <michael@paquier.xyz>
2023-11-16 [816f10564] psql: Add some completion support for CREATE TABLE .. AS
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-03-16 [927332b95] psql: fix variable existence tab completion
Author: Masahiko Sawada <msawada@postgresql.org>
2024-03-28 [f1bb9284f] Improve tab completion for ALTER TABLE ALTER COLUMN SET
Author: Masahiko Sawada <msawada@postgresql.org>
2024-04-08 [304b6b1a6] Add more tab completion support for ALTER DEFAULT PRIVIL
Author: Michael Paquier <michael@paquier.xyz>
2024-05-01 [2800fbb2b] Add tab completion for EXPLAIN (MEMORY|SERIALIZE)
-->

     <listitem>
      <para>
      Improve <application>psql</application> tab completion (Dagfinn
      Ilmari Manns&aring;ker, Gilles Darold, Christoph Heiss, Steve Chavez,
      Vignesh C, Pavel Borisov, Jian He)
      <ulink url="&commit_baseurl;c951e9042">&sect;</ulink>
      <ulink url="&commit_baseurl;d16eb83ab">&sect;</ulink>
      <ulink url="&commit_baseurl;cd3424748">&sect;</ulink>
      <ulink url="&commit_baseurl;816f10564">&sect;</ulink>
      <ulink url="&commit_baseurl;927332b95">&sect;</ulink>
      <ulink url="&commit_baseurl;f1bb9284f">&sect;</ulink>
      <ulink url="&commit_baseurl;304b6b1a6">&sect;</ulink>
      <ulink url="&commit_baseurl;2800fbb2b">&sect;</ulink>
      </para>
     </listitem>

      </itemizedlist>

    </sect3>

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

     <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-01-11 [ee1bfd168] Add new pg_walsummary tool.
-->

     <listitem>
      <para>
      Add application <link
      linkend="app-pgwalsummary"><application>pg_walsummary</application></link>
      to dump <acronym>WAL</acronym> summary files (Robert Haas)
      <ulink url="&commit_baseurl;ee1bfd168">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-04-01 [a45c78e32] Rearrange pg_dump's handling of large objects for better
-->

     <listitem>
      <para>
      Allow <link
      linkend="app-pgdump"><application>pg_dump</application></link>'s
      large objects to be restorable in batches (Tom Lane)
      <ulink url="&commit_baseurl;a45c78e32">&sect;</ulink>
      </para>

      <para>
      This allows the restoration of many large objects to avoid
      transaction limits and to be restored in parallel.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-03-20 [522ed12f7] Add "- -exclude-extension" to pg_dump's options.
-->

     <listitem>
      <para>
      Add <application>pg_dump</application> option
      <option>--exclude-extension</option> (Ayush Vatsa)
      <ulink url="&commit_baseurl;522ed12f7">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-11-29 [a5cf808be] Read include/exclude commands for dump/restore from file
-->

     <listitem>
      <para>
      Allow <link
      linkend="app-pgdump"><application>pg_dump</application></link>, <link
      linkend="app-pg-dumpall"><application>pg_dumpall</application></link>,
      and <link
      linkend="app-pgrestore"><application>pg_restore</application></link>
      to specify include/exclude objects in a file (Pavel Stehule,
      Daniel Gustafsson)
      <ulink url="&commit_baseurl;a5cf808be">&sect;</ulink>
      </para>

      <para>
      The option is called <option>--filter</option>.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-09-06 [8c16ad3b4] Allow using syncfs() in frontend utilities.
-->

     <listitem>
      <para>
      Add the <option>--sync-method</option> parameter to several client
      applications (Justin Pryzby, Nathan Bossart)
      <ulink url="&commit_baseurl;8c16ad3b4">&sect;</ulink>
      </para>

      <para>
      The applications are <link
      linkend="app-initdb"><application>initdb</application></link>, <link
      linkend="app-pgbasebackup"><application>pg_basebackup</application></link>,
      <link
      linkend="app-pgchecksums"><application>pg_checksums</application></link>,
      <link linkend="app-pgdump"><application>pg_dump</application></link>,
      <link linkend="app-pgrewind"><application>pg_rewind</application></link>,
      and <link
      linkend="pgupgrade"><application>pg_upgrade</application></link>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-04-01 [959b38d77] Invent - -transaction-size option for pg_restore.
-->

     <listitem>
      <para>
      Add <link
      linkend="app-pgrestore"><application>pg_restore</application></link>
      option <option>--transaction-size</option> to allow object restores
      in transaction batches (Tom Lane)
      <ulink url="&commit_baseurl;959b38d77">&sect;</ulink>
      </para>

      <para>
      This allows the performance benefits of transaction batches without
      the problems of excessively large transaction blocks.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-25 [3ff01b2b6] Adjust pgbench option for debug mode.
-->

     <listitem>
      <para>
      Change <link
      linkend="pgbench"><application>pgbench</application></link> debug
      mode option from <option>-d</option> to <option>--debug</option>
      (Greg Sabino Mullane)
      <ulink url="&commit_baseurl;3ff01b2b6">&sect;</ulink>
      </para>

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

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2023-08-30 [3c662643c] Allow pgbench to exit immediately when any client is abo
-->

     <listitem>
      <para>
      Add pgbench option <option>--exit-on-abort</option> to exit after
      any client aborts (Yugo Nagata)
      <ulink url="&commit_baseurl;3c662643c">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-01-24 [94edfe250] pgbench: Add \syncpipeline
-->

     <listitem>
      <para>
      Add pgbench command <literal>\syncpipeline</literal> to allow
      sending of sync messages (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;94edfe250">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-19 [3f8c98d0b] pg_archivecleanup: Add - -clean-backup-history
-->

     <listitem>
      <para>
      Allow <link
      linkend="pgarchivecleanup"><application>pg_archivecleanup</application></link>
      to remove backup history files (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;3f8c98d0b">&sect;</ulink>
      </para>

      <para>
      The option is <option>--clean-backup-history</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-06-30 [dd7c60f19] Introduce long options in pg_archivecleanup
-->

     <listitem>
      <para>
      Add some long options to <application>pg_archivecleanup</application>
      (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;dd7c60f19">&sect;</ulink>
      </para>

      <para>
      The long options are <option>--debug</option>,
      <option>--dry-run</option>, and <option>--strip-extension</option>.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-09-21 [cca97ce6a] Allow dbname in pg_basebackup/pg_receivewal connstring
-->

     <listitem>
      <para>
      Allow <link
      linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
      and <link
      linkend="app-pgreceivewal"><application>pg_receivewal</application></link>
      to use dbname in their connection specification (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;cca97ce6a">&sect;</ulink>
      </para>

      <para>
      This is useful for connection poolers that are sensitive to the
      database name.
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-03-06 [d93627bcb] Add - -copy-file-range option to pg_upgrade.
-->

     <listitem>
      <para>
      Add <link
      linkend="pgupgrade"><application>pg_upgrade</application></link>
      option <option>--copy-file-range</option> (Thomas Munro)
      <ulink url="&commit_baseurl;d93627bcb">&sect;</ulink>
      </para>

      <para>
      This is supported on <systemitem class="osname">Linux</systemitem>
      and <systemitem class="osname">FreeBSD</systemitem>.
      </para>
     </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-03-25 [47f99a407] reindexdb: Add the index-level REINDEX with multiple job
-->

     <listitem>
      <para>
      Allow <link
      linkend="app-reindexdb"><application>reindexdb</application></link>
      <option>--index</option> to process indexes from different tables
      in parallel (Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov)
      <ulink url="&commit_baseurl;47f99a407">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-11 [24c928ad9] reindexdb: Allow specifying objects to process in all da
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-11 [648928c79] vacuumdb: Allow specifying objects to process in all dat
Author: Nathan Bossart <nathan@postgresql.org>
2024-03-11 [1b49d56d3] clusterdb: Allow specifying tables to process in all dat
-->

     <listitem>
      <para>
      Allow <link linkend="app-reindexdb">reindexdb</link>,
      <link linkend="app-vacuumdb">vacuumdb</link>, and <link
      linkend="app-clusterdb">clusterdb</link> to process objects in all
      databases matching a pattern (Nathan Bossart)
      <ulink url="&commit_baseurl;24c928ad9">&sect;</ulink>
      <ulink url="&commit_baseurl;648928c79">&sect;</ulink>
      <ulink url="&commit_baseurl;1b49d56d3">&sect;</ulink>
      </para>

      <para>
      The new option <option>--all</option> controls this behavior.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-17-source-code">
    <title>Source Code</title>

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-03 [8e278b657] Remove support for OpenSSL 1.0.1
-->

     <listitem>
      <para>
      Remove support for <productname>OpenSSL</productname> 1.0.1
      (Michael Paquier)
      <ulink url="&commit_baseurl;8e278b657">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-11-17 [284cbaea7] Allow tests to pass in OpenSSL FIPS mode (TAP tests)
Author: Peter Eisentraut <peter@eisentraut.org>
2023-11-17 [3c44e7d8d] Allow tests to pass in OpenSSL FIPS mode (rest)
-->

     <listitem>
      <para>
      Allow tests to pass in <productname>OpenSSL</productname>
      <acronym>FIPS</acronym> mode (Peter Eisentraut)
      <ulink url="&commit_baseurl;284cbaea7">&sect;</ulink>
      <ulink url="&commit_baseurl;3c44e7d8d">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-04-06 [792752af4] Optimize pg_popcount() with AVX-512 instructions.
Author: Nathan Bossart <nathan@postgresql.org>
2024-04-06 [41c51f0c6] Optimize visibilitymap_count() with AVX-512 instructions
-->

     <listitem>
      <para>
      Use <acronym>CPU AVX</acronym>-512 instructions for bit counting
      (Paul Amonson, Nathan Bossart, Ants Aasma)
      <ulink url="&commit_baseurl;792752af4">&sect;</ulink>
      <ulink url="&commit_baseurl;41c51f0c6">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-01-25 [820b5af73] jit: Require at least LLVM 10.
-->

     <listitem>
      <para>
      Require <productname><acronym>LLVM</acronym></productname> version
      10 or later (Thomas Munro)
      <ulink url="&commit_baseurl;820b5af73">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2023-08-10 [4d14ccd6a] Use native CRC instructions on 64-bit LoongArch
-->

     <listitem>
      <para>
      Use native <acronym>CRC</acronym> instructions on 64-bit
      <productname>LoongArch</productname> CPUs (Xudong Yang)
      <ulink url="&commit_baseurl;4d14ccd6a">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-02-28 [0b16bb877] Remove AIX support
-->

     <listitem>
      <para>
      Remove <systemitem class="osname"><acronym>AIX</acronym></systemitem>
      support (Heikki Linnakangas)
      <ulink url="&commit_baseurl;0b16bb877">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-12-20 [1301c80b2] Remove MSVC scripts
-->

     <listitem>
      <para>
      Remove the <productname>Microsoft Visual
      Studio</productname>-specific <productname>PostgreSQL</productname>
      build option (Michael Paquier)
      <ulink url="&commit_baseurl;1301c80b2">&sect;</ulink>
      </para>

      <para>
      <productname>Meson</productname> is now the only available method
      for <productname>Visual Studio</productname> builds.
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-07-12 [68a4b58ec] Remove - -disable-thread-safety and related code.
Author: Thomas Munro <tmunro@postgresql.org>
2023-07-12 [ce0b0fa3e] Doc: Adjust libpq docs about thread safety.
-->

     <listitem>
      <para>
      Remove configure option <option>--disable-thread-safety</option>
      (Thomas Munro, Heikki Linnakangas)
      <ulink url="&commit_baseurl;68a4b58ec">&sect;</ulink>
      <ulink url="&commit_baseurl;ce0b0fa3e">&sect;</ulink>
      </para>

      <para>
      We now assume all supported platforms have sufficient thread support.
      </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-02-28 [1c1eec0f2] Remove configure - -with-CC option
-->

     <listitem>
      <para>
      Remove <application>configure</application> option
      <option>--with-CC</option> (Heikki Linnakangas)
      <ulink url="&commit_baseurl;1c1eec0f2">&sect;</ulink>
      </para>

      <para>
      Setting the <envar>CC</envar> environment variable is now the only
      supported method for specifying the compiler.
      </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-10-26 [f0efa5aec] Introduce the concept of read-only StringInfos
-->

     <listitem>
      <para>
      User-defined data type receive functions will no longer receive
      their data null-terminated (David Rowley)
      <ulink url="&commit_baseurl;f0efa5aec">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2024-04-04 [3311ea86e] Introduce a non-recursive JSON parser
-->

     <listitem>
      <para>
      Add incremental <type>JSON</type> parser for use with huge
      <type>JSON</type> documents (Andrew Dunstan)
      <ulink url="&commit_baseurl;3311ea86e">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-02-28 [363eb0599] Convert README to Markdown.
-->

     <listitem>
      <para>
      Convert top-level <filename>README</filename> file to
      <productname>Markdown</productname> (Nathan Bossart)
      <ulink url="&commit_baseurl;363eb0599">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-12-22 [e2b73f4a4] Stop generating plain-text INSTALL instructions.
-->

     <listitem>
      <para>
      Remove no longer needed top-level <filename>INSTALL</filename> file
      (Tom Lane)
      <ulink url="&commit_baseurl;e2b73f4a4">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-11-06 [721856ff2] Remove distprep
-->

     <listitem>
      <para>
      Remove <application>make</application>'s <literal>distprep</literal>
      option (Peter Eisentraut)
      <ulink url="&commit_baseurl;721856ff2">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-01-23 [79b03dbb3] Support shared libraries on Android (using make)
-->

     <listitem>
      <para>
      Add  <application>make</application> support for
      <productname>Android</productname> shared libraries (Peter
      Eisentraut)
      <ulink url="&commit_baseurl;79b03dbb3">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-01-22 [d86d20f0b] Add backend support for injection points
Author: Michael Paquier <michael@paquier.xyz>
2024-03-04 [37b369dc6] injection_points: Add wait and wakeup of processes
Author: Michael Paquier <michael@paquier.xyz>
2024-04-08 [f587338de] injection_points: Introduce runtime conditions
Author: Noah Misch <noah@leadboat.com>
2024-06-27 [bb93640a6] Add wait event type "InjectionPoint", a custom
-->

     <listitem>
      <para>
      Add backend support for injection points (Michael Paquier)
      <ulink url="&commit_baseurl;d86d20f0b">&sect;</ulink>
      <ulink url="&commit_baseurl;37b369dc6">&sect;</ulink>
      <ulink url="&commit_baseurl;f587338de">&sect;</ulink>
      <ulink url="&commit_baseurl;bb93640a6">&sect;</ulink>
      </para>

      <para>
      This is used for server debugging and they must be enabled at server
      compile time.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-01-19 [8b2bcf3f2] Introduce the dynamic shared memory registry.
-->

     <listitem>
      <para>
      Add dynamic shared memory registry (Nathan Bossart)
      <ulink url="&commit_baseurl;8b2bcf3f2">&sect;</ulink>
      </para>

      <para>
       This allows shared libraries which are not initialized at startup
       to coordinate dynamic shared memory access.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-04-04 [2a217c371] Coordinate emit_log_hook and all log destinations to sha
-->

     <listitem>
      <para>
      Fix <literal>emit_log_hook</literal> to use the same time value as
      other log records for the same query (Kambam Vinay, Michael Paquier)
      <ulink url="&commit_baseurl;2a217c371">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-01-25 [7014c9a4b] Doc: improve documentation for jsonpath behavior.
-->

     <listitem>
      <para>
      Improve documentation for using <literal>jsonpath</literal> for
      predicate checks (David Wheeler)
      <ulink url="&commit_baseurl;7014c9a4b">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-17-modules">
    <title>Additional Modules</title>

    <itemizedlist>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2023-08-15 [9e9931d2b] Re-allow FDWs and custom scan providers to replace joins
-->

     <listitem>
      <para>
      Allow joins with non-join qualifications to be pushed down to
      foreign servers and custom scans (Richard Guo, Etsuro Fujita)
      <ulink url="&commit_baseurl;9e9931d2b">&sect;</ulink>
      </para>

      <para>
      Foreign data wrappers and custom scans will need to be modified to
      handle these cases.
      </para>
     </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-12-05 [824dbea3e] Add support for deparsing semi-joins to contrib/postgres
-->

     <listitem>
      <para>
      Allow pushdown of <literal>EXISTS</literal> and <literal>IN</literal>
      subqueries to <xref linkend="postgres-fdw"/> foreign servers
      (Alexander Pyhalov)
      <ulink url="&commit_baseurl;824dbea3e">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-11-02 [cac169d68] Increase DEFAULT_FDW_TUPLE_COST from 0.01 to 0.2
Author: John Naylor <john.naylor@postgresql.org>
2024-01-11 [f7f694b21] Update documentation of default fdw_tuple_cost
-->

     <listitem>
      <para>
      Increase the default foreign data wrapper tuple cost (David Rowley,
      Umair Shahid)
      <ulink url="&commit_baseurl;cac169d68">&sect;</ulink>
      <ulink url="&commit_baseurl;f7f694b21">&sect;</ulink>
      </para>

      <para>
      This value is used by the optimizer.
      </para>
     </listitem>

<!--
Author: Noah Misch <noah@leadboat.com>
2024-01-08 [d3c5f37dd] Make dblink interruptible, via new libpqsrv APIs.
-->

     <listitem>
      <para>
      Allow <link linkend="dblink"><application>dblink</application></link>
      database operations to be interrupted (Noah Misch)
      <ulink url="&commit_baseurl;d3c5f37dd">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-03-21 [485f0aa85] Add hash support functions and hash opclass for contrib/
-->

     <listitem>
      <para>
      Allow the creation of hash indexes on <application><xref
      linkend="ltree"/></application> columns (Tommy Pavlicek)
      <ulink url="&commit_baseurl;485f0aa85">&sect;</ulink>
      </para>

      <para>
      This also enables hash join and hash aggregation on
      <application>ltree</application> columns.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-09-20 [59f47fb98] unaccent: Add support for quoted translated characters
-->

     <listitem>
      <para>
      Allow <application><xref linkend="unaccent"/></application> character
      translation rules to contain whitespace and quotes (Michael Paquier)
      <ulink url="&commit_baseurl;59f47fb98">&sect;</ulink>
      </para>

      <para>
      The syntax for the <filename>unaccent.rules</filename> file has
      changed.
      </para>
     </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-10-28 [5ae208720] Teach contrib/amcheck to check the unique constraint vio
-->

     <listitem>
      <para>
      Allow <application><xref linkend="amcheck"/></application>
      to check for unique constraint violations using new option
      <option>--checkunique</option> (Anastasia Lubennikova, Pavel Borisov,
      Maxim Orlov)
      <ulink url="&commit_baseurl;5ae208720">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-11-07 [3c551ebed] citext: Allow tests to pass in OpenSSL FIPS mode
-->

     <listitem>
      <para>
      Allow <application><xref linkend="citext"/></application> tests to
      pass in OpenSSL <acronym>FIPS</acronym> mode (Peter Eisentraut)
      <ulink url="&commit_baseurl;3c551ebed">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-11-17 [795592865] pgcrypto: Allow tests to pass in OpenSSL FIPS mode
-->

     <listitem>
      <para>
      Allow <application><xref linkend="pgcrypto"/></application> tests
      to pass in OpenSSL <acronym>FIPS</acronym> mode (Peter Eisentraut)
      <ulink url="&commit_baseurl;795592865">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-11-27 [75680c3d8] Retire a few backwards compatibility macros.
-->

     <listitem>
      <para>
      Remove some unused <link linkend="spi"><acronym>SPI</acronym></link>
      macros (Bharath Rupireddy)
      <ulink url="&commit_baseurl;75680c3d8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-10-20 [2b5154bea] Extend ALTER OPERATOR to allow setting more optimization
-->

     <listitem>
      <para>
      Allow <link linkend="sql-alteroperator"><command>ALTER
      OPERATOR</command></link> to set more optimization attributes
      (Tommy Pavlicek)
      <ulink url="&commit_baseurl;2b5154bea">&sect;</ulink>
      </para>

      <para>
      This is useful for extensions.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-31 [c9af05465] Support custom wait events for wait event type "Extensio
Author: Michael Paquier <michael@paquier.xyz>
2023-10-04 [c8e318b1b] worker_spi: Rename custom wait event to "WorkerSpiMain"
Author: Michael Paquier <michael@paquier.xyz>
2023-10-05 [d61f2538a] postgres_fdw: Replace WAIT_EVENT_EXTENSION with custom w
Author: Michael Paquier <michael@paquier.xyz>
2023-10-05 [c789f0f6c] dblink: Replace WAIT_EVENT_EXTENSION with custom wait ev
-->

     <listitem>
      <para>
      Allow extensions to define <link
      linkend="xfunc-addin-wait-events">custom wait events</link>
      (Masahiro Ikeda)
      <ulink url="&commit_baseurl;c9af05465">&sect;</ulink>
      <ulink url="&commit_baseurl;c8e318b1b">&sect;</ulink>
      <ulink url="&commit_baseurl;d61f2538a">&sect;</ulink>
      <ulink url="&commit_baseurl;c789f0f6c">&sect;</ulink>
      </para>

      <para>
      Custom wait events have been added to <application><xref
      linkend="postgres-fdw"/></application> and <application><xref
      linkend="dblink"/></application>.
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-04-08 [13453eedd] Add pg_buffercache_evict() function for testing.
-->

     <listitem>
      <para>
      Add <application><xref linkend="pgbuffercache"/></application>
      function <function>pg_buffercache_evict()</function> to allow shared
      buffer eviction (Palak Chaturvedi, Thomas Munro)
      <ulink url="&commit_baseurl;13453eedd">&sect;</ulink>
      </para>

      <para>
      This is useful for testing.
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-17-pgstatstatements">
     <title><link linkend="pgstatstatements"><application>pg_stat_statements</application></link></title>

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-09-28 [11c34b342] Show parameters of CALL as constants in pg_stat_statemen
-->

      <listitem>
       <para>
       Replace <link linkend="sql-call"><command>CALL</command></link>
       parameters in <application>pg_stat_statements</application> with
       placeholders (Sami Imseih)
       <ulink url="&commit_baseurl;11c34b342">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-07-27 [31de7e60d] Show savepoint names as constants in pg_stat_statements
-->

      <listitem>
       <para>
       Replace savepoint names stored in
       <structname>pg_stat_statements</structname> with placeholders
       (Greg Sabino Mullane)
       <ulink url="&commit_baseurl;31de7e60d">&sect;</ulink>
       </para>

       <para>
       This greatly reduces the number of entries needed to record <link
       linkend="sql-savepoint"><command>SAVEPOINT</command></link>,
       <link linkend="sql-release-savepoint"><command>RELEASE
       SAVEPOINT</command></link>, and <link
       linkend="sql-rollback-to"><command>ROLLBACK TO
       SAVEPOINT</command></link> commands.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-08-12 [638d42a3c] Show GIDs of two-phase commit commands as constants in p
-->

      <listitem>
       <para>
       Replace the two-phase commit <acronym>GID</acronym>s stored in
       <structname>pg_stat_statements</structname> with placeholders
       (Michael Paquier)
       <ulink url="&commit_baseurl;638d42a3c">&sect;</ulink>
       </para>

       <para>
       This greatly reduces the number of entries needed to record
       <link linkend="sql-prepare-transaction"><command>PREPARE
       TRANSACTION</command></link>, <link
       linkend="sql-commit-prepared"><command>COMMIT
       PREPARED</command></link>, and <link
       linkend="sql-rollback-prepared"><command>ROLLBACK
       PREPARED</command></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-08-27 [bb45156f3] Show names of DEALLOCATE as constants in pg_stat_stateme
-->

      <listitem>
       <para>
       Track <link
       linkend="sql-deallocate"><command>DEALLOCATE</command></link>
       in <structname>pg_stat_statements</structname> (Dagfinn Ilmari
       Manns&aring;ker, Michael Paquier)
       <ulink url="&commit_baseurl;bb45156f3">&sect;</ulink>
       </para>

       <para>
       <command>DEALLOCATE</command> names are stored in
       <structname>pg_stat_statements</structname> as placeholders.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-10-19 [295c36c0c] Add local_blk_{read|write}_time I/O timing statistics fo
Author: Michael Paquier <michael@paquier.xyz>
2023-10-19 [5147ab1dd] pg_stat_statements: Add local_blk_{read|write}_time
-->

      <listitem>
       <para>
       Add local I/O block read/write timing statistics columns of
       <structname>pg_stat_statements</structname> (Nazir Bilal Yavuz)
       <ulink url="&commit_baseurl;295c36c0c">&sect;</ulink>
       <ulink url="&commit_baseurl;5147ab1dd">&sect;</ulink>
       </para>

       <para>
       The new columns are <structfield>local_blk_read_time</structfield>
       and <structfield>local_blk_write_time</structfield>.
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-09-08 [5a3423ad8] Add JIT deform_counter
-->

      <listitem>
       <para>
       Add <acronym>JIT</acronym> deform_counter details to
       <structname>pg_stat_statements</structname> (Dmitry Dolgov)
       <ulink url="&commit_baseurl;5a3423ad8">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-11-27 [dc9f8a798] Track statement entry timestamp in contrib/pg_stat_state
-->

      <listitem>
       <para>
       Add optional fourth argument (<literal>minmax_only</literal>)
       to <function>pg_stat_statements_reset()</function> to allow for
       the resetting of only min/max statistics (Andrei Zubkov)
       <ulink url="&commit_baseurl;dc9f8a798">&sect;</ulink>
       </para>

       <para>
       This argument defaults to <literal>false</literal>.
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-11-27 [dc9f8a798] Track statement entry timestamp in contrib/pg_stat_state
-->

      <listitem>
       <para>
       Add <structname>pg_stat_statements</structname>
       columns <structfield>stats_since</structfield> and
       <structfield>minmax_stats_since</structfield> to track entry
       creation time and last min/max reset time (Andrei Zubkov)
       <ulink url="&commit_baseurl;dc9f8a798">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-17-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>Adnan Dautovic</member>
    <member>Aidar Imamov</member>
    <member>Ajin Cherian</member>
    <member>Akash Shankaran</member>
    <member>Akshat Jaimini</member>
    <member>Alaa Attya</member>
    <member>Aleksander Alekseev</member>
    <member>Aleksej Orlov</member>
    <member>Alena Rybakina</member>
    <member>Alex Hsieh</member>
    <member>Alex Malek</member>
    <member>Alex Shulgin</member>
    <member>Alex Work</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Kozhemyakin</member>
    <member>Alexander Kuzmenkov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Pyhalov</member>
    <member>Alexey Palazhchenko</member>
    <member>Alfons Kemper</member>
    <member>Álvaro Herrera</member>
    <member>Amadeo Gallardo</member>
    <member>Amit Kapila</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Anastasia Lubennikova</member>
    <member>Anatoly Zaretsky</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Ulbrich</member>
    <member>Andrei Lepikhov</member>
    <member>Andrei Zubkov</member>
    <member>Andres Freund</member>
    <member>Andrew Alsup</member>
    <member>Andrew Atkinson</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Kane</member>
    <member>Andrey Borodin</member>
    <member>Andrey Rachitskiy</member>
    <member>Andrey Sokolov</member>
    <member>Andy Fan</member>
    <member>Anthonin Bonnefoy</member>
    <member>Anthony Hsu</member>
    <member>Anton Kirilov</member>
    <member>Anton Melnikov</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Ants Aasma</member>
    <member>Antti Lampinen</member>
    <member>Aramaki Zyake</member>
    <member>Artem Anisimov</member>
    <member>Artur Zakirov</member>
    <member>Ashutosh Bapat</member>
    <member>Ashutosh Sharma</member>
    <member>Atsushi Torikoshi</member>
    <member>Attila Gulyás</member>
    <member>Ayush Tiwari</member>
    <member>Ayush Vatsa</member>
    <member>Bartosz Chrol</member>
    <member>Benoît Ryder</member>
    <member>Bernd Helmle</member>
    <member>Bertrand Drouvot</member>
    <member>Bharath Rupireddy</member>
    <member>Bo Andreson</member>
    <member>Boshomi Phenix</member>
    <member>Bowen Shi</member>
    <member>Boyu Yang</member>
    <member>Bruce Momjian</member>
    <member>Cameron Vogt</member>
    <member>Cary Huang</member>
    <member>Cédric Villemain</member>
    <member>Changhong Fei</member>
    <member>Chantal Keller</member>
    <member>Chapman Flack</member>
    <member>Chengxi Sun</member>
    <member>Chris Travers</member>
    <member>Christian Maurer</member>
    <member>Christian Stork</member>
    <member>Christoph Berg</member>
    <member>Christoph Heiss</member>
    <member>Christophe Courtois</member>
    <member>Christopher Kline</member>
    <member>Claudio Freire</member>
    <member>Colin Caine</member>
    <member>Corey Huinker</member>
    <member>Curt Kolovson</member>
    <member>Dag Lem</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Damir Belyalov</member>
    <member>Daniel Fredouille</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Shelepanov</member>
    <member>Daniel Vérité</member>
    <member>Daniel Westermann</member>
    <member>Darren Rush</member>
    <member>Dave Cramer</member>
    <member>Dave Page</member>
    <member>David Christensen</member>
    <member>David Cook</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Hillman</member>
    <member>David Perez</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Wheeler</member>
    <member>David Zhang</member>
    <member>Dean Rasheed</member>
    <member>Denis Erokhin</member>
    <member>Denis Laxalde</member>
    <member>Devrim Gündüz</member>
    <member>Dilip Kumar</member>
    <member>Dimitrios Apostolou</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Koval</member>
    <member>Dmitry Vasiliev</member>
    <member>Dominique Devienne</member>
    <member>Dong Wook Lee</member>
    <member>Donghang Lin</member>
    <member>Dongming Liu</member>
    <member>Drew Callahan</member>
    <member>Drew Kimball</member>
    <member>Dzmitry Jachnik</member>
    <member>Egor Chindyaskin</member>
    <member>Egor Rogov</member>
    <member>Ekaterina Kiryanova</member>
    <member>Elena Indrupskaya</member>
    <member>Elizabeth Christensen</member>
    <member>Emre Hasegeli</member>
    <member>Eric Cyr</member>
    <member>Eric Mutta</member>
    <member>Eric Radman</member>
    <member>Eric Ridge</member>
    <member>Erik Rijkers</member>
    <member>Erik Wienhold</member>
    <member>Erki Eessaar</member>
    <member>Ethan Mertz</member>
    <member>Etsuro Fujita</member>
    <member>Eugen Konkov</member>
    <member>Euler Taveira</member>
    <member>Evan Macbeth</member>
    <member>Evgeny Morozov</member>
    <member>Fabien Coelho</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Farias de Oliveira</member>
    <member>Feliphe Pozzer</member>
    <member>Fire Emerald</member>
    <member>Flavien Guedez</member>
    <member>Floris Van Nee</member>
    <member>Francesco Degrassi</member>
    <member>Frank Streitzig</member>
    <member>Gabriele Bartolini</member>
    <member>Garrett Thornburg</member>
    <member>Gavin Flower</member>
    <member>Gavin Panella</member>
    <member>Gilles Darold</member>
    <member>Gilles Parc</member>
    <member>Grant Gryczan</member>
    <member>Greg Nancarrow</member>
    <member>Greg Sabino Mullane</member>
    <member>Greg Stark</member>
    <member>Gurjeet Singh</member>
    <member>Haiying Tang</member>
    <member>Hajime Matsunaga</member>
    <member>Hal Takahara</member>
    <member>Hanefi Onaldi</member>
    <member>Hannu Krosing</member>
    <member>Hans Buschmann</member>
    <member>Hao Wu</member>
    <member>Hao Zhang</member>
    <member>Hayato Kuroda</member>
    <member>Heikki Linnakangas</member>
    <member>Hemanth Sandrana</member>
    <member>Himanshu Upadhyaya</member>
    <member>Hironobu Suzuki</member>
    <member>Holger Reise</member>
    <member>Hongxu Ma</member>
    <member>Hongyu Song</member>
    <member>Horst Reiterer</member>
    <member>Hubert Lubaczewski</member>
    <member>Hywel Carver</member>
    <member>Ian Barwick</member>
    <member>Ian Ilyasov</member>
    <member>Ilya Nenashev</member>
    <member>Isaac Morland</member>
    <member>Israel Barth Rubio</member>
    <member>Ivan Kartyshov</member>
    <member>Ivan Kolombet</member>
    <member>Ivan Lazarev</member>
    <member>Ivan Panchenko</member>
    <member>Ivan Trofimov</member>
    <member>Jacob Champion</member>
    <member>Jacob Speidel</member>
    <member>Jacques Combrink</member>
    <member>Jaime Casanova</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Pang</member>
    <member>Jani Rahkola</member>
    <member>Japin Li</member>
    <member>Jeevan Chalke</member>
    <member>Jeff Davis</member>
    <member>Jeff Janes</member>
    <member>Jelte Fennema-Nio</member>
    <member>Jeremy Schneider</member>
    <member>Jian Guo</member>
    <member>Jian He</member>
    <member>Jim Jones</member>
    <member>Jim Keener</member>
    <member>Jim Nasby</member>
    <member>Jingtang Zhang</member>
    <member>Jingxian Li</member>
    <member>Jingzhou Fu</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Ekins</member>
    <member>John Hsu</member>
    <member>John Morris</member>
    <member>John Naylor</member>
    <member>John Russell</member>
    <member>Jonathan Katz</member>
    <member>Jordi Gutiérrez</member>
    <member>Joseph Koshakow</member>
    <member>Josh Kupershmidt</member>
    <member>Joshua D. Drake</member>
    <member>Joshua Uyehara</member>
    <member>Jubilee Young</member>
    <member>Julien Rouhaud</member>
    <member>Junwang Zhao</member>
    <member>Justin Pryzby</member>
    <member>Kaido Vaikla</member>
    <member>Kambam Vinay</member>
    <member>Karen Talarico</member>
    <member>Karina Litskevich</member>
    <member>Karl O. Pinc</member>
    <member>Kashif Zeeshan</member>
    <member>Kim Johan Andersson</member>
    <member>Kirill Reshke</member>
    <member>Kirk Parker</member>
    <member>Kirk Wolak</member>
    <member>Kisoon Kwon</member>
    <member>Koen De Groote</member>
    <member>Kohei KaiGai</member>
    <member>Kong Man</member>
    <member>Konstantin Knizhnik</member>
    <member>Kouhei Sutou</member>
    <member>Krishnakumar R</member>
    <member>Kuntal Ghosh</member>
    <member>Kurt Roeckx</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lang Liu</member>
    <member>Lars Kanis</member>
    <member>Laurenz Albe</member>
    <member>Lauri Laanmets</member>
    <member>Legs Mansion</member>
    <member>Lukas Fittl</member>
    <member>Magnus Hagander</member>
    <member>Mahendrakar Srinivasarao</member>
    <member>Maiquel Grassi</member>
    <member>Manos Emmanouilidis</member>
    <member>Marcel Hofstetter</member>
    <member>Marcos Pegoraro</member>
    <member>Marian Krucina</member>
    <member>Marina Polyakova</member>
    <member>Mark Dilger</member>
    <member>Mark Guertin</member>
    <member>Mark Sloan</member>
    <member>Markus Winand</member>
    <member>Marlene Reiterer</member>
    <member>Martín Marqués</member>
    <member>Martin Nash</member>
    <member>Martin Schlossarek</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masaki Kuwamura</member>
    <member>Masao Fujii</member>
    <member>Mason Sharp</member>
    <member>Matheus Alcantara</member>
    <member>Mats Kindahl</member>
    <member>Matthias Kuhn</member>
    <member>Matthias van de Meent</member>
    <member>Maxim Boguk</member>
    <member>Maxim Orlov</member>
    <member>Maxim Yablokov</member>
    <member>Maxime Boyer</member>
    <member>Melanie Plageman</member>
    <member>Melih Mutlu</member>
    <member>Merlin Moncure</member>
    <member>Micah Gate</member>
    <member>Michael Banck</member>
    <member>Michael Bondarenko</member>
    <member>Michael Paquier</member>
    <member>Michael Wang</member>
    <member>Michael Zhilin</member>
    <member>Michail Nikolaev</member>
    <member>Michal Bartak</member>
    <member>Michal Kleczek</member>
    <member>Mikhail Gribkov</member>
    <member>Mingli Zhang</member>
    <member>Miroslav Bendik</member>
    <member>Mitsuru Hinata</member>
    <member>Moaaz Assali</member>
    <member>Muralikrishna Bandaru</member>
    <member>Nathan Bossart</member>
    <member>Nazir Bilal Yavuz</member>
    <member>Neil Tiffin</member>
    <member>Ngigi Waithaka</member>
    <member>Nikhil Benesch</member>
    <member>Nikhil Raj</member>
    <member>Nikita Glukhov</member>
    <member>Nikita Kalinin</member>
    <member>Nikita Malakhov</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nisha Moond</member>
    <member>Nishant Sharma</member>
    <member>Nitin Jadhav</member>
    <member>Noah Misch</member>
    <member>Noriyoshi Shinoda</member>
    <member>Ole Peder Brandtzæg</member>
    <member>Oleg Bartunov</member>
    <member>Oleg Sibiryakov</member>
    <member>Oleg Tselebrovskiy</member>
    <member>Olleg Samoylov</member>
    <member>Onder Kalaci</member>
    <member>Ondrej Navratil</member>
    <member>Pablo Kharo</member>
    <member>Palak Chaturvedi</member>
    <member>Pantelis Theodosiou</member>
    <member>Paul Amonson</member>
    <member>Paul Jungwirth</member>
    <member>Pavel Borisov</member>
    <member>Pavel Kulakov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Stehule</member>
    <member>Pavlo Golub</member>
    <member>Pedro Gallegos</member>
    <member>Pete Storer</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Smith</member>
    <member>Philip Warner</member>
    <member>Philipp Salvisberg</member>
    <member>Pierre Ducroquet</member>
    <member>Pierre Fortin</member>
    <member>Przemyslaw Sztoch</member>
    <member>Quynh Tran</member>
    <member>Raghuveer Devulapalli</member>
    <member>Ranier Vilela</member>
    <member>Reid Thompson</member>
    <member>Rian McGuire</member>
    <member>Richard Guo</member>
    <member>Richard Vesely</member>
    <member>Ridvan Korkmaz</member>
    <member>Robert Haas</member>
    <member>Robert Scott</member>
    <member>Robert Treat</member>
    <member>Roberto Mello</member>
    <member>Robins Tharakan</member>
    <member>Roman Lozko</member>
    <member>Ronan Dunklau</member>
    <member>Rui Zhao</member>
    <member>Ryo Matsumura</member>
    <member>Ryoga Yoshida</member>
    <member>Sameer Kumar</member>
    <member>Sami Imseih</member>
    <member>Samuel Dussault</member>
    <member>Sanjay Minni</member>
    <member>Satoru Koizumi</member>
    <member>Sebastian Skalacki</member>
    <member>Sergei Glukhov</member>
    <member>Sergei Kornilov</member>
    <member>Sergey Prokhorenko</member>
    <member>Sergey Sargsyan</member>
    <member>Sergey Shinderuk</member>
    <member>Shaozhong Shi</member>
    <member>Shaun Thomas</member>
    <member>Shay Rojansky</member>
    <member>Shihao Zhong</member>
    <member>Shinya Kato</member>
    <member>Shlok Kyal</member>
    <member>Shruthi Gowda</member>
    <member>Shubham Khanna</member>
    <member>Shulin Zhou</member>
    <member>Shveta Malik</member>
    <member>Simon Riggs</member>
    <member>Soumyadeep Chakraborty</member>
    <member>Sravan Velagandula</member>
    <member>Stan Hu</member>
    <member>Stepan Neretin</member>
    <member>Stepan Rutz</member>
    <member>Stéphane Schildknecht</member>
    <member>Stephane Tachoires</member>
    <member>Stephen Frost</member>
    <member>Steve Atkins</member>
    <member>Steve Chavez</member>
    <member>Suraj Khamkar</member>
    <member>Suraj Kharage</member>
    <member>Svante Richter</member>
    <member>Svetlana Derevyanko</member>
    <member>Sylvain Frandaz</member>
    <member>Takayuki Tsunakawa</member>
    <member>Tatsuo Ishii</member>
    <member>Tatsuro Yamada</member>
    <member>Tender Wang</member>
    <member>Teodor Sigaev</member>
    <member>Thom Brown</member>
    <member>Thomas Munro</member>
    <member>Tim Carey-Smith</member>
    <member>Tim Needham</member>
    <member>Tim Palmer</member>
    <member>Tobias Bussmann</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tommy Pavlicek</member>
    <member>Tomonari Katsumata</member>
    <member>Tristan Partin</member>
    <member>Tristen Raab</member>
    <member>Tung Nguyen</member>
    <member>Umair Shahid</member>
    <member>Uwe Binder</member>
    <member>Valerie Woolard</member>
    <member>Vallimaharajan G</member>
    <member>Vasya Boytsov</member>
    <member>Victor Wagner</member>
    <member>Victor Yegorov</member>
    <member>Victoria Shepard</member>
    <member>Vidushi Gupta</member>
    <member>Vignesh C</member>
    <member>Vik Fearing</member>
    <member>Viktor Leis</member>
    <member>Vinayak Pokale</member>
    <member>Vitaly Burovoy</member>
    <member>Vojtech Benes</member>
    <member>Wei Sun</member>
    <member>Wei Wang</member>
    <member>Wenjiang Zhang</member>
    <member>Will Mortensen</member>
    <member>Willi Mann</member>
    <member>Wolfgang Walther</member>
    <member>Xiang Liu</member>
    <member>Xiaoran Wang</member>
    <member>Xing Guo</member>
    <member>Xudong Yang</member>
    <member>Yahor Yuzefovich</member>
    <member>Yajun Hu</member>
    <member>Yaroslav Saburov</member>
    <member>Yong Li</member>
    <member>Yongtao Huang</member>
    <member>Yugo Nagata</member>
    <member>Yuhang Qiu</member>
    <member>Yuki Seino</member>
    <member>Yura Sokolov</member>
    <member>Yurii Rashkovskii</member>
    <member>Yuuki Fujii</member>
    <member>Yuya Watari</member>
    <member>Yves Colin</member>
    <member>Zhihong Yu</member>
    <member>Zhijie Hou</member>
    <member>Zongliang Quan</member>
    <member>Zubeyr Eryilmaz</member>
    <member>Zuming Jiang</member>
   </simplelist>
  </sect2>

 </sect1>
