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

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

  <formalpara>
  <title>Release date:</title>
  <para>2026-02-12</para>
  </formalpara>

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

  <sect2 id="release-17-8-migration">
   <title>Migration to Version 17.8</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.6,
    see <xref linkend="release-17-6"/>.
   </para>
  </sect2>

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

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [60e7ae41a] 2026-02-09 09:57:43 -0500
Branch: REL_18_STABLE [3b6588cd9] 2026-02-09 09:57:44 -0500
Branch: REL_17_STABLE [3d160401b] 2026-02-09 09:57:44 -0500
Branch: REL_16_STABLE [595956fc7] 2026-02-09 09:57:44 -0500
Branch: REL_15_STABLE [429aeaebd] 2026-02-09 09:57:44 -0500
Branch: REL_14_STABLE [b39d38139] 2026-02-09 09:57:44 -0500
-->
     <para>
      Guard against unexpected dimensions
      of <type>oidvector</type>/<type>int2vector</type> (Tom Lane)
      <ulink url="&commit_baseurl;3d160401b">&sect;</ulink>
     </para>

     <para>
      These data types are expected to be 1-dimensional arrays containing
      no nulls, but there are cast pathways that permit violating those
      expectations.  Add checks to some functions that were depending on
      those expectations without verifying them, and could misbehave in
      consequence.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Altan Birler for reporting this problem.
      (CVE-2026-2003)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [841d42cc4] 2026-02-09 10:07:31 -0500
Branch: REL_18_STABLE [66ddac698] 2026-02-09 10:07:31 -0500
Branch: REL_17_STABLE [bbf5bcf58] 2026-02-09 10:07:31 -0500
Branch: REL_16_STABLE [91d7c0bfd] 2026-02-09 10:07:31 -0500
Branch: REL_15_STABLE [b764b26f2] 2026-02-09 10:07:31 -0500
Branch: REL_14_STABLE [ea3bf3498] 2026-02-09 10:07:31 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8ebdf41c2] 2026-02-09 10:14:22 -0500
Branch: REL_18_STABLE [b69af3dda] 2026-02-09 10:14:22 -0500
Branch: REL_17_STABLE [dd3ad2a4d] 2026-02-09 10:14:22 -0500
Branch: REL_16_STABLE [c0887b39d] 2026-02-09 10:14:22 -0500
Branch: REL_15_STABLE [deb464a40] 2026-02-09 10:14:22 -0500
Branch: REL_14_STABLE [7e82d9a04] 2026-02-09 10:14:22 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_17_STABLE [dbb09fd8e] 2026-02-09 10:02:23 -0500
Branch: REL_16_STABLE [d484bc260] 2026-02-09 10:02:23 -0500
Branch: REL_15_STABLE [3ecc84cce] 2026-02-09 10:02:23 -0500
Branch: REL_14_STABLE [9fa38c572] 2026-02-09 10:02:23 -0500
-->
     <para>
      Harden selectivity estimators against being attached to operators
      that accept unexpected data types (Tom Lane)
      <ulink url="&commit_baseurl;bbf5bcf58">&sect;</ulink>
      <ulink url="&commit_baseurl;dd3ad2a4d">&sect;</ulink>
      <ulink url="&commit_baseurl;dbb09fd8e">&sect;</ulink>
     </para>

     <para>
      <filename>contrib/intarray</filename> contained a selectivity
      estimation function that could be abused for arbitrary code
      execution, because it did not check that its input was of the
      expected data type.  Third-party extensions should check for similar
      hazards and add defenses using the technique intarray now uses.
      Since such extension fixes will take time, we now require superuser
      privilege to attach a non-built-in selectivity estimator to an
      operator.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Daniel Firer, as part of zeroday.cloud, for reporting this problem.
      (CVE-2026-2004)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [379695d3c] 2026-02-09 08:00:59 +0900
Branch: REL_18_STABLE [209f387b8] 2026-02-09 08:01:05 +0900
Branch: REL_17_STABLE [7a7d9693c] 2026-02-09 08:01:07 +0900
Branch: REL_16_STABLE [527b730f4] 2026-02-09 08:01:09 +0900
Branch: REL_15_STABLE [9a9982ec6] 2026-02-09 08:01:10 +0900
Branch: REL_14_STABLE [01de2e32d] 2026-02-09 08:01:12 +0900
-->
     <para>
      Fix buffer overrun in <filename>contrib/pgcrypto</filename>'s
      PGP decryption functions (Michael Paquier)
      <ulink url="&commit_baseurl;7a7d9693c">&sect;</ulink>
     </para>

     <para>
      Decrypting a crafted message with an overlength session key caused a
      buffer overrun, with consequences as bad as arbitrary code
      execution.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Team Xint Code, as part of zeroday.cloud, for reporting this problem.
      (CVE-2026-2005)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [af79c30dc] 2026-02-09 12:08:58 +1300
Branch: REL_18_STABLE [df0852fe0] 2026-02-09 12:12:29 +1300
Branch: REL_17_STABLE [838248b1b] 2026-02-09 12:23:45 +1300
Branch: REL_16_STABLE [70ff9ede5] 2026-02-09 12:28:01 +1300
Branch: REL_15_STABLE [b2c81ac86] 2026-02-09 12:34:12 +1300
Branch: REL_14_STABLE [2a53db21e] 2026-02-09 12:38:07 +1300
Branch: master [74ee636cc] 2026-02-09 12:08:58 +1300
Branch: REL_18_STABLE [efef05ba9] 2026-02-09 12:12:33 +1300
Branch: REL_17_STABLE [7a522039f] 2026-02-09 12:23:51 +1300
Branch: REL_16_STABLE [b0e3f5cf9] 2026-02-09 12:28:07 +1300
Branch: REL_15_STABLE [50863be0b] 2026-02-09 12:34:17 +1300
Branch: REL_14_STABLE [6ed116046] 2026-02-09 12:38:12 +1300
Branch: master [1e7fe06c1] 2026-02-09 12:44:04 +1300
Branch: REL_18_STABLE [7b5fc85be] 2026-02-09 12:43:42 +1300
Branch: REL_17_STABLE [319e8a644] 2026-02-09 12:42:47 +1300
Branch: REL_16_STABLE [d837fb029] 2026-02-09 12:29:15 +1300
Branch: REL_15_STABLE [fd82ddb67] 2026-02-09 12:34:24 +1300
Branch: REL_14_STABLE [cecedb912] 2026-02-09 12:39:01 +1300
Branch: master [c67bef3f3] 2026-02-09 12:44:12 +1300
Branch: REL_18_STABLE [b0f5d25bc] 2026-02-09 12:43:50 +1300
Branch: REL_17_STABLE [10ebc4bd6] 2026-02-09 12:42:59 +1300
Branch: REL_16_STABLE [4c08960d9] 2026-02-09 12:29:41 +1300
Branch: REL_15_STABLE [757bf8145] 2026-02-09 12:35:19 +1300
Branch: REL_14_STABLE [e7591254c] 2026-02-09 12:39:16 +1300
Author: Noah Misch <noah@leadboat.com>
Branch: master [d536aee55] 2026-02-09 06:14:47 -0800
Branch: REL_18_STABLE [b42709194] 2026-02-09 06:14:50 -0800
Branch: REL_17_STABLE [dc072a09a] 2026-02-09 06:14:51 -0800
Branch: REL_16_STABLE [0c33d5608] 2026-02-09 06:14:51 -0800
Branch: REL_15_STABLE [8f8b1ffac] 2026-02-09 06:14:52 -0800
Branch: REL_14_STABLE [8373ed094] 2026-02-09 06:14:52 -0800
Branch: master [c5dc75479] 2026-02-09 09:08:10 -0800
Branch: REL_18_STABLE [4543b02af] 2026-02-09 09:08:13 -0800
Branch: REL_17_STABLE [955433ebd] 2026-02-09 09:08:13 -0800
Branch: REL_16_STABLE [763671b74] 2026-02-09 09:08:13 -0800
Branch: REL_15_STABLE [6f741bcb6] 2026-02-09 09:08:14 -0800
Branch: REL_14_STABLE [5301b2b7d] 2026-02-09 09:08:14 -0800
-->
     <para>
      Fix inadequate validation of multibyte character lengths
      (Thomas Munro, Noah Misch)
      <ulink url="&commit_baseurl;838248b1b">&sect;</ulink>
      <ulink url="&commit_baseurl;7a522039f">&sect;</ulink>
      <ulink url="&commit_baseurl;319e8a644">&sect;</ulink>
      <ulink url="&commit_baseurl;10ebc4bd6">&sect;</ulink>
      <ulink url="&commit_baseurl;dc072a09a">&sect;</ulink>
      <ulink url="&commit_baseurl;955433ebd">&sect;</ulink>
     </para>

     <para>
      Assorted bugs allowed an attacker able to issue crafted SQL to
      overrun string buffers, with consequences as bad as arbitrary code
      execution.  After these fixes, applications may
      observe <quote>invalid byte sequence for encoding</quote> errors
      when string functions process invalid text that has been stored in
      the database.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Paul Gerste
      and Moritz Sanft, as part of zeroday.cloud, for reporting this
      problem.
      (CVE-2026-2006)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [35b5c62c3] 2025-11-18 12:56:55 -0500
Branch: REL_18_STABLE [12bc32917] 2025-11-18 12:56:55 -0500
Branch: REL_17_STABLE [075a763e2] 2025-11-18 12:56:55 -0500
Branch: REL_16_STABLE [1c8c3206f] 2025-11-18 12:56:55 -0500
Branch: REL_15_STABLE [9f5a58aac] 2025-11-18 12:56:55 -0500
Branch: REL_14_STABLE [b85397481] 2025-11-18 12:56:55 -0500
-->
     <para>
      Don't allow CTE references in sub-selects to determine semantic
      levels of aggregate functions (Tom Lane)
      <ulink url="&commit_baseurl;075a763e2">&sect;</ulink>
     </para>

     <para>
      This change undoes a change made two minor releases ago, instead
      throwing an error if a sub-select references a CTE that's below the
      semantic level that standard SQL rules would assign to the aggregate
      based on contained column references and aggregates.  The attempted
      fix turned out to cause problems of its own, and it's unclear what
      to do instead.  Since sub-selects within aggregates are disallowed
      altogether by the SQL standard, treating such cases as errors seems
      sufficient.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [b4307ae2e] 2026-01-24 11:30:48 +0000
Branch: REL_18_STABLE [c6ce4dcf9] 2026-01-24 11:30:48 +0000
Branch: REL_17_STABLE [c5fc17dda] 2026-01-24 11:30:49 +0000
Branch: REL_16_STABLE [e7391bbf1] 2026-01-24 11:30:50 +0000
Branch: REL_15_STABLE [c5824536e] 2026-01-24 11:30:51 +0000
-->
     <para>
      Fix trigger transition table capture for <command>MERGE</command>
      in CTE queries (Dean Rasheed)
      <ulink url="&commit_baseurl;c5fc17dda">&sect;</ulink>
     </para>

     <para>
      When executing a data-modifying CTE query containing both
      a <command>MERGE</command> and another DML operation on a table with
      statement-level <literal>AFTER</literal> triggers, the transition
      tables passed to the triggers would not include the rows affected by
      the <command>MERGE</command>, only those affected by the other
      operation(s).
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [f9a468c66] 2026-01-23 10:23:30 +0900
Branch: REL_18_STABLE [9f4b7bfc5] 2026-01-23 10:23:26 +0900
Branch: REL_17_STABLE [933f67fb6] 2026-01-23 10:23:22 +0900
Branch: REL_16_STABLE [fab386f74] 2026-01-23 10:23:18 +0900
Branch: REL_15_STABLE [687533b39] 2026-01-23 10:23:14 +0900
Branch: REL_14_STABLE [6d2fa44d2] 2026-01-23 10:23:10 +0900
-->
     <para>
      Fix failure when all children of a partitioned target table
      of an update or delete have been pruned (Amit Langote)
      <ulink url="&commit_baseurl;933f67fb6">&sect;</ulink>
     </para>

     <para>
      In such cases, the executor could report <quote>could not find junk
      ctid column</quote> errors, even though nothing needs to be done.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [7027dd499] 2026-01-26 23:27:15 +1300
Branch: REL_18_STABLE [ccde5be68] 2026-01-26 23:46:23 +1300
Branch: REL_17_STABLE [cae812741] 2026-01-26 23:47:07 +1300
Branch: REL_16_STABLE [4297a3519] 2026-01-26 23:47:37 +1300
-->
     <para>
      Avoid possible planner failure when a query contains duplicate
      window function calls (Meng Zhang, David Rowley)
      <ulink url="&commit_baseurl;cae812741">&sect;</ulink>
     </para>

     <para>
      Confusion over de-duplication of such calls could result in errors
      like <quote>WindowFunc with winref 2 assigned to WindowAgg with
      winref 1</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5528e8d10] 2025-11-27 13:09:59 -0500
Branch: REL_18_STABLE [a212877dc] 2025-11-27 13:09:59 -0500
Branch: REL_17_STABLE [e79b27662] 2025-11-27 13:09:59 -0500
Branch: REL_16_STABLE [b497766a8] 2025-11-27 13:09:59 -0500
Branch: REL_15_STABLE [f19502f04] 2025-11-27 13:09:59 -0500
Branch: REL_14_STABLE [9e77323fc] 2025-11-27 13:09:59 -0500
-->
     <para>
      Allow indexscans on partial hash indexes even when the index's
      predicate implies the truth of the WHERE clause (Tom Lane)
      <ulink url="&commit_baseurl;e79b27662">&sect;</ulink>
     </para>

     <para>
      Normally we drop a WHERE clause that is implied by the predicate,
      since it's pointless to test it; it must hold for every index
      entry.  However that can prevent creation of an indexscan plan if
      the index is one that requires a WHERE clause on the leading index
      key, as hash indexes do.  Don't drop implied clauses when
      considering such an index.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [951b60f7a] 2025-12-18 15:08:48 +0200
Branch: REL_18_STABLE [d77a5f981] 2025-12-18 15:09:26 +0200
Branch: REL_17_STABLE [4b6d096a0] 2025-12-18 15:09:23 +0200
Branch: REL_16_STABLE [a5277700e] 2025-12-18 15:09:21 +0200
Branch: REL_15_STABLE [460d97020] 2025-12-18 15:09:19 +0200
Branch: REL_14_STABLE [ab4256869] 2025-12-18 15:09:17 +0200
-->
     <para>
      Do not emit WAL for unlogged BRIN indexes (Kirill Reshke)
      <ulink url="&commit_baseurl;4b6d096a0">&sect;</ulink>
     </para>

     <para>
      One seldom-taken code path incorrectly emitted a WAL record
      relating to a BRIN index even if the index was marked unlogged.
      Crash recovery would then fail to replay that record, complaining
      that the file already exists.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [8eeb4a0f7] 2025-11-12 20:59:36 +0200
Branch: REL_18_STABLE [321ec5462] 2025-11-12 21:00:42 +0200
Branch: REL_17_STABLE [d02c03ddc] 2025-11-12 21:01:13 +0200
Branch: REL_16_STABLE [053e1868b] 2025-11-12 21:01:42 +0200
Branch: REL_15_STABLE [1a469d7b5] 2025-11-12 21:02:12 +0200
Branch: REL_14_STABLE [eba917d36] 2025-11-12 21:02:36 +0200
Branch: master [797e9ea6e] 2025-11-12 20:59:44 +0200
Branch: REL_18_STABLE [7b069a187] 2025-11-12 21:00:46 +0200
Branch: REL_17_STABLE [c2682810a] 2025-11-12 21:01:16 +0200
Branch: REL_16_STABLE [44e8c60be] 2025-11-12 21:01:45 +0200
Branch: REL_15_STABLE [0c862646c] 2025-11-12 21:02:14 +0200
Branch: REL_14_STABLE [c2e58c071] 2025-11-12 21:02:38 +0200
Branch: master [0bdc777e8] 2025-11-12 21:19:03 +0200
Branch: REL_18_STABLE [82fa6b78d] 2025-11-12 21:26:58 +0200
Branch: REL_17_STABLE [d80d5f099] 2025-11-12 21:27:02 +0200
Branch: REL_16_STABLE [0e8eaa218] 2025-11-12 21:27:05 +0200
Branch: REL_15_STABLE [21a9014cf] 2025-11-12 21:27:07 +0200
Branch: REL_14_STABLE [84f1bf4af] 2025-11-12 21:27:11 +0200
-->
     <para>
      Prevent truncation of CLOG that is still needed by
      unread <command>NOTIFY</command> messages (Joel Jacobson, Heikki
      Linnakangas)
      <ulink url="&commit_baseurl;d02c03ddc">&sect;</ulink>
      <ulink url="&commit_baseurl;c2682810a">&sect;</ulink>
      <ulink url="&commit_baseurl;d80d5f099">&sect;</ulink>
     </para>

     <para>
      This fix prevents <quote>could not access status of
      transaction</quote> errors when a backend is slow to
      absorb <command>NOTIFY</command> messages.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [1b4699090] 2025-11-12 20:59:28 +0200
Branch: REL_18_STABLE [aab4a84bb] 2025-11-12 21:00:25 +0200
Branch: REL_17_STABLE [b821c9292] 2025-11-12 21:01:08 +0200
Branch: REL_16_STABLE [c1a5bde00] 2025-11-12 21:01:39 +0200
Branch: REL_15_STABLE [b1da37de2] 2025-11-12 21:02:07 +0200
Branch: REL_14_STABLE [7cb05dd2d] 2025-11-12 21:02:32 +0200
-->
     <para>
      Escalate errors occurring during <command>NOTIFY</command> message
      processing to FATAL, i.e. close the connection (Heikki Linnakangas)
      <ulink url="&commit_baseurl;b821c9292">&sect;</ulink>
     </para>

     <para>
      Formerly, if a backend got an error while absorbing
      a <command>NOTIFY</command> message, it would advance past that
      message, report the error to the client, and move on.  That behavior
      was fraught with problems though.  One big concern is that the
      client has no good way to know that a notification was lost, and
      certainly no way to know what was in it.  Depending on the
      application logic, missing a notification could cause the
      application to get stuck waiting, for example.  Also, any remaining
      messages would not get processed until someone sent a
      new <command>NOTIFY</command>.
     </para>

     <para>
      Also, if the connection is idle at the time of receiving
      a <command>NOTIFY</command> signal, any ERROR would be escalated to
      FATAL anyway, due to unrelated concerns.  Therefore, we've chosen to
      make that happen in all cases, for consistency and to provide a
      clear signal to the application that it might have missed some
      notifications.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [1b92fe7bb] 2025-11-16 22:14:06 +0000
Branch: REL_18_STABLE [5749d95d4] 2025-11-16 22:15:10 +0000
Branch: REL_17_STABLE [d6c415c4b] 2025-11-16 22:15:45 +0000
-->
     <para>
      Fix erroneous counting of updates in <command>EXPLAIN ANALYZE
      MERGE</command> with a concurrent update (Dean Rasheed)
      <ulink url="&commit_baseurl;d6c415c4b">&sect;</ulink>
     </para>

     <para>
      This situation led to an incorrect count of <quote>skipped</quote>
      tuples in <command>EXPLAIN</command>'s output, or to an assertion
      failure in an assert-enabled build.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [955f55068] 2025-12-23 13:37:16 +0200
Branch: REL_18_STABLE [3e3a80f62] 2025-12-23 13:37:23 +0200
Branch: REL_17_STABLE [bb87d7fef] 2025-12-23 13:37:25 +0200
Branch: REL_16_STABLE [7efef18ff] 2025-12-23 13:37:27 +0200
Branch: REL_15_STABLE [5d5487cd2] 2025-12-23 13:37:29 +0200
Branch: REL_14_STABLE [b6201c76e] 2025-12-23 13:37:31 +0200
-->
     <para>
      Fix bug in following update chain when locking a tuple (Jasper
      Smit)
      <ulink url="&commit_baseurl;bb87d7fef">&sect;</ulink>
     </para>

     <para>
      This code path neglected to check the xmin of the first new tuple in
      the update chain, making it possible to lock an unrelated tuple if
      the original updater aborted and the space was immediately reclaimed
      by <command>VACUUM</command> and then re-used.
      That could cause unexpected transaction delays or deadlocks.
      Errors associated with having identified the wrong tuple have also
      been observed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: REL_17_STABLE [0f69bedde] 2025-12-16 16:13:54 -0800
Branch: REL_16_STABLE [1d7b02711] 2025-12-16 16:13:55 -0800
Branch: REL_15_STABLE [05d605b6c] 2025-12-16 16:13:55 -0800
Branch: REL_14_STABLE [811422471] 2025-12-16 16:13:56 -0800
Branch: REL_17_STABLE [d3e5d8950] 2025-12-16 16:13:54 -0800
Branch: REL_16_STABLE [720e9304f] 2025-12-16 16:13:55 -0800
Branch: REL_15_STABLE [20a48c156] 2025-12-16 16:13:55 -0800
Branch: REL_14_STABLE [e4b1986b9] 2025-12-16 16:13:56 -0800
Branch: REL_17_STABLE [bcb784e7d] 2025-12-16 16:13:54 -0800
Branch: REL_16_STABLE [27e4fad98] 2025-12-16 16:13:55 -0800
Branch: REL_15_STABLE [86091202a] 2025-12-16 16:13:55 -0800
Branch: REL_14_STABLE [0dfbd191a] 2025-12-16 16:13:56 -0800
-->
     <para>
      Fix issues around in-place catalog updates (Noah Misch)
      <ulink url="&commit_baseurl;0f69bedde">&sect;</ulink>
      <ulink url="&commit_baseurl;d3e5d8950">&sect;</ulink>
      <ulink url="&commit_baseurl;bcb784e7d">&sect;</ulink>
     </para>

     <para>
      Send a nontransactional invalidation message for an in-place update,
      since such an update will survive transaction rollback.  Also ensure
      that the update is WAL-logged before other sessions can see it.
      These fixes primarily prevent scenarios in which relations'
      frozen-XID attributes become inconsistent, possibly allowing
      premature CLOG truncation and subsequent <quote>could not access
      status of transaction</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [ecd275718] 2026-01-19 12:09:32 -0500
Branch: REL_18_STABLE [c80b0c9d6] 2026-01-19 12:09:48 -0500
Branch: REL_17_STABLE [ad569b54a] 2026-01-19 12:10:00 -0500
-->
     <para>
      Fix incorrect handling of incremental backups of large tables
      (Robert Haas, Oleg Tkachenko)
      <ulink url="&commit_baseurl;ad569b54a">&sect;</ulink>
     </para>

     <para>
      If a table exceeding 1GB (or in general, the installation's segment
      size) is truncated by <literal>VACUUM</literal> between the base
      backup and the incremental
      backup, <application>pg_combinebackup</application> could fail with
      an error about <quote>truncation block length in excess of segment
      size</quote>.  This prevented restoring the incremental backup.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [9cbb1d21d] 2026-01-16 13:02:42 +0900
Branch: REL_18_STABLE [1943ceb38] 2026-01-16 13:14:21 +0900
Branch: REL_17_STABLE [4071fe900] 2026-01-16 13:19:53 +0900
Branch: REL_16_STABLE [980b7c736] 2026-01-16 13:19:59 +0900
Branch: REL_15_STABLE [b926ff137] 2026-01-16 13:20:05 +0900
Branch: REL_14_STABLE [f6df78173] 2026-01-16 13:20:11 +0900
-->
     <para>
      Fix potential backend process crash at process exit due to trying to
      release a lock in an already-unmapped shared memory segment
      (Rahila Syed)
      <ulink url="&commit_baseurl;4071fe900">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [102bdaa9b] 2026-01-15 16:48:45 +0200
Branch: REL_18_STABLE [09532a78b] 2026-01-15 16:49:42 +0200
Branch: REL_17_STABLE [d3ad4cef6] 2026-01-15 16:50:30 +0200
Branch: REL_16_STABLE [c7946e6f3] 2026-01-15 16:50:37 +0200
Branch: REL_15_STABLE [a563ac619] 2026-01-15 16:50:42 +0200
Branch: REL_14_STABLE [46be454ca] 2026-01-15 16:50:46 +0200
-->
     <para>
      Guard against incorrect truncation of the multixact log after a
      crash (Heikki Linnakangas)
      <ulink url="&commit_baseurl;d3ad4cef6">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [36b8f4974] 2025-12-27 17:23:30 +0900
Branch: REL_18_STABLE [06907e864] 2025-12-27 17:23:51 +0900
Branch: REL_17_STABLE [52b27f585] 2025-12-27 17:23:53 +0900
Branch: REL_16_STABLE [c48829ed8] 2025-12-27 17:23:54 +0900
Branch: REL_15_STABLE [300575fe2] 2025-12-27 17:23:56 +0900
Branch: REL_14_STABLE [ea3524cff] 2025-12-27 17:23:58 +0900
-->
     <para>
      Fix possibly mis-encoded result
      of <function>pg_stat_get_backend_activity()</function> (Chao Li)
      <ulink url="&commit_baseurl;52b27f585">&sect;</ulink>
     </para>

     <para>
      The shared-memory buffer holding a session's activity string can
      end with an incomplete multibyte character.  Readers are supposed
      to truncate off any such incomplete character, but this function
      failed to do so.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [b3ccb0a2c] 2025-12-19 12:05:37 +0900
Branch: REL_18_STABLE [b863d8d87] 2025-12-19 12:07:10 +0900
Branch: REL_17_STABLE [699293d27] 2025-12-19 12:07:21 +0900
Branch: REL_16_STABLE [3853f6168] 2025-12-19 12:08:20 +0900
Branch: REL_15_STABLE [0fc2f533a] 2025-12-19 12:09:10 +0900
Branch: REL_14_STABLE [1a9a49699] 2025-12-19 12:09:16 +0900
-->
     <para>
      Guard against recursive memory context logging (Fujii Masao)
      <ulink url="&commit_baseurl;699293d27">&sect;</ulink>
     </para>

     <para>
      A constant flow of signals requesting memory context logging could
      cause recursive execution of the logging code, which in theory could
      lead to stack overflow.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [f1a6e622b] 2025-12-16 12:24:55 -0500
Branch: REL_18_STABLE [57df5ab80] 2025-12-16 10:59:05 -0500
Branch: REL_17_STABLE [1d0fc2499] 2025-12-16 10:59:04 -0500
Branch: REL_16_STABLE [12c2f843c] 2025-12-16 10:59:02 -0500
Branch: REL_15_STABLE [bd2726d3e] 2025-12-16 10:59:01 -0500
Branch: REL_14_STABLE [1d9f7fbba] 2025-12-16 10:59:00 -0500
-->
     <para>
      Fix memory context usage when reinitializing a parallel execution
      context (Jakub Wartak, Jeevan Chalke)
      <ulink url="&commit_baseurl;1d0fc2499">&sect;</ulink>
     </para>

     <para>
      This error could result in a crash due to a subsidiary data
      structure having a shorter lifespan than the parallel context.
      The problem is not known to be reachable using only
      core <productname>PostgreSQL</productname>, but we have reports of
      trouble in extensions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [789d65364] 2025-12-03 19:15:08 +0200
Branch: REL_18_STABLE [e46041fd9] 2025-12-03 19:15:18 +0200
Branch: REL_17_STABLE [8ba61bc06] 2025-12-03 19:15:21 +0200
Branch: REL_16_STABLE [635166913] 2025-12-03 19:15:24 +0200
Branch: REL_15_STABLE [8cfb174a6] 2025-12-03 19:15:26 +0200
Branch: REL_14_STABLE [81416e101] 2025-12-03 19:15:29 +0200
Branch: master [4d936c3ff] 2025-12-05 11:32:38 +0200
Branch: REL_18_STABLE [02ba5e3be] 2025-12-05 11:35:20 +0200
Branch: REL_17_STABLE [cad40cec2] 2025-12-05 11:35:44 +0200
Branch: REL_16_STABLE [4d689a176] 2025-12-05 11:36:36 +0200
Branch: REL_15_STABLE [b9a02b978] 2025-12-05 11:36:52 +0200
Branch: REL_14_STABLE [489695554] 2025-12-05 11:37:06 +0200
-->
     <para>
      Set next multixid's offset when creating a new multixid, to remove
      the wait loop that was needed in corner cases (Andrey Borodin)
      <ulink url="&commit_baseurl;8ba61bc06">&sect;</ulink>
      <ulink url="&commit_baseurl;cad40cec2">&sect;</ulink>
     </para>

     <para>
      The previous logic could get stuck waiting for an update that would
      never occur.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [3881561d7] 2025-11-29 12:28:59 +0000
Branch: REL_18_STABLE [b880d9a02] 2025-11-29 12:31:30 +0000
Branch: REL_17_STABLE [c09096503] 2025-11-29 12:32:12 +0000
Branch: REL_16_STABLE [4d288e33b] 2025-11-29 12:33:04 +0000
Branch: REL_15_STABLE [134a8ee22] 2025-11-29 12:33:35 +0000
Branch: REL_14_STABLE [2d5b97b8c] 2025-11-29 12:34:45 +0000
-->
     <para>
      Avoid rewriting data-modifying CTEs more than once (Bernice Southey,
      Dean Rasheed)
      <ulink url="&commit_baseurl;c09096503">&sect;</ulink>
     </para>

     <para>
      Formerly, when updating an auto-updatable view or a relation with
      rules, if the original query had any data-modifying CTEs, the rewriter
      would rewrite those CTEs multiple times due to recursion.  This was
      inefficient and could produce false errors if a CTE included an
      update of an always-generated column.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [dbdc717ac] 2025-11-26 15:12:25 -0600
Branch: REL_18_STABLE [b83bcc0df] 2025-11-26 15:12:25 -0600
Branch: REL_17_STABLE [2fc5c5062] 2025-11-26 15:12:25 -0600
-->
     <para>
      Allow retrying initialization of a DSM registry entry
      (Nathan Bossart)
      <ulink url="&commit_baseurl;2fc5c5062">&sect;</ulink>
     </para>

     <para>
      If we fail partway through initialization of a dynamic shared memory
      entry, allow the next attempt to use that entry to retry
      initialization.  Previously the entry was left in a
      permanently-failed state.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [dc7c77f82] 2025-12-16 13:29:28 +0900
Branch: REL_18_STABLE [68ebdf2b0] 2025-12-16 13:29:36 +0900
Branch: REL_17_STABLE [f5927da4f] 2025-12-16 13:29:39 +0900
Branch: REL_16_STABLE [1aa57e9ed] 2025-12-16 13:29:41 +0900
Branch: REL_15_STABLE [95ef6f490] 2025-12-16 13:29:42 +0900
Branch: REL_14_STABLE [14161bca4] 2025-12-16 13:29:44 +0900
-->
     <para>
      Fail recovery if WAL does not exist back to the redo point indicated
      by the checkpoint record (Nitin Jadhav)
      <ulink url="&commit_baseurl;f5927da4f">&sect;</ulink>
     </para>

     <para>
      Add an explicit check for this before starting recovery, so that no
      harm is done and a useful error message is provided.  Previously,
      recovery might crash or corrupt the database in this situation.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [6ca8506ea] 2026-01-06 17:29:12 +1300
Branch: REL_18_STABLE [bea57a6b4] 2026-01-06 17:29:44 +1300
Branch: REL_17_STABLE [bb08ac7ac] 2026-01-06 17:30:08 +1300
Branch: REL_16_STABLE [0687a6eb0] 2026-01-06 17:30:32 +1300
Branch: REL_15_STABLE [f20b79059] 2026-01-06 17:30:57 +1300
Branch: REL_14_STABLE [ae45c7296] 2026-01-06 17:31:20 +1300
-->
     <para>
      Avoid scribbling on the source query tree during <command>ALTER
      PUBLICATION</command> (Sunil S)
      <ulink url="&commit_baseurl;bb08ac7ac">&sect;</ulink>
     </para>

     <para>
      This error had the visible effect that an event trigger fired for
      the query would see only the first <literal>publish</literal>
      option, even if several had been specified.  If such a query were
      set up as a prepared statement, re-executions would misbehave too.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [d926462d8] 2026-01-06 11:52:22 +0900
Branch: REL_18_STABLE [797fc5d1b] 2026-01-06 11:54:09 +0900
Branch: REL_17_STABLE [7a990e801] 2026-01-06 11:54:14 +0900
Branch: REL_16_STABLE [75f3428f2] 2026-01-06 11:54:46 +0900
Branch: REL_15_STABLE [f7eb44e0f] 2026-01-06 11:55:46 +0900
-->
     <para>
      Pass connection options specified in <literal>CREATE SUBSCRIPTION
      ... CONNECTION</literal> to the publisher's walsender (Fujii Masao)
      <ulink url="&commit_baseurl;7a990e801">&sect;</ulink>
     </para>

     <para>
      Before this fix, the <literal>options</literal> connection option
      (if any) was ignored, thus for example preventing setting custom
      server parameter values in the walsender session.  It was intended
      for that to work, and it did work before refactoring
      in <productname>PostgreSQL</productname> version 15 broke it, so
      restore the previous behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [851f6649c] 2026-01-27 05:06:29 +0000
Branch: REL_18_STABLE [919c9fa13] 2026-01-27 05:45:25 +0000
Branch: REL_17_STABLE [3243c0177] 2026-01-27 05:49:23 +0000
Branch: master [3a98f989e] 2026-01-29 03:22:02 +0000
Branch: REL_18_STABLE [1c60f7236] 2026-01-29 03:34:55 +0000
Branch: REL_17_STABLE [9649f1adf] 2026-01-29 02:57:02 +0000
Branch: master [006dd4b2e] 2025-12-08 05:21:22 +0000
Branch: REL_18_STABLE [d3ceb2084] 2025-12-08 05:33:14 +0000
Branch: REL_17_STABLE [3510ebeb0] 2026-01-08 07:17:56 +0000
Branch: REL_16_STABLE [24cce33c3] 2026-01-08 07:07:23 +0000
Branch: REL_15_STABLE [aae05622a] 2026-01-08 06:54:52 +0000
Branch: REL_14_STABLE [7406df605] 2026-01-08 06:44:28 +0000
-->
     <para>
      Prevent invalidation of newly created or newly synced replication
      slots (Zhijie Hou)
      <ulink url="&commit_baseurl;3243c0177">&sect;</ulink>
      <ulink url="&commit_baseurl;9649f1adf">&sect;</ulink>
      <ulink url="&commit_baseurl;3510ebeb0">&sect;</ulink>
     </para>

     <para>
      A race condition with a concurrent checkpoint could allow WAL to be
      removed that is needed by the replication slot, causing the slot to
      immediately get marked invalid.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [2a5225b99] 2025-12-30 10:56:30 -0800
Branch: REL_18_STABLE [fd7c86cfa] 2025-12-30 10:56:28 -0800
Branch: REL_17_STABLE [123b851ab] 2025-12-30 10:56:25 -0800
Branch: REL_16_STABLE [821466722] 2025-12-30 10:56:23 -0800
Branch: REL_15_STABLE [fa557d300] 2025-12-30 10:56:21 -0800
Branch: REL_14_STABLE [57048d6e1] 2025-12-30 10:56:18 -0800
-->
     <para>
      Fix race condition in computing a replication slot's required xmin
      (Zhijie Hou)
      <ulink url="&commit_baseurl;123b851ab">&sect;</ulink>
     </para>

     <para>
      This could lead to the error <quote>cannot build an initial slot
      snapshot as oldest safe xid follows snapshot's xmin</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8e0d32a4a] 2025-12-23 14:32:14 +0900
Branch: REL_18_STABLE [b07c32619] 2025-12-23 14:32:19 +0900
Branch: REL_17_STABLE [e063ccc72] 2025-12-23 14:32:21 +0900
Branch: REL_16_STABLE [e22e9ab0c] 2025-12-23 14:32:22 +0900
Branch: REL_15_STABLE [90d1beef6] 2025-12-23 14:32:24 +0900
Branch: REL_14_STABLE [25a04aa52] 2025-12-23 14:32:25 +0900
-->
     <para>
      During initial synchronization of a logical replication
      subscription, commit the addition of
      a <structname>pg_replication_origin</structname> entry before
      starting to copy data (Zhijie Hou)
      <ulink url="&commit_baseurl;e063ccc72">&sect;</ulink>
     </para>

     <para>
      Previously, if the copy step failed, the
      new <structname>pg_replication_origin</structname> entry would be
      lost due to transaction rollback.  This led to inconsistent state in
      shared memory.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [1528b0d89] 2025-12-24 04:36:39 +0000
Branch: REL_18_STABLE [2f7ffe124] 2025-12-24 04:21:43 +0000
Branch: REL_17_STABLE [0ed8f1afb] 2025-12-24 04:05:06 +0000
Branch: REL_16_STABLE [63a65adf4] 2025-12-24 04:19:57 +0000
-->
     <para>
      Don't advance logical replication progress after a parallel worker
      apply failure (Zhijie Hou)
      <ulink url="&commit_baseurl;0ed8f1afb">&sect;</ulink>
     </para>

     <para>
      The previous behavior allowed transactions to be lost by a
      subscriber.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [04396eacd] 2025-12-09 07:25:20 +0000
Branch: REL_18_STABLE [6c61c69d5] 2025-12-09 07:12:37 +0000
Branch: REL_17_STABLE [f2818868a] 2025-12-09 07:02:08 +0000
-->
     <para>
      Fix logical replication slotsync worker processes to handle
      LOCK_TIMEOUT signals correctly (Zhijie Hou)
      <ulink url="&commit_baseurl;f2818868a">&sect;</ulink>
     </para>

     <para>
      Previously, timeout signals were effectively ignored.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [23b25586d] 2026-01-15 21:02:49 +0200
Branch: REL_18_STABLE [9ed411e08] 2026-01-15 21:02:54 +0200
Branch: REL_17_STABLE [c3770181c] 2026-01-15 21:02:59 +0200
Branch: REL_16_STABLE [a2eeb04f3] 2026-01-15 21:03:12 +0200
Branch: REL_15_STABLE [ef8465588] 2026-01-15 21:03:16 +0200
Branch: REL_14_STABLE [2514f1c77] 2026-01-15 20:58:05 +0200
-->
     <para>
      Fix possible failure with <quote>unexpected data beyond EOF</quote>
      during restart of a streaming replica server (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;c3770181c">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [519fa0433] 2025-11-27 12:07:01 +0900
Branch: REL_18_STABLE [15ba0702c] 2025-11-27 11:59:40 +0900
Branch: REL_17_STABLE [b5511fed5] 2025-11-27 11:59:36 +0900
-->
     <para>
      Fix error reporting for SQL/JSON path type mismatches (Jian He)
      <ulink url="&commit_baseurl;b5511fed5">&sect;</ulink>
     </para>

     <para>
      The code could produce a <quote>cache lookup failed for type 0</quote>
      error instead of the intended complaint about the path expression
      not being of the right type.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [349107537] 2026-01-09 11:01:36 +1300
Branch: REL_18_STABLE [c35e5dd9a] 2026-01-09 11:02:59 +1300
Branch: REL_17_STABLE [84b787ae6] 2026-01-09 11:03:24 +1300
Branch: REL_16_STABLE [821c4d27b] 2026-01-09 11:03:48 +1300
Branch: REL_15_STABLE [3ad05640b] 2026-01-09 11:04:12 +1300
Branch: REL_14_STABLE [a65995947] 2026-01-09 11:04:39 +1300
-->
     <para>
      Fix erroneous tracking of column position when parsing partition
      range bounds (myzhen)
      <ulink url="&commit_baseurl;84b787ae6">&sect;</ulink>
     </para>

     <para>
      This could, for example, lead to the wrong column name being cited
      in error messages about casting partition bound values to the
      column's data type.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [74a116a79] 2026-02-06 15:38:16 +0900
Branch: REL_18_STABLE [acfa422c3] 2026-02-06 15:38:21 +0900
Branch: REL_17_STABLE [67ad4387b] 2026-02-06 15:38:23 +0900
Branch: REL_16_STABLE [977a17a3e] 2026-02-06 15:38:25 +0900
Branch: REL_15_STABLE [4ec943f7d] 2026-02-06 15:38:27 +0900
Branch: REL_14_STABLE [d32e17160] 2026-02-06 15:38:29 +0900
Branch: master [c8ec74713] 2026-02-04 16:38:06 +0900
Branch: REL_18_STABLE [2ca4464b6] 2026-02-04 16:38:10 +0900
Branch: REL_17_STABLE [263af458e] 2026-02-04 16:38:12 +0900
Branch: master [a9afa021e] 2026-02-02 10:21:04 +0900
Branch: REL_18_STABLE [ab61f0087] 2026-02-02 10:21:07 +0900
Branch: REL_17_STABLE [5995135f1] 2026-02-02 10:21:10 +0900
Branch: master [6bca4b50d] 2026-01-18 17:24:25 +0900
Branch: REL_18_STABLE [69ee81932] 2026-01-18 17:24:58 +0900
Branch: REL_17_STABLE [05ef2371a] 2026-01-18 17:25:00 +0900
Branch: REL_16_STABLE [e8fd6c9fd] 2026-01-18 17:25:01 +0900
Branch: REL_15_STABLE [fbf8df580] 2026-01-18 17:25:03 +0900
Branch: REL_14_STABLE [f1dc7a5b7] 2026-01-18 17:25:04 +0900
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [1653ce523] 2026-02-07 22:37:02 +0100
Branch: REL_18_STABLE [cff2ef984] 2026-02-07 22:53:16 +0100
Branch: REL_17_STABLE [5449fd261] 2026-02-07 22:53:21 +0100
Branch: REL_16_STABLE [a7bdbbada] 2026-02-07 22:53:25 +0100
Branch: REL_15_STABLE [9dcd0b3de] 2026-02-07 22:53:34 +0100
Branch: REL_14_STABLE [3e7bb39df] 2026-02-07 22:53:38 +0100
-->
     <para>
      Fix assorted minor errors in error messages (Man Zeng, Tianchen Zhang)
      <ulink url="&commit_baseurl;67ad4387b">&sect;</ulink>
      <ulink url="&commit_baseurl;263af458e">&sect;</ulink>
      <ulink url="&commit_baseurl;5995135f1">&sect;</ulink>
      <ulink url="&commit_baseurl;05ef2371a">&sect;</ulink>
      <ulink url="&commit_baseurl;5449fd261">&sect;</ulink>
     </para>

     <para>
      For example, an error report about mismatched timeline number in a
      backup manifest showed the starting timeline number where it meant
      to show the ending timeline number.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [e5d99b4d9] 2026-01-22 16:03:47 +1300
Branch: REL_18_STABLE [f1c6b153c] 2026-01-22 16:10:58 +1300
Branch: REL_17_STABLE [d0bb0e5b3] 2026-01-22 16:10:28 +1300
Branch: REL_16_STABLE [7600dc79c] 2026-01-22 16:10:08 +1300
Branch: REL_15_STABLE [cbdd09ae1] 2026-01-22 16:09:29 +1300
Branch: REL_14_STABLE [de8081c30] 2026-01-22 16:06:06 +1300
-->
     <para>
      Fix failure to perform function inlining when doing JIT compilation
      with LLVM version 17 or later (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;d0bb0e5b3">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [0dceba21d] 2025-11-22 21:21:11 +1300
Branch: REL_18_STABLE [912cfa314] 2025-11-22 21:21:54 +1300
Branch: REL_17_STABLE [60215eae7] 2025-11-22 21:22:37 +1300
Branch: REL_16_STABLE [600acd34b] 2025-11-22 21:23:23 +1300
Branch: REL_15_STABLE [55164852d] 2025-11-22 21:23:45 +1300
Branch: REL_14_STABLE [035a1f5ac] 2025-11-22 21:20:27 +1300
-->
     <para>
      Adjust our JIT code to work with LLVM 21 (Holger Hoffstätte)
      <ulink url="&commit_baseurl;60215eae7">&sect;</ulink>
     </para>

     <para>
      The previous coding failed to compile on aarch64 machines.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [f94e9141a] 2026-02-06 17:38:49 +1300
Branch: REL_18_STABLE [33e3de6d7] 2026-02-06 17:38:39 +1300
Branch: REL_17_STABLE [4dac22aa1] 2026-02-06 17:41:42 +1300
Branch: REL_16_STABLE [e37b59802] 2026-02-06 17:43:49 +1300
-->
     <para>
      Add new server parameter <xref linkend="guc-file-extend-method"/> to
      control use of <function>posix_fallocate()</function> (Thomas Munro)
      <ulink url="&commit_baseurl;4dac22aa1">&sect;</ulink>
     </para>

     <para>
      <productname>PostgreSQL</productname> version 16 and later will
      use <function>posix_fallocate()</function>, if the platform provides
      it, to extend relation files.  However, this has been reported to
      interact poorly with some file systems: BTRFS compression is
      disabled by the use of <function>posix_fallocate()</function>, and
      XFS could produce spurious <literal>ENOSPC</literal> errors in older
      Linux kernel versions.  To provide a workaround, introduce this new
      server parameter.  Setting <varname>file_extend_method</varname>
      to <literal>write_zeros</literal> will cause the server to return to
      the old method of extending files by writing blocks of zeroes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [c507ba55f] 2025-12-10 09:01:35 +1300
Branch: REL_18_STABLE [bebb281b0] 2025-12-10 09:05:21 +1300
Branch: REL_17_STABLE [f24af0e04] 2025-12-10 09:10:31 +1300
Branch: REL_16_STABLE [d62a258cd] 2025-12-10 09:11:19 +1300
Branch: master [bec2a0aa3] 2025-12-21 17:34:20 +1300
Branch: REL_18_STABLE [a7d06e74d] 2025-12-21 17:34:49 +1300
Branch: REL_17_STABLE [045185913] 2025-12-21 17:35:46 +1300
Branch: REL_16_STABLE [0666ccc16] 2025-12-21 17:36:04 +1300
Branch: master [45d92b76d] 2025-12-29 15:47:31 +1300
Branch: REL_18_STABLE [4da5c33a3] 2025-12-29 15:48:27 +1300
Branch: REL_17_STABLE [b3c8119e2] 2025-12-29 15:28:17 +1300
Branch: REL_16_STABLE [80e8ec772] 2025-12-29 15:31:39 +1300
-->
     <para>
      Honor <function>open()</function>'s <literal>O_CLOEXEC</literal>
      flag on Windows (Bryan Green, Thomas Munro)
      <ulink url="&commit_baseurl;f24af0e04">&sect;</ulink>
      <ulink url="&commit_baseurl;045185913">&sect;</ulink>
      <ulink url="&commit_baseurl;b3c8119e2">&sect;</ulink>
     </para>

     <para>
      Make this flag work like it does on POSIX platforms, so that we
      don't leak file handles into child processes such as <literal>COPY
      TO/FROM PROGRAM</literal>.  While that leakage hasn't caused many
      problems, it seems undesirable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c0bf15729] 2026-02-07 20:05:52 -0500
Branch: REL_18_STABLE [5eac1d68f] 2026-02-07 20:05:52 -0500
Branch: REL_17_STABLE [59c2f7efa] 2026-02-07 20:05:52 -0500
Branch: REL_16_STABLE [7369656fa] 2026-02-07 20:05:52 -0500
-->
     <para>
      Fix failure to parse long options on the server command line in
      Solaris executables built with meson (Tom Lane)
      <ulink url="&commit_baseurl;59c2f7efa">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [32b236644] 2025-11-17 12:48:55 +1300
Branch: REL_18_STABLE [bcfca332f] 2025-11-17 12:48:47 +1300
Branch: REL_17_STABLE [d66a922f9] 2025-11-17 12:48:37 +1300
Branch: REL_16_STABLE [a1407dade] 2025-11-17 12:48:22 +1300
Branch: REL_15_STABLE [3995e4a9d] 2025-11-18 11:19:56 +1300
Branch: REL_14_STABLE [29a3e22f3] 2025-11-18 11:21:15 +1300
-->
     <para>
      Support process title changes on GNU/Hurd (Michael Banck)
      <ulink url="&commit_baseurl;d66a922f9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [d49936f30] 2025-12-18 10:23:47 -0800
Branch: REL_18_STABLE [573e679a2] 2025-12-18 10:23:51 -0800
Branch: REL_17_STABLE [1cdc07ad5] 2025-12-18 10:23:51 -0800
-->
     <para>
      Avoid <application>pg_dump</application> assertion failure in
      binary-upgrade mode (Vignesh C)
      <ulink url="&commit_baseurl;1cdc07ad5">&sect;</ulink>
     </para>

     <para>
      Failure to handle subscription-relation objects in the object
      sorting code triggered an assertion, though there were no serious
      ill effects in production builds.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [4aa0ac057] 2025-11-14 22:40:39 +0900
Branch: REL_18_STABLE [00e64e35c] 2025-11-14 22:41:55 +0900
Branch: REL_17_STABLE [5bc251b28] 2025-11-14 22:42:02 +0900
-->
     <para>
      Fix incorrect error handling in <application>pgbench</application>
      with multiple <command>\syncpipeline</command> commands
      in pipeline mode (Yugo Nagata)
      <ulink url="&commit_baseurl;5bc251b28">&sect;</ulink>
     </para>

     <para>
      If multiple <command>\syncpipeline</command> commands are
      encountered after a query error, <application>pgbench</application>
      would report <quote>failed to exit pipeline mode</quote>, or get an
      assertion failure in an assert-enabled build.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [d5b4f3a6d] 2025-11-19 18:05:42 +0200
Branch: REL_18_STABLE [19594271c] 2025-11-19 18:06:04 +0200
Branch: REL_17_STABLE [f2e0ca0af] 2025-11-19 18:06:23 +0200
Branch: REL_16_STABLE [890cc81b6] 2025-11-19 18:06:24 +0200
Branch: REL_15_STABLE [7c494072b] 2025-11-19 18:06:26 +0200
Branch: REL_14_STABLE [11cc0f452] 2025-11-19 18:06:27 +0200
-->
     <para>
      Make <application>pg_resetwal</application> print the updated value
      when changing OldestXID (Heikki Linnakangas)
      <ulink url="&commit_baseurl;f2e0ca0af">&sect;</ulink>
     </para>

     <para>
      It already did that for every other variable it can change.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [94939c5f3] 2025-11-12 12:20:16 +0200
Branch: REL_18_STABLE [8747b969f] 2025-11-12 12:21:30 +0200
Branch: REL_17_STABLE [cb2ef0e92] 2025-11-12 12:23:55 +0200
Branch: REL_16_STABLE [e039b09f8] 2025-11-12 12:45:16 +0200
Branch: REL_15_STABLE [97cd4b65a] 2025-11-12 12:46:19 +0200
-->
     <para>
      Make <application>pg_resetwal</application> allow setting next
      multixact xid to 0 or next multixact offset to UINT32_MAX (Maxim
      Orlov)
      <ulink url="&commit_baseurl;cb2ef0e92">&sect;</ulink>
     </para>

     <para>
      These are valid values, so rejecting them was incorrect.  In the
      worst case, if a pg_upgrade is attempted when exactly at the point
      of multixact wraparound, the upgrade would fail.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [6bd469d26] 2025-12-04 18:12:08 +0100
Branch: REL_18_STABLE [df93f94dd] 2025-12-04 18:12:08 +0100
Branch: REL_17_STABLE [ce2f575b7] 2025-12-04 18:12:08 +0100
Branch: master [1f28982e4] 2026-01-21 18:55:43 +0100
Branch: REL_18_STABLE [3c83a2a0a] 2026-01-21 18:55:43 +0100
Branch: REL_17_STABLE [e1a327dc4] 2026-01-21 18:55:43 +0100
Branch: REL_16_STABLE [098a1fab8] 2026-01-21 18:55:43 +0100
Branch: REL_15_STABLE [dcddd6987] 2026-01-21 18:55:43 +0100
Branch: REL_14_STABLE [607a67c5e] 2026-01-21 18:55:43 +0100
-->
     <para>
      In <filename>contrib/amcheck</filename>, use the correct snapshot
      for btree index parent checks (Mihail Nikalayeu)
      <ulink url="&commit_baseurl;ce2f575b7">&sect;</ulink>
      <ulink url="&commit_baseurl;e1a327dc4">&sect;</ulink>
     </para>

     <para>
      The previous coding caused spurious errors when examining indexes
      created with <command>CREATE INDEX CONCURRENTLY</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [cbe04e5d7] 2025-12-02 21:11:15 +0200
Branch: REL_18_STABLE [19e786727] 2025-12-02 21:15:04 +0200
Branch: REL_17_STABLE [e8ae59445] 2025-12-02 21:15:28 +0200
Branch: REL_16_STABLE [182901626] 2025-12-02 21:15:48 +0200
Branch: REL_15_STABLE [7792bdc45] 2025-12-02 21:16:06 +0200
Branch: REL_14_STABLE [fbb4b6078] 2025-12-02 21:16:17 +0200
-->
     <para>
      Fix <filename>contrib/amcheck</filename> to
      handle <quote>half-dead</quote> btree index pages correctly
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;e8ae59445">&sect;</ulink>
     </para>

     <para>
      <filename>amcheck</filename> expected such a page to have a parent
      downlink, but it does not, leading to a false error report
      about <quote>mismatch between parent key and child high key</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [6c05ef572] 2025-12-02 21:10:51 +0200
Branch: REL_18_STABLE [50c63ebb0] 2025-12-02 21:14:53 +0200
Branch: REL_17_STABLE [5a2d1df00] 2025-12-02 21:15:19 +0200
Branch: REL_16_STABLE [f2a6df9fd] 2025-12-02 21:15:43 +0200
Branch: REL_15_STABLE [721b58fbe] 2025-12-02 21:16:01 +0200
Branch: REL_14_STABLE [a4cb21ea9] 2025-12-02 21:16:13 +0200
-->
     <para>
      Fix <filename>contrib/amcheck</filename> to
      handle incomplete btree root page splits correctly
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;5a2d1df00">&sect;</ulink>
     </para>

     <para>
      <filename>amcheck</filename> could report a false error
      about <quote>block is not true root</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [4f49e4b55] 2026-01-04 20:32:40 +1300
Branch: REL_18_STABLE [07c1c6ec5] 2026-01-04 20:33:14 +1300
Branch: REL_17_STABLE [a5f2dc421] 2026-01-04 20:33:39 +1300
Branch: REL_16_STABLE [54f82c4aa] 2026-01-04 20:34:01 +1300
Branch: REL_15_STABLE [c89510431] 2026-01-04 20:34:22 +1300
Branch: REL_14_STABLE [67a6fd507] 2026-01-04 20:34:45 +1300
-->
     <para>
      Fix edge-case integer overflow
      in <filename>contrib/intarray</filename>'s selectivity estimator
      for <literal>@@</literal> (Chao Li)
      <ulink url="&commit_baseurl;a5f2dc421">&sect;</ulink>
     </para>

     <para>
      This could cause poor selectivity estimates to be produced for cases
      involving the maximum integer value.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [84d5efa7e] 2025-12-16 10:35:40 -0800
Branch: REL_18_STABLE [f79e239e0] 2025-12-16 10:36:09 -0800
Branch: REL_17_STABLE [b8cfe9dc2] 2025-12-16 10:36:29 -0800
Branch: REL_16_STABLE [b80227c0a] 2025-12-16 10:36:48 -0800
Branch: REL_15_STABLE [335b2f30b] 2025-12-16 10:37:22 -0800
Branch: REL_14_STABLE [898991966] 2025-12-16 10:38:15 -0800
-->
     <para>
      Fix multibyte-encoding issue in <filename>contrib/ltree</filename>
      (Jeff Davis)
      <ulink url="&commit_baseurl;b8cfe9dc2">&sect;</ulink>
     </para>

     <para>
      The previous coding could pass an incomplete multibyte character
      to <function>lower()</function>, probably resulting in incorrect
      behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [228fe0c3e] 2026-01-18 14:54:33 -0500
Branch: REL_18_STABLE [6574bee64] 2026-01-18 14:54:47 -0500
Branch: REL_17_STABLE [f87c0b84e] 2026-01-18 14:54:54 -0500
Branch: REL_16_STABLE [d852d105e] 2026-01-18 14:55:01 -0500
Branch: REL_15_STABLE [00410b76d] 2026-01-18 14:55:07 -0500
Branch: REL_14_STABLE [8bbf28191] 2026-01-18 14:55:13 -0500
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2025c (Tom Lane)
      <ulink url="&commit_baseurl;f87c0b84e">&sect;</ulink>
     </para>

     <para>
      The only change is in historical data for pre-1976 timestamps in
      Baja California.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-17-7-migration">
   <title>Migration to Version 17.7</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.6,
    see <xref linkend="release-17-6"/>.
   </para>
  </sect2>

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

   <itemizedlist>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [5e4fcbe53] 2025-11-10 09:00:00 -0600
Branch: REL_18_STABLE [00eb646ea] 2025-11-10 09:00:00 -0600
Branch: REL_17_STABLE [e2fb3dfa8] 2025-11-10 09:00:00 -0600
Branch: REL_16_STABLE [d20abb587] 2025-11-10 09:00:00 -0600
Branch: REL_15_STABLE [2393d374a] 2025-11-10 09:00:00 -0600
Branch: REL_14_STABLE [95cce5669] 2025-11-10 09:00:00 -0600
Branch: REL_13_STABLE [8a2530ebc] 2025-11-10 09:00:00 -0600
-->
     <para>
      Check for <literal>CREATE</literal> privileges on the schema
      in <command>CREATE STATISTICS</command> (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;e2fb3dfa8">&sect;</ulink>
     </para>

     <para>
      This omission allowed table owners to create statistics in any
      schema, potentially leading to unexpected naming conflicts.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Jelte Fennema-Nio for reporting this problem.
      (CVE-2025-12817)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [600086f47] 2025-11-10 06:20:33 -0800
Branch: REL_18_STABLE [7eb8fcad8] 2025-11-10 06:03:01 -0800
Branch: REL_17_STABLE [f5999f018] 2025-11-10 06:03:03 -0800
Branch: REL_16_STABLE [585fd9b3c] 2025-11-10 06:03:04 -0800
Branch: REL_15_STABLE [91421565f] 2025-11-10 06:03:05 -0800
Branch: REL_14_STABLE [96d2c7e96] 2025-11-10 06:03:05 -0800
Branch: REL_13_STABLE [d6f0c0d6d] 2025-11-10 06:03:06 -0800
-->
     <para>
      Avoid integer overflow in allocation-size calculations
      within <application>libpq</application> (Jacob Champion)
      <ulink url="&commit_baseurl;f5999f018">&sect;</ulink>
     </para>

     <para>
      Several places in <application>libpq</application> were not
      sufficiently careful about computing the required size of a memory
      allocation.  Sufficiently large inputs could cause integer overflow,
      resulting in an undersized buffer, which would then lead to writing
      past the end of the buffer.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Aleksey
      Solovev of Positive Technologies for reporting this problem.
      (CVE-2025-12818)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [ef5e60a9d] 2025-10-09 01:07:59 -0400
Branch: REL_18_STABLE [dc9125111] 2025-10-09 01:07:52 -0400
Branch: REL_17_STABLE [09f86a42f] 2025-10-09 01:07:36 -0400
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [c09a06918] 2025-11-04 12:25:04 +0100
Branch: REL_18_STABLE [1baae827e] 2025-11-04 12:25:14 +0100
Branch: REL_17_STABLE [1e6dfdaa0] 2025-11-04 12:25:20 +0100
-->
     <para>
      Prevent <quote>unrecognized node type</quote> errors when a SQL/JSON
      function such as <function>JSON_VALUE</function> has
      a <literal>DEFAULT</literal> clause containing
      a <literal>COLLATE</literal> expression (Jian He)
      <ulink url="&commit_baseurl;09f86a42f">&sect;</ulink>
      <ulink url="&commit_baseurl;1e6dfdaa0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [b63a82245] 2025-09-16 18:42:20 +0900
Branch: REL_18_STABLE Release: REL_18_0 [d29a3f4b4] 2025-09-16 18:43:57 +0900
Branch: REL_17_STABLE [d719e2ecb] 2025-09-16 18:45:26 +0900
Branch: REL_16_STABLE [62397bb18] 2025-09-16 18:46:39 +0900
-->
     <para>
      Correctly treat JSON constructor expressions, such
      as <function>JSON_OBJECT()</function>, as non-strict (Tender Wang,
      Richard Guo)
      <ulink url="&commit_baseurl;d719e2ecb">&sect;</ulink>
     </para>

     <para>
      In some cases these expressions can yield a non-null result despite
      having one or more null inputs, making them non-strict.  The planner
      incorrectly classified them as strict and could perform incorrect
      query transformations as a result.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cdf7feb96] 2025-09-13 16:55:51 -0400
Branch: REL_18_STABLE Release: REL_18_0 [802308693] 2025-09-13 16:55:51 -0400
Branch: REL_17_STABLE [e09adb5b9] 2025-09-13 16:55:51 -0400
Branch: REL_16_STABLE [281ad4ed1] 2025-09-13 16:55:51 -0400
Branch: REL_15_STABLE [9fd531534] 2025-09-13 16:55:51 -0400
Branch: REL_14_STABLE [f75ff1b14] 2025-09-13 16:55:51 -0400
Branch: REL_13_STABLE [308773617] 2025-09-13 16:55:51 -0400
-->
     <para>
      Further fix processing of character classes within <literal>SIMILAR
      TO</literal> regular expressions (Laurenz Albe)
      <ulink url="&commit_baseurl;e09adb5b9">&sect;</ulink>
     </para>

     <para>
      The previous fix for translating <literal>SIMILAR TO</literal>
      pattern matching expressions to POSIX-style regular expressions
      broke a corner case that formerly worked: if there is an escape
      character right after the opening bracket and then a closing bracket
      right after the escape sequence (for
      example <literal>[\w]</literal>), the closing bracket was no longer
      seen as terminating the character class.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b0cc0a71e] 2025-09-17 16:32:57 -0400
Branch: REL_18_STABLE Release: REL_18_0 [4eab45649] 2025-09-17 16:32:57 -0400
Branch: REL_17_STABLE [e830896c1] 2025-09-17 16:32:57 -0400
Branch: REL_16_STABLE [7df74e635] 2025-09-17 16:32:57 -0400
Branch: REL_15_STABLE [afd18f276] 2025-09-17 16:32:57 -0400
Branch: REL_14_STABLE [31bf09632] 2025-09-17 16:32:57 -0400
Branch: REL_13_STABLE [b649ef244] 2025-09-17 16:32:57 -0400
-->
     <para>
      Fix parsing of aggregate functions whose arguments contain a
      sub-select with a <literal>FROM</literal> reference to a CTE outside
      the aggregate function (Tom Lane)
      <ulink url="&commit_baseurl;e830896c1">&sect;</ulink>
     </para>

     <para>
      Such a CTE reference must act like a outer-level column reference
      when determining the aggregate's semantic level; but it was not
      being accounted for, leading to obscure planner or executor errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [aba8f61c3] 2025-09-03 16:00:38 +0900
Branch: REL_18_STABLE Release: REL_18_0 [ab4a35b4e] 2025-09-03 16:03:43 +0900
Branch: REL_17_STABLE [f34202f51] 2025-09-03 16:05:49 +0900
Branch: REL_16_STABLE [79ade5873] 2025-09-03 16:09:23 +0900
Branch: REL_15_STABLE [53e35fb56] 2025-09-03 16:13:33 +0900
Branch: REL_14_STABLE [160ef51c8] 2025-09-03 16:16:36 +0900
Branch: REL_13_STABLE [8c02d92c6] 2025-09-03 16:19:06 +0900
-->
     <para>
      Fix <quote>no relation entry for relid</quote> errors in corner
      cases while estimating SubPlan costs (Richard Guo)
      <ulink url="&commit_baseurl;f34202f51">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [da9f9f75e] 2025-08-30 00:50:50 +1200
Branch: REL_18_STABLE Release: REL_18_0 [4aea55891] 2025-08-30 00:51:39 +1200
Branch: REL_17_STABLE [ed394c4bd] 2025-08-30 00:52:22 +1200
Branch: REL_16_STABLE [f0fe1da50] 2025-08-30 00:52:49 +1200
Branch: REL_15_STABLE [8286bce0a] 2025-08-30 00:53:17 +1200
-->
     <para>
      Avoid unlikely use-after-free in planner's expansion of partitioned
      tables (Bernd Reiß)
      <ulink url="&commit_baseurl;ed394c4bd">&sect;</ulink>
     </para>

     <para>
      There was a hazard only when the last live partition was
      concurrently dropped.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [843e50208] 2025-10-10 14:52:25 -0400
Branch: REL_18_STABLE [61de81a49] 2025-10-10 14:52:23 -0400
Branch: REL_17_STABLE [ae15cebc2] 2025-10-10 14:52:21 -0400
Branch: REL_16_STABLE [c160fd469] 2025-10-10 14:52:19 -0400
Branch: REL_15_STABLE [ca0c93908] 2025-10-10 14:52:17 -0400
Branch: REL_14_STABLE [314004021] 2025-10-10 14:52:14 -0400
Branch: REL_13_STABLE [af302ff6b] 2025-10-10 14:52:12 -0400
-->
     <para>
      Remove faulty assertion in btree index cleanup (Peter Geoghegan)
      <ulink url="&commit_baseurl;ae15cebc2">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [327b7324d] 2025-08-26 12:08:57 -0400
Branch: REL_18_STABLE Release: REL_18_0 [3a7a3eaaf] 2025-08-26 12:08:57 -0400
Branch: REL_17_STABLE [456c6a05d] 2025-08-26 12:08:57 -0400
Branch: REL_16_STABLE [d532069c3] 2025-08-26 12:08:57 -0400
Branch: REL_15_STABLE [34249b3b5] 2025-08-26 12:08:57 -0400
Branch: REL_14_STABLE [4a593043e] 2025-08-26 12:08:57 -0400
Branch: REL_13_STABLE [3e0f5f00b] 2025-08-26 12:08:57 -0400
-->
     <para>
      Fix possible infinite loop in GIN index scans with multiple scan
      conditions (Tom Lane)
      <ulink url="&commit_baseurl;456c6a05d">&sect;</ulink>
     </para>

     <para>
      GIN can handle scan conditions that can reject non-matching entries
      but are not useful for searching for relevant entries, for example
      a <type>tsquery</type> clause like <literal>!term</literal>.  But
      such a condition must not be first in the array of scan conditions.
      The code failed to ensure that in all cases, with the result that a
      query having a mix of such conditions with normal conditions might
      work or not depending on the order in which the conditions were
      given in the query.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b55068236] 2025-08-26 11:38:41 -0400
Branch: REL_18_STABLE Release: REL_18_0 [44c2e5b76] 2025-08-26 11:38:41 -0400
Branch: REL_17_STABLE [d17abaea8] 2025-08-26 11:38:41 -0400
Branch: REL_16_STABLE [25eadfd0f] 2025-08-26 11:38:41 -0400
Branch: REL_15_STABLE [a9c1b9c1c] 2025-08-26 11:38:41 -0400
Branch: REL_14_STABLE [a7da746c1] 2025-08-26 11:38:41 -0400
Branch: REL_13_STABLE [b2d71c455] 2025-08-26 11:38:41 -0400
-->
     <para>
      Ensure that GIN index scans can be canceled (Tom Lane)
      <ulink url="&commit_baseurl;d17abaea8">&sect;</ulink>
     </para>

     <para>
      Some code paths were capable of running for a long time without
      checking for interrupts.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [a95e3d84c] 2025-11-04 13:23:26 +0100
Branch: REL_18_STABLE [419ffde23] 2025-11-04 13:23:26 +0100
Branch: REL_17_STABLE [f4b68b033] 2025-11-04 13:23:26 +0100
Branch: REL_16_STABLE [6ef33c805] 2025-11-04 13:23:26 +0100
Branch: REL_15_STABLE [23ddadf68] 2025-11-04 13:23:26 +0100
Branch: REL_14_STABLE [f0ad41716] 2025-11-04 13:23:26 +0100
Branch: REL_13_STABLE [3c7b47974] 2025-11-04 13:23:26 +0100
Branch: master [0a3d27bfe] 2025-11-04 20:31:43 +0100
Branch: REL_18_STABLE [8733f0b54] 2025-11-04 20:31:43 +0100
Branch: REL_17_STABLE [3b5007347] 2025-11-04 20:31:43 +0100
Branch: REL_16_STABLE [20442cf50] 2025-11-04 20:31:43 +0100
Branch: REL_15_STABLE [bcfbd3f74] 2025-11-04 20:31:43 +0100
Branch: REL_14_STABLE [65b0d1f74] 2025-11-04 20:31:43 +0100
Branch: REL_13_STABLE [ef81697fe] 2025-11-04 20:31:43 +0100
-->
     <para>
      Ensure that BRIN autosummarization provides a snapshot for index
      expressions that need one (Álvaro Herrera)
      <ulink url="&commit_baseurl;f4b68b033">&sect;</ulink>
      <ulink url="&commit_baseurl;3b5007347">&sect;</ulink>
     </para>

     <para>
      Previously, autosummarization would fail for such indexes, and then
      leave placeholder index tuples behind, causing the index to bloat
      over time.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [9fd29d7ff] 2025-10-21 20:46:14 +1300
Branch: REL_18_STABLE [715983a81] 2025-10-21 20:46:49 +1300
Branch: REL_17_STABLE [c4f5a59ab] 2025-10-21 20:47:10 +1300
Branch: REL_16_STABLE [ef915bf93] 2025-10-21 20:47:35 +1300
Branch: REL_15_STABLE [810aaf7f2] 2025-10-21 20:48:06 +1300
Branch: REL_14_STABLE [eea24eb0a] 2025-10-21 20:48:34 +1300
Branch: REL_13_STABLE [c28f8ca29] 2025-10-21 20:49:00 +1300
-->
     <para>
      Fix integer-overflow hazard in BRIN index scans when the table
      contains close to 2<superscript>32</superscript> pages (Sunil S)
      <ulink url="&commit_baseurl;c4f5a59ab">&sect;</ulink>
     </para>

     <para>
      This oversight could result in an infinite loop or scanning of
      unneeded table pages.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [6911f8037] 2025-10-23 13:11:02 +1300
Branch: REL_18_STABLE [ceb51d09b] 2025-10-23 13:12:03 +1300
Branch: REL_17_STABLE [10945148e] 2025-10-23 13:12:49 +1300
Branch: REL_16_STABLE [3398b0d02] 2025-10-23 13:13:19 +1300
Branch: REL_15_STABLE [b8ecfbe5a] 2025-10-23 13:13:44 +1300
Branch: REL_14_STABLE [e4316ec4d] 2025-10-23 13:14:08 +1300
Branch: REL_13_STABLE [4afab175b] 2025-10-23 13:14:33 +1300
-->
     <para>
      Fix incorrect zero-extension of stored values in JIT-generated tuple
      deforming code (David Rowley)
      <ulink url="&commit_baseurl;10945148e">&sect;</ulink>
     </para>

     <para>
      When not using JIT, the equivalent code does sign-extension not
      zero-extension, leading to a different Datum representation of small
      integer data types.  This inconsistency was masked in most cases,
      but it is known to lead to <quote>could not find memoization table
      entry</quote> errors when using Memoize plan nodes, and there might
      be other symptoms.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [39dcfda2d] 2025-10-26 10:59:50 +1300
Branch: REL_18_STABLE [a2387c32f] 2025-10-26 11:01:32 +1300
Branch: REL_17_STABLE [0d3074615] 2025-10-26 11:01:53 +1300
Branch: REL_16_STABLE [a546964db] 2025-10-26 11:02:15 +1300
Branch: REL_15_STABLE [2992b9a07] 2025-10-26 11:02:36 +1300
-->
     <para>
      Fix incorrect logic for caching result-relation information for
      triggers (David Rowley, Amit Langote)
      <ulink url="&commit_baseurl;0d3074615">&sect;</ulink>
     </para>

     <para>
      In cases where partitions' column sets aren't physically identical
      to their parent partitioned tables' column sets, this oversight
      could lead to crashes.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [ac06ea8f7] 2025-09-17 12:19:15 +1200
Branch: REL_18_STABLE Release: REL_18_0 [78e6047dc] 2025-09-17 12:19:51 +1200
Branch: REL_17_STABLE [0fb06e893] 2025-09-17 12:20:19 +1200
Branch: REL_16_STABLE [ba0203880] 2025-09-17 12:20:44 +1200
Branch: REL_15_STABLE [f00ad440a] 2025-09-17 12:21:08 +1200
Branch: REL_14_STABLE [f78a69034] 2025-09-17 12:21:29 +1200
Branch: master [dee21ea6d] 2025-09-17 11:48:55 +1200
Branch: REL_18_STABLE Release: REL_18_0 [bae6c74ba] 2025-09-17 11:49:26 +1200
Branch: REL_17_STABLE [3d939a9b1] 2025-09-17 11:49:49 +1200
Branch: REL_16_STABLE [d6539f88b] 2025-09-17 11:50:12 +1200
Branch: REL_15_STABLE [005770203] 2025-09-17 11:50:35 +1200
Branch: REL_14_STABLE [2eb7ea97d] 2025-09-17 11:50:58 +1200
Branch: REL_13_STABLE [940f3cd5d] 2025-09-17 11:51:21 +1200
-->
     <para>
      Add missing EvalPlanQual rechecks for TID Scan and TID Range Scan
      plan nodes (Sophie Alpert, David Rowley)
      <ulink url="&commit_baseurl;0fb06e893">&sect;</ulink>
      <ulink url="&commit_baseurl;3d939a9b1">&sect;</ulink>
     </para>

     <para>
      This omission led to possibly not rechecking a condition
      on <structfield>ctid</structfield> during concurrent-update
      situations, causing the update's behavior to vary depending on which
      plan type had been selected.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [12609fbac] 2025-10-15 17:15:00 +0900
Branch: REL_18_STABLE [b14144325] 2025-10-15 17:15:01 +0900
Branch: REL_17_STABLE [2bb84ea7e] 2025-10-15 17:15:02 +0900
Branch: REL_16_STABLE [5a9af4868] 2025-10-15 17:15:03 +0900
Branch: REL_15_STABLE [4a08603a2] 2025-10-15 17:15:04 +0900
Branch: REL_14_STABLE [24e74b962] 2025-10-15 17:15:05 +0900
Branch: REL_13_STABLE [12b0c0e51] 2025-10-15 17:15:05 +0900
-->
     <para>
      Fix EvalPlanQual handling of foreign or custom joins that do not
      have an alternative local-join plan prepared for EPQ (Masahiko
      Sawada, Etsuro Fujita)
      <ulink url="&commit_baseurl;2bb84ea7e">&sect;</ulink>
     </para>

     <para>
      In such cases the foreign or custom access method should be invoked
      normally, but that did not happen, typically leading to a crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [3231fd045] 2025-10-11 20:30:12 +0200
Branch: REL_18_STABLE [08c037dff] 2025-10-11 20:30:12 +0200
Branch: REL_17_STABLE [ea06f97ee] 2025-10-11 20:30:12 +0200
Branch: REL_16_STABLE [b835759ec] 2025-10-11 20:30:12 +0200
Branch: REL_15_STABLE [bdae98495] 2025-10-11 20:30:12 +0200
Branch: REL_14_STABLE [b753be38a] 2025-10-11 20:30:12 +0200
-->
     <para>
      Avoid duplicating hash partition constraints during <literal>DETACH
      CONCURRENTLY</literal> (Haiyang Li)
      <ulink url="&commit_baseurl;ea06f97ee">&sect;</ulink>
     </para>

     <para>
      <command>ALTER TABLE DETACH PARTITION CONCURRENTLY</command> was
      written to add a copy of the partitioning constraint to the
      now-detached partition.  This was misguided, partially because
      non-concurrent <literal>DETACH</literal> doesn't do that, but mostly
      because in the case of hash partitioning the constraint expression
      contains references to the parent table's OID.  That causes problems
      during dump/restore, or if the parent table is dropped
      after <literal>DETACH</literal>.  In v19 and later, we'll no longer
      create any such copied constraints at all.  In released branches, to
      minimize the risk of unforeseen consequences, only skip adding a
      copied constraint if it is for hash partitioning.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [040cc5f3c] 2025-11-04 14:46:58 +0100
Branch: REL_18_STABLE [ba99c9491] 2025-11-04 14:47:15 +0100
Branch: REL_17_STABLE [0b44f2443] 2025-11-04 15:18:09 +0100
Branch: REL_16_STABLE [7180d56c5] 2025-11-04 15:22:17 +0100
Branch: REL_15_STABLE [643a5e96c] 2025-11-04 15:28:46 +0100
Branch: REL_14_STABLE [04345d7a4] 2025-11-04 15:37:08 +0100
Branch: REL_13_STABLE [7f239c72a] 2025-11-04 15:37:19 +0100
-->
     <para>
      Disallow generated columns in partition keys
      (Jian He, Ashutosh Bapat)
      <ulink url="&commit_baseurl;0b44f2443">&sect;</ulink>
     </para>

     <para>
      This was already not allowed, but the check missed some cases, such
      as where the column reference is implicit in a whole-row reference.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [aa606b931] 2025-11-06 13:54:42 +0100
Branch: REL_18_STABLE [0f9e0068b] 2025-11-06 13:55:08 +0100
Branch: REL_17_STABLE [07f787e57] 2025-11-06 14:01:42 +0100
Branch: REL_16_STABLE [26958f4d9] 2025-11-06 14:01:57 +0100
Branch: REL_15_STABLE [8278737bf] 2025-11-06 14:02:03 +0100
Branch: REL_14_STABLE [ccfe28eb4] 2025-11-06 14:02:09 +0100
Branch: REL_13_STABLE [3717849e6] 2025-11-06 14:02:13 +0100
-->
     <para>
      Disallow generated columns in <literal>COPY ... FROM
      ... WHERE</literal> clauses (Peter Eisentraut, Jian He)
      <ulink url="&commit_baseurl;07f787e57">&sect;</ulink>
     </para>

     <para>
      Previously, incorrect behavior or an obscure error message resulted
      from attempting to reference such a column, since generated columns
      have not yet been computed at the point
      where <literal>WHERE</literal> filtering is done.
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [54ab74865] 2025-10-03 16:05:02 +0700
Branch: REL_18_STABLE [76613b539] 2025-10-03 16:07:42 +0700
Branch: REL_17_STABLE [3549ffb6a] 2025-10-03 16:07:34 +0700
-->
     <para>
      Avoid potential use-after-free in parallel vacuum (Kevin Oommen
      Anish)
      <ulink url="&commit_baseurl;3549ffb6a">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [a95393ecd] 2025-09-29 11:15:44 -0700
Branch: REL_18_STABLE [d024160ff] 2025-09-29 11:15:47 -0700
Branch: REL_17_STABLE [6778fbca6] 2025-09-29 11:15:48 -0700
Branch: REL_16_STABLE [ab16418ee] 2025-09-29 11:15:48 -0700
Branch: REL_15_STABLE [d202ec1fb] 2025-09-29 11:15:48 -0700
Branch: REL_14_STABLE [5816baa9b] 2025-09-29 11:15:49 -0700
Branch: REL_13_STABLE [afb2cce74] 2025-09-29 11:15:49 -0700
-->
     <para>
      Fix visibility checking for statistics objects
      in <literal>pg_temp</literal> (Noah Misch)
      <ulink url="&commit_baseurl;6778fbca6">&sect;</ulink>
     </para>

     <para>
      A statistics object located in a temporary schema cannot be named
      without schema qualification,
      but <function>pg_statistics_obj_is_visible()</function> missed that
      memo and could return <quote>true</quote> regardless.  In turn,
      functions such as <function>pg_describe_object()</function> could
      fail to schema-qualify the object's name as expected.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a0b99fc12] 2025-09-11 17:11:57 -0400
Branch: REL_18_STABLE Release: REL_18_0 [3c02c4652] 2025-09-11 17:11:54 -0400
Branch: REL_17_STABLE [c0c8ee23c] 2025-09-11 17:11:54 -0400
Branch: REL_16_STABLE [8856f1acc] 2025-09-11 17:11:54 -0400
Branch: REL_15_STABLE [451373dc5] 2025-09-11 17:11:54 -0400
Branch: master [f14ea34d6] 2025-09-12 17:43:17 -0400
Branch: REL_18_STABLE Release: REL_18_0 [ef81db969] 2025-09-12 17:43:18 -0400
Branch: REL_17_STABLE [a220e40d1] 2025-09-12 17:43:15 -0400
Branch: REL_16_STABLE [f6c8e7824] 2025-09-12 17:43:15 -0400
Branch: REL_15_STABLE [33e49ee01] 2025-09-12 17:43:15 -0400
-->
     <para>
      Fix <function>pg_event_trigger_dropped_objects()</function>'s
      reporting of temporary status (Antoine Violin, Tom Lane)
      <ulink url="&commit_baseurl;c0c8ee23c">&sect;</ulink>
      <ulink url="&commit_baseurl;a220e40d1">&sect;</ulink>
     </para>

     <para>
      If a dropped column default, trigger, or RLS policy belongs to a
      temporary table, report it with <literal>is_temporary</literal>
      true.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [abdeacdb0] 2025-09-10 16:05:03 -0400
Branch: REL_18_STABLE Release: REL_18_0 [bc865ff6d] 2025-09-10 16:05:03 -0400
Branch: REL_17_STABLE [862980f92] 2025-09-10 16:05:03 -0400
Branch: REL_16_STABLE [e1da9c072] 2025-09-10 16:05:03 -0400
Branch: REL_15_STABLE [5ac973892] 2025-09-10 16:05:03 -0400
Branch: REL_14_STABLE [5eab9b0a4] 2025-09-10 16:05:03 -0400
Branch: REL_13_STABLE [8b6c29afd] 2025-09-10 16:05:03 -0400
-->
     <para>
      Fix memory leakage in hashed subplans (Haiyang Li)
      <ulink url="&commit_baseurl;862980f92">&sect;</ulink>
     </para>

     <para>
      Any memory consumed by the hash functions used for hashing tuples
      constituted a query-lifespan memory leak.  One way that could happen
      is if the values being hashed require de-toasting.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8c8f7b199] 2025-09-10 07:23:05 +0900
Branch: REL_18_STABLE Release: REL_18_0 [039301b3f] 2025-09-10 07:23:22 +0900
Branch: REL_17_STABLE [e2dd7b2ac] 2025-09-10 07:23:24 +0900
-->
     <para>
      Avoid leaking <structname>SMgrRelation</structname> objects in the
      startup process (Jingtang Zhang)
      <ulink url="&commit_baseurl;e2dd7b2ac">&sect;</ulink>
     </para>

     <para>
      In a long-running standby server, the hashtable holding these
      objects could bloat substantially, because there was no mechanism
      for freeing no-longer-interesting entries.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [ff47f9c16] 2025-10-11 16:39:22 +0200
Branch: REL_18_STABLE [33e7b4a7c] 2025-10-11 16:39:22 +0200
Branch: REL_17_STABLE [f9993ac64] 2025-10-11 16:39:22 +0200
Branch: REL_16_STABLE [c72b5c536] 2025-10-11 16:39:22 +0200
Branch: REL_15_STABLE [23b316c36] 2025-10-11 16:39:22 +0200
-->
     <para>
      Fix minor memory leak during WAL replay of database creation
      (Nathan Bossart)
      <ulink url="&commit_baseurl;f9993ac64">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8191e0c16] 2025-09-08 15:52:23 +0900
Branch: REL_18_STABLE Release: REL_18_0 [f256a7bba] 2025-09-08 15:52:48 +0900
Branch: REL_17_STABLE [3e6dfcfb0] 2025-09-08 15:52:51 +0900
Branch: REL_16_STABLE [12f57681c] 2025-09-08 15:52:53 +0900
Branch: REL_15_STABLE [1852ec5db] 2025-09-08 15:52:56 +0900
-->
     <para>
      Fix corruption of the shared statistics table after out-of-memory
      failures (Mikhail Kot)
      <ulink url="&commit_baseurl;3e6dfcfb0">&sect;</ulink>
     </para>

     <para>
      Previously, an out-of-memory failure partway through creating a new
      hash table entry left a broken entry behind, potentially causing
      errors in other sessions later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [6ede13d1b] 2025-09-05 08:18:18 +0100
Branch: REL_18_STABLE Release: REL_18_0 [c70b6db34] 2025-09-05 08:21:35 +0100
Branch: REL_17_STABLE [6195afbe5] 2025-09-05 08:22:38 +0100
Branch: REL_16_STABLE [21a61b87f] 2025-09-05 08:23:57 +0100
Branch: REL_15_STABLE [f871fbae9] 2025-09-05 08:25:03 +0100
-->
     <para>
      Fix concurrent update issue in <command>MERGE</command>
      (Yugo Nagata)
      <ulink url="&commit_baseurl;6195afbe5">&sect;</ulink>
     </para>

     <para>
      When executing a <literal>MERGE UPDATE</literal> action, if there is
      more than one concurrent update of the target row, the
      lock-and-retry code would sometimes incorrectly identify the latest
      version of the target tuple, leading to incorrect results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [fc6600fc1] 2025-09-04 11:45:44 +0100
Branch: REL_18_STABLE Release: REL_18_0 [311340f17] 2025-09-04 11:47:15 +0100
Branch: REL_17_STABLE [76f45be93] 2025-09-04 11:48:02 +0100
Branch: REL_16_STABLE [421d7a157] 2025-09-04 11:48:51 +0100
Branch: REL_15_STABLE [5481cc332] 2025-09-04 11:50:59 +0100
Branch: master [5386bfb9c] 2025-09-04 11:27:53 +0100
Branch: REL_18_STABLE Release: REL_18_0 [344662848] 2025-09-04 11:32:00 +0100
Branch: REL_17_STABLE [0b934d399] 2025-09-04 11:33:00 +0100
Branch: REL_16_STABLE [0c4d5a45d] 2025-09-04 11:34:25 +0100
Branch: REL_15_STABLE [451b22efd] 2025-09-04 11:35:19 +0100
Branch: REL_14_STABLE [5fd569ef2] 2025-09-04 11:36:25 +0100
Branch: REL_13_STABLE [0610b843c] 2025-09-04 11:37:46 +0100
Branch: REL_17_STABLE [57dfb64ec] 2025-09-04 16:01:18 +0100
Branch: REL_16_STABLE [d37694b97] 2025-09-04 16:00:01 +0100
Branch: REL_15_STABLE [a4624929d] 2025-09-04 15:59:02 +0100
Branch: REL_14_STABLE [ea65c8823] 2025-09-04 15:57:18 +0100
Branch: REL_13_STABLE [dbef9cbaa] 2025-09-04 15:55:59 +0100
-->
     <para>
      Add missing replica identity checks in <command>MERGE</command> and
      <command>INSERT ... ON CONFLICT DO UPDATE</command>
      (Zhijie Hou)
      <ulink url="&commit_baseurl;76f45be93">&sect;</ulink>
      <ulink url="&commit_baseurl;0b934d399">&sect;</ulink>
      <ulink url="&commit_baseurl;57dfb64ec">&sect;</ulink>
     </para>

     <para>
      If <command>MERGE</command> may require update or delete actions,
      and the target table publishes updates or deletes, insist that it
      have a <literal>REPLICA IDENTITY</literal> defined.  Failing to
      require this can silently break replication.
      Likewise, <command>INSERT</command> with
      an <literal>UPDATE</literal> option must require <literal>REPLICA
      IDENTITY</literal> if the target table publishes either inserts or
      updates.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [aa21e4922] 2025-08-19 05:33:17 +0000
Branch: REL_18_STABLE Release: REL_18_0 [a5d4c0415] 2025-08-19 05:18:24 +0000
Branch: REL_17_STABLE [288a817bc] 2025-08-19 05:06:37 +0000
Branch: REL_16_STABLE [7ece76129] 2025-08-19 04:54:19 +0000
Branch: REL_15_STABLE [e41137155] 2025-08-19 04:41:14 +0000
Branch: REL_14_STABLE [ef7750274] 2025-08-19 04:28:19 +0000
Branch: REL_13_STABLE [0a98f24a6] 2025-08-19 04:17:03 +0000
-->
     <para>
      Avoid deadlock during <command>DROP SUBSCRIPTION</command> when
      publisher is on the same server as subscriber (Dilip Kumar)
      <ulink url="&commit_baseurl;288a817bc">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [883a95646] 2025-10-22 11:27:15 +0900
Branch: REL_18_STABLE [9670032cc] 2025-10-22 11:28:48 +0900
Branch: REL_17_STABLE [62d5ee75b] 2025-10-22 11:28:57 +0900
Branch: REL_16_STABLE [2e55cf4ef] 2025-10-22 11:29:02 +0900
Branch: REL_15_STABLE [59b215f72] 2025-10-22 11:29:07 +0900
Branch: REL_14_STABLE [a7ab6ce6a] 2025-10-22 11:29:13 +0900
Branch: REL_13_STABLE [7d7ebdb80] 2025-10-22 11:29:18 +0900
-->
     <para>
      Fix incorrect reporting of replication lag
      in <structname>pg_stat_replication</structname> view (Fujii Masao)
      <ulink url="&commit_baseurl;62d5ee75b">&sect;</ulink>
     </para>

     <para>
      If any standby server's replay LSN stopped advancing,
      the <structfield>write_lag</structfield>
      and <structfield>flush_lag</structfield> columns would eventually
      stop updating.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [f33e60a53] 2025-10-22 20:09:43 +0900
Branch: REL_18_STABLE [6ff7ba9fe] 2025-10-22 20:10:58 +0900
Branch: REL_17_STABLE [1db2870bb] 2025-10-22 20:11:47 +0900
Branch: REL_16_STABLE [4fd916eab] 2025-10-22 20:12:36 +0900
Branch: REL_15_STABLE [caf529aba] 2025-10-22 20:13:15 +0900
Branch: REL_14_STABLE [f106f53df] 2025-10-22 20:14:02 +0900
Branch: REL_13_STABLE [b00a16bae] 2025-10-22 20:14:07 +0900
-->
     <para>
      Avoid duplicative log messages about
      invalid <varname>primary_slot_name</varname> settings (Fujii Masao)
      <ulink url="&commit_baseurl;1db2870bb">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [e0dc4bbfb] 2025-10-27 06:48:32 +0000
Branch: REL_18_STABLE [b45a8d7d8] 2025-10-27 06:37:35 +0000
Branch: REL_17_STABLE [0024f5a10] 2025-10-27 06:34:29 +0000
-->
     <para>
      Avoid failures when <varname>synchronized_standby_slots</varname>
      references nonexistent replication slots (Shlok Kyal)
      <ulink url="&commit_baseurl;0024f5a10">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [912af1c7e] 2025-10-10 09:23:59 +0900
Branch: REL_18_STABLE [9a6ea00ac] 2025-10-10 09:24:48 +0900
Branch: REL_17_STABLE [42348839d] 2025-10-10 09:24:50 +0900
Branch: REL_16_STABLE [bfdd1a12d] 2025-10-10 09:24:53 +0900
Branch: REL_15_STABLE [0adf424b4] 2025-10-10 09:24:54 +0900
Branch: REL_14_STABLE [f57f2760e] 2025-10-10 09:24:57 +0900
Branch: REL_13_STABLE [c878d9808] 2025-10-10 09:24:59 +0900
-->
     <para>
      Remove the unfinished slot state file after failing to write a
      replication slot's state to disk (Michael Paquier)
      <ulink url="&commit_baseurl;42348839d">&sect;</ulink>
     </para>

     <para>
      Previously, a failure such as out-of-disk-space resulted in leaving
      a temporary <filename>state.tmp</filename> file behind.  That's
      problematic because it would block all subsequent attempts to
      write the state, requiring manual intervention to clean up.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [e41d954da] 2025-09-24 04:11:53 +0000
Branch: REL_18_STABLE [37fc5de43] 2025-09-24 04:00:15 +0000
Branch: REL_17_STABLE [2f6e1a490] 2025-09-24 03:49:02 +0000
Branch: REL_16_STABLE [a54c7a113] 2025-09-24 03:38:27 +0000
-->
     <para>
      Fix mishandling of lock timeout signals in parallel apply workers
      for logical replication (Hayato Kuroda)
      <ulink url="&commit_baseurl;2f6e1a490">&sect;</ulink>
     </para>

     <para>
      The same signal number was being used for both worker shutdown and
      lock timeout, leading to confusion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [17b2d5ec7] 2025-11-04 10:47:38 +0900
Branch: REL_18_STABLE [a14201073] 2025-11-04 10:52:33 +0900
Branch: REL_17_STABLE [e7340b484] 2025-11-04 10:52:35 +0900
Branch: REL_16_STABLE [9b6109607] 2025-11-04 10:52:38 +0900
Branch: REL_15_STABLE [da5ea6c70] 2025-11-04 10:52:41 +0900
Branch: REL_14_STABLE [a1b8b3b2e] 2025-11-04 10:52:42 +0900
Branch: REL_13_STABLE [25b484080] 2025-11-04 10:52:44 +0900
-->
     <para>
      Avoid unwanted WAL receiver shutdown when switching from streaming
      to archive WAL source (Xuneng Zhou)
      <ulink url="&commit_baseurl;e7340b484">&sect;</ulink>
     </para>

     <para>
      During a timeline change, a standby server's WAL receiver should
      remain alive, waiting for a new WAL streaming start point.  Instead
      it was repeatedly shutting down and immediately getting restarted,
      which could confuse status monitoring code.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [ef03ea01f] 2025-08-22 09:03:59 +0900
Branch: REL_18_STABLE Release: REL_18_0 [86831952a] 2025-08-22 09:06:34 +0900
Branch: REL_17_STABLE [dcdc95cb4] 2025-08-22 09:06:36 +0900
Branch: REL_16_STABLE [ab874faaa] 2025-08-22 09:06:37 +0900
Branch: REL_15_STABLE [ec471008c] 2025-08-22 09:06:38 +0900
Branch: REL_14_STABLE [222130edd] 2025-08-22 09:06:40 +0900
Branch: REL_13_STABLE [30b32b08c] 2025-08-22 09:06:42 +0900
-->
     <para>
      Avoid failures in logical replication due to chance collisions of
      file numbers between regular and temporary tables (Vignesh C)
      <ulink url="&commit_baseurl;dcdc95cb4">&sect;</ulink>
     </para>

     <para>
      This low-probability problem manifested as transient errors
      like <quote>unexpected duplicate for
      tablespace <replaceable>X</replaceable>,
      relfilenode <replaceable>Y</replaceable></quote>.
      <filename>contrib/autoprewarm</filename> was also affected.
      A side-effect of the fix is that the SQL
      function <function>pg_filenode_relation()</function> will now ignore
      temporary tables.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [b46efe904] 2025-10-09 10:59:27 -0700
Branch: REL_18_STABLE [32b95fc71] 2025-10-09 10:59:29 -0700
Branch: REL_17_STABLE [a61592253] 2025-10-09 10:59:31 -0700
Branch: REL_16_STABLE [b07682bce] 2025-10-09 10:59:34 -0700
Branch: REL_15_STABLE [c40761759] 2025-10-09 10:59:36 -0700
-->
     <para>
      Fix use-after-free issue in the relation synchronization cache
      maintained by the <application>pgoutput</application> logical
      decoding plugin (Vignesh C, Masahiko Sawada)
      <ulink url="&commit_baseurl;a61592253">&sect;</ulink>
     </para>

     <para>
      An error during logical decoding could result in crashes in
      subsequent logical decoding attempts in the same session.
      The case is only reachable when <application>pgoutput</application>
      is invoked via SQL functions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d43209468] 2025-10-30 13:13:28 +0900
Branch: REL_18_STABLE [bf3dba508] 2025-10-30 13:13:31 +0900
Branch: REL_17_STABLE [f3fb6bc9f] 2025-10-30 13:13:34 +0900
Branch: REL_16_STABLE [e3714dc05] 2025-10-30 13:13:37 +0900
-->
     <para>
      Avoid unnecessary invalidation of logical replication slots
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;f3fb6bc9f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1f2e51e3c] 2025-08-20 15:00:04 +0900
Branch: REL_18_STABLE Release: REL_18_0 [ea1c6b0b0] 2025-08-20 15:00:08 +0900
Branch: REL_17_STABLE [07a302387] 2025-08-20 15:00:10 +0900
Branch: REL_16_STABLE [fea1cc3f7] 2025-08-20 15:00:13 +0900
Branch: REL_15_STABLE [818be9b73] 2025-08-20 15:00:14 +0900
Branch: REL_14_STABLE [32d388d00] 2025-08-20 15:00:16 +0900
Branch: REL_13_STABLE [8ed079cad] 2025-08-20 15:00:17 +0900
-->
     <para>
      Avoid assertion failure when trying to release a replication slot in
      single-user mode (Hayato Kuroda)
      <ulink url="&commit_baseurl;07a302387">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [03bf7a12c] 2025-10-13 17:56:45 -0400
Branch: REL_18_STABLE [b48ae226e] 2025-10-13 17:56:45 -0400
Branch: REL_17_STABLE [4c53519e1] 2025-10-13 17:56:45 -0400
Branch: REL_16_STABLE [9883e3cd1] 2025-10-13 17:56:45 -0400
Branch: REL_15_STABLE [f91666c83] 2025-10-13 17:56:45 -0400
Branch: REL_14_STABLE [e91eb4ad6] 2025-10-13 17:56:45 -0400
Branch: REL_13_STABLE [75a555d61] 2025-10-13 17:56:45 -0400
-->
     <para>
      Fix incorrect printing of messages about failures in checking
      whether the user has Windows administrator privilege (Bryan Green)
      <ulink url="&commit_baseurl;4c53519e1">&sect;</ulink>
     </para>

     <para>
      This code would have crashed or at least printed garbage.
      No such cases have been reported though, indicating that failure of
      these system calls is extremely rare.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [21fddb3d7] 2025-08-13 12:00:03 -0400
Branch: REL_18_STABLE Release: REL_18_0 [787cd2b7d] 2025-08-13 11:59:47 -0400
Branch: REL_17_STABLE [ab92f0e7f] 2025-08-13 11:59:47 -0400
Branch: REL_16_STABLE [e67d5f7ba] 2025-08-13 11:59:47 -0400
Branch: REL_15_STABLE [f4c088344] 2025-08-13 11:59:47 -0400
Branch: REL_14_STABLE [b3d6e8b63] 2025-08-13 11:59:47 -0400
Branch: REL_13_STABLE [e3b3fa863] 2025-08-13 11:59:47 -0400
-->
     <para>
      Avoid startup failure on macOS and BSD platforms when there is a
      collision with a pre-existing semaphore set (Tom Lane)
      <ulink url="&commit_baseurl;ab92f0e7f">&sect;</ulink>
     </para>

     <para>
      If the pre-existing set has fewer semaphores than we asked for,
      these platforms return <systemitem>EINVAL</systemitem>
      not <systemitem>EEXIST</systemitem> as our code expected, resulting
      in failure to start the database.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d4baa327a] 2025-11-05 11:09:45 -0500
Branch: REL_18_STABLE [6d8acb777] 2025-11-05 11:09:30 -0500
Branch: REL_17_STABLE [a9515f294] 2025-11-05 11:09:30 -0500
Branch: REL_16_STABLE [c775bf048] 2025-11-05 11:09:30 -0500
-->
     <para>
      Avoid crash when attempting to
      test <productname>PostgreSQL</productname> with certain libsanitizer
      options (Emmanuel Sibi, Jacob Champion)
      <ulink url="&commit_baseurl;a9515f294">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [50eb4e118] 2025-10-30 14:48:10 +1300
Branch: REL_18_STABLE [af3a79e08] 2025-10-30 14:49:07 +1300
Branch: REL_17_STABLE [bd6f986c9] 2025-10-30 14:49:42 +1300
Branch: REL_16_STABLE [cdc04a6c3] 2025-10-30 14:50:05 +1300
Branch: REL_15_STABLE [f3420e006] 2025-10-30 14:50:26 +1300
Branch: REL_14_STABLE [86bd9497f] 2025-10-30 14:50:46 +1300
Branch: REL_13_STABLE [7b955c227] 2025-10-30 14:51:08 +1300
-->
     <para>
      Fix false memory-context-checking warnings in debug builds
      on 64-bit Windows (David Rowley)
      <ulink url="&commit_baseurl;bd6f986c9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7504d2be9] 2025-09-27 14:29:41 -0400
Branch: REL_18_STABLE [78a284b0b] 2025-09-27 14:29:41 -0400
Branch: REL_17_STABLE [3fc9aa5b0] 2025-09-27 14:29:41 -0400
Branch: REL_16_STABLE [b7f6798c0] 2025-09-27 14:29:41 -0400
Branch: REL_15_STABLE [9ca79896a] 2025-09-27 14:29:41 -0400
Branch: REL_14_STABLE [0be39b4b1] 2025-09-27 14:29:41 -0400
-->
     <para>
      Correctly handle <literal>GROUP BY DISTINCT</literal> in PL/pgSQL
      assignment statements (Tom Lane)
      <ulink url="&commit_baseurl;3fc9aa5b0">&sect;</ulink>
     </para>

     <para>
      The parser failed to record the <literal>DISTINCT</literal> option
      in this context, so that the command would act as if it were
      plain <literal>GROUP BY</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [798b19d27] 2025-10-23 11:47:46 -0400
Branch: REL_18_STABLE [447a794f6] 2025-10-23 11:47:46 -0400
Branch: REL_17_STABLE [fbc41a145] 2025-10-23 11:47:46 -0400
Branch: REL_16_STABLE [cbfd4d0f8] 2025-10-23 11:47:46 -0400
Branch: REL_15_STABLE [4cde73259] 2025-10-23 11:47:46 -0400
Branch: REL_14_STABLE [7fb8c9240] 2025-10-23 11:47:46 -0400
Branch: REL_13_STABLE [d90c92d1c] 2025-10-23 11:47:46 -0400
-->
     <para>
      Avoid leaking memory when handling a SQL error within PL/Python
      (Tom Lane)
      <ulink url="&commit_baseurl;fbc41a145">&sect;</ulink>
     </para>

     <para>
      This fixes a session-lifespan memory leak introduced in our previous
      minor releases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [db9405493] 2025-09-03 12:54:23 +0900
Branch: REL_18_STABLE Release: REL_18_0 [ae53537e2] 2025-09-03 12:54:27 +0900
Branch: REL_17_STABLE [0fedb3a27] 2025-09-03 12:54:29 +0900
Branch: REL_16_STABLE [701a0bd56] 2025-09-03 12:54:31 +0900
Branch: REL_15_STABLE [0b274c475] 2025-09-03 12:54:32 +0900
Branch: REL_14_STABLE [0cc540f0d] 2025-09-03 12:54:34 +0900
-->
     <para>
      Fix <application>libpq</application>'s trace output of characters
      with the high bit set (Ran Benita)
      <ulink url="&commit_baseurl;0fedb3a27">&sect;</ulink>
     </para>

     <para>
      On platforms where <type>char</type> is considered signed, the
      output included unsightly <literal>\xffffff</literal> decoration.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ea78bd6d5] 2025-10-05 16:27:47 -0400
Branch: REL_18_STABLE [d83879a32] 2025-10-05 16:27:47 -0400
Branch: REL_17_STABLE [1c4671f7b] 2025-10-05 16:27:47 -0400
Branch: REL_16_STABLE [46c4478db] 2025-10-05 16:27:47 -0400
Branch: REL_15_STABLE [771b106d1] 2025-10-05 16:27:47 -0400
Branch: REL_14_STABLE [f46d77377] 2025-10-05 16:27:47 -0400
Branch: REL_13_STABLE [fc287cf3c] 2025-10-05 16:27:47 -0400
-->
     <para>
      Fix <application>libpq</application>'s handling of socket-related
      errors on Windows within its GSSAPI logic (Ning Wu, Tom Lane)
      <ulink url="&commit_baseurl;1c4671f7b">&sect;</ulink>
     </para>

     <para>
      The code for encrypting/decrypting transmitted data using GSSAPI did
      not correctly recognize error conditions on the connection socket,
      since Windows reports those differently than other platforms.  This
      led to failure to make such connections on Windows.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [615ff828e] 2025-10-18 18:18:19 +0200
Branch: REL_18_STABLE [0fe07fa11] 2025-10-18 18:18:19 +0200
Branch: REL_17_STABLE [c945b06d5] 2025-10-18 18:18:19 +0200
-->
     <para>
      Fix dumping of non-inherited not-null constraints on inherited table
      columns (Dilip Kumar)
      <ulink url="&commit_baseurl;c945b06d5">&sect;</ulink>
     </para>

     <para>
      <application>pg_dump</application> failed to preserve such
      constraints when dumping from a pre-v18 server.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [8e5b92928] 2025-09-16 16:44:58 +0900
Branch: REL_18_STABLE Release: REL_18_0 [176002c5b] 2025-09-16 16:46:28 +0900
Branch: REL_17_STABLE [968141898] 2025-09-16 16:46:36 +0900
Branch: REL_16_STABLE [20b23784f] 2025-09-16 16:46:43 +0900
Branch: REL_15_STABLE [165b07efe] 2025-09-16 16:46:51 +0900
Branch: REL_14_STABLE [295c0a644] 2025-09-16 16:46:58 +0900
Branch: REL_13_STABLE [dff7591a7] 2025-09-16 16:47:05 +0900
-->
     <para>
      In <application>pg_dump</application>, dump security labels on
      subscriptions and event triggers (Jian He, Fujii Masao)
      <ulink url="&commit_baseurl;968141898">&sect;</ulink>
     </para>

     <para>
      Labels on these types of objects were previously missed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [b61a5c4be] 2025-08-22 20:50:28 -0700
Branch: REL_18_STABLE Release: REL_18_0 [7652142f4] 2025-08-22 20:50:31 -0700
Branch: REL_17_STABLE [e8d22095e] 2025-08-22 20:50:32 -0700
Branch: REL_16_STABLE [e68fa9a83] 2025-08-22 20:50:32 -0700
Branch: REL_15_STABLE [fbf967e99] 2025-08-22 20:50:32 -0700
Branch: REL_14_STABLE [4948bb9df] 2025-08-22 20:50:33 -0700
Branch: REL_13_STABLE [05341b2e9] 2025-08-22 20:50:33 -0700
Branch: master [ad4412480] 2025-08-23 16:46:20 -0700
Branch: REL_18_STABLE Release: REL_18_0 [c6dca7c3d] 2025-08-23 16:46:24 -0700
Branch: REL_17_STABLE [49a09c6c5] 2025-08-23 16:46:24 -0700
Branch: REL_16_STABLE [412d29fd2] 2025-08-23 16:46:24 -0700
Branch: REL_15_STABLE [090c9c960] 2025-08-23 16:46:25 -0700
Branch: REL_14_STABLE [22c6a44f0] 2025-08-23 16:46:25 -0700
Branch: REL_13_STABLE [fb75e1ef7] 2025-08-23 16:46:26 -0700
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [4921a5972] 2025-10-18 17:50:10 +0200
Branch: REL_18_STABLE [162e70ea0] 2025-10-18 17:50:10 +0200
Branch: REL_17_STABLE [7419c99a2] 2025-10-18 17:50:10 +0200
Branch: REL_16_STABLE [06c1ee6b7] 2025-10-18 17:50:10 +0200
Branch: REL_15_STABLE [4cc3b4445] 2025-10-18 17:50:10 +0200
Branch: REL_14_STABLE [6062c3db3] 2025-10-18 17:50:10 +0200
Branch: REL_13_STABLE [d20df9590] 2025-10-18 17:50:10 +0200
-->
     <para>
      Fix <application>pg_dump</application>'s sorting of default ACLs and
      foreign key constraints (Kirill Reshke, Álvaro Herrera)
      <ulink url="&commit_baseurl;e8d22095e">&sect;</ulink>
      <ulink url="&commit_baseurl;49a09c6c5">&sect;</ulink>
      <ulink url="&commit_baseurl;7419c99a2">&sect;</ulink>
     </para>

     <para>
      Ensure consistent ordering of these database object types, as was
      already done for other object types.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [c044b50d1] 2025-09-16 09:40:44 -0700
Branch: REL_18_STABLE Release: REL_18_0 [4ad846445] 2025-09-16 09:40:48 -0700
Branch: REL_17_STABLE [e127764b6] 2025-09-16 09:40:48 -0700
Branch: REL_16_STABLE [3cf328eca] 2025-09-16 09:40:48 -0700
Branch: REL_15_STABLE [0773f3a87] 2025-09-16 09:40:49 -0700
Branch: REL_14_STABLE [85d6ed31f] 2025-09-16 09:40:49 -0700
Branch: REL_13_STABLE [a685c057a] 2025-09-16 09:40:50 -0700
-->
     <para>
      In <application>pg_dump</application>, label comments for
      separately-dumped domain constraints with the proper dependency
      (Noah Misch)
      <ulink url="&commit_baseurl;e127764b6">&sect;</ulink>
     </para>

     <para>
      This error could lead to
      parallel <application>pg_restore</application> attempting to create
      the comment before the constraint itself has been restored.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [b54e8dbfe] 2025-09-16 10:35:12 +0900
Branch: REL_18_STABLE Release: REL_18_0 [77d2b155c] 2025-09-16 10:36:20 +0900
Branch: REL_17_STABLE [f7f9c5d65] 2025-09-16 10:36:54 +0900
Branch: REL_16_STABLE [97527a5e6] 2025-09-16 10:37:38 +0900
Branch: REL_15_STABLE [c8ed16050] 2025-09-16 10:38:09 +0900
Branch: REL_14_STABLE [db900ec35] 2025-09-16 10:38:40 +0900
Branch: REL_13_STABLE [8fbd1f8ea] 2025-09-16 10:39:13 +0900
Branch: master [45f50c995] 2025-09-18 11:09:15 +0900
Branch: REL_18_STABLE Release: REL_18_0 [7aecc00b3] 2025-09-18 11:10:12 +0900
Branch: REL_17_STABLE [dc8aa2f58] 2025-09-18 11:10:18 +0900
Branch: REL_16_STABLE [0870397cc] 2025-09-18 11:10:24 +0900
Branch: REL_15_STABLE [5f42008f9] 2025-09-18 11:10:30 +0900
Branch: REL_14_STABLE [bc476f8b8] 2025-09-18 11:10:37 +0900
Branch: REL_13_STABLE [a4dbb11bb] 2025-09-18 11:10:43 +0900
-->
     <para>
      In <application>pg_restore</application>, skip comments and security
      labels for publications and subscriptions that are not being
      restored (Jian He, Fujii Masao)
      <ulink url="&commit_baseurl;f7f9c5d65">&sect;</ulink>
      <ulink url="&commit_baseurl;dc8aa2f58">&sect;</ulink>
     </para>

     <para>
      Do not emit <command>COMMENT</command> or <command>SECURITY
      LABEL</command> commands for these objects
      when <option>--no-publications</option>
      or <option>--no-subscriptions</option> is specified.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [e686010c5] 2025-08-29 19:28:46 +0200
Branch: REL_18_STABLE Release: REL_18_0 [8980c724b] 2025-08-29 19:28:46 +0200
Branch: REL_17_STABLE [92268b35d] 2025-08-29 19:28:46 +0200
Branch: REL_16_STABLE [ec017a305] 2025-08-29 19:28:46 +0200
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a239c4a0c] 2025-10-13 12:44:20 -0400
Branch: REL_18_STABLE [6a4009747] 2025-10-13 12:44:20 -0400
Branch: REL_17_STABLE [bf18e9bd7] 2025-10-13 12:44:20 -0400
Branch: REL_16_STABLE [1518b7d76] 2025-10-13 12:44:20 -0400
Branch: master [277dec651] 2025-10-19 14:36:58 -0400
Branch: REL_18_STABLE [aa1fcd087] 2025-10-19 14:36:58 -0400
Branch: REL_17_STABLE [2efca1633] 2025-10-19 14:36:58 -0400
Branch: REL_16_STABLE [c865f5b9f] 2025-10-19 14:36:58 -0400
Branch: REL_15_STABLE [8b9924bce] 2025-10-19 14:36:58 -0400
Branch: REL_14_STABLE [40dc710a6] 2025-10-19 14:36:58 -0400
Branch: REL_13_STABLE [33276cd02] 2025-10-19 14:36:58 -0400
-->
     <para>
      Fix assorted errors in the data compression logic
      in <application>pg_dump</application>
      and <application>pg_restore</application>
      (Daniel Gustafsson, Tom Lane)
      <ulink url="&commit_baseurl;92268b35d">&sect;</ulink>
      <ulink url="&commit_baseurl;bf18e9bd7">&sect;</ulink>
      <ulink url="&commit_baseurl;2efca1633">&sect;</ulink>
     </para>

     <para>
      Error checking was missing or incorrect in several places, and there
      were also portability issues that would manifest on big-endian
      hardware.  These problems had been missed because this code is only
      used to read compressed TOC files within directory-format
      dumps.   <application>pg_dump</application> never produces such a
      dump; the case can be reached only by manually compressing the TOC
      file after the fact, which is a supported thing to do but very
      uncommon.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [902c08887] 2025-10-03 14:03:55 +0900
Branch: REL_18_STABLE [c00637b5f] 2025-10-03 14:04:00 +0900
Branch: REL_17_STABLE [de6de069d] 2025-10-03 14:04:01 +0900
Branch: REL_16_STABLE [640590bb4] 2025-10-03 14:04:03 +0900
Branch: REL_15_STABLE [b5cefc197] 2025-10-03 14:04:05 +0900
Branch: REL_14_STABLE [9b3beb7c6] 2025-10-03 14:04:06 +0900
Branch: REL_13_STABLE [f1a2f3a0c] 2025-10-03 14:04:08 +0900
-->
     <para>
      Fix <application>pgbench</application> to error out cleanly if
      a <literal>COPY</literal> operation is started (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;de6de069d">&sect;</ulink>
     </para>

     <para>
      <application>pgbench</application> doesn't intend to support this
      case, but previously it went into an infinite loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [19d4f9ffc] 2025-09-30 23:52:28 +0900
Branch: REL_18_STABLE [29aabbc43] 2025-09-30 23:53:32 +0900
Branch: REL_17_STABLE [a912118c6] 2025-09-30 23:53:46 +0900
Branch: REL_16_STABLE [36c4d30c8] 2025-09-30 23:53:53 +0900
Branch: REL_15_STABLE [bdccb6302] 2025-09-30 23:54:01 +0900
Branch: REL_14_STABLE [cb21e1f92] 2025-09-30 23:55:02 +0900
Branch: REL_13_STABLE [7d7e81d1e] 2025-09-30 23:55:33 +0900
-->
     <para>
      Fix <application>pgbench</application>'s reporting of multiple
      errors (Yugo Nagata)
      <ulink url="&commit_baseurl;a912118c6">&sect;</ulink>
     </para>

     <para>
      In cases where two successive <function>PQgetResult</function> calls
      both fail, <application>pgbench</application> might report the wrong
      error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [8bb174295] 2025-09-26 21:23:43 +0900
Branch: REL_18_STABLE [c736808e0] 2025-09-26 21:24:59 +0900
Branch: REL_17_STABLE [f39d9164b] 2025-09-26 21:25:05 +0900
Branch: REL_16_STABLE [8b2e290bd] 2025-09-26 21:25:11 +0900
Branch: REL_15_STABLE [704f51771] 2025-09-26 21:25:17 +0900
-->
     <para>
      In <application>pgbench</application>, fix faulty assertion about
      errors in pipeline mode (Yugo Nagata)
      <ulink url="&commit_baseurl;f39d9164b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9224c3025] 2025-10-22 13:38:40 -0400
Branch: REL_18_STABLE [e2072b47b] 2025-10-22 13:38:37 -0400
Branch: REL_17_STABLE [4eb6992af] 2025-10-22 13:38:37 -0400
-->
     <para>
      Fix per-file memory leakage
      in <application>pg_combinebackup</application> (Tom Lane)
      <ulink url="&commit_baseurl;4eb6992af">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [8ae0f6a0c] 2025-11-04 15:47:25 -0800
Branch: REL_18_STABLE [71aa2e114] 2025-11-04 15:47:22 -0800
Branch: master [eab9e4e27] 2025-08-19 12:11:42 -0700
Branch: REL_18_STABLE Release: REL_18_0 [0beb7e933] 2025-08-19 12:11:39 -0700
Branch: REL_17_STABLE [b6090ed96] 2025-08-19 12:11:37 -0700
Branch: REL_16_STABLE [815fcfb20] 2025-08-19 12:11:34 -0700
Branch: REL_15_STABLE [eb9ee4d18] 2025-08-19 12:11:32 -0700
Branch: REL_14_STABLE [79643105a] 2025-08-19 12:11:29 -0700
Branch: REL_13_STABLE [7d8d36289] 2025-08-19 12:11:25 -0700
-->
     <para>
      Ensure that <filename>contrib/pg_buffercache</filename> functions
      can be canceled (Satyanarayana Narlapuram, Yuhang Qiu)
      <ulink url="&commit_baseurl;b6090ed96">&sect;</ulink>
     </para>

     <para>
      Some code paths were capable of running for a long time without
      checking for interrupts.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [208927e65] 2025-10-17 11:36:50 -0500
Branch: REL_18_STABLE [3ccf8e9ac] 2025-10-17 11:36:50 -0500
Branch: REL_17_STABLE [a0551bc57] 2025-10-17 11:36:50 -0500
Branch: REL_16_STABLE [fae0ce5e3] 2025-10-17 11:36:50 -0500
Branch: REL_15_STABLE [6c03ae8d6] 2025-10-17 11:36:50 -0500
Branch: REL_14_STABLE [f146eb45c] 2025-10-17 11:36:50 -0500
Branch: REL_13_STABLE [19a64f567] 2025-10-17 11:36:50 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [da44d71e7] 2025-10-18 18:36:21 -0400
Branch: REL_18_STABLE [c29d32d27] 2025-10-18 18:36:21 -0400
Branch: REL_17_STABLE [d4e8c37cc] 2025-10-18 18:36:21 -0400
Branch: REL_16_STABLE [c26a8eaf6] 2025-10-18 18:36:21 -0400
-->
     <para>
      Fix <filename>contrib/pg_prewarm</filename>'s privilege checks for
      indexes (Ayush Vatsa, Nathan Bossart)
      <ulink url="&commit_baseurl;a0551bc57">&sect;</ulink>
      <ulink url="&commit_baseurl;d4e8c37cc">&sect;</ulink>
     </para>

     <para>
      <function>pg_prewarm()</function> requires <literal>SELECT</literal>
      privilege on relations to be prewarmed.  However, since indexes have
      no SQL privileges of their own, this resulted in non-superusers
      being unable to prewarm indexes.  Instead, check
      for <literal>SELECT</literal> privilege on the index's table.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [684a745f5] 2025-10-02 11:07:30 +0900
Branch: REL_18_STABLE [fc295beb7] 2025-10-02 11:09:10 +0900
Branch: REL_17_STABLE [036decbba] 2025-10-02 11:09:12 +0900
Branch: REL_16_STABLE [c0f9fe877] 2025-10-02 11:09:13 +0900
Branch: REL_15_STABLE [49b5f0b53] 2025-10-02 11:09:15 +0900
Branch: REL_14_STABLE [ee2dbcad0] 2025-10-02 11:09:17 +0900
Branch: REL_13_STABLE [c207bf473] 2025-10-02 11:09:19 +0900
-->
     <para>
      Make <filename>contrib/pgstattuple</filename> more robust about
      empty or invalid index pages (Nitin Motiani)
      <ulink url="&commit_baseurl;036decbba">&sect;</ulink>
     </para>

     <para>
      Count all-zero pages as free space, and ignore pages that are
      invalid according to a check of the page's special-space size.
      The code for btree indexes already counted all-zero pages as free,
      but the hash and gist code would error out, which has been found to
      be much less user-friendly.  Similarly, make all three cases agree
      on ignoring corrupted pages rather than throwing errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [c5d34f4a5] 2025-11-08 12:26:43 +1300
Branch: REL_18_STABLE [f8ccab0e9] 2025-11-08 12:28:15 +1300
Branch: REL_17_STABLE [03d9140cb] 2025-11-08 12:28:52 +1300
Branch: REL_16_STABLE [2f76ffe5e] 2025-11-08 12:29:15 +1300
Branch: REL_15_STABLE [1c7cba4c5] 2025-11-08 12:30:08 +1300
Branch: REL_14_STABLE [d8ba910b0] 2025-11-08 12:32:42 +1300
Branch: REL_13_STABLE [77b5b2c6f] 2025-11-08 12:33:01 +1300
-->
     <para>
      Harden our read and write barrier macros to satisfy Clang
      (Thomas Munro)
      <ulink url="&commit_baseurl;03d9140cb">&sect;</ulink>
     </para>

     <para>
      We supposed that <function>__atomic_thread_fence()</function> is a
      sufficient barrier to prevent the C compiler from re-ordering memory
      accesses around it, but it appears that that's not true for Clang,
      allowing it to generate incorrect code for at least RISC-V, MIPS,
      and LoongArch machines.  Add explicit compiler barriers to fix that.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [282d0bdee] 2025-09-15 08:31:11 +0200
Branch: REL_18_STABLE Release: REL_18_0 [c11ac811a] 2025-09-15 08:31:36 +0200
Branch: REL_17_STABLE [755f01ad7] 2025-09-15 08:31:47 +0200
Branch: REL_16_STABLE [2670881af] 2025-09-15 08:31:53 +0200
Branch: REL_15_STABLE [72a24bebc] 2025-09-15 08:31:59 +0200
Branch: REL_14_STABLE [fbfc36e94] 2025-09-15 08:32:08 +0200
Branch: REL_13_STABLE [59d6e843e] 2025-09-15 08:32:14 +0200
-->
     <para>
      Fix building with LLVM version 21 and later (Holger Hoffstätte)
      <ulink url="&commit_baseurl;755f01ad7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [9016fa7e3] 2025-09-10 11:21:12 -0500
Branch: REL_18_STABLE Release: REL_18_0 [87ea6e9b6] 2025-09-10 11:21:12 -0500
Branch: REL_17_STABLE [15f9eeef6] 2025-09-10 11:21:12 -0500
Branch: REL_16_STABLE [509c77929] 2025-09-10 11:21:12 -0500
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [9af672bcb] 2025-09-08 12:29:42 -0700
Branch: REL_18_STABLE Release: REL_18_0 [a7024398b] 2025-09-09 16:04:04 -0700
Branch: REL_17_STABLE [e25453a36] 2025-09-09 16:04:23 -0700
Branch: REL_16_STABLE [2de24ca6c] 2025-09-09 16:06:30 -0700
-->
     <para>
      When building with meson, apply the same special optimization flags
      for <filename>numeric.c</filename>
      and <filename>checksum.c</filename> as the makefile build does
      (Nathan Bossart, Jeff Davis)
      <ulink url="&commit_baseurl;15f9eeef6">&sect;</ulink>
      <ulink url="&commit_baseurl;e25453a36">&sect;</ulink>
     </para>

     <para>
      Use <option>-ftree-vectorize</option> for both files, as well
      as <option>-funroll-loops</option>
      for <filename>checksum.c</filename>, to match what the makefiles
      have long done.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [6ad9378c9] 2025-10-16 20:21:05 +0200
Branch: REL_18_STABLE [6aa04a60c] 2025-10-16 20:21:05 +0200
Branch: REL_17_STABLE [a8933194e] 2025-10-16 20:21:05 +0200
Branch: REL_16_STABLE [a506b0c0a] 2025-10-16 20:21:05 +0200
Branch: REL_15_STABLE [33202cba8] 2025-10-16 20:21:05 +0200
Branch: REL_14_STABLE [56cd332f8] 2025-10-16 20:21:05 +0200
Branch: REL_13_STABLE [f768f5a7d] 2025-10-16 20:21:05 +0200
-->
     <para>
      Fix PGXS build infrastructure to support building
      NLS <filename>po</filename> files for extensions (Ryo Matsumura)
      <ulink url="&commit_baseurl;a8933194e">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
  <title>Release date:</title>
  <para>2025-08-14</para>
  </formalpara>

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

  <sect2 id="release-17-6-migration">
   <title>Migration to Version 17.6</title>

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

   <para>
    However, if you have any
    BRIN <literal>numeric_minmax_multi_ops</literal> indexes, it is
    advisable to reindex them after updating.  See the fourth changelog
    entry below.
   </para>

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [22424953c] 2025-08-11 09:03:11 +0100
Branch: REL_18_STABLE [64f77c6a6] 2025-08-11 09:07:36 +0100
Branch: REL_17_STABLE [a85eddab2] 2025-08-11 09:09:12 +0100
Branch: REL_16_STABLE [7e86da539] 2025-08-11 09:10:17 +0100
Branch: REL_15_STABLE [415badc13] 2025-08-11 09:11:02 +0100
Branch: REL_14_STABLE [afe38fb6a] 2025-08-11 09:12:09 +0100
Branch: REL_13_STABLE [533211ded] 2025-08-11 09:13:20 +0100
-->
     <para>
      Tighten security checks in planner estimation functions
      (Dean Rasheed)
      <ulink url="&commit_baseurl;a85eddab2">&sect;</ulink>
     </para>

     <para>
      The fix for CVE-2017-7484, plus followup fixes, intended to prevent
      leaky functions from being applied to statistics data for columns
      that the calling user does not have permission to read.  Two gaps in
      that protection have been found.  One gap applies to partitioning
      and inheritance hierarchies where RLS policies on the tables should
      restrict access to statistics data, but did not.
     </para>

     <para>
      The other gap applies to cases where the query accesses a table via
      a view, and the view owner has permissions to read the underlying
      table but the calling user does not have permissions on the view.
      The view owner's permissions satisfied the security checks, and the
      leaky function would get applied to the underlying table's
      statistics before we check the calling user's permissions on the
      view.  This has been fixed by making security checks on views occur
      at the start of planning.  That might cause permissions failures to
      occur earlier than before.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Dean Rasheed for reporting this problem.
      (CVE-2025-8713)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [71ea0d679] 2025-08-11 09:00:00 -0500
Branch: REL_18_STABLE [67a2fbb8f] 2025-08-11 09:00:00 -0500
Branch: REL_17_STABLE [575f54d4c] 2025-08-11 09:00:00 -0500
Branch: REL_16_STABLE [7ad8e7909] 2025-08-11 09:00:00 -0500
Branch: REL_15_STABLE [424040506] 2025-08-11 09:00:00 -0500
Branch: REL_14_STABLE [e4998d089] 2025-08-11 09:00:00 -0500
Branch: REL_13_STABLE [c204bd39f] 2025-08-11 09:00:00 -0500
Branch: REL_14_STABLE [8967c33c6] 2025-08-11 12:37:00 -0500
Branch: REL_13_STABLE [27d3dee68] 2025-08-11 12:37:00 -0500
-->
     <para>
      Prevent <application>pg_dump</application> scripts from being used
      to attack the user running the restore (Nathan Bossart)
      <ulink url="&commit_baseurl;575f54d4c">&sect;</ulink>
     </para>

     <para>
      Since dump/restore operations typically involve running SQL commands
      as superuser, the target database installation must trust the source
      server.  However, it does not follow that the operating system user
      who executes <application>psql</application> to perform the restore
      should have to trust the source server.  The risk here is that an
      attacker who has gained superuser-level control over the source
      server might be able to cause it to emit text that would be
      interpreted as <application>psql</application> meta-commands.
      That would provide shell-level access to the restoring user's own
      account, independently of access to the target database.
     </para>

     <para>
      To provide a positive guarantee that this can't happen,
      extend <application>psql</application> with
      a <command>\restrict</command> command that prevents execution of
      further meta-commands, and teach <application>pg_dump</application>
      to issue that before any data coming from the source server.
     </para>

     <para>
      The PostgreSQL Project thanks Martin Rakhmanov, Matthieu Denais, and
      RyotaK for reporting this problem.
      (CVE-2025-8714)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [70693c645] 2025-08-11 06:18:59 -0700
Branch: REL_18_STABLE [13a67ce60] 2025-08-11 06:19:03 -0700
Branch: REL_17_STABLE [9b92f115b] 2025-08-11 06:19:03 -0700
Branch: REL_16_STABLE [850caae60] 2025-08-11 06:19:03 -0700
Branch: REL_15_STABLE [9751f934a] 2025-08-11 06:19:04 -0700
Branch: REL_14_STABLE [0f5838438] 2025-08-11 06:19:04 -0700
Branch: REL_13_STABLE [2179e6005] 2025-08-11 06:19:05 -0700
-->
     <para>
      Convert newlines to spaces in names included in comments
      in <application>pg_dump</application> output
      (Noah Misch)
      <ulink url="&commit_baseurl;9b92f115b">&sect;</ulink>
     </para>

     <para>
      Object names containing newlines offered the ability to inject
      arbitrary SQL commands into the output script.  (Without the
      preceding fix, injection of <application>psql</application>
      meta-commands would also be possible this way.)
      CVE-2012-0868 fixed this class of problem at the time, but later
      work reintroduced several cases.
     </para>

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [80c758a2e] 2025-08-05 16:51:10 -0400
Branch: REL_18_STABLE [9b681e239] 2025-08-05 16:51:10 -0400
Branch: REL_17_STABLE [0b0d3c19b] 2025-08-05 16:51:10 -0400
Branch: REL_16_STABLE [b9279058a] 2025-08-05 16:51:10 -0400
Branch: REL_15_STABLE [835c9374d] 2025-08-05 16:51:10 -0400
Branch: REL_14_STABLE [5b0c8e328] 2025-08-05 16:51:10 -0400
-->
     <para>
      Fix incorrect distance calculation in
      BRIN <literal>numeric_minmax_multi_ops</literal> support function
      (Peter Eisentraut, Tom Lane)
      <ulink url="&commit_baseurl;0b0d3c19b">&sect;</ulink>
     </para>

     <para>
      The results were sometimes wrong on 64-bit platforms, and wildly
      wrong on 32-bit platforms.  This did not produce obvious failures
      because the logic is only used to choose how to merge values into
      ranges; at worst the index would become inefficient and bloated.
      Nonetheless it's recommended to reindex any BRIN indexes that use
      the <literal>numeric_minmax_multi_ops</literal> operator class.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [71c0921b6] 2025-07-28 16:50:41 -0400
Branch: REL_18_STABLE [637ead2e1] 2025-07-28 16:50:41 -0400
Branch: REL_17_STABLE [fd4ad33fe] 2025-07-28 16:50:41 -0400
Branch: REL_16_STABLE [6d5e493b4] 2025-07-28 16:50:42 -0400
Branch: REL_15_STABLE [0ffbd345e] 2025-07-28 16:50:42 -0400
Branch: REL_14_STABLE [0395464af] 2025-07-28 16:50:42 -0400
Branch: REL_13_STABLE [589d6e640] 2025-07-28 16:50:42 -0400
Branch: master [902f92221] 2025-07-29 12:47:38 -0400
Branch: REL_18_STABLE [d5f014d89] 2025-07-29 12:47:19 -0400
Branch: REL_17_STABLE [7571e0f6e] 2025-07-29 12:47:19 -0400
Branch: REL_16_STABLE [762c6d8d2] 2025-07-29 12:47:19 -0400
Branch: REL_15_STABLE [0928e18eb] 2025-07-29 12:47:20 -0400
Branch: REL_14_STABLE [cdcdabce5] 2025-07-29 12:47:20 -0400
Branch: REL_13_STABLE [0ae824704] 2025-07-29 12:47:20 -0400
-->
     <para>
      Avoid regression in the size of XML input that we will accept
      (Michael Paquier, Erik Wienhold)
      <ulink url="&commit_baseurl;fd4ad33fe">&sect;</ulink>
      <ulink url="&commit_baseurl;7571e0f6e">&sect;</ulink>
     </para>

     <para>
      Our workaround for a bug in early 2.13.x releases
      of <application>libxml2</application> made use of a code path that
      rejects text chunks exceeding 10MB, whereas the previous coding did
      not.  Those early releases are presumably extinct in the wild by
      now, so revert to the previous coding.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [5022ff250] 2025-07-18 09:55:43 +0100
Branch: REL_18_STABLE [27c7c1136] 2025-07-18 09:59:40 +0100
Branch: REL_17_STABLE [91ad1bdef] 2025-07-18 10:01:31 +0100
-->
     <para>
      Fix <command>MERGE</command> problems with concurrent updates
      (Dean Rasheed)
      <ulink url="&commit_baseurl;91ad1bdef">&sect;</ulink>
     </para>

     <para>
      If a <command>MERGE</command>
      inside a CTE attempts an update or delete on a table with
      <literal>BEFORE ROW</literal> triggers, and a
      concurrent <command>UPDATE</command> or <command>DELETE</command>
      changes the target row, the <command>MERGE</command> command would
      fail (crashing in the case of an update action, and potentially
      executing the wrong action in the case of a delete action).
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master Release: REL_18_BR [b006bcd53] 2025-05-31 12:12:58 +0100
Branch: REL_17_STABLE [ab52f6b5b] 2025-05-31 12:17:30 +0100
Branch: REL_16_STABLE [3611794af] 2025-05-31 12:19:37 +0100
Branch: REL_15_STABLE [d6a3f3272] 2025-05-31 12:21:02 +0100
-->
     <para>
      Fix <command>MERGE</command> into a plain-inheritance parent table
      (Dean Rasheed)
      <ulink url="&commit_baseurl;ab52f6b5b">&sect;</ulink>
     </para>

     <para>
      Insertions into such a target table could crash or produce incorrect
      query results due to failing to handle <literal>WITH CHECK
      OPTION</literal> and <literal>RETURNING</literal> actions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [9e63f83a7] 2025-08-08 17:35:00 +0900
Branch: REL_18_STABLE [bba6a6faf] 2025-08-08 17:35:00 +0900
Branch: REL_17_STABLE [e028ce911] 2025-08-08 17:35:01 +0900
Branch: REL_16_STABLE [3863c6fb6] 2025-08-08 17:35:02 +0900
Branch: REL_15_STABLE [f39a7f32a] 2025-08-08 17:35:02 +0900
Branch: REL_14_STABLE [73eb6afa1] 2025-08-08 17:35:03 +0900
Branch: REL_13_STABLE [afdb4cde1] 2025-08-08 17:35:04 +0900
-->
     <para>
      Allow tables with statement-level triggers to become partitions or
      inheritance children (Etsuro Fujita)
      <ulink url="&commit_baseurl;e028ce911">&sect;</ulink>
     </para>

     <para>
      We do not allow partitions or inheritance child tables to have
      row-level triggers with transition tables, because an operation on
      the whole inheritance tree would need to maintain a separate
      transition table for each such child table.  But that problem does
      not apply for statement-level triggers, because only the parent's
      statement-level triggers will be fired.  The code that checks
      whether an existing table can become a partition or inheritance
      child nonetheless rejected both kinds of trigger.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [62a1211d3] 2025-08-08 10:50:00 +0900
Branch: REL_18_STABLE [ce8817022] 2025-08-08 10:50:01 +0900
Branch: REL_17_STABLE [9048a83c7] 2025-08-08 10:50:02 +0900
Branch: REL_16_STABLE [9cca445df] 2025-08-08 10:50:02 +0900
Branch: REL_15_STABLE [d642d2306] 2025-08-08 10:50:03 +0900
Branch: REL_14_STABLE [e94fc1a8a] 2025-08-08 10:50:04 +0900
Branch: REL_13_STABLE [b6641f7b0] 2025-08-08 10:50:05 +0900
-->
     <para>
      Disallow collecting transition tuples from child foreign tables
      (Etsuro Fujita)
      <ulink url="&commit_baseurl;9048a83c7">&sect;</ulink>
     </para>

     <para>
      We do not support triggers with transition tables on foreign tables.
      However, the case of a partition or inheritance child that is a
      foreign table was overlooked.  If the parent has such a trigger,
      incorrect transition tuples were collected from the foreign child.
      Instead throw an error, reporting that the case is not supported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [9eb6068fb] 2025-08-01 16:52:11 -0500
Branch: REL_18_STABLE [7b9674a8b] 2025-08-01 16:52:11 -0500
Branch: REL_17_STABLE [39ff05636] 2025-08-01 16:52:11 -0500
Branch: REL_16_STABLE [b998ce327] 2025-08-01 16:52:11 -0500
Branch: REL_15_STABLE [f79ca73d7] 2025-08-01 16:52:11 -0500
-->
     <para>
      Allow resetting unknown custom parameters with reserved prefixes
      (Nathan Bossart)
      <ulink url="&commit_baseurl;39ff05636">&sect;</ulink>
     </para>

     <para>
      Previously, if a parameter setting had been stored
      using <command>ALTER DATABASE/ROLE/SYSTEM</command>, the stored
      setting could not be removed if the parameter was unknown but had a
      reserved prefix.  This case could arise if an extension used to have
      a parameter, but that parameter had been removed in an upgrade.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [2ab2d6f97] 2025-08-01 07:58:48 +0000
Branch: REL_18_STABLE [d9f01a287] 2025-08-01 07:46:22 +0000
Branch: REL_17_STABLE [8c298324a] 2025-08-01 06:53:16 +0000
Branch: REL_16_STABLE [adfd80219] 2025-08-01 06:40:06 +0000
Branch: REL_15_STABLE [434d2d147] 2025-08-01 07:23:37 +0000
Branch: REL_14_STABLE [41fb3f51c] 2025-08-01 07:16:30 +0000
-->
     <para>
      Fix a potential deadlock during <command>ALTER SUBSCRIPTION ... DROP
      PUBLICATION</command> (Ajin Cherian)
      <ulink url="&commit_baseurl;8c298324a">&sect;</ulink>
     </para>

     <para>
      Ensure that server processes acquire catalog locks in a consistent
      order during replication origin drops.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [5861b1f34] 2025-06-20 13:41:11 -0400
Branch: REL_17_STABLE [fdd826922] 2025-06-20 13:41:11 -0400
Branch: REL_16_STABLE [1e24ea160] 2025-06-20 13:41:11 -0400
Branch: REL_15_STABLE [75b8982ea] 2025-06-20 13:41:11 -0400
Branch: REL_14_STABLE [27af8b9be] 2025-06-20 13:41:11 -0400
Branch: REL_13_STABLE [4b66cb188] 2025-06-20 13:41:11 -0400
-->
     <para>
      Shorten the race condition window for creating indexes with
      conflicting names (Tom Lane)
      <ulink url="&commit_baseurl;fdd826922">&sect;</ulink>
     </para>

     <para>
      When choosing an auto-generated name for an index, avoid conflicting
      with not-yet-committed <structname>pg_class</structname> rows as
      well as fully-valid ones.  This avoids possibly choosing the same
      name as some concurrent <command>CREATE INDEX</command> did,
      when that command is still in process of filling its index, or is
      done but is part of a not-yet-committed transaction.  There's still
      a window for trouble, but it's only as long as the time needed to
      validate a new index's parameters and insert
      its <structname>pg_class</structname> row.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [661643ded] 2025-06-25 10:03:46 +0900
Branch: REL_17_STABLE [2e0b5d252] 2025-06-25 10:03:50 +0900
Branch: REL_16_STABLE [d187cabdd] 2025-06-25 10:03:52 +0900
Branch: REL_15_STABLE [354944663] 2025-06-25 10:03:53 +0900
Branch: REL_14_STABLE [c079ba3fc] 2025-06-25 10:03:54 +0900
Branch: REL_13_STABLE [65c3223f9] 2025-06-25 10:03:56 +0900
-->
     <para>
      Prevent usage of incorrect <command>VACUUM</command> options in some
      cases where multiple tables are vacuumed in a single command (Nathan
      Bossart, Michael Paquier)
      <ulink url="&commit_baseurl;2e0b5d252">&sect;</ulink>
     </para>

     <para>
      The <literal>TRUNCATE</literal> and <literal>INDEX_CLEANUP</literal>
      options of one table could be applied to others.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [3811ca360] 2025-07-01 23:25:20 -0700
Branch: REL_18_STABLE [7c6ededac] 2025-07-01 23:25:17 -0700
Branch: REL_17_STABLE [792238c8b] 2025-07-01 23:25:15 -0700
-->
     <para>
      Ensure that the table's free-space map is updated in a timely way
      when vacuuming a table that has no indexes (Masahiko Sawada)
      <ulink url="&commit_baseurl;792238c8b">&sect;</ulink>
     </para>

     <para>
      A previous optimization caused FSM vacuuming to sometimes be skipped
      for such tables.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [d46911e58] 2025-05-28 08:58:40 +0900
Branch: REL_17_STABLE [e3ffc3e91] 2025-05-28 08:59:22 +0900
Branch: REL_16_STABLE [e9e535d61] 2025-05-28 08:59:24 +0900
Branch: REL_15_STABLE [b3e99115e] 2025-05-28 08:59:25 +0900
Branch: REL_14_STABLE [1fe15d25e] 2025-05-28 08:59:27 +0900
Branch: REL_13_STABLE [9481d1614] 2025-05-28 08:59:28 +0900
Branch: master Release: REL_18_BR [4fbb46f61] 2025-05-28 09:43:31 +0900
Branch: REL_17_STABLE [a3c6d92f3] 2025-05-28 09:43:45 +0900
Branch: REL_16_STABLE [52d08620e] 2025-05-28 09:43:46 +0900
Branch: REL_15_STABLE [4dc642e75] 2025-05-28 09:43:48 +0900
Branch: REL_14_STABLE [0c09922c0] 2025-05-28 09:43:50 +0900
Branch: REL_13_STABLE [31ee5ec69] 2025-05-28 09:43:51 +0900
-->
     <para>
      Fix processing of character classes within <literal>SIMILAR
      TO</literal> regular expressions (Laurenz Albe)
      <ulink url="&commit_baseurl;e3ffc3e91">&sect;</ulink>
      <ulink url="&commit_baseurl;a3c6d92f3">&sect;</ulink>
     </para>

     <para>
      The code that translates <literal>SIMILAR TO</literal> pattern
      matching expressions to POSIX-style regular expressions did not
      consider that square brackets can be nested.  For example, in a
      pattern like <literal>[[:alpha:]%_]</literal>, the code treated
      the <literal>%</literal> and <literal>_</literal> characters as
      metacharacters when they should be literals.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_18_BR [29f7ce6fe] 2025-05-19 18:50:26 +0300
Branch: REL_17_STABLE [54c05292b] 2025-05-19 18:50:47 +0300
Branch: REL_16_STABLE [92a9ba3b9] 2025-05-19 18:50:50 +0300
Branch: REL_15_STABLE [72fe74ca5] 2025-05-19 18:50:52 +0300
Branch: REL_14_STABLE [0420b24fe] 2025-05-19 18:50:54 +0300
Branch: REL_13_STABLE [7ee00918f] 2025-05-19 18:49:34 +0300
Branch: master Release: REL_18_BR [cbf53e2b8] 2025-05-20 10:39:14 +0300
Branch: REL_17_STABLE [a4da7b0cf] 2025-05-20 10:41:20 +0300
Branch: REL_16_STABLE [558ea446a] 2025-05-20 10:41:50 +0300
-->
     <para>
      When deparsing queries, always add parentheses around the expression
      in <literal>FETCH FIRST <replaceable>expression</replaceable> ROWS
      WITH TIES</literal> clauses (Heikki Linnakangas)
      <ulink url="&commit_baseurl;54c05292b">&sect;</ulink>
      <ulink url="&commit_baseurl;a4da7b0cf">&sect;</ulink>
     </para>

     <para>
      This avoids some cases where the deparsed result wasn't
      syntactically valid.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: REL_18_STABLE [bae507821] 2025-07-27 15:10:02 +0300
Branch: REL_17_STABLE [13559de95] 2025-07-27 15:10:24 +0300
Branch: REL_16_STABLE [f0cdc2afd] 2025-07-27 15:10:29 +0300
Branch: REL_15_STABLE [b248a3ba4] 2025-07-27 15:10:29 +0300
Branch: REL_14_STABLE [50026136c] 2025-07-27 15:10:31 +0300
Branch: REL_13_STABLE [f32a47161] 2025-07-27 15:10:32 +0300
Branch: master [466c5435f] 2025-08-07 14:29:02 +0300
Branch: REL_18_STABLE [5cfbff48a] 2025-08-07 14:31:18 +0300
Branch: REL_17_STABLE [605890034] 2025-08-07 14:59:54 +0300
Branch: REL_16_STABLE [2ac50f118] 2025-08-07 14:31:23 +0300
Branch: REL_15_STABLE [73f897ba5] 2025-08-07 14:31:24 +0300
Branch: REL_14_STABLE [c5d66fc12] 2025-08-07 14:31:25 +0300
Branch: REL_13_STABLE [7f872ae70] 2025-08-07 14:31:26 +0300
-->
     <para>
      Limit the checkpointer process's fsync request queue size (Alexander
      Korotkov, Xuneng Zhou)
      <ulink url="&commit_baseurl;13559de95">&sect;</ulink>
      <ulink url="&commit_baseurl;605890034">&sect;</ulink>
     </para>

     <para>
      With very large <varname>shared_buffers</varname> settings, it was
      possible for the checkpointer to attempt to allocate more than 1GB
      for fsync requests, leading to failure and an infinite loop.  Clamp
      the queue size to prevent this scenario.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [d3917d8f1] 2025-07-19 13:45:51 +0300
Branch: REL_18_STABLE [5449d5b7a] 2025-07-19 13:44:30 +0300
Branch: REL_17_STABLE [c9f4e7520] 2025-07-20 01:29:14 +0300
Branch: REL_16_STABLE [b485e1c89] 2025-07-19 13:46:02 +0300
Branch: REL_15_STABLE [9f270f48f] 2025-07-19 13:46:03 +0300
Branch: REL_14_STABLE [bedfdb85b] 2025-07-19 14:13:41 +0300
Branch: REL_13_STABLE [762f352ca] 2025-07-19 14:13:58 +0300
-->
     <para>
      Avoid infinite wait in logical decoding when reading a
      partially-written WAL record (Vignesh C)
      <ulink url="&commit_baseurl;c9f4e7520">&sect;</ulink>
     </para>

     <para>
      If the server crashes after writing the first part of a WAL record
      that would span multiple pages, subsequent logical decoding of the
      WAL stream would wait for data to arrive on the next WAL page.
      That might never happen if the server is now idle.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a493e741d] 2025-07-17 09:30:26 +0900
Branch: REL_18_STABLE [4fcbe06aa] 2025-07-17 09:32:49 +0900
Branch: REL_17_STABLE [b3abec0ad] 2025-07-17 09:32:55 +0900
-->
     <para>
      Fix inconsistent spelling of LWLock names
      for <literal>MultiXactOffsetSLRU</literal>
      and <literal>MultiXactMemberSLRU</literal> (Bertrand Drouvot)
      <ulink url="&commit_baseurl;b3abec0ad">&sect;</ulink>
     </para>

     <para>
      This resulted in different wait-event names being displayed
      in <structname>pg_wait_events</structname>
      and <structname>pg_stat_activity</structname>, potentially breaking
      monitoring queries that join those views.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [64840e462] 2025-07-11 18:50:13 -0400
Branch: REL_18_STABLE [ccacaf4fa] 2025-07-11 18:50:13 -0400
Branch: REL_17_STABLE [50959f96e] 2025-07-11 18:50:13 -0400
Branch: REL_16_STABLE [53a936b61] 2025-07-11 18:50:13 -0400
Branch: REL_15_STABLE [de73cb3ed] 2025-07-11 18:50:13 -0400
Branch: REL_14_STABLE [ac8cdb249] 2025-07-11 18:50:13 -0400
Branch: REL_13_STABLE [093d3d745] 2025-07-11 18:50:13 -0400
-->
     <para>
      Fix inconsistent quoting of role names in ACL strings (Tom Lane)
      <ulink url="&commit_baseurl;50959f96e">&sect;</ulink>
     </para>

     <para>
      The previous quoting rule was locale-sensitive, which could lead to
      portability problems when transferring <type>aclitem</type> values
      across installations.  (<application>pg_dump</application> does not
      do that, but other tools might.)  To ensure consistency, always quote
      non-ASCII characters in <type>aclitem</type> output; but to preserve
      backward compatibility, never require that they be quoted
      during <type>aclitem</type> input.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [aa87f69c0] 2025-06-02 15:22:44 -0400
Branch: REL_17_STABLE [d4046125d] 2025-06-02 15:22:44 -0400
Branch: REL_16_STABLE [ab758ec4d] 2025-06-02 15:22:44 -0400
Branch: REL_15_STABLE [e76097124] 2025-06-02 15:22:44 -0400
Branch: REL_14_STABLE [eb4234647] 2025-06-02 15:22:45 -0400
Branch: REL_13_STABLE [cd31eaaeb] 2025-06-02 15:22:45 -0400
-->
     <para>
      Reject equal signs (<literal>=</literal>) in the names of relation
      options and foreign-data options (Tom Lane)
      <ulink url="&commit_baseurl;d4046125d">&sect;</ulink>
     </para>

     <para>
      There's no evident use-case for option names like this, and allowing
      them creates ambiguity in the stored representation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3369a3b49] 2025-07-02 13:48:36 +0900
Branch: REL_18_STABLE [d09d13793] 2025-07-02 13:48:41 +0900
Branch: REL_17_STABLE [074003431] 2025-07-02 13:48:43 +0900
Branch: REL_16_STABLE [5c639523f] 2025-07-02 13:48:45 +0900
Branch: REL_15_STABLE [d44efe87e] 2025-07-02 13:48:48 +0900
-->
     <para>
      Fix potentially-incorrect decompression of LZ4-compressed archive
      data (Mikhail Gribkov)
      <ulink url="&commit_baseurl;074003431">&sect;</ulink>
     </para>

     <para>
      This error seems to manifest only with not-very-compressible input
      data, which may explain why it escaped detection.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master Release: REL_18_BR [7c319f549] 2025-06-11 09:17:35 -0400
Branch: REL_17_STABLE [40aa5ddea] 2025-06-11 09:17:33 -0400
Branch: REL_16_STABLE [c7f25feb3] 2025-06-11 09:17:31 -0400
Branch: REL_15_STABLE [d2ec67109] 2025-06-11 09:17:29 -0400
Branch: REL_14_STABLE [7c7c0a77d] 2025-06-11 09:17:27 -0400
Branch: REL_13_STABLE [38c8d2987] 2025-06-11 09:17:25 -0400
-->
     <para>
      Avoid a rare scenario where a btree index scan could mark the wrong
      index entries as dead (Peter Geoghegan)
      <ulink url="&commit_baseurl;40aa5ddea">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master Release: REL_18_BR [d87d07b7a] 2025-06-16 17:36:01 -0700
Branch: REL_17_STABLE [45c357e0e] 2025-06-16 17:35:58 -0700
Branch: REL_16_STABLE [b2ae07720] 2025-06-16 17:35:55 -0700
Branch: REL_15_STABLE [fc0fb77c5] 2025-06-16 17:35:53 -0700
Branch: REL_14_STABLE [983b36362] 2025-06-16 17:35:50 -0700
Branch: REL_13_STABLE [1230be12f] 2025-06-16 17:35:48 -0700
Branch: REL_13_STABLE [87819f766] 2025-06-24 07:07:40 -0700
-->
     <para>
      Avoid re-distributing cache invalidation messages from other
      transactions during logical replication (vignesh C)
      <ulink url="&commit_baseurl;45c357e0e">&sect;</ulink>
     </para>

     <para>
      Our previous round of minor releases included a bug fix to ensure
      that replication receiver processes would respond to cross-process
      cache invalidation messages, preventing them from using stale
      catalog data while performing replication updates.  However, the fix
      unintentionally made them also redistribute those messages again,
      leading to an exponential increase in the number of invalidation
      messages, which would often end in a memory allocation failure.
      Fix by not redistributing received messages.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [4614d53d4] 2025-08-04 20:51:42 +0900
Branch: REL_18_STABLE [2d81a246f] 2025-08-04 20:52:59 +0900
Branch: REL_17_STABLE [f71fa981c] 2025-08-04 20:53:07 +0900
-->
     <para>
      Avoid unexpected server shutdown when replication slot
      synchronization is misconfigured (Fujii Masao)
      <ulink url="&commit_baseurl;f71fa981c">&sect;</ulink>
     </para>

     <para>
      The postmaster process would report an error (and then stop)
      if <varname>sync_replication_slots</varname> was set
      to <literal>true</literal> while <varname>wal_level</varname> was
      less than <literal>logical</literal>.  The desired behavior is just
      that slot synchronization should be disabled, so reduce this error
      message's level to avoid postmaster shutdown.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: REL_17_STABLE [2090edc6f] 2025-06-14 03:52:45 +0300
Branch: REL_16_STABLE [cea8f2c3e] 2025-06-14 03:53:18 +0300
Branch: REL_15_STABLE [dd9bc1a17] 2025-06-14 04:15:04 +0300
Branch: REL_14_STABLE [e2832bd96] 2025-06-14 04:15:24 +0300
Branch: REL_13_STABLE [dd3df0b85] 2025-06-14 04:15:29 +0300
-->
     <para>
      Avoid premature removal of old WAL during checkpoints (Vitaly Davydov)
      <ulink url="&commit_baseurl;2090edc6f">&sect;</ulink>
     </para>

     <para>
      If a replication slot's restart point is advanced while a checkpoint
      is in progress, no-longer-needed WAL segments could get removed too
      soon, leading to recovery failure if the database crashes
      immediately afterwards.  Fix by keeping them for one additional
      checkpoint cycle.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master Release: REL_18_BR [ad5eaf390] 2025-05-19 12:13:06 +0530
Branch: REL_17_STABLE [7318f241d] 2025-05-19 11:55:55 +0530
Branch: REL_16_STABLE [c0f51fde5] 2025-05-19 11:41:22 +0530
Branch: REL_15_STABLE [9d1a62359] 2025-05-19 11:28:19 +0530
Branch: REL_14_STABLE [e68459489] 2025-05-19 11:15:09 +0530
Branch: REL_13_STABLE [e323d9df0] 2025-05-19 11:04:39 +0530
-->
     <para>
      Never move a replication slot's confirmed-flush position backwards
      (Shveta Malik)
      <ulink url="&commit_baseurl;7318f241d">&sect;</ulink>
     </para>

     <para>
      In some cases a replication client could acknowledge an LSN that's
      past what it has stored persistently, and then perhaps send an older
      LSN after a restart.  We consider this not-a-bug so long as the
      client did not have anything it needed to do for the WAL between the
      two points.  However, we should not re-send that WAL for fear of
      data duplication, so make sure we always believe the latest
      confirmed LSN for a given slot.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [fd519419c] 2025-06-24 14:14:07 -0400
Branch: REL_17_STABLE [9f33300e6] 2025-06-24 14:14:04 -0400
Branch: REL_16_STABLE [87c8ed3db] 2025-06-24 14:14:04 -0400
-->
     <para>
      Prevent excessive delays before launching new logical replication
      workers (Tom Lane)
      <ulink url="&commit_baseurl;9f33300e6">&sect;</ulink>
     </para>

     <para>
      In some cases the logical replication launcher could sleep
      considerably longer than the
      configured <varname>wal_retrieve_retry_interval</varname> before
      launching a new worker.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3b3fa9490] 2025-08-02 17:08:45 +0900
Branch: REL_18_STABLE [11de339aa] 2025-08-02 17:08:48 +0900
Branch: REL_17_STABLE [9e0b4b1ab] 2025-08-02 17:08:50 +0900
Branch: REL_16_STABLE [ec96e8812] 2025-08-02 17:08:52 +0900
-->
     <para>
      Fix use-after-free during logical replication of <command>INSERT
      ... ON CONFLICT</command> (Ethan Mertz, Michael Paquier)
      <ulink url="&commit_baseurl;9e0b4b1ab">&sect;</ulink>
     </para>

     <para>
      This could result in incorrect progress reporting, or with very bad
      luck it could result in a crash of the WAL sender process.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_18_BR [961553daf] 2025-05-31 00:08:40 +0900
Branch: REL_17_STABLE [24c5ad5be] 2025-05-31 00:14:07 +0900
Branch: REL_16_STABLE [63fa7caa9] 2025-05-31 00:14:14 +0900
Branch: REL_15_STABLE [405cca9da] 2025-05-31 00:14:22 +0900
Branch: REL_14_STABLE [9130d8eee] 2025-05-31 00:14:29 +0900
Branch: REL_13_STABLE [706344f06] 2025-05-31 00:14:35 +0900
-->
     <para>
      Allow waiting for a transaction on a standby server to be
      interrupted (Kevin K Biju)
      <ulink url="&commit_baseurl;24c5ad5be">&sect;</ulink>
     </para>

     <para>
      Creation of a replication slot on a standby server may require waiting
      for some active transaction(s) to finish on the primary and then be
      replayed on the standby.  Since that could be an indefinite wait,
      it's desirable to allow the operation to be cancelled, but there was
      no check for query cancel in the loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [5231ed826] 2025-06-02 12:03:59 +0900
Branch: REL_17_STABLE [87be749c7] 2025-06-02 12:04:04 +0900
Branch: REL_16_STABLE [5e6d561bc] 2025-06-02 12:04:08 +0900
-->
     <para>
      Do not let cascading logical WAL senders try to send data that's
      beyond what has been replayed on their standby server (Alexey
      Makhmutov)
      <ulink url="&commit_baseurl;87be749c7">&sect;</ulink>
     </para>

     <para>
      This avoids a situation where such WAL senders could get stuck at
      standby server shutdown, waiting for replay work that will not
      happen because the server's startup process is already shut down.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [02502c1bc] 2025-05-23 14:43:43 -0400
Branch: REL_17_STABLE [cd3064f98] 2025-05-23 14:43:43 -0400
Branch: REL_16_STABLE [e087b5b79] 2025-05-23 14:43:44 -0400
Branch: REL_15_STABLE [13d21b48a] 2025-05-23 14:43:44 -0400
-->
     <para>
      Fix per-relation memory leakage in autovacuum (Tom Lane)
      <ulink url="&commit_baseurl;cd3064f98">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e03c95287] 2025-07-08 12:50:33 -0400
Branch: REL_18_STABLE [075554ec6] 2025-07-08 12:50:19 -0400
Branch: REL_17_STABLE [95cf1a181] 2025-07-08 12:50:19 -0400
Branch: REL_16_STABLE [abb517d61] 2025-07-08 12:50:19 -0400
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [f24605e2d] 2025-05-22 13:52:46 -0400
Branch: REL_17_STABLE [20bae0690] 2025-05-22 13:52:46 -0400
Branch: REL_16_STABLE [ee58de100] 2025-05-22 13:52:46 -0400
-->
     <para>
      Fix session-lifespan memory leaks
      in <function>XMLSERIALIZE(... INDENT)</function>
      (Dmitry Kovalenko, Tom Lane)
      <ulink url="&commit_baseurl;95cf1a181">&sect;</ulink>
      <ulink url="&commit_baseurl;20bae0690">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [d4a7e4e17] 2025-05-10 20:22:39 -0400
Branch: REL_17_STABLE [a05cf22e0] 2025-05-10 20:22:39 -0400
-->
     <para>
      Fix possible crash after out-of-memory when allocating large chunks
      with the <quote>bump</quote> allocator (Tom Lane)
      <ulink url="&commit_baseurl;a05cf22e0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master Release: REL_18_BR [706054b11] 2025-05-30 15:17:28 -0500
Branch: REL_17_STABLE [fe8ea7a2a] 2025-05-30 15:17:28 -0500
Branch: REL_16_STABLE [24135398f] 2025-05-30 15:17:28 -0500
Branch: REL_15_STABLE [ddfcfb7ce] 2025-05-30 15:17:28 -0500
Branch: REL_14_STABLE [b65be6ef0] 2025-05-30 15:17:28 -0500
Branch: REL_13_STABLE [b7ba2c030] 2025-05-30 15:17:28 -0500
-->
     <para>
      Fix some places that might try to fetch toasted fields of system
      catalogs without any snapshot (Nathan Bossart)
      <ulink url="&commit_baseurl;fe8ea7a2a">&sect;</ulink>
     </para>

     <para>
      This could result in an assertion failure or <quote>cannot fetch
      toast data without an active snapshot</quote> error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [8319e5cb5] 2025-06-29 13:56:03 -0400
Branch: REL_17_STABLE [bbfcbc4cd] 2025-06-29 13:56:03 -0400
Branch: REL_16_STABLE [c15798cf9] 2025-06-29 13:56:03 -0400
Branch: REL_15_STABLE [614ffb26d] 2025-06-29 13:56:03 -0400
Branch: REL_14_STABLE [25cab4473] 2025-06-29 13:56:03 -0400
Branch: REL_13_STABLE [13f1e9f26] 2025-06-29 13:56:03 -0400
Branch: master [a10f21e6c] 2025-07-03 13:46:07 -0400
Branch: REL_18_STABLE [3d7a96871] 2025-07-03 13:46:07 -0400
Branch: REL_17_STABLE [6d4395b40] 2025-07-03 13:46:07 -0400
Branch: REL_16_STABLE [d36980b71] 2025-07-03 13:46:07 -0400
Branch: REL_15_STABLE [e6dd6e6ee] 2025-07-03 13:46:07 -0400
Branch: REL_14_STABLE [e902f8181] 2025-07-03 13:46:07 -0400
Branch: REL_13_STABLE [f9ba071cc] 2025-07-03 13:46:07 -0400
-->
     <para>
      Avoid assertion failure during cross-table constraint updates
      (Tom Lane, Jian He)
      <ulink url="&commit_baseurl;bbfcbc4cd">&sect;</ulink>
      <ulink url="&commit_baseurl;6d4395b40">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [b8926a5b4] 2025-07-17 17:40:22 +0200
Branch: REL_18_STABLE [e0d3f3cfb] 2025-07-17 17:40:22 +0200
Branch: REL_17_STABLE [0c466f5e0] 2025-07-17 17:40:22 +0200
Branch: REL_16_STABLE [4871c1e9c] 2025-07-17 17:40:22 +0200
Branch: REL_15_STABLE [c2720ac60] 2025-07-17 17:40:22 +0200
Branch: REL_14_STABLE [b9a896828] 2025-07-17 17:40:22 +0200
Branch: REL_13_STABLE [43cd85962] 2025-07-17 17:40:22 +0200
-->
     <para>
      Remove faulty assertion that a command tag must have been determined
      by the end of <function>PortalRunMulti()</function> (Álvaro Herrera)
      <ulink url="&commit_baseurl;0c466f5e0">&sect;</ulink>
     </para>

     <para>
      This failed in edge cases such as an empty prepared statement.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master Release: REL_18_BR [fe29b2a1d] 2025-05-15 17:09:04 +0900
Branch: REL_17_STABLE [2f48b4f07] 2025-05-15 17:10:45 +0900
Branch: REL_16_STABLE [d3716d4b1] 2025-05-15 17:21:15 +0900
Branch: REL_15_STABLE [666103090] 2025-05-15 17:26:13 +0900
-->
     <para>
      Fix assertion failure in <literal>XMLTABLE</literal> parsing
      (Richard Guo)
      <ulink url="&commit_baseurl;2f48b4f07">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [87b05fdc7] 2025-07-07 14:33:20 -0400
Branch: REL_18_STABLE [440c5ee20] 2025-07-07 14:33:34 -0400
Branch: REL_17_STABLE [a553a2289] 2025-07-07 14:33:47 -0400
Branch: REL_16_STABLE [3bbc1c4a7] 2025-07-07 14:33:56 -0400
Branch: REL_15_STABLE [c65c36ab5] 2025-07-07 14:34:04 -0400
Branch: REL_14_STABLE [602c91cf2] 2025-07-07 14:34:12 -0400
Branch: REL_13_STABLE [ae693c0bf] 2025-07-07 14:34:19 -0400
-->
     <para>
      Restore the ability to run PL/pgSQL expressions in parallel
      (Dipesh Dhameliya)
      <ulink url="&commit_baseurl;a553a2289">&sect;</ulink>
     </para>

     <para>
      PL/pgSQL's notion of an <quote>expression</quote> is very broad,
      encompassing any SQL <command>SELECT</command> query that returns a
      single column and no more than one row.  So there are cases, for
      example evaluation of an aggregate function, where the query
      involves significant work and it'd be useful to run it with parallel
      workers.  This used to be possible, but a previous bug fix
      unintentionally disabled it.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [c6f7f11d8] 2025-06-01 14:48:35 -0400
Branch: REL_17_STABLE [7559a16e2] 2025-06-01 14:48:35 -0400
Branch: REL_16_STABLE [5c7fd5976] 2025-06-01 14:48:35 -0400
Branch: REL_15_STABLE [b56a92651] 2025-06-01 14:48:35 -0400
Branch: REL_14_STABLE [31a3a15fa] 2025-06-01 14:48:35 -0400
Branch: REL_13_STABLE [1c78d5553] 2025-06-01 14:48:35 -0400
Branch: master Release: REL_18_BR [4672b6223] 2025-06-01 14:55:24 -0400
Branch: REL_17_STABLE [6f724fcf8] 2025-06-01 14:55:24 -0400
Branch: REL_16_STABLE [ecc8fd2b7] 2025-06-01 14:55:24 -0400
Branch: REL_15_STABLE [b898bb2a7] 2025-06-01 14:55:24 -0400
Branch: REL_14_STABLE [d4556f592] 2025-06-01 14:55:24 -0400
Branch: REL_13_STABLE [93aca1246] 2025-06-01 14:55:24 -0400
-->
     <para>
      Fix edge-case resource leaks in PL/Python error reporting (Tom Lane)
      <ulink url="&commit_baseurl;7559a16e2">&sect;</ulink>
      <ulink url="&commit_baseurl;6f724fcf8">&sect;</ulink>
     </para>

     <para>
      An out-of-memory failure while reporting an error from Python could
      result in failure to drop reference counts on Python objects,
      leading to session-lifespan memory leakage.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fe05430ac] 2025-07-02 15:48:02 -0400
Branch: REL_18_STABLE [5d0800000] 2025-07-02 15:48:03 -0400
Branch: REL_17_STABLE [445bd37b1] 2025-07-02 15:47:59 -0400
-->
     <para>
      Fix <application>libpq</application>'s
      <function>PQcancelCreate()</function> function for the case where
      the server's address was specified using <literal>hostaddr</literal>
      (Sergei Kornilov)
      <ulink url="&commit_baseurl;445bd37b1">&sect;</ulink>
     </para>

     <para>
      <application>libpq</application> would crash if the resulting cancel
      object was actually used.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [daf9bdc47] 2025-07-17 12:46:57 -0400
Branch: REL_18_STABLE [bfa9b25c9] 2025-07-17 12:46:57 -0400
Branch: REL_17_STABLE [3f10d2b66] 2025-07-17 12:46:58 -0400
Branch: REL_16_STABLE [009c20a3d] 2025-07-17 12:46:58 -0400
Branch: REL_15_STABLE [a372a64db] 2025-07-17 12:46:58 -0400
Branch: REL_14_STABLE [d5cba7746] 2025-07-17 12:46:59 -0400
Branch: REL_13_STABLE [9dcd1aa81] 2025-07-17 12:46:59 -0400
-->
     <para>
      Fix <application>libpq</application>'s <function>PQport()</function>
      function to never return NULL unless the passed connection is NULL
      (Daniele Varrazzo)
      <ulink url="&commit_baseurl;3f10d2b66">&sect;</ulink>
     </para>

     <para>
      This is the documented behavior, but
      recent <application>libpq</application> versions would return NULL
      in some cases where the user had not provided a port specification.
      Revert to our historical behavior of returning an empty string in
      such cases.  (v18 and later will return the compiled-in default port
      number, typically <literal>"5432"</literal>, instead.)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [d98cefe11] 2025-05-30 12:55:15 -0400
Branch: REL_17_STABLE [8b0aa7a6b] 2025-05-30 12:55:15 -0400
Branch: REL_16_STABLE [ca70ee6ed] 2025-05-30 12:55:15 -0400
Branch: REL_15_STABLE [39b1d1907] 2025-05-30 12:55:15 -0400
Branch: REL_14_STABLE [a7da7914c] 2025-05-30 12:55:15 -0400
Branch: REL_13_STABLE [c81cdffa1] 2025-05-30 12:55:15 -0400
-->
     <para>
      Avoid failure when GSSAPI authentication requires packets larger
      than 16kB (Jacob Champion, Tom Lane)
      <ulink url="&commit_baseurl;8b0aa7a6b">&sect;</ulink>
     </para>

     <para>
      Larger authentication packets are needed for Active Directory users
      who belong to many AD groups.  This limitation manifested in
      connection failures with unintelligible error messages,
      typically <quote>GSSAPI context establishment error: The routine
      must be called again to complete its function: Unknown
      error</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [137935bd1] 2025-06-10 18:39:34 -0400
Branch: REL_17_STABLE [30e0d9ee9] 2025-06-10 18:39:34 -0400
Branch: REL_16_STABLE [3f37400cf] 2025-06-10 18:39:34 -0400
Branch: REL_15_STABLE [6a4d93eda] 2025-06-10 18:39:34 -0400
Branch: REL_14_STABLE [0703c9385] 2025-06-10 18:39:34 -0400
Branch: REL_13_STABLE [f09fea386] 2025-06-10 18:39:34 -0400
-->
     <para>
      Fix timing-dependent failures in SSL and GSSAPI data transmission
      (Tom Lane)
      <ulink url="&commit_baseurl;30e0d9ee9">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1b8bbee05] 2025-07-22 14:00:00 +0900
Branch: REL_18_STABLE [0ded7615d] 2025-07-22 14:00:04 +0900
Branch: REL_17_STABLE [2805e1c1e] 2025-07-22 14:00:05 +0900
Branch: REL_16_STABLE [313d3102f] 2025-07-22 14:00:07 +0900
Branch: REL_15_STABLE [0123922f8] 2025-07-22 14:00:08 +0900
Branch: REL_14_STABLE [408fe659a] 2025-07-22 14:00:10 +0900
Branch: REL_13_STABLE [c934d5673] 2025-07-22 14:00:12 +0900
-->
     <para>
      Avoid null-pointer dereference during connection lookup
      in <application>ecpg</application> applications (Aleksander
      Alekseev)
      <ulink url="&commit_baseurl;2805e1c1e">&sect;</ulink>
     </para>

     <para>
      The case could occur only if the application has some connections
      that are named and some that are not.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [f5a987c0e] 2025-07-09 05:45:34 -0700
Branch: REL_18_STABLE [765a4c94c] 2025-07-09 05:45:31 -0700
Branch: REL_17_STABLE [c1c6169eb] 2025-07-09 05:45:28 -0700
Branch: REL_16_STABLE [d69836b13] 2025-07-09 05:45:26 -0700
Branch: REL_15_STABLE [e3584e457] 2025-07-09 05:45:23 -0700
Branch: REL_14_STABLE [0514616f0] 2025-07-09 05:45:20 -0700
-->
     <para>
      Improve <application>psql</application>'s tab completion
      for <command>COPY</command> and <command>\copy</command> options
      (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;c1c6169eb">&sect;</ulink>
     </para>

     <para>
      The same completions were offered for both <command>COPY
      FROM</command> and <command>COPY TO</command>, although some options
      are only valid for one case or the other.  Distinguish these cases
      to provide more accurate suggestions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [12efa4897] 2025-08-03 10:49:03 +0900
Branch: REL_18_STABLE [fee46ab4f] 2025-08-03 10:49:54 +0900
Branch: REL_17_STABLE [398e07162] 2025-08-03 10:50:01 +0900
Branch: REL_16_STABLE [1d3ded521] 2025-08-03 10:50:22 +0900
Branch: REL_15_STABLE [6914a330f] 2025-08-03 10:50:59 +0900
-->
     <para>
      Avoid assertion failure in <application>pgbench</application> when
      multiple pipeline sync messages are received (Fujii Masao)
      <ulink url="&commit_baseurl;398e07162">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [e1c365483] 2025-07-24 09:05:32 +0000
Branch: REL_18_STABLE [33f74b806] 2025-07-24 08:50:40 +0000
Branch: REL_17_STABLE [967309116] 2025-07-24 08:38:01 +0000
-->
     <para>
      Fix duplicate transaction replay when initializing a subscription
      with <application>pg_createsubscriber</application> (Shlok Kyal)
      <ulink url="&commit_baseurl;967309116">&sect;</ulink>
     </para>

     <para>
      It was possible for the last transaction processed during subscriber
      recovery to be sent again once normal replication begins.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [da71717f0] 2025-07-21 11:34:10 +0200
Branch: REL_18_STABLE [f9545e95c] 2025-07-21 11:34:10 +0200
Branch: REL_17_STABLE [6b755d8d7] 2025-07-21 11:34:10 +0200
-->
     <para>
      Ensure that <application>pg_dump</application> dumps comments on
      not-null constraints on domain types (Jian He, Álvaro Herrera)
      <ulink url="&commit_baseurl;6b755d8d7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [0858f0f96] 2025-07-16 19:22:53 +0200
Branch: REL_18_STABLE [dca0e9693] 2025-07-16 19:22:53 +0200
Branch: REL_17_STABLE [d07bc7c2b] 2025-07-16 19:22:53 +0200
Branch: REL_16_STABLE [cef998ef8] 2025-07-16 19:22:53 +0200
Branch: REL_15_STABLE [5a261c135] 2025-07-16 19:22:53 +0200
Branch: REL_14_STABLE [e04aca1c4] 2025-07-16 19:22:53 +0200
Branch: REL_13_STABLE [57949cea5] 2025-07-16 19:22:53 +0200
-->
     <para>
      Ensure that <application>pg_dump</application> dumps comments on
      domain constraints in a valid order (Jian He)
      <ulink url="&commit_baseurl;d07bc7c2b">&sect;</ulink>
     </para>

     <para>
      In some cases the comment command could appear before creation of
      the constraint.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [0decd5e89] 2025-07-31 06:37:56 -0700
Branch: REL_18_STABLE [c0ae03384] 2025-07-31 06:37:59 -0700
Branch: REL_17_STABLE [1ca1889ea] 2025-07-31 06:38:00 -0700
Branch: REL_16_STABLE [0ac1581c3] 2025-07-31 06:38:00 -0700
Branch: REL_15_STABLE [22f126da6] 2025-07-31 06:38:01 -0700
Branch: REL_14_STABLE [7ee7c1cd3] 2025-07-31 06:38:02 -0700
Branch: REL_13_STABLE [04bc2c42f] 2025-07-31 06:38:03 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [350e6b8ea] 2024-11-04 13:31:12 -0500
Branch: REL_17_STABLE [5dd4957b2] 2025-07-31 06:38:00 -0700
Branch: REL_16_STABLE [9affed263] 2025-07-31 06:38:00 -0700
Branch: REL_15_STABLE [e99010cbd] 2025-07-31 06:38:01 -0700
Branch: REL_14_STABLE [25388fb2c] 2025-07-31 06:38:02 -0700
Branch: REL_13_STABLE [cc9a62c51] 2025-07-31 06:38:03 -0700
Author: Noah Misch <noah@leadboat.com>
Branch: REL_18_STABLE [0d2734eac] 2025-08-10 13:05:13 -0700
Branch: REL_17_STABLE [28e7252e4] 2025-08-10 13:05:16 -0700
Branch: REL_16_STABLE [216683296] 2025-08-10 13:05:16 -0700
Branch: REL_15_STABLE [70637d7ae] 2025-08-10 13:05:17 -0700
Branch: REL_14_STABLE [7846f4709] 2025-08-10 13:05:17 -0700
Branch: REL_13_STABLE [bc05590c7] 2025-08-10 13:05:17 -0700
-->
     <para>
      Ensure stable sort ordering in <application>pg_dump</application>
      for all types of database objects (Noah Misch, Andreas Karlsson)
      <ulink url="&commit_baseurl;1ca1889ea">&sect;</ulink>
      <ulink url="&commit_baseurl;5dd4957b2">&sect;</ulink>
      <ulink url="&commit_baseurl;28e7252e4">&sect;</ulink>
     </para>

     <para>
      <application>pg_dump</application> sorts objects by their logical
      names before performing dependency-driven reordering.  This sort did
      not account for the full unique key identifying certain object types
      such as rules and constraints, and thus it could produce dissimilar
      sort orders for logically-identical databases.  That made it
      difficult to compare databases by
      diff'ing <application>pg_dump</application> output, so improve the
      logic to ensure stable sort ordering in all cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [85ccd7e30] 2025-08-08 14:36:39 +0900
Branch: REL_18_STABLE [e3764229e] 2025-08-08 14:37:32 +0900
Branch: REL_17_STABLE [7dafc4a41] 2025-08-08 14:37:41 +0900
-->
     <para>
      Fix incorrect parsing of object types
      in <application>pg_dump</application> filter files (Fujii Masao)
      <ulink url="&commit_baseurl;7dafc4a41">&sect;</ulink>
     </para>

     <para>
      Treat keywords as extending to the next whitespace, rather than
      stopping at the first non-alphanumeric character as before.
      This makes no difference for valid keywords, but it allows some
      error cases to be recognized properly.  For
      example, <literal>table-data</literal> will now be rejected, whereas
      previously it was misinterpreted as <literal>table</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [166b4f456] 2025-06-08 17:06:39 -0400
Branch: REL_17_STABLE [839802792] 2025-06-08 17:06:39 -0400
-->
     <para>
      <application>pg_restore</application> failed to restore large
      objects (BLOBs) from directory-format dumps made
      by <application>pg_dump</application> versions
      before <productname>PostgreSQL</productname> v12 (Pavel Stehule)
      <ulink url="&commit_baseurl;839802792">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [f295494d3] 2025-07-04 18:05:43 +0200
Branch: REL_18_STABLE [07da2985d] 2025-07-04 18:05:43 +0200
Branch: REL_17_STABLE [b8b2e6052] 2025-07-04 18:05:43 +0200
Branch: REL_16_STABLE [f63e408e8] 2025-07-04 18:05:43 +0200
Branch: REL_15_STABLE [0f4958685] 2025-07-04 18:05:43 +0200
Branch: REL_14_STABLE [ea3386cc7] 2025-07-04 18:05:43 +0200
Branch: REL_13_STABLE [b0f0e2221] 2025-07-04 18:05:43 +0200
Branch: master [144ad723a] 2025-07-04 21:30:05 +0200
Branch: REL_18_STABLE [1e007722f] 2025-07-04 21:30:05 +0200
Branch: REL_17_STABLE [bcb8d47cd] 2025-07-04 21:30:05 +0200
Branch: REL_16_STABLE [f943e2339] 2025-07-04 21:30:05 +0200
Branch: REL_15_STABLE [bd48455d8] 2025-07-04 21:30:05 +0200
Branch: REL_14_STABLE [94dc2b37b] 2025-07-04 21:30:05 +0200
Branch: REL_13_STABLE [708469281] 2025-07-04 21:30:05 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [1beda2c3c] 2025-08-07 11:48:43 +0200
Branch: REL_18_STABLE [1084e76f3] 2025-08-07 11:59:14 +0200
Branch: REL_17_STABLE [930e1faec] 2025-08-07 11:59:20 +0200
Branch: REL_16_STABLE [05b367bea] 2025-08-07 11:59:26 +0200
Branch: REL_15_STABLE [63c79a6fc] 2025-08-07 11:59:32 +0200
Branch: REL_14_STABLE [a00eb374c] 2025-08-07 11:59:38 +0200
Branch: REL_13_STABLE [160131033] 2025-08-07 11:59:42 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_15_STABLE [22d783350] 2025-08-08 00:18:19 +0200
Branch: REL_14_STABLE [f9f6595e3] 2025-08-08 00:18:15 +0200
Branch: REL_13_STABLE [7406a7d82] 2025-08-08 00:18:11 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_16_STABLE [06f444816] 2025-08-08 00:27:14 +0200
Branch: REL_15_STABLE [a8b31b160] 2025-08-08 00:28:58 +0200
Branch: REL_14_STABLE [ed2bb0cdd] 2025-08-08 00:29:31 +0200
Branch: REL_13_STABLE [de7fd83cd] 2025-08-08 00:29:34 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_15_STABLE [18d2d8ae4] 2025-08-08 08:47:10 +0200
Branch: REL_14_STABLE [bef2c2a4e] 2025-08-08 08:48:28 +0200
Branch: REL_13_STABLE [095e83d09] 2025-08-08 08:48:36 +0200
-->
     <para>
      In <application>pg_upgrade</application>, check for inconsistent
      inherited not-null constraints (Ali Akbar)
      <ulink url="&commit_baseurl;b8b2e6052">&sect;</ulink>
      <ulink url="&commit_baseurl;bcb8d47cd">&sect;</ulink>
      <ulink url="&commit_baseurl;930e1faec">&sect;</ulink>
     </para>

     <para>
      <productname>PostgreSQL</productname> versions before 18 allow an
      inherited column not-null constraint to be dropped.  However, this
      results in a schema that cannot be restored, leading to failure
      in <application>pg_upgrade</application>.  Detect such cases
      during <application>pg_upgrade</application>'s preflight checks to
      allow users to fix them before initiating the upgrade.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [72e6c08fe] 2025-07-11 10:46:43 +0530
Branch: REL_18_STABLE [f36e57745] 2025-07-11 10:28:29 +0530
Branch: REL_17_STABLE [24f6c1bd4] 2025-07-11 09:53:34 +0530
-->
     <para>
      Don't require that the target installation
      have <varname>max_slot_wal_keep_size</varname> set to its default
      during <application>pg_upgrade</application> (Dilip Kumar)
      <ulink url="&commit_baseurl;24f6c1bd4">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5a6c39b6d] 2025-07-04 15:09:24 +0900
Branch: REL_18_STABLE [29a4b63c6] 2025-07-04 15:10:17 +0900
Branch: REL_17_STABLE [ae20c105f] 2025-07-04 15:10:19 +0900
Branch: REL_16_STABLE [7e7059abf] 2025-07-04 15:10:21 +0900
Branch: REL_15_STABLE [dcbbd4331] 2025-07-04 15:10:22 +0900
Branch: REL_14_STABLE [b61ddcaf4] 2025-07-04 15:10:24 +0900
Branch: REL_13_STABLE [8bca4476f] 2025-07-04 15:10:25 +0900
-->
     <para>
      Avoid assertion failure if <varname>track_commit_timestamp</varname>
      is enabled during <application>initdb</application> (Hayato Kuroda,
      Andy Fan)
      <ulink url="&commit_baseurl;ae20c105f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_18_BR [0bd762e81] 2025-05-21 11:55:14 +0900
Branch: REL_17_STABLE [11efaaffa] 2025-05-21 11:56:24 +0900
Branch: REL_16_STABLE [0d2063585] 2025-05-21 11:56:32 +0900
Branch: REL_15_STABLE [0e0174b49] 2025-05-21 11:56:39 +0900
-->
     <para>
      Fix <application>pg_waldump</application> to show information about
      dropped statistics in <literal>PREPARE TRANSACTION</literal> WAL
      records (Daniil Davydov)
      <ulink url="&commit_baseurl;11efaaffa">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [470273da0] 2025-05-29 10:39:55 -0400
Branch: REL_17_STABLE [e20b3256a] 2025-05-29 10:39:55 -0400
Branch: REL_16_STABLE [8eef55db1] 2025-05-29 10:39:55 -0400
Branch: REL_15_STABLE [09c9ae8f6] 2025-05-29 10:39:55 -0400
Branch: REL_14_STABLE [2cd2222ca] 2025-05-29 10:39:55 -0400
Branch: REL_13_STABLE [e7d3d4ed4] 2025-05-29 10:39:55 -0400
-->
     <para>
      Avoid possible leak of the open connection
      during <filename>contrib/dblink</filename> connection establishment
      (Tom Lane)
      <ulink url="&commit_baseurl;e20b3256a">&sect;</ulink>
     </para>

     <para>
      In the rare scenario where we hit out-of-memory while inserting the
      new connection object into dblink's hashtable, the open connection
      would be leaked until end of session, leaving an idle session
      sitting on the remote server.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master Release: REL_18_BR [016e407f4] 2025-06-06 08:18:27 -0400
Branch: REL_17_STABLE [e4b8f925a] 2025-06-06 08:18:26 -0400
Branch: REL_16_STABLE [169429264] 2025-06-06 08:18:23 -0400
Branch: REL_15_STABLE [d59ff3be2] 2025-06-06 08:18:22 -0400
Branch: REL_14_STABLE [a4b9707c4] 2025-06-06 08:18:20 -0400
Branch: REL_13_STABLE [4adbaa36c] 2025-06-06 08:18:15 -0400
-->
     <para>
      Make <filename>contrib/pg_prewarm</filename> cope with very
      large <varname>shared_buffers</varname> settings (Daria Shanina)
      <ulink url="&commit_baseurl;e4b8f925a">&sect;</ulink>
     </para>

     <para>
      Autoprewarm failed with a memory allocation error
      if <varname>shared_buffers</varname> was larger than about 50
      million buffers (400GB).
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_18_BR [3c4d7557e] 2025-05-29 17:50:32 +0900
Branch: REL_17_STABLE [b64c585fd] 2025-05-29 17:52:42 +0900
-->
     <para>
      Prevent assertion failure
      in <filename>contrib/pg_prewarm</filename> (Masahiro Ikeda)
      <ulink url="&commit_baseurl;b64c585fd">&sect;</ulink>
     </para>

     <para>
      Applying <function>pg_prewarm()</function> to a relation
      lacking storage (such as a view) caused an assertion failure,
      although there was no ill effect in non-assert builds.
      Add an error check to reject that case.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [35a428f30] 2025-05-29 11:26:03 +0900
Branch: REL_17_STABLE [290e8ab32] 2025-05-29 11:26:23 +0900
Branch: REL_16_STABLE [7e8b44f4e] 2025-05-29 11:26:27 +0900
Branch: REL_15_STABLE [130300a15] 2025-05-29 11:26:29 +0900
Branch: REL_14_STABLE [8a1459f62] 2025-05-29 11:26:31 +0900
Branch: REL_13_STABLE [3c03b8cd7] 2025-05-29 11:26:34 +0900
-->
     <para>
      In <filename>contrib/pg_stat_statements</filename>, avoid leaving
      gaps in the set of parameter numbers used in a normalized query
      (Sami Imseih)
      <ulink url="&commit_baseurl;290e8ab32">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [232d8caea] 2025-05-30 13:45:41 -0400
Branch: REL_17_STABLE [9339c85af] 2025-05-30 13:45:41 -0400
Branch: REL_16_STABLE [2b92dc4ee] 2025-05-30 13:45:41 -0400
Branch: REL_15_STABLE [3c31594f5] 2025-05-30 13:45:41 -0400
Branch: REL_14_STABLE [4a07c0961] 2025-05-30 13:45:41 -0400
Branch: REL_13_STABLE [271cb7eaa] 2025-05-30 13:45:41 -0400
-->
     <para>
      Fix memory leakage in <filename>contrib/postgres_fdw</filename>'s
      DirectModify methods (Tom Lane)
      <ulink url="&commit_baseurl;9339c85af">&sect;</ulink>
     </para>

     <para>
      The <structname>PGresult</structname> holding the results of the
      remote modify command would be leaked for the rest of the session if
      the query fails between invocations of the DirectModify methods,
      which could happen when there's <literal>RETURNING</literal> data to
      process.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4300d8b6a] 2025-07-29 15:17:40 -0400
Branch: REL_18_STABLE [8e5e3ff55] 2025-07-29 15:17:40 -0400
Branch: REL_17_STABLE [a644f5fc6] 2025-07-29 15:17:41 -0400
Branch: REL_16_STABLE [bbc20c8a9] 2025-07-29 15:17:41 -0400
Branch: REL_15_STABLE [19857437b] 2025-07-29 15:17:41 -0400
Branch: REL_14_STABLE [2dee95bd0] 2025-07-29 15:17:41 -0400
Branch: REL_13_STABLE [c5bd803e5] 2025-07-29 15:17:41 -0400
-->
     <para>
      Ensure that directories listed
      in <application>configure</application>'s
      <option>--with-includes</option>
      and <option>--with-libraries</option> options are searched before
      system-supplied directories (Tom Lane)
      <ulink url="&commit_baseurl;a644f5fc6">&sect;</ulink>
     </para>

     <para>
      A common reason for using these options is to allow a user-built
      version of some library to override the system-supplied version.
      However, that failed to work in some environments because of
      careless ordering of switches in the commands issued by the makefiles.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1a5212775] 2025-07-30 11:55:42 +0900
Branch: REL_18_STABLE [cd2d52cc6] 2025-07-30 11:55:46 +0900
Branch: REL_17_STABLE [8de56323c] 2025-07-30 11:55:47 +0900
Branch: REL_16_STABLE [c1984be23] 2025-07-30 11:55:49 +0900
Branch: REL_15_STABLE [d6ffc43f9] 2025-07-30 11:55:51 +0900
Branch: REL_14_STABLE [60953d4cb] 2025-07-30 11:55:53 +0900
Branch: REL_13_STABLE [612f5b806] 2025-07-30 11:55:54 +0900
-->
     <para>
      Fix <application>configure</application>'s checks
      for <function>__cpuid()</function>
      and <function>__cpuidex()</function> (Lukas Fittl, Michael Paquier)
      <ulink url="&commit_baseurl;8de56323c">&sect;</ulink>
     </para>

     <para>
      <application>configure</application> failed to detect these
      Windows-specific functions, so that they would not be used,
      leading to slower-than-necessary CRC computations since the
      availability of hardware instructions could not be verified.
      The practical impact of this error was limited, because production
      builds for Windows typically do not use the Autoconf toolchain.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e6dfd068e] 2025-07-23 15:44:29 -0400
Branch: REL_18_STABLE [3d039b53a] 2025-07-23 15:44:29 -0400
Branch: REL_17_STABLE [635a85627] 2025-07-23 15:44:29 -0400
Branch: REL_16_STABLE [e4d585455] 2025-07-23 15:44:29 -0400
Branch: REL_15_STABLE [b252ce311] 2025-07-23 15:44:29 -0400
Branch: REL_14_STABLE [868b39a54] 2025-07-23 15:44:29 -0400
Branch: REL_13_STABLE [1ccb3851d] 2025-07-23 15:44:29 -0400
-->
     <para>
      Fix build failure with <option>--with-pam</option> option on
      Solaris-based platforms (Tom Lane)
      <ulink url="&commit_baseurl;635a85627">&sect;</ulink>
     </para>

     <para>
      Solaris is inconsistent with other Unix platforms about the API for
      PAM authentication.  This manifested as an <quote>inconsistent
      pointer</quote> compiler warning, which we never did anything about.
      But as of GCC 14 it's an error not warning by default, so fix it.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [1fd772d19] 2025-07-01 12:40:35 -0400
Branch: REL_18_STABLE [581305a46] 2025-07-01 12:40:35 -0400
Branch: REL_17_STABLE [0991249d7] 2025-07-01 12:40:35 -0400
Branch: REL_16_STABLE [d25d392e8] 2025-07-01 12:40:35 -0400
Branch: master [29213636e] 2025-07-01 12:08:20 -0400
Branch: REL_18_STABLE [45c527662] 2025-07-01 12:08:20 -0400
Branch: REL_17_STABLE [29c54ea7b] 2025-07-01 12:08:20 -0400
Branch: REL_16_STABLE [3a2617e4f] 2025-07-01 12:08:20 -0400
Branch: REL_15_STABLE [0fb496c70] 2025-07-01 12:08:57 -0400
Branch: REL_14_STABLE [71d71ac4d] 2025-07-01 12:08:57 -0400
Branch: REL_13_STABLE [d0a695cf4] 2025-07-01 12:08:58 -0400
-->
     <para>
      Make our code portable to GNU Hurd (Michael Banck, Christoph Berg,
      Samuel Thibault)
      <ulink url="&commit_baseurl;0991249d7">&sect;</ulink>
      <ulink url="&commit_baseurl;29c54ea7b">&sect;</ulink>
     </para>

     <para>
      Fix assumptions about <literal>IOV_MAX</literal>
      and <literal>O_RDONLY</literal> that don't hold on Hurd.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_18_BR [12eee85e5] 2025-05-18 12:45:55 -0400
Branch: REL_17_STABLE [5355a2400] 2025-05-18 12:45:55 -0400
Branch: REL_16_STABLE [253cf661c] 2025-05-18 12:45:55 -0400
Branch: REL_16_STABLE [4b53cb493] 2025-05-20 10:55:05 -0400
Branch: REL_15_STABLE [00652b3c9] 2025-05-18 12:45:55 -0400
Branch: REL_14_STABLE [a1e0e7076] 2025-05-18 12:45:55 -0400
Branch: REL_13_STABLE [9bc2d37cc] 2025-05-18 12:45:55 -0400
-->
     <para>
      Make our usage of <function>memset_s()</function> conform strictly
      to the C11 standard (Tom Lane)
      <ulink url="&commit_baseurl;5355a2400">&sect;</ulink>
     </para>

     <para>
      This avoids compile failures on some platforms.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master Release: REL_18_BR [2c0d8b950] 2025-06-22 14:13:46 +0200
Branch: REL_17_STABLE [2499c3490] 2025-06-22 14:15:35 +0200
Branch: REL_16_STABLE [629cc1623] 2025-06-22 14:15:40 +0200
-->
     <para>
      Silence compatibility warning when using Meson to build with MSVC
      (Peter Eisentraut)
      <ulink url="&commit_baseurl;2499c3490">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [aad1617b7] 2025-07-15 18:11:18 -0400
Branch: REL_18_STABLE [0b6dfce0c] 2025-07-15 18:11:18 -0400
Branch: REL_17_STABLE [5a2139a90] 2025-07-15 18:11:18 -0400
Branch: REL_16_STABLE [5db55e13f] 2025-07-15 18:11:18 -0400
Branch: REL_15_STABLE [f32e45641] 2025-07-15 18:11:18 -0400
Branch: REL_14_STABLE [8254b7e33] 2025-07-15 18:11:18 -0400
Branch: REL_13_STABLE [6c93bf735] 2025-07-15 18:11:18 -0400
-->
     <para>
      Prevent uninitialized-value compiler warnings in JSONB comparison
      code (Tom Lane)
      <ulink url="&commit_baseurl;5a2139a90">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8aa54aa7e] 2025-07-07 08:53:57 +0900
Branch: REL_18_STABLE [8d1071e7d] 2025-07-07 08:54:30 +0900
Branch: REL_17_STABLE [c911e7802] 2025-07-07 08:54:37 +0900
Branch: REL_16_STABLE [d24a96ce2] 2025-07-07 08:54:39 +0900
Branch: REL_15_STABLE [75c1eb60b] 2025-07-07 08:54:41 +0900
Branch: REL_14_STABLE [ac166b19a] 2025-07-07 08:54:43 +0900
Branch: REL_13_STABLE [e688cfc2b] 2025-07-07 08:54:44 +0900
-->
     <para>
      Avoid deprecation warnings when building
      with <application>libxml2</application> 2.14 and later
      (Michael Paquier)
      <ulink url="&commit_baseurl;c911e7802">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [ed26c4e25] 2025-07-09 14:20:22 +0700
Branch: master [90bfae9f9] 2025-08-07 17:10:52 +0700
Branch: REL_18_STABLE [dd2926207] 2025-08-07 17:12:44 +0700
Branch: REL_17_STABLE [21ae8fc5f] 2025-08-07 17:13:55 +0700
Branch: REL_16_STABLE [aae9aad19] 2025-08-07 17:14:39 +0700
Branch: REL_15_STABLE [baacfb9e6] 2025-08-07 17:15:09 +0700
Branch: REL_14_STABLE [a4f891b96] 2025-08-07 17:16:00 +0700
Branch: REL_13_STABLE [9560c1ec1] 2025-08-07 17:16:33 +0700
-->
     <para>
      Avoid problems when compiling <filename>pg_locale.h</filename> under
      C++ (John Naylor)
      <ulink url="&commit_baseurl;21ae8fc5f">&sect;</ulink>
     </para>

     <para>
      <productname>PostgreSQL</productname> header files generally need to
      be wrapped in <literal>extern "C" { ... }</literal> in order to be
      included in extensions written in C++.  This failed
      for <filename>pg_locale.h</filename> because of its use
      of <application>libicu</application> headers, but we can work around
      that by suppressing C++-only declarations in those headers.  C++
      extensions that want to use <application>libicu</application>'s C++
      APIs can do so by including the <application>libicu</application>
      headers ahead of <filename>pg_locale.h</filename>.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
  <title>Release date:</title>
  <para>2025-05-08</para>
  </formalpara>

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

  <sect2 id="release-17-5-migration">
   <title>Migration to Version 17.5</title>

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

   <para>
    However, if you have any self-referential foreign key constraints on
    partitioned tables, it may be necessary to recreate those constraints
    to ensure that they are being enforced correctly.  See the second
    changelog entry below.
   </para>

   <para>
    Also, if you have any BRIN bloom indexes, it may be advisable to
    reindex them after updating.  See the third changelog entry below.
   </para>

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [627acc3ca] 2025-05-05 04:52:04 -0700
Branch: REL_17_STABLE [ec5f89e8a] 2025-05-05 04:52:07 -0700
Branch: REL_16_STABLE [d1264948f] 2025-05-05 04:52:07 -0700
Branch: REL_15_STABLE [44ba3f55f] 2025-05-05 04:52:08 -0700
Branch: REL_14_STABLE [3f2ab7393] 2025-05-05 04:52:08 -0700
Branch: REL_13_STABLE [cbadeaca9] 2025-05-05 04:52:08 -0700
Branch: master [5be213caa] 2025-05-05 04:52:04 -0700
Branch: REL_17_STABLE [617d34908] 2025-05-05 04:52:07 -0700
Branch: REL_16_STABLE [f3bb0b2c4] 2025-05-05 04:52:07 -0700
Branch: REL_15_STABLE [45fe7e08f] 2025-05-05 04:52:08 -0700
Branch: REL_14_STABLE [258cde839] 2025-05-05 04:52:08 -0700
Branch: REL_13_STABLE [7279e5820] 2025-05-05 04:52:08 -0700
-->
     <para>
      Avoid one-byte buffer overread when examining invalidly-encoded
      strings that are claimed to be in GB18030 encoding
      (Noah Misch, Andres Freund)
      <ulink url="&commit_baseurl;ec5f89e8a">&sect;</ulink>
      <ulink url="&commit_baseurl;617d34908">&sect;</ulink>
     </para>

     <para>
      While unlikely, a SIGSEGV crash could occur if an incomplete
      multibyte character appeared at the end of memory.  This was
      possible both in the server and
      in <application>libpq</application>-using applications.
      (CVE-2025-4207)
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [c83a38758] 2025-05-02 21:25:50 +0200
Branch: REL_17_STABLE [f51ae3187] 2025-05-02 21:25:50 +0200
Branch: REL_16_STABLE [1817d62ec] 2025-05-02 21:25:50 +0200
Branch: REL_15_STABLE [6ba979cf5] 2025-05-02 21:25:50 +0200
Branch: REL_14_STABLE [1649d153a] 2025-05-02 21:25:50 +0200
Branch: REL_13_STABLE [b3a9c536d] 2025-05-02 21:25:50 +0200
-->
     <para>
      Handle self-referential foreign keys on partitioned tables correctly
      (Álvaro Herrera)
      <ulink url="&commit_baseurl;f51ae3187">&sect;</ulink>
     </para>

     <para>
      Creating or attaching partitions failed to make the required catalog
      entries for a foreign-key constraint, if the table referenced by the
      constraint was the same partitioned table.  This resulted in failure
      to enforce the constraint fully.
     </para>

     <para>
      To fix this, you should drop and recreate any self-referential
      foreign keys on partitioned tables, if partitions have been created
      or attached since the constraint was created.  Bear in mind that
      violating rows might already be present, in which case recreating
      the constraint will fail, and you'll need to fix up those rows
      before trying again.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [818245506] 2025-03-26 17:01:41 +0100
Branch: REL_17_STABLE [cb0ad70b8] 2025-03-26 17:02:17 +0100
Branch: REL_16_STABLE [ebcc799a7] 2025-03-26 17:02:50 +0100
Branch: REL_15_STABLE [e064b770c] 2025-03-26 17:03:02 +0100
Branch: REL_14_STABLE [6be02bbc8] 2025-03-26 17:03:06 +0100
-->
     <para>
      Avoid data loss when merging compressed BRIN summaries
      in <function>brin_bloom_union()</function> (Tomas Vondra)
      <ulink url="&commit_baseurl;cb0ad70b8">&sect;</ulink>
     </para>

     <para>
      The code failed to account for decompression results not being
      identical to the input objects, which would result in failure to add
      some of the data to the merged summary, leading to missed rows in
      index searches.
     </para>

     <para>
      This mistake was present back to v14 where BRIN bloom indexes were
      introduced, but this code path was only rarely reached then.  It's
      substantially more likely to be hit in v17 because parallel index
      builds now use the code.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f4e7756ef] 2025-03-12 11:47:38 -0400
Branch: REL_17_STABLE [ca0830e5a] 2025-03-12 11:47:19 -0400
Branch: REL_16_STABLE [fec43428c] 2025-03-12 11:47:19 -0400
Branch: REL_15_STABLE [ae0be2f0b] 2025-03-12 11:47:19 -0400
Branch: REL_14_STABLE [d3a29ae6a] 2025-03-12 11:47:19 -0400
Branch: REL_13_STABLE [39af32f78] 2025-03-12 11:47:19 -0400
Branch: REL_15_STABLE [317aba70e] 2025-03-12 11:27:59 -0400
Branch: REL_14_STABLE [584f17a90] 2025-03-12 11:28:04 -0400
Branch: REL_13_STABLE [28a7e31d0] 2025-03-12 11:28:11 -0400
Branch: REL_15_STABLE [7713f4592] 2025-03-13 12:13:07 -0400
Branch: REL_14_STABLE [1a20bc946] 2025-03-13 12:13:07 -0400
Branch: REL_13_STABLE [b200180de] 2025-03-13 12:13:07 -0400
-->
     <para>
      Fix unexpected <quote>attribute has wrong type</quote> errors
      in <command>UPDATE</command>, <command>DELETE</command>,
      and <command>MERGE</command> queries that use whole-row table
      references to views or functions in <literal>FROM</literal>
      (Tom Lane)
      <ulink url="&commit_baseurl;ca0830e5a">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [8b6a0e239] 2025-03-29 09:58:40 +0000
Branch: REL_17_STABLE [25303678a] 2025-03-29 09:50:14 +0000
Branch: REL_16_STABLE [8d4cd3b4a] 2025-03-29 09:51:23 +0000
Branch: REL_15_STABLE [14a33d3f0] 2025-03-29 09:52:18 +0000
-->
     <para>
      Fix <command>MERGE</command> into a partitioned table
      with <literal>DO NOTHING</literal> actions (Tender Wang)
      <ulink url="&commit_baseurl;25303678a">&sect;</ulink>
     </para>

     <para>
      Some cases failed with <quote>unknown action in MERGE WHEN
      clause</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7c8728494] 2025-04-15 12:08:34 -0400
Branch: REL_17_STABLE [3c39c000c] 2025-04-15 12:08:34 -0400
Branch: REL_16_STABLE [f04e0faa3] 2025-04-15 12:08:34 -0400
Branch: REL_15_STABLE [97d671672] 2025-04-15 12:08:34 -0400
Branch: REL_14_STABLE [4604928ed] 2025-04-15 12:08:34 -0400
-->
     <para>
      Prevent failure in <command>INSERT</command> commands when the table
      has a <literal>GENERATED</literal> column of a domain data type and
      the domain's constraints disallow null values (Jian He)
      <ulink url="&commit_baseurl;3c39c000c">&sect;</ulink>
     </para>

     <para>
      Constraint failure was reported even if the generation expression
      produced a perfectly okay result.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [691836405] 2025-04-05 15:01:48 -0400
Branch: REL_17_STABLE [5e7be43f4] 2025-04-05 15:01:33 -0400
Branch: REL_16_STABLE [1980ec2bc] 2025-04-05 15:01:33 -0400
Branch: REL_15_STABLE [ede29a1e4] 2025-04-05 15:01:33 -0400
Branch: REL_14_STABLE [754a3d82d] 2025-04-05 15:01:33 -0400
Branch: REL_13_STABLE [e276b5829] 2025-04-05 15:01:33 -0400
-->
     <para>
      Correctly process references to outer CTE names that appear within
      a <literal>WITH</literal> clause attached to
      an <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>
      command that's inside <literal>WITH</literal> (Tom Lane)
      <ulink url="&commit_baseurl;5e7be43f4">&sect;</ulink>
     </para>

     <para>
      The parser failed to detect disallowed recursion cases, nor did it
      account for such references when sorting CTEs into a usable order.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [d4f79865d] 2025-03-13 09:56:36 +0900
Branch: REL_17_STABLE [8b2392ae3] 2025-03-13 09:56:49 +0900
-->
     <para>
      Fix misprocessing of casts within the keys of JSON constructor
      expressions (Amit Langote)
      <ulink url="&commit_baseurl;8b2392ae3">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fedfcf665] 2025-03-09 13:11:20 -0400
Branch: REL_17_STABLE [43847dd5e] 2025-03-09 13:11:20 -0400
Branch: REL_16_STABLE [a7aa9f21f] 2025-03-09 13:11:20 -0400
-->
     <para>
      Don't try to parallelize <function>array_agg()</function> when the
      argument is of an anonymous record type (Richard Guo, Tom Lane)
      <ulink url="&commit_baseurl;43847dd5e">&sect;</ulink>
     </para>

     <para>
      The protocol for communicating with parallel workers doesn't support
      identifying the concrete record type that a worker is returning.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4618045be] 2025-03-13 16:07:55 -0400
Branch: REL_17_STABLE [c826cd1b1] 2025-03-13 16:07:55 -0400
Branch: REL_16_STABLE [0405982c7] 2025-03-13 16:07:55 -0400
Branch: REL_15_STABLE [13dd6f772] 2025-03-13 16:07:55 -0400
Branch: REL_14_STABLE [f7ae51312] 2025-03-13 16:07:55 -0400
Branch: REL_13_STABLE [474aee3df] 2025-03-13 16:07:55 -0400
-->
     <para>
      Fix <literal>ARRAY(<replaceable>subquery</replaceable>)</literal>
      and <literal>ARRAY[<replaceable>expression, ...</replaceable>]</literal>
      constructs to produce sane results when the input is of
      type <type>int2vector</type> or <type>oidvector</type> (Tom Lane)
      <ulink url="&commit_baseurl;c826cd1b1">&sect;</ulink>
     </para>

     <para>
      This patch restores the behavior that existed
      before <productname>PostgreSQL</productname> 9.5: the result is of
      type <type>int2vector[]</type> or <type>oidvector[]</type>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7fb880102] 2025-03-08 11:24:25 -0500
Branch: REL_17_STABLE [99c01aadf] 2025-03-08 11:24:42 -0500
Branch: REL_16_STABLE [61513da08] 2025-03-08 11:24:47 -0500
Branch: REL_15_STABLE [e2921c0e9] 2025-03-08 11:24:52 -0500
Branch: REL_14_STABLE [da85544ae] 2025-03-08 11:24:57 -0500
Branch: REL_13_STABLE [f1c1bafcd] 2025-03-08 11:25:01 -0500
-->
     <para>
      Fix possible erroneous reports of invalid affixes while parsing
      <application>Ispell</application> dictionaries (Jacob Brazeal)
      <ulink url="&commit_baseurl;99c01aadf">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [95f650674] 2025-03-03 12:43:44 -0500
Branch: REL_17_STABLE [d6dd2a02b] 2025-03-03 12:43:29 -0500
Branch: REL_16_STABLE [edc3bccd0] 2025-03-03 12:43:29 -0500
Branch: REL_15_STABLE [1d180931c] 2025-03-03 12:43:29 -0500
Branch: REL_14_STABLE [c75c830e2] 2025-03-03 12:43:29 -0500
Branch: REL_13_STABLE [aac07b562] 2025-03-03 12:43:29 -0500
Branch: master [bd178960c] 2025-04-02 11:13:01 -0400
Branch: REL_17_STABLE [0941aadcd] 2025-04-02 11:13:01 -0400
Branch: REL_16_STABLE [053222a97] 2025-04-02 11:13:01 -0400
Branch: REL_15_STABLE [2d6cfb0cd] 2025-04-02 11:13:01 -0400
Branch: REL_14_STABLE [d31d39cfe] 2025-04-02 11:13:01 -0400
Branch: REL_13_STABLE [dd34cbfce] 2025-04-02 11:13:01 -0400
-->
     <para>
      Fix <literal>ALTER TABLE ADD COLUMN</literal> to correctly handle
      the case of a domain type that has a default
      (Jian He, Tom Lane, Tender Wang)
      <ulink url="&commit_baseurl;d6dd2a02b">&sect;</ulink>
      <ulink url="&commit_baseurl;0941aadcd">&sect;</ulink>
     </para>

     <para>
      If a domain type has a default, adding a column of that type (without
      any explicit <literal>DEFAULT</literal>
      clause) failed to install the domain's default
      value in existing rows, instead leaving the new column null.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [43b8e6c4a] 2025-04-04 20:11:48 -0400
Branch: REL_17_STABLE [5e6e97fbf] 2025-04-04 20:11:48 -0400
Branch: REL_16_STABLE [fb3a77fd9] 2025-04-04 20:11:48 -0400
Branch: REL_15_STABLE [f5069f026] 2025-04-04 20:11:48 -0400
-->
     <para>
      Repair misbehavior when there are duplicate column names in a
      foreign key constraint's <literal>ON DELETE SET DEFAULT</literal>
      or <literal>SET NULL</literal> action (Tom Lane)
      <ulink url="&commit_baseurl;5e6e97fbf">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [7bbc46213] 2025-03-04 20:07:30 +0100
Branch: REL_17_STABLE [4e026be5f] 2025-03-04 20:07:30 +0100
Branch: REL_16_STABLE [9ea5fe5b6] 2025-03-04 20:07:30 +0100
Branch: REL_15_STABLE [bf1e2d2db] 2025-03-04 20:07:30 +0100
Branch: REL_14_STABLE [931a1c023] 2025-03-04 20:07:30 +0100
Branch: REL_13_STABLE [0f354e080] 2025-03-04 20:07:30 +0100
-->
     <para>
      Improve the error message for disallowed attempts to alter the
      properties of a foreign key constraint (Álvaro Herrera)
      <ulink url="&commit_baseurl;4e026be5f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [2d5350cfb] 2025-04-20 08:28:48 -0700
Branch: REL_17_STABLE [d0a049987] 2025-04-20 08:28:52 -0700
Branch: REL_16_STABLE [5905e9935] 2025-04-20 08:28:52 -0700
Branch: REL_15_STABLE [e0f53e669] 2025-04-20 08:28:52 -0700
Branch: REL_14_STABLE [a61b67cd0] 2025-04-20 08:28:53 -0700
Branch: REL_13_STABLE [d34b671a6] 2025-04-20 08:28:53 -0700
-->
     <para>
      Avoid error when resetting
      the <structfield>relhassubclass</structfield> flag of a temporary
      table that's marked <literal>ON COMMIT DELETE ROWS</literal>
      (Noah Misch)
      <ulink url="&commit_baseurl;d0a049987">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [984410b92] 2025-02-21 17:30:56 +0900
Branch: REL_17_STABLE [2e0f93d7c] 2025-02-21 17:31:01 +0900
Branch: REL_16_STABLE [0af3ae468] 2025-02-21 17:31:02 +0900
Branch: master [665cafe8a] 2025-02-21 20:37:31 +0900
Branch: REL_17_STABLE [310907aaf] 2025-02-21 20:37:36 +0900
Branch: REL_16_STABLE [514d47dfb] 2025-02-21 20:37:38 +0900
-->
     <para>
      Add missing deparsing of the <literal>INDENT</literal> option
      of <function>XMLSERIALIZE()</function> (Jim Jones)
      <ulink url="&commit_baseurl;2e0f93d7c">&sect;</ulink>
      <ulink url="&commit_baseurl;310907aaf">&sect;</ulink>
     </para>

     <para>
      Previously, views or rules
      using <literal>XMLSERIALIZE(... INDENT)</literal> were dumped
      without the <literal>INDENT</literal> clause, causing incorrect
      results after restore.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d47f92224] 2025-04-20 22:12:07 +1200
Branch: REL_17_STABLE [065ce49a1] 2025-04-20 22:12:37 +1200
Branch: REL_16_STABLE [887a23237] 2025-04-20 22:12:59 +1200
-->
     <para>
      Avoid premature evaluation of the arguments of an aggregate function
      that has both <literal>FILTER</literal> and <literal>ORDER
      BY</literal> (or <literal>DISTINCT</literal>) options (David Rowley)
      <ulink url="&commit_baseurl;065ce49a1">&sect;</ulink>
     </para>

     <para>
      If there is <literal>ORDER BY</literal>
      or <literal>DISTINCT</literal>, we consider pre-sorting the
      aggregate input values rather than doing the sort within the Agg
      plan node.  But this is problematic if the aggregate inputs include
      expressions that could fail (for example, a division where some of
      the input divisors could be zero) and there is
      a <literal>FILTER</literal> clause that's meant to prevent such
      failures.  Pre-sorting would push the expression evaluations to
      before the <literal>FILTER</literal> test, allowing the failures to
      happen anyway.  Avoid this by not pre-sorting if there's
      a <literal>FILTER</literal> and the input expressions are anything
      more complex than a simple Var or Const.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [716a051aa] 2025-03-04 16:11:03 +0900
Branch: REL_17_STABLE [bc5a08af3] 2025-03-04 16:17:19 +0900
-->
     <para>
      Fix erroneous deductions from column <literal>NOT NULL</literal>
      constraints in the presence of outer joins (Richard Guo)
      <ulink url="&commit_baseurl;bc5a08af3">&sect;</ulink>
     </para>

     <para>
      In some cases the planner would discard an <literal>IS NOT
      NULL</literal> query condition, even though the condition applies
      after an outer join and thus is not redundant.
     </para>
    </listitem>

    <listitem>
<!--
Author: Bruce Momjian <bruce@momjian.us>
Branch: master [46b4ba533] 2025-04-07 21:33:42 -0400
Branch: REL_17_STABLE [b8b1e87b7] 2025-04-07 21:33:41 -0400
-->
     <para>
      Avoid incorrect optimizations based on <literal>IS [NOT]
      NULL</literal> tests that are applied to composite values
      (Bruce Momjian)
      <ulink url="&commit_baseurl;b8b1e87b7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [b136db07c] 2025-04-02 11:56:29 +1300
Branch: REL_17_STABLE [5672a8399] 2025-04-02 11:57:27 +1300
Branch: REL_16_STABLE [5a0840b76] 2025-04-02 11:57:54 +1300
Branch: REL_15_STABLE [a7f213b11] 2025-04-02 11:58:16 +1300
Branch: REL_14_STABLE [b68f664bb] 2025-04-02 11:58:37 +1300
-->
     <para>
      Fix planner's failure to identify more than one hashable
      ScalarArrayOpExpr subexpression within a top-level expression
      (David Geier)
      <ulink url="&commit_baseurl;5672a8399">&sect;</ulink>
     </para>

     <para>
      This resulted in unnecessarily-inefficient execution of any
      additional subexpressions that could have been processed with a hash
      table (that is, <literal>IN</literal>, <literal>NOT IN</literal>,
      or <literal>= ANY</literal> clauses with all-constant right-hand
      sides).
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [9ba7bcc89] 2025-02-19 23:53:37 +0100
Branch: REL_17_STABLE [587b6aa3f] 2025-02-19 23:54:18 +0100
-->
     <para>
      Fix incorrect table size estimate with low fill factor (Tomas Vondra)
      <ulink url="&commit_baseurl;587b6aa3f">&sect;</ulink>
     </para>

     <para>
      When the planner estimates the number of rows in a
      never-yet-analyzed table, it uses the table's fillfactor setting in
      the estimation, but it neglected to clamp the result to at least one
      row per page.  A low fillfactor could thus result in an unreasonably
      small estimate.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [459e7bf8e] 2025-04-02 14:54:20 -0400
Branch: REL_17_STABLE [78cb2466f] 2025-04-02 14:42:03 -0400
Branch: REL_16_STABLE [980727b84] 2025-04-02 14:46:31 -0400
Branch: REL_15_STABLE [77d90d6d6] 2025-04-02 14:50:03 -0400
Branch: REL_14_STABLE [4934d3875] 2025-04-02 14:50:44 -0400
Branch: REL_13_STABLE [b9ec8125d] 2025-04-02 14:50:49 -0400
-->
     <para>
      Disable <quote>skip fetch</quote> optimization in bitmap heap scan
      (Matthias van de Meent)
      <ulink url="&commit_baseurl;78cb2466f">&sect;</ulink>
     </para>

     <para>
      It turns out that this optimization can result in returning dead
      tuples when a concurrent vacuum marks a page all-visible.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0f21db36d] 2025-03-06 11:54:31 -0500
Branch: REL_17_STABLE [9094eb25b] 2025-03-06 11:54:27 -0500
Branch: REL_16_STABLE [d52221cf0] 2025-03-06 11:54:27 -0500
Branch: REL_15_STABLE [2d313375c] 2025-03-06 11:54:27 -0500
Branch: REL_14_STABLE [e2a6934a8] 2025-03-06 11:54:27 -0500
Branch: REL_13_STABLE [308d0d443] 2025-03-06 11:54:27 -0500
Branch: master [e708ffe79] 2025-04-12 12:28:02 -0400
Branch: REL_17_STABLE [8c153fcfa] 2025-04-12 12:27:46 -0400
Branch: REL_16_STABLE [4b65b085a] 2025-04-12 12:27:46 -0400
Branch: REL_15_STABLE [9a8c16aec] 2025-04-12 12:27:46 -0400
Branch: REL_14_STABLE [1b47a112a] 2025-04-12 12:27:46 -0400
Branch: REL_13_STABLE [c7597a1d3] 2025-04-12 12:27:46 -0400
-->
     <para>
      Fix performance issues in GIN index search startup when there are
      many search keys (Tom Lane, Vinod Sridharan)
      <ulink url="&commit_baseurl;9094eb25b">&sect;</ulink>
      <ulink url="&commit_baseurl;8c153fcfa">&sect;</ulink>
     </para>

     <para>
      An indexable clause with many keys (for example, <literal>jsonbcol
      ?| array[...]</literal> with tens of thousands of array elements)
      took O(N<superscript>2</superscript>) time to start up, and was
      uncancelable for that interval too.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [17ce344f8] 2025-03-11 12:50:35 +0100
Branch: REL_17_STABLE [ade976f8b] 2025-03-11 12:50:35 +0100
Branch: REL_16_STABLE [e0d8f49a3] 2025-03-11 12:50:35 +0100
Branch: REL_15_STABLE [5d8c58800] 2025-03-11 12:50:35 +0100
Branch: REL_14_STABLE [5144e1f8f] 2025-03-11 12:50:35 +0100
Branch: REL_13_STABLE [f5b4a0b49] 2025-03-11 12:50:35 +0100
-->
     <para>
      Detect missing support procedures in a BRIN index operator class,
      and report an error instead of crashing (Álvaro Herrera)
      <ulink url="&commit_baseurl;ade976f8b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [af717317a] 2025-03-12 20:53:09 +0200
Branch: REL_17_STABLE [e731e9d5e] 2025-03-12 20:53:16 +0200
Branch: REL_16_STABLE [004dbbd72] 2025-03-12 20:53:19 +0200
Branch: REL_15_STABLE [d4d34c08c] 2025-03-12 20:53:23 +0200
Branch: REL_14_STABLE [d2fb076be] 2025-03-12 20:53:25 +0200
-->
     <para>
      Respond to interrupts (such as query cancel) while waiting for
      asynchronous subplans of an Append plan node (Heikki Linnakangas)
      <ulink url="&commit_baseurl;e731e9d5e">&sect;</ulink>
     </para>

     <para>
      Previously, nothing would happen until one of the subplans becomes
      ready.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [039549d70] 2025-04-08 07:57:19 +0900
Branch: REL_17_STABLE [5cbbe70a9] 2025-04-08 07:58:47 +0900
Branch: REL_16_STABLE [e2a82cd23] 2025-04-08 07:58:50 +0900
-->
     <para>
      Report the I/O statistics of active WAL senders more frequently
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;5cbbe70a9">&sect;</ulink>
     </para>

     <para>
      Previously, the <structname>pg_stat_io</structname> view failed to
      accumulate I/O performed by a WAL sender until that process exited.
      Now such I/O will be reported after at most one second's delay.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [2e5779083] 2025-04-11 10:00:21 +0900
Branch: REL_17_STABLE [3339847cc] 2025-04-11 10:02:15 +0900
Branch: REL_16_STABLE [c922ae2c4] 2025-04-11 10:02:17 +0900
Branch: REL_15_STABLE [ec59500a1] 2025-04-11 10:02:18 +0900
Branch: REL_14_STABLE [873aff945] 2025-04-11 10:02:20 +0900
Branch: REL_13_STABLE [e2f42f812] 2025-04-11 10:02:21 +0900
-->
     <para>
      Fix race condition in handling
      of <varname>synchronous_standby_names</varname> immediately after
      startup (Melnikov Maksim, Michael Paquier)
      <ulink url="&commit_baseurl;3339847cc">&sect;</ulink>
     </para>

     <para>
      For a short period after system startup, backends might fail to wait
      for synchronous commit even
      though <varname>synchronous_standby_names</varname> is enabled.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [75da2bece] 2025-03-13 15:43:34 +1300
Branch: REL_17_STABLE [e27346807] 2025-03-13 15:48:02 +1300
-->
     <para>
      Cope with possible intra-query changes
      of <varname>io_combine_limit</varname> (Thomas Munro)
      <ulink url="&commit_baseurl;e27346807">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [7c82b4f71] 2025-03-26 17:46:51 +0900
Branch: REL_17_STABLE [34fbfe1f5] 2025-03-26 17:49:57 +0900
Branch: REL_16_STABLE [de1484736] 2025-03-26 17:51:44 +0900
-->
     <para>
      Avoid infinite loop if <varname>scram_iterations</varname> is set to
      <systemitem>INT_MAX</systemitem> (Kevin K Biju)
      <ulink url="&commit_baseurl;34fbfe1f5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e33f2335a] 2025-04-05 12:13:35 -0400
Branch: REL_17_STABLE [717e8a1e5] 2025-04-05 12:13:35 -0400
Branch: REL_16_STABLE [ca54f9b70] 2025-04-05 12:13:35 -0400
-->
     <para>
      Avoid possible crashes due to double transformation
      of <function>json_array()</function>'s subquery (Tom Lane)
      <ulink url="&commit_baseurl;717e8a1e5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [00d61a08c] 2025-03-01 14:22:56 -0500
Branch: REL_17_STABLE [d69c78108] 2025-03-01 14:22:56 -0500
Branch: REL_16_STABLE [5c64ece8a] 2025-03-01 14:22:56 -0500
Branch: REL_15_STABLE [c7303f01c] 2025-03-01 14:22:56 -0500
Branch: REL_14_STABLE [76fbb38ef] 2025-03-01 14:22:56 -0500
Branch: REL_13_STABLE [ebe919e95] 2025-03-01 14:22:56 -0500
-->
     <para>
      Fix <function>pg_strtof()</function> to not crash with null endptr
      (Alexander Lakhin, Tom Lane)
      <ulink url="&commit_baseurl;d69c78108">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [058b5152f] 2025-03-27 22:57:34 +0100
Branch: REL_17_STABLE [8afec4ef6] 2025-03-27 22:57:34 +0100
Branch: REL_16_STABLE [8d48e84c5] 2025-03-27 22:57:34 +0100
-->
     <para>
      Fix crash after out-of-memory in certain GUC assignments (Daniel
      Gustafsson)
      <ulink url="&commit_baseurl;8afec4ef6">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b464e51ab] 2025-02-18 21:13:54 -0500
Branch: REL_17_STABLE [7edd2cbc5] 2025-02-18 21:23:59 -0500
Branch: REL_16_STABLE [c0c364fa1] 2025-02-18 21:23:59 -0500
Branch: REL_15_STABLE [9c46d902b] 2025-02-18 21:23:59 -0500
Branch: REL_14_STABLE [8388cae55] 2025-02-18 21:24:12 -0500
Branch: REL_13_STABLE [197427fb3] 2025-02-18 21:24:12 -0500
-->
     <para>
      Avoid crash when a Snowball stemmer encounters an out-of-memory
      condition (Maksim Korotkov)
      <ulink url="&commit_baseurl;7edd2cbc5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [c39392eba] 2025-02-19 10:02:32 +0900
Branch: REL_17_STABLE [727bc6ac3] 2025-02-19 10:04:44 +0900
-->
     <para>
      Fix over-enthusiastic freeing of SpecialJoinInfo structs during
      planning (Richard Guo)
      <ulink url="&commit_baseurl;727bc6ac3">&sect;</ulink>
     </para>

     <para>
      This led to crashes during planning if partitionwise joining is
      enabled.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [fd09c1316] 2025-04-03 10:30:00 -0700
Branch: REL_17_STABLE [a4309e85f] 2025-04-03 10:30:02 -0700
Branch: REL_16_STABLE [87e8599e0] 2025-04-03 10:30:05 -0700
-->
     <para>
      Disallow copying of invalidated replication slots (Shlok Kyal)
      <ulink url="&commit_baseurl;a4309e85f">&sect;</ulink>
     </para>

     <para>
      This prevents trouble when the invalid slot points to WAL that's
      already been removed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [48796a98d] 2025-02-24 14:03:04 -0800
Branch: REL_17_STABLE [174952ece] 2025-02-24 14:03:07 -0800
Branch: REL_16_STABLE [cc628f661] 2025-02-24 14:03:10 -0800
-->
     <para>
      Disallow restoring logical replication slots on standby servers that
      are not in hot-standby mode (Masahiko Sawada)
      <ulink url="&commit_baseurl;174952ece">&sect;</ulink>
     </para>

     <para>
      This prevents a scenario where the slot could remain valid after
      promotion even if <varname>wal_level</varname> is too low.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [aaf9e95e8] 2025-04-28 11:35:54 +0530
Branch: REL_17_STABLE [36148b22e] 2025-04-28 11:22:07 +0530
Branch: REL_16_STABLE [21a7caeeb] 2025-04-28 11:09:27 +0530
Branch: REL_15_STABLE [f6429bd7d] 2025-04-28 10:56:24 +0530
Branch: REL_14_STABLE [1f63b3626] 2025-04-28 10:34:45 +0530
Branch: REL_13_STABLE [d65485b02] 2025-04-28 11:55:00 +0530
-->
     <para>
      Prevent over-advancement of catalog xmin in <quote>fast
      forward</quote> mode of logical decoding (Zhijie Hou)
      <ulink url="&commit_baseurl;36148b22e">&sect;</ulink>
     </para>

     <para>
      This mistake could allow deleted catalog entries to be vacuumed away
      even though they were still potentially needed by the WAL-reading
      process.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [4909b38af] 2025-04-10 13:14:40 +0530
Branch: REL_17_STABLE [cadaf0ac4] 2025-04-10 12:57:10 +0530
Branch: REL_16_STABLE [9a2f8b4f0] 2025-04-10 12:44:11 +0530
Branch: REL_15_STABLE [9f21be08e] 2025-04-10 12:31:14 +0530
Branch: REL_14_STABLE [0434033e8] 2025-04-10 12:22:30 +0530
Branch: REL_13_STABLE [247ee9415] 2025-04-24 10:31:40 +0530
Branch: master [50b8ad30f] 2025-04-25 12:46:02 +0530
Branch: REL_17_STABLE [d96206f25] 2025-04-25 12:32:00 +0530
Branch: REL_16_STABLE [9987c9466] 2025-04-25 12:17:40 +0530
Branch: REL_15_STABLE [90bc4523f] 2025-04-25 12:05:52 +0530
Branch: REL_14_STABLE [bb1bc9fa9] 2025-04-25 11:53:27 +0530
Branch: REL_13_STABLE [4164d6976] 2025-04-25 11:45:40 +0530
-->
     <para>
      Avoid data loss when DDL operations that don't take a strong lock
      affect tables that are being logically replicated (Shlok Kyal,
      Hayato Kuroda)
      <ulink url="&commit_baseurl;cadaf0ac4">&sect;</ulink>
      <ulink url="&commit_baseurl;d96206f25">&sect;</ulink>
     </para>

     <para>
      The catalog changes caused by the DDL command were not reflected
      into WAL-decoding processes, allowing them to decode subsequent
      changes using stale catalog data, probably resulting in data
      corruption.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [0e091ce40] 2025-04-23 11:08:24 +0530
Branch: REL_17_STABLE [05676d87e] 2025-04-23 10:52:36 +0530
Branch: REL_16_STABLE [0de091a4b] 2025-04-23 10:35:54 +0530
-->
     <para>
      Prevent incorrect reset of replication origin when an apply worker
      encounters an error but the error is caught and does not result in
      worker exit (Hayato Kuroda)
      <ulink url="&commit_baseurl;05676d87e">&sect;</ulink>
     </para>

     <para>
      This mistake could allow duplicate data to be applied.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9ff68679b] 2025-02-19 16:35:15 -0500
Branch: REL_17_STABLE [788baa9a2] 2025-02-19 16:35:15 -0500
-->
     <para>
      Fix crash in logical replication if the subscriber's partitioned
      table has a BRIN index (Tom Lane)
      <ulink url="&commit_baseurl;788baa9a2">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [236750317] 2025-03-10 17:07:38 +0200
Branch: REL_17_STABLE [c1dd3a944] 2025-03-10 17:07:59 +0200
Branch: REL_16_STABLE [8171d2dae] 2025-03-10 17:08:02 +0200
Branch: REL_15_STABLE [50c589992] 2025-03-10 17:08:05 +0200
Branch: REL_14_STABLE [2ef048855] 2025-03-10 17:08:07 +0200
Branch: REL_13_STABLE [9b3914f18] 2025-03-10 17:08:10 +0200
Branch: master [f7c566a1a] 2025-03-10 18:58:10 +0200
Branch: REL_17_STABLE [f1ef111a0] 2025-03-10 19:00:08 +0200
Branch: REL_16_STABLE [324e0b656] 2025-03-10 19:01:51 +0200
Branch: REL_15_STABLE [d765226cb] 2025-03-10 19:01:58 +0200
Branch: REL_14_STABLE [136e68b46] 2025-03-10 19:02:02 +0200
Branch: REL_13_STABLE [6c1e79589] 2025-03-10 19:02:08 +0200
-->
     <para>
      Avoid duplicate snapshot creation in logical replication index
      lookups (Heikki Linnakangas)
      <ulink url="&commit_baseurl;c1dd3a944">&sect;</ulink>
      <ulink url="&commit_baseurl;f1ef111a0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [b4e0d0c53] 2025-02-21 14:34:40 +0530
Branch: REL_17_STABLE [0ae1245e0] 2025-02-21 14:21:29 +0530
Branch: REL_16_STABLE [1c2a2354c] 2025-02-21 14:08:27 +0530
-->
     <para>
      Improve detection of mixed-origin subscriptions
      (Hou Zhijie, Shlok Kyal)
      <ulink url="&commit_baseurl;0ae1245e0">&sect;</ulink>
     </para>

     <para>
      Subscription creation gives a warning if a subscribed-to table is
      also being followed through other publications, since that could
      cause duplicate data to be received.  This change improves that
      logic to also detect cases where a partition parent or child table
      is the one being followed through another publication.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [71f17823b] 2025-02-20 10:42:20 +0900
Branch: REL_17_STABLE [29cce279b] 2025-02-20 10:43:35 +0900
Branch: REL_16_STABLE [b4969a296] 2025-02-20 10:43:38 +0900
Branch: REL_15_STABLE [62bed7bb0] 2025-02-20 10:43:40 +0900
-->
     <para>
      Fix wrong checkpoint details in error message about incorrect
      recovery timeline choice (David Steele)
      <ulink url="&commit_baseurl;29cce279b">&sect;</ulink>
     </para>

     <para>
      If the requested recovery timeline is not reachable, the reported
      checkpoint and timeline should be the values read from the
      backup_label, if there is one.  This message previously reported
      values from the control file, which is correct when recovering from
      the control file without a backup_label, but not when there is a
      backup_label.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [499faf906] 2025-03-18 14:04:44 -0400
Branch: REL_17_STABLE [ee578921b] 2025-03-18 13:44:10 -0400
-->
     <para>
      Fix order of operations in <function>smgropen()</function>
      (Andres Freund)
      <ulink url="&commit_baseurl;ee578921b">&sect;</ulink>
     </para>

     <para>
      Ensure that the SMgrRelation object is fully initialized before
      calling the smgr_open callback, so that it can be cleaned up
      properly if the callback fails.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1f7878c33] 2025-04-23 13:53:29 +0900
Branch: REL_17_STABLE [4b6331e0f] 2025-04-23 13:54:53 +0900
Branch: REL_16_STABLE [e9ab8677b] 2025-04-23 13:54:56 +0900
Branch: REL_15_STABLE [c1201ffcf] 2025-04-23 13:54:57 +0900
-->
     <para>
      Remove incorrect assertion
      in <function>pgstat_report_stat()</function> (Michael Paquier)
      <ulink url="&commit_baseurl;4b6331e0f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [7afca7ede] 2025-04-04 13:49:00 +0300
Branch: REL_17_STABLE [6526d0794] 2025-04-04 13:49:21 +0300
Branch: REL_16_STABLE [419321398] 2025-04-04 13:49:51 +0300
Branch: REL_15_STABLE [3c0fe75c4] 2025-04-04 13:50:00 +0300
Branch: REL_14_STABLE [a749c6f18] 2025-04-04 13:50:12 +0300
Branch: REL_13_STABLE [b92482dc3] 2025-04-04 13:50:52 +0300
-->
     <para>
      Fix overly-strict assertion
      in <function>gistFindCorrectParent()</function> (Heikki Linnakangas)
      <ulink url="&commit_baseurl;6526d0794">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [f4290f20d] 2025-03-18 16:37:02 -0700
Branch: REL_17_STABLE [a38dce3c4] 2025-03-18 16:36:59 -0700
-->
     <para>
      Avoid assertion failure in parallel vacuum
      when <varname>maintenance_work_mem</varname> has a very small value
      (Masahiko Sawada)
      <ulink url="&commit_baseurl;a38dce3c4">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [2817525f0] 2025-03-23 20:41:16 +0200
Branch: REL_17_STABLE [302ce5bd9] 2025-03-23 20:41:52 +0200
Branch: REL_16_STABLE [2f33de3cd] 2025-03-23 20:41:54 +0200
Branch: REL_15_STABLE [b30c77a0e] 2025-03-23 20:41:57 +0200
Branch: REL_14_STABLE [66235baab] 2025-03-23 20:41:59 +0200
-->
     <para>
      Fix rare assertion failure in standby servers when the primary is
      restarted (Heikki Linnakangas)
      <ulink url="&commit_baseurl;302ce5bd9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7fe312f60] 2025-03-21 11:30:42 -0400
Branch: REL_17_STABLE [1353b1161] 2025-03-21 11:30:42 -0400
Branch: REL_16_STABLE [a28c1fb61] 2025-03-21 11:30:42 -0400
Branch: REL_15_STABLE [5e56efa7c] 2025-03-21 11:30:42 -0400
Branch: REL_14_STABLE [c196c610b] 2025-03-21 11:30:42 -0400
Branch: REL_13_STABLE [0f60e1fba] 2025-03-21 11:30:42 -0400
-->
     <para>
      In PL/pgSQL, avoid <quote>unexpected plan node type</quote> error
      when a scrollable cursor is defined on a
      simple <literal>SELECT <replaceable>expression</replaceable></literal>
      query (Andrei Lepikhov)
      <ulink url="&commit_baseurl;1353b1161">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [1fc340362] 2025-04-16 13:31:59 -0400
Branch: REL_17_STABLE [3424c1075] 2025-04-16 13:31:44 -0400
Branch: REL_16_STABLE [a25f21d99] 2025-04-16 13:31:44 -0400
Branch: REL_15_STABLE [7144cd538] 2025-04-16 13:31:44 -0400
Branch: REL_14_STABLE [148cc0105] 2025-04-16 13:31:44 -0400
Branch: REL_13_STABLE [6a3e57865] 2025-04-16 13:31:44 -0400
-->
     <para>
      Don't try to drop individual index partitions
      in <application>pg_dump</application>'s <option>--clean</option>
      mode (Jian He)
      <ulink url="&commit_baseurl;3424c1075">&sect;</ulink>
     </para>

     <para>
      The server rejects such <command>DROP</command> commands.  That has
      no real consequences, since the partitions will go away anyway in
      the subsequent <command>DROP</command>s of either their parent
      tables or their partitioned index.  However, the error reported for
      the attempted drop causes problems when restoring
      in <option>--single-transaction</option> mode.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [29d75b25b] 2025-02-21 13:37:15 -0500
Branch: REL_17_STABLE [16eff4261] 2025-02-21 13:37:15 -0500
Branch: REL_16_STABLE [d850a6600] 2025-02-21 13:37:16 -0500
Branch: REL_15_STABLE [6df3be415] 2025-02-21 13:37:16 -0500
Branch: REL_14_STABLE [ce1475acd] 2025-02-21 13:37:16 -0500
Branch: REL_13_STABLE [5302ff95c] 2025-02-21 13:37:12 -0500
-->
     <para>
      In <application>pg_dumpall</application>, avoid emitting invalid
      role <command>GRANT</command> commands
      if <structname>pg_auth_members</structname> contains invalid role
      OIDs (Tom Lane)
      <ulink url="&commit_baseurl;16eff4261">&sect;</ulink>
     </para>

     <para>
      Instead, print a warning and skip the entry.  This copes better with
      catalog corruption that has been seen to occur in back branches as a
      result of race conditions between <command>GRANT</command>
      and <command>DROP ROLE</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [2a083ab80] 2025-02-28 10:15:29 +0900
Branch: REL_17_STABLE [ee78823ff] 2025-02-28 10:15:32 +0900
Branch: REL_16_STABLE [9ca2145b0] 2025-02-28 10:15:34 +0900
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [945126234] 2025-04-03 11:04:37 -0700
Branch: REL_17_STABLE [0851b6573] 2025-04-06 09:13:43 -0700
Branch: REL_16_STABLE [57467ec7b] 2025-04-06 09:14:42 -0700
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [48e4ae9a0] 2025-02-27 14:05:51 +0900
Branch: REL_17_STABLE [f903d4da9] 2025-02-27 14:05:55 +0900
Branch: REL_16_STABLE [816149dc6] 2025-02-27 14:05:57 +0900
Branch: REL_15_STABLE [ec741d480] 2025-02-27 14:05:58 +0900
Branch: REL_14_STABLE [35a591a04] 2025-02-27 14:06:00 +0900
-->
     <para>
      In <application>pg_amcheck</application>
      and <application>pg_upgrade</application>, use the correct function
      to free allocations made by <application>libpq</application>
      (Michael Paquier, Ranier Vilela)
      <ulink url="&commit_baseurl;ee78823ff">&sect;</ulink>
      <ulink url="&commit_baseurl;0851b6573">&sect;</ulink>
      <ulink url="&commit_baseurl;f903d4da9">&sect;</ulink>
     </para>

     <para>
      These oversights could result in crashes in certain Windows build
      configurations, such as a debug build
      of <application>libpq</application> used by a non-debug build of the
      calling application.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [682c5be25] 2025-03-16 13:29:15 +0200
Branch: REL_17_STABLE [09ef2f8df] 2025-03-16 13:29:20 +0200
-->
     <para>
      Fix <application>reindexdb</application>'s scheduling of parallel
      reindex operations (Alexander Korotkov)
      <ulink url="&commit_baseurl;09ef2f8df">&sect;</ulink>
     </para>

     <para>
      The original coding failed to achieve the expected amount of
      parallelism.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d05996340] 2025-04-19 16:37:42 -0400
Branch: REL_17_STABLE [ecb8e5641] 2025-04-19 16:37:42 -0400
Branch: REL_16_STABLE [2d33cf7b8] 2025-04-19 16:37:42 -0400
Branch: REL_15_STABLE [90a3fd811] 2025-04-19 16:37:42 -0400
Branch: REL_14_STABLE [3c2ea65bd] 2025-04-19 16:37:43 -0400
Branch: REL_13_STABLE [3f9132ed2] 2025-04-19 16:37:43 -0400
-->
     <para>
      Avoid crashing with corrupt input data
      in <filename>contrib/pageinspect</filename>'s
      <function>heap_page_items()</function> (Dmitry Kovalenko)
      <ulink url="&commit_baseurl;ecb8e5641">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4623d7144] 2025-03-27 13:20:23 -0400
Branch: REL_17_STABLE [51d038da8] 2025-03-27 13:20:23 -0400
Branch: REL_16_STABLE [41ed749e4] 2025-03-27 13:20:23 -0400
Branch: REL_15_STABLE [0e86bad38] 2025-03-27 13:20:23 -0400
Branch: REL_14_STABLE [5ff827389] 2025-03-27 13:20:23 -0400
Branch: REL_13_STABLE [db8238da4] 2025-03-27 13:20:23 -0400
-->
     <para>
      Prevent assertion failure
      in <filename>contrib/pg_freespacemap</filename>'s
      <function>pg_freespacemap()</function> (Tender Wang)
      <ulink url="&commit_baseurl;51d038da8">&sect;</ulink>
     </para>

     <para>
      Applying <function>pg_freespacemap()</function> to a relation
      lacking storage (such as a view) caused an assertion failure,
      although there was no ill effect in non-assert builds.
      Add an error check to reject that case.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [023fb5127] 2025-03-25 05:49:47 +0200
Branch: REL_17_STABLE [729fe699e] 2025-03-25 05:50:39 +0200
-->
     <para>
      In <filename>contrib/postgres_fdw</filename>, avoid pulling up
      restriction conditions from subqueries (Alexander Pyhalov)
      <ulink url="&commit_baseurl;729fe699e">&sect;</ulink>
     </para>

     <para>
      This fix prevents rare cases of <quote>unexpected expression in
      subquery output</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cb36f8ec2] 2025-03-25 20:03:56 -0400
Branch: REL_17_STABLE [f186f90e5] 2025-03-25 20:03:56 -0400
-->
     <para>
      Fix build failure when an old version
      of <filename>libpq_fe.h</filename> is present in system include
      directories (Tom Lane)
      <ulink url="&commit_baseurl;f186f90e5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6da2ba1d8] 2025-04-01 16:50:09 -0400
Branch: REL_17_STABLE [915e88968] 2025-04-01 16:49:51 -0400
Branch: REL_16_STABLE [a39eb9c77] 2025-04-01 16:49:51 -0400
Branch: REL_15_STABLE [0de9560ba] 2025-04-01 16:49:51 -0400
Branch: REL_14_STABLE [71790aef1] 2025-04-01 16:49:51 -0400
Branch: REL_13_STABLE [e4440a73c] 2025-04-01 16:49:51 -0400
-->
     <para>
      Fix build failure on macOS 15.4 (Tom Lane, Peter Eisentraut)
      <ulink url="&commit_baseurl;915e88968">&sect;</ulink>
     </para>

     <para>
      This macOS update broke our configuration probe
      for <function>strchrnul()</function>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [2a8a00674] 2025-02-15 13:14:03 +1300
Branch: master [2509b857c] 2025-02-18 14:44:59 +1300
Branch: REL_17_STABLE [57dca6faa] 2025-02-21 15:16:37 +1300
-->
     <para>
      Fix valgrind labeling of per-buffer data of read streams
      (Thomas Munro)
      <ulink url="&commit_baseurl;57dca6faa">&sect;</ulink>
     </para>

     <para>
      This affects no core code in released versions
      of <productname>PostgreSQL</productname>, but an extension using the
      per-buffer data feature might have encountered spurious failures
      when being tested under valgrind.
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [0600d276d] 2025-02-24 18:03:29 +0700
Branch: REL_17_STABLE [fde7c0164] 2025-02-24 18:03:48 +0700
-->
     <para>
      Avoid valgrind complaints about string hashing code (John Naylor)
      <ulink url="&commit_baseurl;fde7c0164">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [368c3fbf9] 2025-04-30 11:13:49 -0400
Branch: REL_17_STABLE [5d5970b9f] 2025-04-30 11:14:01 -0400
Branch: REL_16_STABLE [e076120d9] 2025-04-30 11:14:06 -0400
Branch: REL_15_STABLE [a144cf145] 2025-04-30 11:14:10 -0400
Branch: REL_14_STABLE [fa4244a43] 2025-04-30 11:14:15 -0400
Branch: REL_13_STABLE [9da548df3] 2025-04-30 11:14:19 -0400
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2025b for DST law changes in Chile, plus historical
      corrections for Iran (Tom Lane)
      <ulink url="&commit_baseurl;5d5970b9f">&sect;</ulink>
     </para>

     <para>
      There is a new time zone America/Coyhaique for Chile's Aysén Region,
      to account for it changing to UTC-03 year-round and thus diverging
      from America/Santiago.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <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)) +
    CASE WHEN pg_catalog.pg_partition_root(conrelid) = confrelid THEN
              (SELECT count(*) FROM pg_catalog.pg_partition_tree(confrelid)
                WHERE level = 1)
         ELSE 0 END);
</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>
