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

 <sect1 id="release-18-4">
  <title>Release 18.4</title>

  <formalpara>
  <title>Release date:</title>
  <para>2026-05-14</para>
  </formalpara>

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

  <sect2 id="release-18-4-migration">
   <title>Migration to Version 18.4</title>

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

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [b63f25bdd] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [f7a191f53] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [32a4ce55c] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [66cf26b9e] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [3fb66d302] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [3b4e66739] 2026-05-11 05:13:51 -0700
Branch: REL_17_STABLE [6dffaeb8e] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [c2e6ef863] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [16fda4df6] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [14a4a7040] 2026-05-11 05:13:51 -0700
-->
     <para>
      Prevent unbounded recursion while processing startup packets
      (Michael Paquier)
      <ulink url="&commit_baseurl;f7a191f53">&sect;</ulink>
     </para>

     <para>
      A malicious client could crash the connected backend by alternating
      rejected SSL and GSS encryption requests indefinitely.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Calif.io
      (in collaboration with Claude and Anthropic Research) for reporting
      this problem.
      (CVE-2026-6479)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [46593aea0] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [e1c30458a] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [fe2720c45] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [cfb610eaa] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [bfc5cea76] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [61a9b4b6e] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c55cea529] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [01e568b8c] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [01b5ef7df] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [aff71f87b] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [4032c9d98] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [e31ef0720] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0dc1fdc75] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [f3cee4dc4] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [e3a2bea41] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [a4f089c79] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [7fdb0907e] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [39bc8f2ca] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b2869ebc4] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [dd8af778d] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [26dd3cac2] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [c25973124] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [fb0bc321d] 2026-05-11 05:13:51 -0700
Branch: REL_14_STABLE [bcfd848e7] 2026-05-11 05:13:51 -0700
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [6a985e71e] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [55328e3a9] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [87357a606] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [32c525eb6] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [137013f60] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [986753361] 2026-05-11 05:13:51 -0700
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [6d68fcb28] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [67dd6243d] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [3c41f5534] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [e24fb3247] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [e49e9590d] 2026-05-11 05:13:51 -0700
Branch: REL_14_STABLE [8e81995de] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [066b7b144] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [8d1489d50] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [ebcfa7867] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [f20b84081] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [b11c3eadf] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [3e0eba196] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_18_STABLE [c7fb9f765] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [00e243e67] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [924b3e943] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [d75b1dc96] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [37842f3dc] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_17_STABLE [e5babf754] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [47dae5e74] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [d106295b6] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [6a423a256] 2026-05-11 05:13:51 -0700
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [c3f7dde39] 2026-05-11 21:27:55 +0300
Branch: REL_18_STABLE [3fbec9e50] 2026-05-11 21:28:46 +0300
Branch: REL_17_STABLE [8e909812d] 2026-05-11 21:28:57 +0300
Branch: REL_16_STABLE [e42598a41] 2026-05-11 21:29:08 +0300
Branch: REL_15_STABLE [dc6c85ff4] 2026-05-11 21:29:18 +0300
Branch: REL_14_STABLE [c9447b8bd] 2026-05-11 21:29:27 +0300
-->
     <para>
      Fix assorted integer overflows in memory-allocation calculations
      (Tom Lane, Nathan Bossart, Heikki Linnakangas)
      <ulink url="&commit_baseurl;e1c30458a">&sect;</ulink>
      <ulink url="&commit_baseurl;01e568b8c">&sect;</ulink>
      <ulink url="&commit_baseurl;f3cee4dc4">&sect;</ulink>
      <ulink url="&commit_baseurl;dd8af778d">&sect;</ulink>
      <ulink url="&commit_baseurl;55328e3a9">&sect;</ulink>
      <ulink url="&commit_baseurl;67dd6243d">&sect;</ulink>
      <ulink url="&commit_baseurl;8d1489d50">&sect;</ulink>
      <ulink url="&commit_baseurl;c7fb9f765">&sect;</ulink>
      <ulink url="&commit_baseurl;3fbec9e50">&sect;</ulink>
     </para>

     <para>
      Various places were incautious about the possibility of integer
      overflow in calculations of how much memory to allocate.  Overflow
      would lead to allocating a too-small buffer which the caller would
      then write past the end of.  This would at least trigger server
      crashes, and probably could be exploited for arbitrary code
      execution.  In many but by no means all cases, the hazard exists
      only in 32-bit builds.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Xint Code,
      Bruce Dang, Sven Klemm, and Pavel Kohout for reporting these problems.
      (CVE-2026-6473)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [d389415ff] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [c2e44c370] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [d7de7fa84] 2026-05-11 05:13:49 -0700
-->
     <para>
      Properly quote subscription names
      in <application>pg_createsubscriber</application> (Nathan Bossart)
      <ulink url="&commit_baseurl;c2e44c370">&sect;</ulink>
     </para>

     <para>
      The given subscription name was inserted into SQL commands without
      quoting, so that SQL injection could be achieved in the (perhaps
      unlikely) case that the subscription name comes from an untrusted
      source.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Yu Kunpeng for reporting this problem.
      (CVE-2026-6476)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [46b4f5c11] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [cb35d7306] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [f0f59b658] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [248a433cd] 2026-05-11 05:13:50 -0700
-->
     <para>
      Properly quote object names in logical replication origin checks
      (Pavel Kohout)
      <ulink url="&commit_baseurl;cb35d7306">&sect;</ulink>
     </para>

     <para>
      <command>ALTER SUBSCRIPTION ... REFRESH PUBLICATION</command>
      interpolated schema and relation names into SQL commands without
      quoting them, allowing execution of arbitrary SQL on the publisher.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Pavel Kohout for reporting this problem.
      (CVE-2026-6638)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d388e1d7f] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [62ad26266] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [3ed3dbbf4] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [5919e0005] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [7fe365693] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [2d267ffc4] 2026-05-11 05:13:51 -0700
-->
     <para>
      Reject over-length options in <function>ts_headline()</function>
      (Michael Paquier)
      <ulink url="&commit_baseurl;62ad26266">&sect;</ulink>
     </para>

     <para>
      The <literal>StartSel</literal>, <literal>StopSel</literal>
      and <literal>FragmentDelimiter</literal> strings must not exceed
      32Kb in length, but this was not checked for.  An over-length value
      would typically crash the server.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Xint Code for reporting this problem.
      (CVE-2026-6473)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6d6348f03] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [661095c40] 2026-05-11 05:13:47 -0700
-->
     <para>
      Detect faulty input when restoring attribute MCV statistics
      (Michael Paquier)
      <ulink url="&commit_baseurl;661095c40">&sect;</ulink>
     </para>

     <para>
      The statistics restore functions were insufficiently careful about
      validating most-common-value statistics, and would accept values
      that could crash the planner later on.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Jeroen Gui for reporting this problem.
      (CVE-2026-6575)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [76ab76f87] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [ba27389c2] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [4197c880c] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [24e0e3254] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [126a236ba] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [a50ae8306] 2026-05-11 05:13:51 -0700
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ec8ded4b3] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [c6e7a9ef3] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [a386d14fe] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [79b7847c7] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [c3fff3950] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [2c8226f52] 2026-05-11 05:13:51 -0700
-->
     <para>
      Guard against malicious time zone names
      in <function>timeofday()</function>
      and <function>pg_strftime()</function> (Tom Lane)
      <ulink url="&commit_baseurl;ba27389c2">&sect;</ulink>
      <ulink url="&commit_baseurl;c6e7a9ef3">&sect;</ulink>
     </para>

     <para>
      A crafted time zone setting could pass <literal>%</literal>
      sequences to <function>snprintf()</function>, potentially causing
      crashes or disclosure of server memory.  Another path to similar
      results was to overflow the limited-size output buffer used
      by <function>pg_strftime()</function>.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Xint Code for reporting this problem.
      (CVE-2026-6474)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [4793fc41f] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [a44780f41] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [c27ba08cd] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [d92852d62] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [08c397b02] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [8bca85e9f] 2026-05-11 05:13:51 -0700
-->
     <para>
      When creating a multirange type, ensure the user
      has <literal>CREATE</literal> privilege on the schema specified for
      the multirange type (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;a44780f41">&sect;</ulink>
     </para>

     <para>
      The multirange type can be put into a different schema than its
      parent range type, but we neglected to apply the required privilege
      check when doing so.
     </para>

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5924e256c] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [d93ef4131] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [c4e7435b3] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [00e27235e] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [c95275f18] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [4608619a1] 2026-05-11 05:13:51 -0700
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_17_STABLE [8e34acfda] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [1604939b2] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [9dcfcb92f] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [b282280e9] 2026-05-11 05:13:51 -0700
-->
     <para>
      Use timing-safe string comparisons in authentication code
      (Michael Paquier)
      <ulink url="&commit_baseurl;d93ef4131">&sect;</ulink>
     </para>

     <para>
      Use <function>timingsafe_bcmp()</function> instead
      of <function>memcpy()</function> or <function>strcmp()</function>
      when checking passwords, hashes, etc.  It is not known whether the
      data dependency of those functions is usefully exploitable in any of
      these places, but in the interests of safety, replace them.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Joe Conway for reporting this problem.
      (CVE-2026-6478)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [bd4811493] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [be0136440] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [d88c7be15] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [614474996] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [e3a1f83ea] 2026-05-11 05:13:51 -0700
Branch: REL_14_STABLE [8ac723b2b] 2026-05-11 05:13:51 -0700
-->
     <para>
      Mark <function>PQfn()</function> as unsafe, and avoid using it
      within <application>libpq</application> (Nathan Bossart)
      <ulink url="&commit_baseurl;be0136440">&sect;</ulink>
     </para>

     <para>
      For a non-integral result type, <function>PQfn()</function> is not
      passed the size of the output buffer, so it cannot check that the
      data returned by the server will fit.  A malicious server could
      therefore overwrite client memory.  This is unfixable without an
      API change, so mark the function as deprecated.  Internally
      to <application>libpq</application>, use a variant version that can
      apply the missing check.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Yu Kunpeng and Martin Heistermann for reporting this problem.
      (CVE-2026-6477)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a1063eece] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [6a67c540a] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [8f881e188] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [6778af13e] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [0c83fe8e4] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [498829dca] 2026-05-11 05:13:51 -0700
-->
     <para>
      Prevent path traversal in <application>pg_basebackup</application>
      and <application>pg_rewind</application> (Michael Paquier)
      <ulink url="&commit_baseurl;6a67c540a">&sect;</ulink>
     </para>

     <para>
      These applications failed to validate output file paths read from
      their input, so that a malicious source could overwrite any file
      writable by these applications.  Constrain where data can be written
      by rejecting paths that are absolute or contain parent-directory
      references.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks XlabAI Team
      of Tencent Xuanwu Lab and Valery Gubanov for reporting this problem.
      (CVE-2026-6475)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [43451a7a2] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [c5790ec4f] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [c4d04cc48] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [5c1069c35] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [84a9f2641] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [074702525] 2026-05-11 05:13:51 -0700
Branch: master [906ea101d] 2026-05-11 12:12:03 -0400
Branch: REL_18_STABLE [05e73b5c3] 2026-05-11 12:12:03 -0400
Branch: REL_17_STABLE [2b429d887] 2026-05-11 12:12:03 -0400
Branch: REL_16_STABLE [6f0bff33d] 2026-05-11 12:12:03 -0400
Branch: REL_15_STABLE [fc1fd3d97] 2026-05-11 12:12:03 -0400
Branch: REL_14_STABLE [479823a71] 2026-05-11 12:12:03 -0400
-->
     <para>
      Guard against field overflow
      within <filename>contrib/intarray</filename>'s <type>query_int</type>
      type and <filename>contrib/ltree</filename>'s <type>ltxtquery</type>
      type (Tom Lane)
      <ulink url="&commit_baseurl;c5790ec4f">&sect;</ulink>
      <ulink url="&commit_baseurl;05e73b5c3">&sect;</ulink>
     </para>

     <para>
      Parsing of these query structures did not check for overflow of
      16-bit fields, so that construction of an invalid query tree was
      possible.  This can crash the server when executing the query.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Xint Code for reporting this problem.
      (CVE-2026-6473)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [2f1b16e86] 2026-05-11 05:13:46 -0700
Branch: REL_18_STABLE [7f019f341] 2026-05-11 05:13:47 -0700
Branch: REL_17_STABLE [8c3426110] 2026-05-11 05:13:48 -0700
Branch: REL_16_STABLE [6b6b26fde] 2026-05-11 05:13:49 -0700
Branch: REL_15_STABLE [9c2fa5b6a] 2026-05-11 05:13:50 -0700
Branch: REL_14_STABLE [b545c3787] 2026-05-11 05:13:51 -0700
-->
     <para>
      Guard against overly long values
      of <filename>contrib/ltree</filename>'s <type>lquery</type> type
      (Michael Paquier)
      <ulink url="&commit_baseurl;7f019f341">&sect;</ulink>
     </para>

     <para>
      Values with more than 64K items caused internal overflows,
      potentially resulting in stack smashes or wrong answers.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Vergissmeinnicht, A1ex, and Jihe Wang
      for reporting this problem.
      (CVE-2026-6473)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [260e97733] 2026-05-11 05:13:47 -0700
Branch: REL_18_STABLE [1ebda7da9] 2026-05-11 05:13:48 -0700
Branch: REL_17_STABLE [2dc64ef28] 2026-05-11 05:13:49 -0700
Branch: REL_16_STABLE [710995782] 2026-05-11 05:13:50 -0700
Branch: REL_15_STABLE [8053235ab] 2026-05-11 05:13:51 -0700
Branch: REL_14_STABLE [2b026df29] 2026-05-11 05:13:52 -0700
-->
     <para>
      Prevent SQL injection and buffer overruns
      in <filename>contrib/spi</filename> (Nathan Bossart)
      <ulink url="&commit_baseurl;1ebda7da9">&sect;</ulink>
     </para>

     <para>
      <function>check_foreign_key()</function> was insufficiently careful
      about quoting key values, and also used fixed-length buffers for
      constructing queries.  While this module is only meant as example
      code, it still shouldn't contain such dangerous errors.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Nikolay Samokhvalov for reporting this problem.
      (CVE-2026-6637)
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [f76686ce7] 2026-05-01 11:13:50 +0900
Branch: REL_18_STABLE [e8fd5e579] 2026-05-01 11:16:36 +0900
Branch: master [ba82de48e] 2026-05-08 10:57:50 +0900
Branch: REL_18_STABLE [1132af22c] 2026-05-08 10:59:13 +0900
Branch: master [a1b754558] 2026-05-08 12:45:51 +0900
Branch: REL_18_STABLE [5c214b58b] 2026-05-08 12:47:26 +0900
Branch: master [5a55ea507] 2026-05-05 10:22:53 +0900
Branch: REL_18_STABLE [b62f514ac] 2026-05-05 10:26:17 +0900
Branch: REL_17_STABLE [d0e73bb18] 2026-05-05 10:28:24 +0900
Branch: REL_16_STABLE [748fe9e60] 2026-05-05 10:30:37 +0900
Branch: REL_15_STABLE [872c9fae7] 2026-05-05 10:32:25 +0900
Branch: REL_14_STABLE [8395446df] 2026-05-05 10:33:47 +0900
Branch: master [574581b50] 2026-05-05 10:23:31 +0900
Branch: REL_18_STABLE [bed3ffbf9] 2026-05-05 10:27:06 +0900
Branch: REL_17_STABLE [13226050e] 2026-05-05 10:29:01 +0900
Branch: REL_16_STABLE [5a24cef08] 2026-05-05 10:31:17 +0900
Branch: REL_15_STABLE [bab4f7fa5] 2026-05-05 10:32:42 +0900
Branch: REL_14_STABLE [172034f6e] 2026-05-05 10:34:07 +0900
-->
     <para>
      Check for nondeterministic collations before assuming that an
      equality condition on a collatable type implies uniqueness
      (Richard Guo)
      <ulink url="&commit_baseurl;e8fd5e579">&sect;</ulink>
      <ulink url="&commit_baseurl;1132af22c">&sect;</ulink>
      <ulink url="&commit_baseurl;5c214b58b">&sect;</ulink>
      <ulink url="&commit_baseurl;b62f514ac">&sect;</ulink>
      <ulink url="&commit_baseurl;bed3ffbf9">&sect;</ulink>
     </para>

     <para>
      Numerous planner optimizations assume that, for example, at most one
      table row can satisfy <literal>WHERE x = 'abc'</literal> if there is
      a unique index on <literal>x</literal>.  However this conclusion is
      unsafe in general if the index and the <literal>WHERE</literal>
      clause have different collations attached.  It is safe when both
      collations are deterministic, because that property essentially
      requires that equality of two strings means bitwise equality.  But
      nondeterministic collations don't act that way, so that optimizing
      on the assumption of unique matches can give wrong query answers if
      either the <literal>WHERE</literal> clause or the index has a
      nondeterministic collation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cfcd57111] 2026-04-20 14:48:23 -0400
Branch: REL_18_STABLE [16fb94605] 2026-04-20 14:48:23 -0400
Branch: REL_17_STABLE [766d40286] 2026-04-20 14:48:23 -0400
Branch: REL_16_STABLE [d509be4ac] 2026-04-20 14:48:23 -0400
Branch: master [f0ac6d494] 2026-04-20 19:24:52 -0400
Branch: REL_17_STABLE [53cb4ec1d] 2026-04-20 19:24:46 -0400
Branch: REL_16_STABLE [798dabe83] 2026-04-20 19:24:46 -0400
-->
     <para>
      Fix incomplete removal of relation references
      in <literal>RestrictInfo</literal> structs during join removal
      (Tom Lane)
      <ulink url="&commit_baseurl;16fb94605">&sect;</ulink>
     </para>

     <para>
      This oversight has been shown to result in planner failures such as
      unexpected <quote>FULL JOIN is only supported with merge-joinable or
      hash-joinable join conditions</quote> errors.  It may also have
      caused failure to consider valid plans in other cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [c1408956e] 2026-04-09 16:41:31 +0900
Branch: REL_18_STABLE [8e8b2bef7] 2026-04-09 16:43:28 +0900
-->
     <para>
      Improve planner's matching of partition key columns to sub-query
      outputs (Richard Guo)
      <ulink url="&commit_baseurl;8e8b2bef7">&sect;</ulink>
     </para>

     <para>
      Strip no-op PlaceHolderVars from operands before comparing them to
      partition keys.  This change enables partition pruning to succeed in
      some cases where it previously failed to recognize that a partition
      need not be scanned.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [07b7a964d] 2026-03-20 15:46:30 +0200
Branch: REL_18_STABLE [e8b9d6497] 2026-03-20 15:47:11 +0200
-->
     <para>
      Fix self-join removal to handle join clauses that are bare boolean
      columns, e.g. <literal>ON t1.boolcol</literal> (Andrei Lepikhov,
      Tender Wang, Alexander Korotkov)
      <ulink url="&commit_baseurl;e8b9d6497">&sect;</ulink>
     </para>

     <para>
      Previously such a case led to a <quote>no relation entry
      for relid <replaceable>N</replaceable></quote> error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [5548a969b] 2026-04-22 11:50:17 +0100
Branch: REL_18_STABLE [f3d03fbd5] 2026-04-22 11:50:18 +0100
-->
     <para>
      Fix <literal>UPDATE/DELETE ... WHERE CURRENT OF</literal> to work on
      tables with virtual generated columns (Satyanarayana Narlapuram,
      Dean Rasheed)
      <ulink url="&commit_baseurl;f3d03fbd5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [783425175] 2026-04-22 09:03:44 +0100
Branch: REL_18_STABLE [cf38dedf6] 2026-04-22 09:03:44 +0100
-->
     <para>
      Fix expansion of virtual generated columns
      in <literal>EXCLUDED</literal> column references in <literal>INSERT
      ... ON CONFLICT</literal> (Satyanarayana Narlapuram, Dean Rasheed)
      <ulink url="&commit_baseurl;cf38dedf6">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [c6a79be3f] 2026-04-21 14:28:26 +0900
Branch: REL_18_STABLE [e528bfe97] 2026-04-21 14:29:33 +0900
Branch: REL_17_STABLE [9d6208939] 2026-04-21 14:31:15 +0900
Branch: REL_16_STABLE [07b257189] 2026-04-21 14:33:07 +0900
Branch: REL_15_STABLE [7062bd577] 2026-04-21 14:33:57 +0900
Branch: REL_14_STABLE [8e39951be] 2026-04-21 14:35:43 +0900
-->
     <para>
      Fix incorrect handling of <literal>NEW</literal> generated columns
      in rule actions and rule qualifications (Richard Guo, Dean Rasheed)
      <ulink url="&commit_baseurl;e528bfe97">&sect;</ulink>
     </para>

     <para>
      Previously, such column references would produce NULL
      in <literal>INSERT</literal> cases, or be equivalent to
      the <literal>OLD</literal> value in <literal>UPDATE</literal> cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [570e2fcc0] 2026-03-24 06:28:33 -0400
Branch: REL_18_STABLE [cceb9c18a] 2026-03-24 06:28:32 -0400
-->
     <para>
      Fix spurious <quote>indexes on virtual generated columns are not
      supported</quote> errors (Robert Haas)
      <ulink url="&commit_baseurl;cceb9c18a">&sect;</ulink>
     </para>

     <para>
      Creation of an expression index could sometimes incorrectly report
      this error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: REL_18_STABLE [11c2c0cc8] 2026-04-06 14:22:17 -0400
Branch: REL_17_STABLE [681a91d29] 2026-04-06 14:22:17 -0400
Branch: REL_16_STABLE [3c7a6bbe6] 2026-04-06 14:22:17 -0400
Branch: REL_15_STABLE [07e833e3c] 2026-04-06 14:22:17 -0400
Branch: REL_14_STABLE [40fa04e7c] 2026-04-06 14:22:17 -0400
-->
     <para>
      Fix spurious <quote>generated columns are not supported in COPY FROM
      WHERE conditions</quote> errors (Tom Lane)
      <ulink url="&commit_baseurl;11c2c0cc8">&sect;</ulink>
     </para>

     <para>
      Use of a system column in a <literal>COPY FROM WHERE</literal>
      condition could sometimes incorrectly report this error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [177037341] 2026-03-05 19:49:28 +0200
Branch: REL_18_STABLE [13fab378e] 2026-03-05 19:50:06 +0200
Branch: REL_17_STABLE [2dcac93c0] 2026-03-05 19:56:42 +0200
Branch: REL_16_STABLE [f6e63d4b8] 2026-03-05 20:02:08 +0200
Branch: REL_15_STABLE [8bfaae6fb] 2026-03-05 19:57:32 +0200
-->
     <para>
      Correctly report a serialization failure
      when <command>MERGE</command> encounters a concurrently-updated
      tuple in repeatable-read or serializable mode (Tender Wang)
      <ulink url="&commit_baseurl;13fab378e">&sect;</ulink>
     </para>

     <para>
      Previously, such cases behaved the same as in lower isolation
      levels.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [6cf49e804] 2026-04-30 11:04:57 -0400
Branch: REL_18_STABLE [149c875fc] 2026-04-30 11:05:29 -0400
Branch: REL_17_STABLE [a0104b447] 2026-04-30 11:14:37 -0400
Branch: REL_16_STABLE [7bb519635] 2026-04-30 11:14:26 -0400
Branch: REL_15_STABLE [76d15a7ee] 2026-04-30 11:14:12 -0400
Branch: REL_14_STABLE [81b56b47c] 2026-04-30 11:13:50 -0400
-->
     <para>
      Fix <literal>CREATE TABLE ... LIKE ... INCLUDING
      STATISTICS</literal> for cases where the source table has dropped
      column(s) (Julien Tachoires)
      <ulink url="&commit_baseurl;149c875fc">&sect;</ulink>
     </para>

     <para>
      In such cases, extended statistics objects could be copied
      incorrectly, or the command could give an incorrect error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9d3e094f1] 2026-04-22 10:32:10 +0900
Branch: REL_18_STABLE [5713ac248] 2026-04-22 10:34:33 +0900
Branch: REL_17_STABLE [becf6d269] 2026-04-22 10:34:35 +0900
Branch: REL_16_STABLE [313355d68] 2026-04-22 10:34:37 +0900
Branch: REL_15_STABLE [0859000d0] 2026-04-22 10:34:38 +0900
Branch: REL_14_STABLE [d809b16d1] 2026-04-22 10:34:40 +0900
-->
     <para>
      Allow <literal>ALTER INDEX ... ATTACH PARTITION</literal> to mark
      the parent index valid if appropriate (Sami Imseih)
      <ulink url="&commit_baseurl;5713ac248">&sect;</ulink>
     </para>

     <para>
      There are edge cases in which a partitioned index might remain
      marked as invalid even when all its leaf indexes are valid.  This
      change provides a mechanism whereby a user can correct such a
      situation without resorting to manual catalog updates.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [e7975f1c0] 2026-03-20 14:38:50 +0100
Branch: REL_18_STABLE [6958077ce] 2026-03-20 14:38:50 +0100
-->
     <para>
      Fix <literal>ALTER TABLE ... SET NOT NULL</literal> to invoke
      object-access hook functions only after completing the catalog
      change (Artur Zakirov)
      <ulink url="&commit_baseurl;6958077ce">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [703fee3b2] 2026-03-19 15:07:43 -0700
Branch: REL_18_STABLE [c11f87b1a] 2026-03-19 14:59:30 -0700
Branch: REL_17_STABLE [876fa84a2] 2026-03-19 15:02:18 -0700
Branch: REL_16_STABLE [a19edb66a] 2026-03-19 15:00:58 -0700
Branch: REL_15_STABLE [3a35ab1d0] 2026-03-19 15:01:22 -0700
Branch: REL_14_STABLE [c6f369e58] 2026-03-19 15:01:45 -0700
-->
     <para>
      Fix <command>ALTER FOREIGN DATA WRAPPER</command> to not drop the
      wrapper object's dependency on its handler function (Jeff Davis)
      <ulink url="&commit_baseurl;c11f87b1a">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [2497dac55] 2026-03-30 14:37:33 +0900
Branch: REL_18_STABLE [5db5e3396] 2026-03-30 14:38:58 +0900
-->
     <para>
      Fix loss of deferrability of foreign-key triggers (Yasuo Honda)
      <ulink url="&commit_baseurl;5db5e3396">&sect;</ulink>
     </para>

     <para>
      Previously, a foreign key defined as <literal>DEFERRABLE INITIALLY
      DEFERRED</literal> would behave as <literal>NOT DEFERRABLE</literal>
      after being set to <literal>NOT ENFORCED</literal> status and then
      back to <literal>ENFORCED</literal>.
     </para>

     <para>
      If you have a foreign key with this problem, it can be repaired
      (after installing this update) by again setting it to <literal>NOT
      ENFORCED</literal> and then back to <literal>ENFORCED</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4edd6036d] 2026-04-07 14:45:37 -0400
Branch: REL_18_STABLE [49f3cb453] 2026-04-07 14:45:33 -0400
-->
     <para>
      Fix <literal>WITHOUT OVERLAPS</literal> to allow domains (Jian He)
      <ulink url="&commit_baseurl;49f3cb453">&sect;</ulink>
     </para>

     <para>
      <literal>UNIQUE/PRIMARY KEY ... WITHOUT OVERLAPS</literal> requires
      the no-overlap column to be a range or multirange, but it should
      allow a domain over such a type too.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [dd4069197] 2026-04-23 21:28:11 +0300
Branch: REL_18_STABLE [ff8f27d6e] 2026-04-23 21:28:59 +0300
Branch: REL_17_STABLE [54343f6f9] 2026-04-23 21:31:32 +0300
Branch: REL_16_STABLE [06e304524] 2026-04-23 21:33:02 +0300
Branch: REL_15_STABLE [34ebeb15c] 2026-04-23 21:33:25 +0300
Branch: REL_14_STABLE [c7a1d5fc6] 2026-04-23 21:33:39 +0300
-->
     <para>
      Disallow making a composite type be a member of itself via a
      multirange (Heikki Linnakangas)
      <ulink url="&commit_baseurl;ff8f27d6e">&sect;</ulink>
     </para>

     <para>
      We already forbade such cases when the intermediate type is a
      domain, array, composite type, or range; but multiranges were
      overlooked.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [0d866282b] 2026-03-30 16:14:34 +1300
Branch: REL_18_STABLE [49315de0c] 2026-03-30 16:16:09 +1300
Branch: REL_17_STABLE [d29808e35] 2026-03-30 16:16:39 +1300
Branch: REL_16_STABLE [1bd90c887] 2026-03-30 16:17:14 +1300
Branch: REL_15_STABLE [6b2e091f0] 2026-03-30 16:17:39 +1300
Branch: REL_14_STABLE [6ce5c310b] 2026-03-30 16:18:13 +1300
-->
     <para>
      Fix datum-image comparisons to be insensitive to sign-extension
      variations (David Rowley)
      <ulink url="&commit_baseurl;49315de0c">&sect;</ulink>
     </para>

     <para>
      This fixes some situations that previously led to <quote>could not
      find memoization table entry</quote> errors or wrong query results.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [94219a73f] 2026-04-24 14:03:12 +1200
Branch: REL_18_STABLE [035c520db] 2026-04-24 14:03:41 +1200
Branch: REL_17_STABLE [3fda3e12f] 2026-04-24 14:04:05 +1200
Branch: REL_16_STABLE [a2a0060d5] 2026-04-24 14:04:31 +1200
Branch: REL_15_STABLE [622f8b530] 2026-04-24 14:04:55 +1200
Branch: REL_14_STABLE [109de35b7] 2026-04-24 14:05:23 +1200
-->
     <para>
      Fix incorrect logic for hashed <literal>IN</literal>/<literal>NOT
      IN</literal> with non-strict equality operator (Chengpeng Yan)
      <ulink url="&commit_baseurl;035c520db">&sect;</ulink>
     </para>

     <para>
      The previous coding could crash or give wrong answers.  All built-in
      data types have strict equality operators, so that this issue could
      only arise with an extension data type.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a50777680] 2026-04-22 12:41:00 -0400
Branch: REL_18_STABLE [580e7be88] 2026-04-22 12:41:00 -0400
Branch: REL_17_STABLE [c97a28618] 2026-04-22 12:41:00 -0400
Branch: REL_16_STABLE [e1e60f148] 2026-04-22 12:41:01 -0400
Branch: REL_15_STABLE [f60d25986] 2026-04-22 12:41:01 -0400
Branch: REL_14_STABLE [8a6f08c0c] 2026-04-22 12:41:01 -0400
-->
     <para>
      Truncate overly-long locale-specific numeric symbols
      in <function>to_char()</function> (Tom Lane)
      <ulink url="&commit_baseurl;580e7be88">&sect;</ulink>
     </para>

     <para>
      If a locale specified a currency symbol, thousands separator, or
      decimal or sign symbol more than 8 bytes long, a buffer overrun was
      possible.  No such locales exist in the real world, and it's
      impractical for an unprivileged attacker to install a malicious
      locale definition underneath a Postgres server; but for safety's
      sake check for overlength symbols and truncate if needed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d7970e7e9] 2026-04-22 12:02:15 -0400
Branch: REL_18_STABLE [00c6e0819] 2026-04-22 12:02:15 -0400
Branch: REL_17_STABLE [ea5f0d176] 2026-04-22 12:02:15 -0400
Branch: REL_16_STABLE [42383d32d] 2026-04-22 12:02:15 -0400
Branch: REL_15_STABLE [0b196d3db] 2026-04-22 12:02:15 -0400
Branch: REL_14_STABLE [21a24d709] 2026-04-22 12:02:15 -0400
Branch: master [844bb90d4] 2026-04-22 10:47:56 -0400
Branch: REL_18_STABLE [c2bfeb3bb] 2026-04-22 11:04:35 -0400
Branch: REL_17_STABLE [a5426dbf8] 2026-04-22 11:05:51 -0400
Branch: REL_16_STABLE [17f72e037] 2026-04-22 11:06:47 -0400
Branch: REL_15_STABLE [f852c9093] 2026-04-22 11:09:02 -0400
Branch: REL_14_STABLE [6cae0c2bd] 2026-04-22 11:09:21 -0400
-->
     <para>
      Prevent buffer overruns when parsing an affix file for
      an <literal>Ispell</literal> dictionary (Tom Lane)
      <ulink url="&commit_baseurl;00c6e0819">&sect;</ulink>
      <ulink url="&commit_baseurl;c2bfeb3bb">&sect;</ulink>
     </para>

     <para>
      A corrupt or malicious affix file could crash the server.
      This is not considered a security issue because text search
      configuration files are presumed trustworthy, but it still seems
      worth fixing.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [8b6c89e37] 2026-04-09 19:28:33 +0900
Branch: REL_18_STABLE [bfc7dff26] 2026-04-09 19:30:37 +0900
Branch: REL_17_STABLE [f8736f8bc] 2026-04-09 19:32:09 +0900
Branch: REL_16_STABLE [0fe032e6a] 2026-04-09 19:34:02 +0900
Branch: REL_15_STABLE [4da71fc37] 2026-04-09 19:35:08 +0900
Branch: REL_14_STABLE [305cf0df0] 2026-04-09 19:36:13 +0900
-->
     <para>
      Guard against integer overflow in calculations of frame start and
      end positions for window aggregates (Richard Guo)
      <ulink url="&commit_baseurl;bfc7dff26">&sect;</ulink>
     </para>

     <para>
      Very large user-specified offsets (close to INT64_MAX) could result
      in errors or incorrect query results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6582010c8] 2026-04-06 13:14:53 -0400
Branch: REL_18_STABLE [14bf2c39e] 2026-04-06 13:14:50 -0400
Branch: REL_17_STABLE [d6c9432cb] 2026-04-06 13:14:50 -0400
Branch: REL_16_STABLE [bb959269e] 2026-04-06 13:14:50 -0400
-->
     <para>
      Fix <function>array_agg_array_combine()</function> to combine the
      arrays' null bitmaps correctly (Dmytro Astapov)
      <ulink url="&commit_baseurl;14bf2c39e">&sect;</ulink>
     </para>

     <para>
      This mistake resulted in sometimes-incorrect output from
      parallelized <function>array_agg(anyarray)</function> calculations.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5941e7f09] 2026-04-30 18:44:38 +0900
Branch: REL_18_STABLE [6cb307251] 2026-04-30 18:44:41 +0900
Branch: REL_17_STABLE [5499be332] 2026-04-30 18:44:43 +0900
Branch: REL_16_STABLE [3b35c10a4] 2026-04-30 18:44:45 +0900
-->
     <para>
      Retry <function>sync_file_range()</function> if it returns error
      code <literal>EINTR</literal> (DaeMyung Kang)
      <ulink url="&commit_baseurl;6cb307251">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [80156cee0] 2026-04-11 17:02:52 +0900
Branch: REL_18_STABLE [b081c5b07] 2026-04-11 17:03:04 +0900
Branch: REL_17_STABLE [a4fefb3e0] 2026-04-11 17:03:06 +0900
Branch: REL_16_STABLE [c7cdcbd3e] 2026-04-11 17:03:08 +0900
Branch: REL_15_STABLE [c6d3f0585] 2026-04-11 17:03:10 +0900
-->
     <para>
      Fix incorrect behavior
      of <function>pg_stat_reset_single_table_counters()</function> on a
      shared catalog (Chao Li)
      <ulink url="&commit_baseurl;b081c5b07">&sect;</ulink>
     </para>

     <para>
      Such cases had a side-effect of resetting the
      current database's <literal>stat_reset_timestamp</literal>, which
      was unintended.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [090c4297e] 2026-04-20 10:31:11 +0530
Branch: REL_18_STABLE [44c8dc280] 2026-04-20 10:23:22 +0530
Branch: REL_17_STABLE [88d7fdcc9] 2026-04-20 10:17:47 +0530
Branch: REL_16_STABLE [d052f6c7d] 2026-04-20 10:13:55 +0530
-->
     <para>
      Update activity statistics when a parallel apply worker is idle
      (Zhijie Hou)
      <ulink url="&commit_baseurl;44c8dc280">&sect;</ulink>
     </para>

     <para>
      Previously, statistics from a recently-completed transaction might
      go unreported for long intervals, particularly if the workload is
      light.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [77d0e82e5] 2026-04-11 16:38:47 +0900
Branch: REL_18_STABLE [13e20d1c9] 2026-04-11 16:40:34 +0900
Branch: REL_17_STABLE [93ed18720] 2026-04-11 16:41:58 +0900
-->
     <para>
      Fix <quote>no relation entry for relid 0</quote> failure while
      estimating array lengths in set operations (Tender Wang)
      <ulink url="&commit_baseurl;13e20d1c9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [2b5ba2a0a] 2026-04-10 07:13:08 -0400
Branch: REL_18_STABLE [c3e436b1c] 2026-04-10 10:28:00 -0400
Branch: REL_17_STABLE [c05c3baf1] 2026-04-10 10:27:43 -0400
Branch: REL_16_STABLE [e630f65d0] 2026-04-10 10:27:16 -0400
Branch: REL_15_STABLE [c88ad3a21] 2026-04-10 10:26:50 -0400
Branch: REL_14_STABLE [de32a01e7] 2026-04-10 10:22:48 -0400
-->
     <para>
      Fix buffer overread when <function>pglz_decompress()</function>
      receives corrupt input (Andrew Dunstan)
      <ulink url="&commit_baseurl;c3e436b1c">&sect;</ulink>
     </para>

     <para>
      It was possible to read a few bytes past the end of the input, which
      in very unlucky cases might cause a crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [2478bd5db] 2026-04-10 07:13:08 -0400
Branch: REL_18_STABLE [3e4955630] 2026-04-10 10:21:38 -0400
Branch: REL_17_STABLE [2e373785e] 2026-04-10 10:21:39 -0400
-->
     <para>
      Fix incremental JSON parser's handling of numeric tokens that cross
      input buffer boundaries (Andrew Dunstan)
      <ulink url="&commit_baseurl;3e4955630">&sect;</ulink>
     </para>

     <para>
      It was possible to accept an incorrectly-formatted number, leading
      to failures later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [ffc226ab6] 2026-03-09 06:45:32 -0400
Branch: REL_18_STABLE [9540c0e5d] 2026-03-09 06:46:20 -0400
Branch: REL_17_STABLE [076bc57fa] 2026-03-09 06:55:10 -0400
-->
     <para>
      Prevent bloating relation visibility maps during restore of an
      incremental backup (Robert Haas)
      <ulink url="&commit_baseurl;9540c0e5d">&sect;</ulink>
     </para>

     <para>
      Restore could append many blocks of zeroes to a visibility map, due
      to incorrect computation of the expected file length.  This does not
      result in data corruption, but it could waste a substantial amount
      of disk space.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [dbf217c1c] 2026-04-22 10:22:44 -0700
Branch: REL_18_STABLE [03c4f243e] 2026-04-22 10:23:44 -0700
Branch: REL_17_STABLE [9dda30dd3] 2026-04-22 10:23:54 -0700
-->
     <para>
      Use C collation, not the database's default collation, in catalog
      cache lookups on text columns (Jeff Davis)
      <ulink url="&commit_baseurl;03c4f243e">&sect;</ulink>
     </para>

     <para>
      This avoids failures in edge cases such as physical replication
      startup, where there is no identified database so that a default
      collation cannot be determined.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [db93032a7] 2026-04-08 11:22:21 +0900
Branch: REL_18_STABLE [58c1188a3] 2026-04-08 11:23:13 +0900
Branch: REL_17_STABLE [15910b1c3] 2026-04-08 11:24:00 +0900
Branch: REL_18_STABLE [acf49bfed] 2026-04-09 15:25:40 +0900
Branch: REL_17_STABLE [586f4266f] 2026-04-09 15:30:59 +0900
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [1362bc33e] 2025-12-11 03:49:28 +0000
Branch: REL_18_STABLE [94efd308b] 2026-04-08 11:19:31 +0900
Branch: REL_17_STABLE [4bed04d39] 2026-04-08 11:21:14 +0900
-->
     <para>
      Prevent stuck slotsync worker processes from blocking promotion of a
      standby server (Nisha Moond, Ajin Cherian)
      <ulink url="&commit_baseurl;58c1188a3">&sect;</ulink>
      <ulink url="&commit_baseurl;acf49bfed">&sect;</ulink>
      <ulink url="&commit_baseurl;94efd308b">&sect;</ulink>
     </para>

     <para>
      A worker process that was vainly waiting for a response from the
      primary would delay promotion for an unreasonable amount of time.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [85c17f612] 2026-04-13 10:06:50 +0530
Branch: REL_18_STABLE [540fe8fb5] 2026-04-13 09:42:51 +0530
Branch: REL_17_STABLE [91741b7cb] 2026-04-13 09:21:34 +0530
-->
     <para>
      Fix excessive log output from idle slotsync worker processes
      (Zhijie Hou)
      <ulink url="&commit_baseurl;540fe8fb5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [739477345] 2026-03-30 13:59:58 -0400
Branch: REL_18_STABLE [adb7873bb] 2026-03-30 13:59:54 -0400
Branch: REL_17_STABLE [1f5b6a5e5] 2026-03-30 13:59:54 -0400
Branch: REL_16_STABLE [59c139d53] 2026-03-30 13:59:54 -0400
Branch: REL_15_STABLE [811f3263a] 2026-03-30 13:59:54 -0400
Branch: REL_14_STABLE [7cd23aad2] 2026-03-30 13:59:54 -0400
-->
     <para>
      Ensure that tuplestore data structures are internally consistent
      even after an error (Tom Lane)
      <ulink url="&commit_baseurl;adb7873bb">&sect;</ulink>
     </para>

     <para>
      The code was previously careless about this, which is fine most of
      the time but is problematic for the tuplestore backing
      a <literal>WITH HOLD</literal> cursor.  In v15 and before this
      leads to easily-reproducible crashes; later branches are not known
      to be vulnerable, but it seems best to preserve consistency in all.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [93b76db0a] 2026-03-23 18:13:56 +0900
Branch: REL_18_STABLE [882bdcf9f] 2026-03-23 18:14:28 +0900
-->
     <para>
      Make the <structname>pg_aios</structname> system
      view's <structfield>pid</structfield> column show NULL not
      0 when an entry has no owning process (ChangAo Chen)
      <ulink url="&commit_baseurl;882bdcf9f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [eef1ba704] 2026-03-26 20:49:31 +0900
Branch: REL_18_STABLE [98e96e579] 2026-03-26 20:50:22 +0900
Branch: REL_17_STABLE [fdce5de55] 2026-03-26 20:50:27 +0900
Branch: REL_16_STABLE [f42105001] 2026-03-26 20:50:33 +0900
Branch: REL_15_STABLE [246c296f0] 2026-03-26 20:50:38 +0900
Branch: REL_14_STABLE [bf7ecf353] 2026-03-26 20:50:43 +0900
-->
     <para>
      Fix premature NULL lag reporting
      in <structname>pg_stat_replication</structname> (Shinya Kato)
      <ulink url="&commit_baseurl;98e96e579">&sect;</ulink>
     </para>

     <para>
      The lag columns frequently read as NULL even while replication
      activity was happening.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [748d871b7] 2026-04-29 11:22:23 -0400
Branch: REL_18_STABLE [1e71970d2] 2026-04-29 11:22:21 -0400
-->
     <para>
      Fix under-allocation of shared memory used for parallel btree index
      scans (Siddharth Kothari)
      <ulink url="&commit_baseurl;1e71970d2">&sect;</ulink>
     </para>

     <para>
      In edge cases this could result in a server crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [b1f14c967] 2026-03-13 23:25:24 +0100
Branch: REL_18_STABLE [5b3f63a1b] 2026-03-13 23:26:02 +0100
Branch: REL_17_STABLE [6ef36bb35] 2026-03-13 23:26:15 +0100
Branch: REL_16_STABLE [4f4025eac] 2026-03-13 23:26:25 +0100
Branch: REL_15_STABLE [ce06b5740] 2026-03-13 23:26:36 +0100
Branch: REL_14_STABLE [c0ffc725f] 2026-03-13 23:26:49 +0100
-->
     <para>
      Avoid rare flush failure when working with non-WAL-logged GiST
      indexes (Tomas Vondra)
      <ulink url="&commit_baseurl;5b3f63a1b">&sect;</ulink>
     </para>

     <para>
      A non-logged GiST index could nonetheless sometimes
      produce <quote>xlog flush request <replaceable>n/nnnn</replaceable>
      is not satisfied</quote> errors, due to incorrect selection of
      a <quote>fake LSN</quote> to represent an insertion point.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [4da2afd01] 2026-03-09 13:46:27 +0900
Branch: REL_18_STABLE [a0f38604d] 2026-03-09 13:46:31 +0900
Branch: REL_17_STABLE [2543b9ea9] 2026-03-09 13:46:33 +0900
Branch: REL_16_STABLE [0af5e64e9] 2026-03-09 13:46:35 +0900
Branch: REL_15_STABLE [46c93b705] 2026-03-09 13:46:37 +0900
Branch: REL_14_STABLE [eb11d7a91] 2026-03-09 13:46:38 +0900
-->
     <para>
      Fix underestimate of required size of DSA page maps for odd-size
      segments (Paul Bunn)
      <ulink url="&commit_baseurl;a0f38604d">&sect;</ulink>
     </para>

     <para>
      This miscalculation led to out-of-bounds accesses and hence server
      crashes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [ccae90abd] 2026-03-02 19:19:22 +0200
Branch: REL_18_STABLE [0a50ef094] 2026-03-02 19:19:26 +0200
Branch: REL_17_STABLE [dcd9c06a4] 2026-03-02 19:19:29 +0200
Branch: master [fe08113ae] 2026-03-04 11:29:02 +0200
Branch: REL_18_STABLE [fa3b328e6] 2026-03-04 11:30:03 +0200
Branch: REL_17_STABLE [969576dab] 2026-03-04 11:30:06 +0200
-->
     <para>
      Fix indexing of oldest-multixact arrays in shared memory
      (Yura Sokolov)
      <ulink url="&commit_baseurl;0a50ef094">&sect;</ulink>
      <ulink url="&commit_baseurl;fa3b328e6">&sect;</ulink>
     </para>

     <para>
      This mistake could cause a prepared-but-not-yet-committed
      transaction's row locks to appear invisible to other sessions, or
      other visibility issues for the results of such a transaction.
      With a very small max_connections setting, memory stomps were also
      possible.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [f7dc17aa9] 2026-03-02 13:14:15 +0900
Branch: REL_18_STABLE [730c98d03] 2026-03-02 13:14:18 +0900
-->
     <para>
      Fix array overrun when too many <command>EXPLAIN</command> extension
      options are installed (Joel Jacobson)
      <ulink url="&commit_baseurl;730c98d03">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3b7a6fa15] 2026-03-02 09:38:37 +0900
Branch: REL_18_STABLE [83671c0da] 2026-03-02 09:38:40 +0900
Branch: REL_17_STABLE [530b6b02f] 2026-03-02 09:38:42 +0900
Branch: REL_16_STABLE [04745ba9c] 2026-03-02 09:38:44 +0900
Branch: REL_15_STABLE [f033abc6c] 2026-03-02 09:38:46 +0900
Branch: REL_14_STABLE [038c7d4a3] 2026-03-02 09:38:47 +0900
-->
     <para>
      Fix possible server crash when processing extended statistics on
      expressions of extension data types (Michael Paquier)
      <ulink url="&commit_baseurl;83671c0da">&sect;</ulink>
     </para>

     <para>
      NULL pointer dereferences were possible if the data type's
      typanalyze function does not compute any useful statistics.
      No in-core typanalyze function behaves that way, but extensions
      could.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [98616ac18] 2026-02-27 12:54:02 -0500
Branch: REL_18_STABLE [c2c1962a6] 2026-02-27 12:54:02 -0500
-->
     <para>
      Correctly display join alias Vars that are used in <literal>GROUP
      BY</literal> (Tom Lane)
      <ulink url="&commit_baseurl;c2c1962a6">&sect;</ulink>
     </para>

     <para>
      In views containing queries like <literal>SELECT ... t1 LEFT JOIN t2
      USING (x) GROUP BY x</literal>, the <literal>GROUP BY</literal>
      clause could be displayed incorrectly by deparsing, leading to
      dump/restore failures.  Failures occurred only
      if <literal>t1.x</literal> and <literal>t2.x</literal> were not of
      identical data types and <literal>t1.x</literal> was the side that
      required an implicit coercion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [d942511f0] 2026-02-26 12:15:01 -0800
Branch: REL_18_STABLE [4abf63c62] 2026-02-26 12:15:15 -0800
Branch: REL_17_STABLE [4761f2eee] 2026-02-26 12:15:23 -0800
Branch: REL_16_STABLE [a4515c9b4] 2026-02-26 12:15:31 -0800
-->
     <para>
      Fix minor memory leaks in ICU-based string processing (Jeff Davis)
      <ulink url="&commit_baseurl;4abf63c62">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9b43e6793] 2026-04-21 09:39:59 +0900
Branch: REL_18_STABLE [affdb2dd5] 2026-04-21 09:40:03 +0900
Branch: REL_17_STABLE [e381843cf] 2026-04-21 09:40:04 +0900
Branch: REL_16_STABLE [2d347f2cd] 2026-04-21 09:40:06 +0900
Branch: REL_15_STABLE [23cebf672] 2026-04-21 09:40:07 +0900
-->
     <para>
      If the startup process fails, properly shut down other child
      processes before exiting the postmaster (Ayush Tiwari)
      <ulink url="&commit_baseurl;affdb2dd5">&sect;</ulink>
     </para>

     <para>
      The handling of this situation relied on a long-obsolete assumption
      that no other postmaster children exist while the startup process is
      running, so that immediate postmaster exit is acceptable.
      Orphaned children would eventually notice the postmaster's death and
      exit on their own, but a cleaner shutdown procedure is desirable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_18_STABLE [0852643e1] 2026-03-23 11:53:32 +0200
Branch: REL_17_STABLE [1ca385032] 2026-03-23 11:59:07 +0200
Branch: REL_16_STABLE [77dff5d93] 2026-03-23 12:02:27 +0200
Branch: REL_15_STABLE [a5f412107] 2026-03-23 12:02:35 +0200
Branch: REL_14_STABLE [e35e466f6] 2026-03-23 12:03:30 +0200
-->
     <para>
      Fix race condition between WAL replay of checkpoints and multixact
      ID creations (Heikki Linnakangas)
      <ulink url="&commit_baseurl;0852643e1">&sect;</ulink>
     </para>

     <para>
      A standby server following WAL from a primary of an older minor
      version could get into a crash-and-restart loop complaining
      about <quote>could not access status of transaction</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [6eedb2a5f] 2026-03-06 16:43:40 +0900
Branch: REL_18_STABLE [3eb2fecdb] 2026-03-06 16:44:40 +0900
Branch: REL_17_STABLE [bbbc0888b] 2026-03-06 16:44:45 +0900
Branch: REL_16_STABLE [82935467a] 2026-03-06 16:44:51 +0900
Branch: REL_15_STABLE [42734f296] 2026-03-06 16:44:59 +0900
Branch: REL_14_STABLE [3bf6f22ce] 2026-03-06 16:45:05 +0900
Branch: master [d927b4bd9] 2026-03-17 08:10:20 +0900
Branch: REL_18_STABLE [980498138] 2026-03-17 08:12:25 +0900
Branch: REL_17_STABLE [8ee536c89] 2026-03-17 08:12:32 +0900
Branch: REL_16_STABLE [da21ecf57] 2026-03-17 08:12:37 +0900
Branch: REL_15_STABLE [fa9f2e317] 2026-03-17 08:12:41 +0900
Branch: REL_14_STABLE [f15471464] 2026-03-17 08:12:46 +0900
-->
     <para>
      Prevent indefinite wait in shutdown of a walsender process
      (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;3eb2fecdb">&sect;</ulink>
      <ulink url="&commit_baseurl;980498138">&sect;</ulink>
     </para>

     <para>
      At shutdown of a cluster that is publishing logical replication
      data, the walsender waits for all pending WAL to be written out.
      But it did not correctly request that to happen, so that in some
      cases this could become an indefinite wait.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [c06d1a4ba] 2026-05-03 20:23:50 +0300
Branch: REL_18_STABLE [ac3b97db3] 2026-05-03 20:27:36 +0300
Branch: REL_17_STABLE [1cf010f21] 2026-05-03 20:27:33 +0300
Branch: REL_16_STABLE [54537de35] 2026-05-03 20:27:02 +0300
Branch: REL_15_STABLE [ca259b084] 2026-05-03 20:26:55 +0300
Branch: REL_14_STABLE [f5d1038d9] 2026-05-03 20:26:07 +0300
-->
     <para>
      Ensure that changes to tables' free space maps are persisted during
      recovery (Alexey Makhmutov)
      <ulink url="&commit_baseurl;ac3b97db3">&sect;</ulink>
     </para>

     <para>
      Previously, while WAL replay did update the free space map while
      replaying operations that should change it, the map page buffer did
      not get marked dirty if checksums are enabled, so that the changes
      might never get written out.  On a standby server, over time this
      would result in a map wildly at variance with the table's actual
      contents.  While the map is only used as a hint, this condition
      could cause significant performance degradation for some period of
      time after the standby server is promoted to be active, until most
      of the map has been repaired by updates.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [c34a280c8] 2026-05-01 15:12:28 -0400
Branch: REL_18_STABLE [e2688ea5e] 2026-05-01 15:15:15 -0400
Branch: REL_17_STABLE [5d67549d9] 2026-05-01 15:15:23 -0400
Branch: REL_16_STABLE [7e4c871f4] 2026-05-01 15:15:33 -0400
Branch: REL_15_STABLE [6916f4410] 2026-05-01 15:16:02 -0400
Branch: REL_14_STABLE [f0e3f9732] 2026-05-01 15:16:42 -0400
-->
     <para>
      Fix crashes in some <application>ecpg</application> functions when
      called without any established connection (Shruthi Gowda)
      <ulink url="&commit_baseurl;e2688ea5e">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [bc30c704a] 2026-04-02 12:20:36 -0400
Branch: REL_18_STABLE [698eae7db] 2026-04-02 12:20:26 -0400
-->
     <para>
      Harden tar-file parsing logic against archives it can't handle
      (Tom Lane)
      <ulink url="&commit_baseurl;698eae7db">&sect;</ulink>
     </para>

     <para>
      The tar-file reading code used
      in <application>pg_basebackup</application>
      and <application>pg_verifybackup</application> failed to verify that
      the input is a tar file at all, let alone that it fits into the
      subset of valid tar files that we can handle.  This isn't a problem
      for the normal scenario where the input file was generated
      by <productname>PostgreSQL</productname> code, but it can be an
      issue if the input has been generated by some
      other <application>tar</application> program.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [01d58d7e3] 2026-03-29 09:01:47 -0400
Branch: REL_18_STABLE [5095f3f4a] 2026-03-29 09:02:15 -0400
Branch: REL_17_STABLE [f1298a4c2] 2026-03-29 09:11:37 -0400
Branch: REL_16_STABLE [1590723f0] 2026-03-29 09:12:28 -0400
Branch: REL_15_STABLE [d3bb7841b] 2026-03-29 09:12:40 -0400
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ac0accafd] 2026-03-05 14:43:21 -0500
Branch: REL_18_STABLE [a01a592b1] 2026-03-05 14:43:21 -0500
Branch: REL_17_STABLE [8b198b093] 2026-03-05 14:43:21 -0500
Branch: REL_16_STABLE [cce939c71] 2026-03-05 14:43:21 -0500
Branch: REL_15_STABLE [9a42888a3] 2026-03-05 14:43:21 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c70f6dc6b] 2026-03-04 12:08:37 -0500
Branch: REL_18_STABLE [78dc9a808] 2026-03-04 12:08:37 -0500
Branch: REL_17_STABLE [2640c5ba7] 2026-03-04 12:08:37 -0500
Branch: REL_16_STABLE [415cc943f] 2026-03-04 12:08:37 -0500
Branch: REL_15_STABLE [4548e8746] 2026-03-04 12:08:37 -0500
-->
     <para>
      Fix assorted bugs in backup decompression and tar-parsing code
      (Andrew Dunstan, Tom Lane, Chao Li)
      <ulink url="&commit_baseurl;5095f3f4a">&sect;</ulink>
      <ulink url="&commit_baseurl;a01a592b1">&sect;</ulink>
      <ulink url="&commit_baseurl;78dc9a808">&sect;</ulink>
     </para>

     <para>
      The decompression and tar-file reading code used
      in <application>pg_basebackup</application>
      and <application>pg_verifybackup</application> mishandled tar-file
      padding data, could corrupt LZ4-compressed data in edge cases,
      failed to check for some unusual error conditions, failed to exit
      after compression/decompression errors (leading to cascading error
      reports), and leaked memory.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [d0833fdae] 2026-02-26 11:50:26 +0100
Branch: REL_18_STABLE [c3c8b63d7] 2026-02-26 11:50:26 +0100
-->
     <para>
      In <application>pg_dump</application>, preserve <literal>NO
      INHERIT</literal> property of <literal>NOT NULL</literal>
      constraints (Jian He)
      <ulink url="&commit_baseurl;c3c8b63d7">&sect;</ulink>
     </para>

     <para>
      Some cases missed printing the <literal>NO INHERIT</literal> clause.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [74b4438a7] 2026-03-02 11:15:10 -0500
Branch: REL_18_STABLE [b09158cc7] 2026-03-02 11:14:58 -0500
Branch: REL_17_STABLE [1cd783d20] 2026-03-02 11:14:58 -0500
Branch: REL_16_STABLE [a4649c50a] 2026-03-02 11:14:58 -0500
-->
     <para>
      In <application>pg_dumpall</application>, don't skip
      role <literal>GRANT</literal>s with dangling grantor OIDs
      (Tom Lane)
      <ulink url="&commit_baseurl;b09158cc7">&sect;</ulink>
     </para>

     <para>
      Instead, handle such cases by emitting <literal>GRANT</literal>
      without any <literal>GRANTED BY</literal> clause, as we did before
      v16.  This avoids losing the grant in foreseeable cases, since
      pre-v16 servers didn't prevent dropping the grantor role.  Continue
      to emit a warning about the missing grantor, but only if the source
      server is v16 or later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [a60a10338] 2026-02-24 14:01:37 -0800
Branch: REL_18_STABLE [1b2773179] 2026-02-24 14:01:41 -0800
Branch: REL_17_STABLE [ad7fc3f1f] 2026-02-24 14:01:46 -0800
Branch: REL_16_STABLE [a38ed212f] 2026-02-24 14:01:51 -0800
Branch: REL_15_STABLE [e726620d2] 2026-02-24 14:01:54 -0800
Branch: REL_14_STABLE [c47744ede] 2026-02-24 14:01:58 -0800
-->
     <para>
      In <application>pg_upgrade</application>, take care to use the
      correct protocol version when connecting to older source servers
      (Jacob Champion)
      <ulink url="&commit_baseurl;1b2773179">&sect;</ulink>
     </para>

     <para>
      This could be problematic when attempting to upgrade from a pre-2018
      server.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [cc774c543] 2026-03-02 13:12:25 -0600
Branch: REL_18_STABLE [bde9ad315] 2026-03-02 13:12:25 -0600
Branch: REL_17_STABLE [f510577de] 2026-03-02 13:12:25 -0600
Branch: REL_16_STABLE [28c2b7896] 2026-03-02 13:12:25 -0600
Branch: REL_15_STABLE [8fc45ac5d] 2026-03-02 13:12:25 -0600
-->
     <para>
      In <filename>contrib/basic_archive</filename>, allow the archive
      directory to be missing at startup (Nathan Bossart)
      <ulink url="&commit_baseurl;bde9ad315">&sect;</ulink>
     </para>

     <para>
      Previously, the setting
      of <literal>basic_archive.archive_directory</literal> was rejected
      if it didn't point to an existing directory.  This is undesirable
      because archiving will be stuck indefinitely, even if the directory
      appears later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [c8308a984] 2026-02-26 12:23:22 -0800
Branch: REL_18_STABLE [b3c2a3d38] 2026-02-26 12:23:51 -0800
Branch: REL_18_STABLE [53a57cae1] 2026-02-26 15:19:31 -0800
Branch: REL_17_STABLE [d1bd9a7dc] 2026-02-26 12:24:12 -0800
Branch: REL_16_STABLE [3ed2c7ef7] 2026-02-26 12:25:00 -0800
Branch: REL_15_STABLE [2b993167f] 2026-02-26 12:26:13 -0800
Branch: REL_14_STABLE [058710d41] 2026-02-26 12:26:32 -0800
-->
     <para>
      Fix <filename>contrib/ltree</filename> to cope when case-folding
      changes a string's byte length (Jeff Davis)
      <ulink url="&commit_baseurl;b3c2a3d38">&sect;</ulink>
      <ulink url="&commit_baseurl;53a57cae1">&sect;</ulink>
     </para>

     <para>
      Previously, <type>lquery</type> patterns specifying case-insensitive
      matching might fail to match labels they should match.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [059cf7f58] 2026-04-16 13:47:07 +0900
Branch: REL_18_STABLE [6723d462d] 2026-04-16 13:49:39 +0900
-->
     <para>
      Fix mis-structured output
      from <filename>contrib/pg_overexplain</filename>'s
      <literal>RANGE_TABLE</literal> option (Satyanarayana Narlapuram)
      <ulink url="&commit_baseurl;6723d462d">&sect;</ulink>
     </para>

     <para>
      Some fields were misplaced in JSON, YAML, and XML formats, resulting
      in structurally invalid output.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [3c74cb576] 2026-03-27 12:25:10 +0200
Branch: REL_18_STABLE [25b02320e] 2026-03-27 12:21:29 +0200
Branch: REL_17_STABLE [351e59f34] 2026-03-27 12:21:38 +0200
Branch: REL_16_STABLE [52edaf9d9] 2026-03-27 12:21:48 +0200
Branch: REL_15_STABLE [92cf11171] 2026-03-27 12:22:21 +0200
Branch: REL_14_STABLE [a6d03067f] 2026-03-27 12:23:38 +0200
-->
     <para>
      In <filename>contrib/pg_stat_statements</filename>, don't leak
      memory if an error occurs while parsing the
      <filename>pgss_query_texts.stat</filename> file (Heikki Linnakangas)
      <ulink url="&commit_baseurl;25b02320e">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [648818ba3] 2026-05-05 18:55:00 +0900
Branch: REL_18_STABLE [c318777da] 2026-05-05 18:55:02 +0900
Branch: REL_17_STABLE [af8f9248f] 2026-05-05 18:55:03 +0900
Branch: REL_16_STABLE [1352651c2] 2026-05-05 18:55:04 +0900
Branch: REL_15_STABLE [34c18a225] 2026-05-05 18:55:05 +0900
Branch: REL_14_STABLE [fd5b36ab1] 2026-05-05 18:55:06 +0900
-->
     <para>
      In <filename>contrib/postgres_fdw</filename>, avoid crash due to
      premature cleanup of a failed connection (Etsuro Fujita)
      <ulink url="&commit_baseurl;c318777da">&sect;</ulink>
     </para>

     <para>
      If a remote connection fails abort cleanup, we can't use it any
      longer.  But delay closing the connection object until end of
      transaction, because there might still be references to it within
      data structures such as open cursors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f64f62f5b] 2026-04-24 12:28:35 -0400
Branch: REL_18_STABLE [8a431b6d6] 2026-04-24 12:28:35 -0400
Branch: REL_17_STABLE [4c0eab6f0] 2026-04-24 12:28:35 -0400
Branch: REL_16_STABLE [0465c999e] 2026-04-24 12:28:35 -0400
Branch: REL_15_STABLE [e28fc73d5] 2026-04-24 12:28:35 -0400
Branch: REL_14_STABLE [affd929c9] 2026-04-24 12:28:35 -0400
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2026b (Tom Lane)
      <ulink url="&commit_baseurl;8a431b6d6">&sect;</ulink>
     </para>

     <para>
      British Columbia (America/Vancouver) will be on year-round UTC-07
      (effectively, permanent DST) beginning in November 2026.  This
      release assumes that their TZ abbreviation will
      be <literal>MST</literal> from that time forward.  That seems likely
      to change, but it's unclear what new abbreviation will be used.
      Also a historical correction for Moldova: they have followed EU DST
      transition times since 2022.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-18-3">
  <title>Release 18.3</title>

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

  <para>
   This release contains a small number of fixes from 18.2.
   For information about new features in major release 18, see
   <xref linkend="release-18"/>.
  </para>

  <sect2 id="release-18-3-migration">
   <title>Migration to Version 18.3</title>

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

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_18_STABLE [817f74600] 2026-02-16 17:16:59 +0200
Branch: REL_17_STABLE [4a36c89f1] 2026-02-16 17:18:17 +0200
Branch: REL_16_STABLE [23064542f] 2026-02-16 17:20:29 +0200
Branch: REL_15_STABLE [899de38d8] 2026-02-16 17:20:51 +0200
Branch: REL_14_STABLE [547a8aaa7] 2026-02-16 17:20:56 +0200
-->
     <para>
      Fix failure after replaying a multixid truncation record from WAL
      that was generated by an older minor version (Heikki Linnakangas)
      <ulink url="&commit_baseurl;817f74600">&sect;</ulink>
     </para>

     <para>
      Erroneous logic for coping with the way that previous versions
      handled multixid wraparound led to replay failure, with messages
      like <quote>could not access status of transaction</quote>.
      A typical scenario in which this could occur is a standby server of
      the latest minor version consuming WAL from a primary server of an
      older version.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [9f4fd119b] 2026-02-14 12:16:16 -0800
Branch: REL_18_STABLE [6e045e1a6] 2026-02-14 12:16:19 -0800
Branch: REL_17_STABLE [5d5232bc3] 2026-02-14 12:16:20 -0800
Branch: REL_16_STABLE [bdfb37228] 2026-02-14 12:16:20 -0800
Branch: REL_15_STABLE [a20eb248c] 2026-02-14 12:16:21 -0800
Branch: REL_14_STABLE [14b1fd617] 2026-02-14 12:16:21 -0800
Branch: master [8cef93d8a] 2026-02-16 18:04:58 -0800
Branch: REL_18_STABLE [d04b34d68] 2026-02-16 18:05:01 -0800
Branch: REL_17_STABLE [50d361f62] 2026-02-16 18:05:02 -0800
Branch: REL_16_STABLE [2280ab354] 2026-02-16 18:05:02 -0800
Branch: REL_15_STABLE [ec86152e0] 2026-02-16 18:05:02 -0800
Branch: REL_14_STABLE [a0769e74d] 2026-02-16 18:05:03 -0800
Branch: master [4644f8b23] 2026-02-14 12:16:16 -0800
Branch: REL_18_STABLE [4174e41b9] 2026-02-14 12:16:19 -0800
Branch: REL_17_STABLE [8e73530f1] 2026-02-14 12:16:20 -0800
Branch: REL_16_STABLE [45eb47230] 2026-02-14 12:16:20 -0800
Branch: REL_15_STABLE [5b305ebcc] 2026-02-14 12:16:20 -0800
Branch: REL_14_STABLE [44fc85bbf] 2026-02-14 12:16:21 -0800
-->
     <para>
      Avoid incorrect complaint of invalid encoding
      when <function>substring()</function> is applied
      to <quote>toasted</quote> data (Noah Misch)
      <ulink url="&commit_baseurl;6e045e1a6">&sect;</ulink>
      <ulink url="&commit_baseurl;d04b34d68">&sect;</ulink>
      <ulink url="&commit_baseurl;4174e41b9">&sect;</ulink>
     </para>

     <para>
      The fix for CVE-2026-2006 was too aggressive and could raise an
      error about an incomplete character in cases that are actually
      valid.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [18bcdb75d] 2026-02-20 11:56:42 +0200
Branch: REL_18_STABLE [041e02e6a] 2026-02-20 11:56:50 +0200
-->
     <para>
      Fix oversight in the fix for CVE-2026-2007 (Zsolt Parragi)
      <ulink url="&commit_baseurl;041e02e6a">&sect;</ulink>
     </para>

     <para>
      If the <quote>bounds</quote> array needed to be expanded, because
      the input contained more trigrams than the initial guess,
      <function>generate_trgm_only</function> didn't return the modified
      array pointer to its caller.  That would lead to incorrect output
      from <function>strict_word_similarity()</function> and related
      functions, or in rare cases a crash.  The faulty code is reached if
      the input string becomes longer when it's converted to lower case.
      The only known instances of that occur when an ICU locale is used
      with certain single-byte encodings.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [759b03b24] 2026-02-18 14:14:44 -0500
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: REL_18_STABLE [2f6ee7b38] 2026-02-18 10:31:03 -0500
-->
     <para>
      Fix the volatility marking
      of <function>json_strip_nulls()</function>
      and <function>jsonb_strip_nulls()</function> (Andrew Dunstan)
      <ulink url="&commit_baseurl;2f6ee7b38">&sect;</ulink>
     </para>

     <para>
      These functions have always been considered immutable, but
      refactoring in version 18 accidentally marked them stable instead.
      That prevents their use in index expressions and could cause
      unnecessary repeat evaluations in queries.  This fix corrects the
      marking in newly-initialized database clusters (including clusters
      that are <application>pg_upgrade</application>'d to 18.3 or later).
      However it will not help existing clusters made using 18.0 through
      18.2.
     </para>

     <para>
      If this mistake affects your usage of these functions, the
      recommended fix for an existing cluster is a manual catalog update.
      As superuser, perform
<programlisting>
UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');
</programlisting>
      in each affected database.  Update <literal>template0</literal>
      and <literal>template1</literal> as well, so that databases made in
      future will have the fix.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [691977d37] 2026-02-20 17:57:53 +0900
Branch: REL_18_STABLE [ed57c207c] 2026-02-20 18:00:02 +0900
Branch: REL_17_STABLE [bcaf1b510] 2026-02-20 18:01:56 +0900
Branch: REL_16_STABLE [ec20a4552] 2026-02-20 18:04:26 +0900
-->
     <para>
      Fix computation of the set of potentially-nulling outer joins for
      the output of a <literal>LATERAL UNION ALL</literal> subquery
      (Richard Guo)
      <ulink url="&commit_baseurl;ed57c207c">&sect;</ulink>
     </para>

     <para>
      This error could lead to skipping <literal>NOT NULL</literal> tests
      in the mistaken belief that they were unnecessary, resulting in
      wrong query output.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [0eeffd31b] 2026-02-21 12:22:08 +0100
Branch: REL_18_STABLE [8d9a97e0b] 2026-02-21 12:22:08 +0100
-->
     <para>
      Avoid name collisions between user-written constraints and
      automatically-named <literal>NOT NULL</literal> constraints
      (Laurenz Albe)
      <ulink url="&commit_baseurl;8d9a97e0b">&sect;</ulink>
     </para>

     <para>
      As of version 18, <literal>NOT NULL</literal> constraints have
      full-fledged <structname>pg_constraint</structname> entries, and
      therefore require names.  The logic for choosing a name for an
      unnamed <literal>NOT NULL</literal> constraint failed to avoid
      conflicts with user-written constraints elsewhere in the
      same <command>CREATE TABLE</command> statement.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [78a5e3074] 2026-02-11 18:50:57 +0200
Branch: REL_18_STABLE [53463b4b2] 2026-02-11 18:51:06 +0200
Branch: REL_17_STABLE [842473337] 2026-02-11 18:51:12 +0200
Branch: REL_16_STABLE [2332911ae] 2026-02-11 18:51:19 +0200
Branch: REL_15_STABLE [ebc53ca7b] 2026-02-11 18:51:25 +0200
Branch: REL_14_STABLE [82b495cdd] 2026-02-11 18:51:32 +0200
-->
     <para>
      Fix <function>pg_stat_get_backend_wait_event()</function>
      and <function>pg_stat_get_backend_wait_event_type()</function>
      to report values for auxiliary processes (Heikki Linnakangas)
      <ulink url="&commit_baseurl;53463b4b2">&sect;</ulink>
     </para>

     <para>
      Previously these functions returned NULL for auxiliary processes,
      but that's inconsistent with
      the <structname>pg_stat_activity</structname> view.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9863c9075] 2026-02-11 16:53:14 -0500
Branch: REL_18_STABLE [ce4b7e3a1] 2026-02-11 16:53:14 -0500
Branch: REL_17_STABLE [dfd850980] 2026-02-11 16:53:14 -0500
Branch: REL_16_STABLE [c66f4cff1] 2026-02-11 16:53:14 -0500
Branch: REL_15_STABLE [254b15cbf] 2026-02-11 16:53:14 -0500
Branch: REL_14_STABLE [2b93d3820] 2026-02-11 16:53:14 -0500
-->
     <para>
      Fix casting a composite-type variable to a domain type when
      returning its value from a PL/pgSQL function (Tom Lane)
      <ulink url="&commit_baseurl;ce4b7e3a1">&sect;</ulink>
     </para>

     <para>
      If the variable's value is NULL, a <quote>cache lookup failed for
      type 0</quote> error resulted.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a6f823e77] 2026-02-17 08:41:26 +0900
Branch: REL_18_STABLE [4a0843c53] 2026-02-17 08:41:30 +0900
Branch: REL_17_STABLE [0dfbe42da] 2026-02-17 08:41:32 +0900
Branch: REL_16_STABLE [31d0b917d] 2026-02-17 08:41:34 +0900
Branch: REL_15_STABLE [63c05e03b] 2026-02-17 08:41:35 +0900
Branch: REL_14_STABLE [f604cc695] 2026-02-17 08:41:37 +0900
-->
     <para>
      Fix potential null pointer dereference
      in <filename>contrib/hstore</filename>'s binary input function
      (Michael Paquier)
      <ulink url="&commit_baseurl;4a0843c53">&sect;</ulink>
     </para>

     <para>
      <type>hstore</type>'s receive function crashed on input containing
      duplicate keys.  <type>hstore</type> values generated by Postgres
      would never contain duplicate keys, so this mistake has gone
      unnoticed.  The crash could be provoked by malicious or corrupted
      data.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-18-2">
  <title>Release 18.2</title>

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

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

  <sect2 id="release-18-2-migration">
   <title>Migration to Version 18.2</title>

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

   <para>
    However, if you have any indexes on <type>ltree</type> columns, it may
    be necessary to reindex them after updating.  See the sixth changelog
    entry below.
   </para>
  </sect2>

  <sect2 id="release-18-2-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;3b6588cd9">&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;66ddac698">&sect;</ulink>
      <ulink url="&commit_baseurl;b69af3dda">&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;209f387b8">&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;df0852fe0">&sect;</ulink>
      <ulink url="&commit_baseurl;efef05ba9">&sect;</ulink>
      <ulink url="&commit_baseurl;7b5fc85be">&sect;</ulink>
      <ulink url="&commit_baseurl;b0f5d25bc">&sect;</ulink>
      <ulink url="&commit_baseurl;b42709194">&sect;</ulink>
      <ulink url="&commit_baseurl;4543b02af">&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: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [00896ddaf] 2026-02-09 12:08:58 +1300
Branch: REL_18_STABLE [e0965fb1a] 2026-02-09 12:12:24 +1300
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [54598670f] 2026-02-09 12:08:58 +1300
Branch: REL_18_STABLE [18548681d] 2026-02-09 12:12:18 +1300
-->
     <para>
      Harden <filename>contrib/pg_trgm</filename> against changes in
      string lowercasing behavior (Heikki Linnakangas)
      <ulink url="&commit_baseurl;e0965fb1a">&sect;</ulink>
      <ulink url="&commit_baseurl;18548681d">&sect;</ulink>
     </para>

     <para>
      Fix potential buffer overruns arising from the fact that in some
      locales lower-casing a string can produce more characters (not
      bytes) than were in the original.  That behavior is new in version
      18, and so is the bug.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Heikki Linnakangas for reporting this problem.
      (CVE-2026-2007)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [7f007e4a0] 2025-12-16 12:57:00 -0800
Branch: REL_18_STABLE [806555e30] 2025-12-16 12:57:12 -0800
Branch: REL_18_STABLE [8993bf099] 2026-01-27 08:16:07 -0800
-->
     <para>
      Fix inconsistent case-insensitive matching
      in <filename>contrib/ltree</filename> (Jeff Davis)
      <ulink url="&commit_baseurl;806555e30">&sect;</ulink>
      <ulink url="&commit_baseurl;8993bf099">&sect;</ulink>
     </para>

     <para>
      Index-related routines in <filename>ltree</filename> used a
      different implementation of case-folding than the primary operators
      did.  Their behavior was equivalent only if the default collation
      provider was libc and the encoding was single-byte.
     </para>

     <para>
      To fix, change the code to use case-folding with the database's
      default collation.
      This change will require reindexing indexes on <type>ltree</type>
      columns (regardless of the index access method) unless the database
      uses libc as collation provider and its encoding is single-byte.
      Without that, searches of such indexes will fail to locate relevant
      entries.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [96e2af605] 2026-02-03 12:33:29 +0100
Branch: REL_18_STABLE [492a69e14] 2026-02-03 12:33:29 +0100
-->
     <para>
      When using <command>ALTER TABLE ... ADD CONSTRAINT</command> to add
      a not-null constraint with an explicit name, if the column is
      already marked NOT NULL, require that the provided name match the
      existing constraint name (Álvaro Herrera, Srinath Reddy Sadipiralla)
      <ulink url="&commit_baseurl;492a69e14">&sect;</ulink>
     </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;12bc32917">&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;c6ce4dcf9">&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 [889676a0d] 2026-01-16 14:53:50 +0900
Branch: REL_18_STABLE [f335457e8] 2026-01-16 14:53:32 +0900
-->
     <para>
      Fix incorrect pruning of rowmarks belonging to non-relation
      rangetable entries, such as subqueries (Dean Rasheed)
      <ulink url="&commit_baseurl;f335457e8">&sect;</ulink>
     </para>

     <para>
      This led to incorrect results if a proposed row update needed to be
      modified by EvalPlanQual rechecking, as could happen if there was a
      concurrent update to that row.
     </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;9f4b7bfc5">&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: Andres Freund <andres@anarazel.de>
Branch: master [75609fded] 2026-01-06 19:51:10 -0500
Branch: REL_18_STABLE [bdc5dedfc] 2026-01-06 19:51:19 -0500
-->
     <para>
      Fix expression evaluation bug for a sub-select within an array
      subscript (Andres Freund)
      <ulink url="&commit_baseurl;bdc5dedfc">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6dfce8420] 2025-12-05 20:10:33 -0500
Branch: REL_18_STABLE [18b349315] 2025-12-05 20:10:33 -0500
-->
     <para>
      Fix text substring search for non-deterministic collations
      (Laurenz Albe)
      <ulink url="&commit_baseurl;18b349315">&sect;</ulink>
     </para>

     <para>
      When using a non-deterministic collation, we failed to detect a
      match occurring at the very end of the searched string.
     </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;ccde5be68">&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: Richard Guo <rguo@postgresql.org>
Branch: master [325808cac] 2025-12-25 12:12:52 +0900
Branch: REL_18_STABLE [382ce9cb7] 2025-12-25 12:15:09 +0900
-->
     <para>
      Fix planner error with set-returning functions and grouping sets
      (Richard Guo)
      <ulink url="&commit_baseurl;382ce9cb7">&sect;</ulink>
     </para>

     <para>
      When constructing a ProjectSet plan node, the planner failed to
      detect that subexpressions involving grouping expressions were
      already computed by the input plan.  This led to inefficient plans
      or errors such as <quote>variable not found in subplan target
      list</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [34740b90b] 2026-01-19 11:13:23 +0900
Branch: REL_18_STABLE [7650eabb6] 2026-01-19 11:14:51 +0900
-->
     <para>
      Avoid incorrect optimization when a subquery's grouping clause
      contains a volatile or set-returning function (Richard Guo)
      <ulink url="&commit_baseurl;7650eabb6">&sect;</ulink>
     </para>

     <para>
      The planner was willing to push down outer-query restrictions
      referencing such a grouping column, leading to incorrect behavior
      due to multiple evaluation of a volatile function, or errors caused
      by introduction of a set-returning function into the
      subquery's <literal>WHERE</literal>/<literal>HAVING</literal>
      clauses.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [559f9e90d] 2025-12-29 11:40:45 +0900
Branch: REL_18_STABLE [7e9f852a7] 2025-12-29 11:44:14 +0900
-->
     <para>
      Look through PlaceHolderVar nodes when searching for statistics
      about an expression (Richard Guo)
      <ulink url="&commit_baseurl;7e9f852a7">&sect;</ulink>
     </para>

     <para>
      This change allows the planner to find relevant statistics about
      expressions pulled up from subqueries or used in <literal>GROUP
      BY</literal>, avoiding falling back to a default estimate.
      (Arguably we should adjust any found statistics to account for an
      increased probability of the value being NULL, but we've never done
      the equivalent thing for plain Vars either.)  While this restriction
      is old, changes in <productname>PostgreSQL</productname> version 18
      made PlaceHolderVars more common than before, so make the change to
      avoid plan regressions in affected cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [ad66f705f] 2025-12-29 11:38:49 +0900
Branch: REL_18_STABLE [b4cf74420] 2025-12-29 11:43:06 +0900
-->
     <para>
      Look through no-op PlaceHolderVar nodes when matching expressions to
      indexes (Richard Guo)
      <ulink url="&commit_baseurl;b4cf74420">&sect;</ulink>
     </para>

     <para>
      Because <productname>PostgreSQL</productname> version 18 uses
      PlaceHolderVars in more cases than before, some queries that
      formerly could use an index failed to do so.  Add logic to prevent
      that regression.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ed931377a] 2025-11-17 13:54:52 -0500
Branch: REL_18_STABLE [bf5b13a8a] 2025-11-17 13:55:26 -0500
-->
     <para>
      Fix planner's conversion of <literal>OR</literal> clauses to
      ScalarArrayOp index conditions (Tender Wang, Tom Lane)
      <ulink url="&commit_baseurl;bf5b13a8a">&sect;</ulink>
     </para>

     <para>
      The code did not handle RelabelType nodes correctly, and could
      generate invalid expressions or fail to perform a valid conversion.
     </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;a212877dc">&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;d77a5f981">&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: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [db14dcdec] 2026-01-26 20:05:17 +0100
Branch: REL_18_STABLE [eee71a66c] 2026-01-26 20:05:00 +0100
-->
     <para>
      Use the correct ordering function in parallel GIN index builds
      (Tomas Vondra)
      <ulink url="&commit_baseurl;eee71a66c">&sect;</ulink>
     </para>

     <para>
      The parallel code used the default ordering operator (which is
      determined by the column data type's btree opclass), whereas it
      should use the ordering function specified by the GIN opclass, if
      any.  This led to a failure if the data type has no btree opclass,
      or to an invalid index if the opclass specifies an ordering function
      that doesn't agree with the btree opclass.
     </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;321ec5462">&sect;</ulink>
      <ulink url="&commit_baseurl;7b069a187">&sect;</ulink>
      <ulink url="&commit_baseurl;82fa6b78d">&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;aab4a84bb">&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: Michael Paquier <michael@paquier.xyz>
Branch: master [e217dc748] 2026-01-14 08:44:12 +0900
Branch: REL_18_STABLE [9c3caad02] 2026-01-14 08:44:52 +0900
-->
     <para>
      Consider grouping expressions when computing a query ID hash
      (Jian He)
      <ulink url="&commit_baseurl;9c3caad02">&sect;</ulink>
     </para>

     <para>
      Previously, two queries that were the same except in <literal>GROUP
      BY</literal> expressions would be merged
      by <filename>contrib/pg_stat_statements</filename> and other users
      of query IDs.
     </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;5749d95d4">&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;3e3a80f62">&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: 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;c80b0c9d6">&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;1943ceb38">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [807764990] 2026-01-15 11:09:07 -0500
Branch: REL_18_STABLE [7f1b3a4ce] 2026-01-15 11:09:49 -0500
-->
     <para>
      Fix race condition in async I/O code (Andres Freund)
      <ulink url="&commit_baseurl;7f1b3a4ce">&sect;</ulink>
     </para>

     <para>
      It was possible for the result code of an asynchronous I/O operation
      to be overwritten before it was fetched.
     </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;09532a78b">&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;06907e864">&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;b863d8d87">&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;57df5ab80">&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;e46041fd9">&sect;</ulink>
      <ulink url="&commit_baseurl;02ba5e3be">&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;b880d9a02">&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;b83bcc0df">&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: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [3fccbd94c] 2026-01-27 00:21:40 +0100
Branch: REL_18_STABLE [9796c4f56] 2026-01-26 23:37:03 +0100
-->
     <para>
      Avoid failure of NUMA status views when a page has been swapped out
      (Tomas Vondra)
      <ulink url="&commit_baseurl;9796c4f56">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [599336c64] 2025-11-20 13:26:49 +0100
Branch: REL_18_STABLE [482e98ac4] 2025-11-20 13:26:14 +0100
-->
     <para>
      Avoid <quote>operation not permitted</quote> errors when querying
      NUMA page status with older libnuma versions (Tomas Vondra)
      <ulink url="&commit_baseurl;482e98ac4">&sect;</ulink>
     </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;68ebdf2b0">&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;bea57a6b4">&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;797fc5d1b">&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;919c9fa13">&sect;</ulink>
      <ulink url="&commit_baseurl;1c60f7236">&sect;</ulink>
      <ulink url="&commit_baseurl;d3ceb2084">&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;fd7c86cfa">&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;b07c32619">&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;2f7ffe124">&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;6c61c69d5">&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;9ed411e08">&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;15ba0702c">&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;c35e5dd9a">&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;acfa422c3">&sect;</ulink>
      <ulink url="&commit_baseurl;2ca4464b6">&sect;</ulink>
      <ulink url="&commit_baseurl;ab61f0087">&sect;</ulink>
      <ulink url="&commit_baseurl;69ee81932">&sect;</ulink>
      <ulink url="&commit_baseurl;cff2ef984">&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;f1c6b153c">&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;912cfa314">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6d969ca68] 2025-11-17 15:24:34 -0500
Branch: REL_18_STABLE [db4eba152] 2025-11-17 15:24:40 -0500
Branch: master [3e83bdd35] 2025-11-18 16:16:46 -0500
Branch: REL_18_STABLE [6a5170755] 2025-11-18 16:16:51 -0500
-->
     <para>
      Fix aarch64-specific code to build with old (RHEL7-era) system
      header files (Tom Lane)
      <ulink url="&commit_baseurl;db4eba152">&sect;</ulink>
      <ulink url="&commit_baseurl;6a5170755">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [85d5bd308] 2025-12-31 11:18:14 -0800
Branch: REL_18_STABLE [640772c6d] 2025-12-31 11:18:17 -0800
-->
     <para>
      Fix incorrect configure probe
      for <function>io_uring_queue_init_mem()</function> (Masahiko Sawada)
      <ulink url="&commit_baseurl;640772c6d">&sect;</ulink>
     </para>

     <para>
      This error resulted in failure to optimize async I/O buffer
      allocations in autotools-based builds, though the code did work when
      building with meson.  The main impact of the omission was
      slower-than-necessary backend process exits.
     </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;33e3de6d7">&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;bebb281b0">&sect;</ulink>
      <ulink url="&commit_baseurl;a7d06e74d">&sect;</ulink>
      <ulink url="&commit_baseurl;4da5c33a3">&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;5eac1d68f">&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;bcfca332f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [c5c808f9b] 2025-12-24 13:55:29 -0800
Branch: REL_18_STABLE [4e1376900] 2025-12-24 13:55:32 -0800
-->
     <para>
      Fix <application>psql</application>'s tab completion
      for <command>VACUUM</command> option values (Yugo Nagata)
      <ulink url="&commit_baseurl;4e1376900">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [4b77282f2] 2026-01-29 16:20:45 +0900
Branch: REL_18_STABLE [d42735b1e] 2026-01-29 16:20:50 +0900
-->
     <para>
      In <application>psql</application> command prompts,
      do not show a value for <literal>%P</literal> (pipeline status) when
      there is no server connection (Chao Li)
      <ulink url="&commit_baseurl;d42735b1e">&sect;</ulink>
     </para>

     <para>
      This makes <literal>%P</literal> act like other prompt escape
      sequences whose values depend on the active connection.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [7a485bd64] 2026-01-09 10:12:54 -0600
Branch: REL_18_STABLE [39d555576] 2026-01-09 10:12:54 -0600
Branch: master [5d1f5079a] 2026-01-11 13:52:50 -0600
Branch: REL_18_STABLE [56e1f5010] 2026-01-11 13:52:50 -0600
-->
     <para>
      Fix <application>pg_dump</application>'s logic for collecting
      sequence values (Nathan Bossart)
      <ulink url="&commit_baseurl;39d555576">&sect;</ulink>
      <ulink url="&commit_baseurl;56e1f5010">&sect;</ulink>
     </para>

     <para>
      <application>pg_dump</application> failed if a sequence was dropped
      concurrently with the dump, even if the sequence was not among the
      database objects to be dumped.  Also, if the calling user lacks
      privileges to read a sequence's
      value, <application>pg_dump</application> emitted incorrect values
      rather than failing as expected.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [ec0da9b89] 2025-12-27 23:05:48 +0100
Branch: REL_18_STABLE [61c78e1f4] 2025-12-27 23:05:48 +0100
-->
     <para>
      Fix potentially-incorrect quoting
      of <varname>oauth_validator_libraries</varname> values
      by <application>pg_dump</application> (ChangAo Chen)
      <ulink url="&commit_baseurl;61c78e1f4">&sect;</ulink>
     </para>

     <para>
      <application>pg_dump</application> applied the wrong quoting rule if
      it needed to dump a value of this setting.
     </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;573e679a2">&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;00e64e35c">&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;19594271c">&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;8747b969f">&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;df93f94dd">&sect;</ulink>
      <ulink url="&commit_baseurl;3c83a2a0a">&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;19e786727">&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;50c63ebb0">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3f83de20b] 2025-12-11 14:11:06 +0900
Branch: REL_18_STABLE [580b5c2f3] 2025-12-11 14:11:25 +0900
-->
     <para>
      Fix excessive memory allocation
      in <filename>contrib/pg_buffercache</filename> (David Geier)
      <ulink url="&commit_baseurl;580b5c2f3">&sect;</ulink>
     </para>

     <para>
      The code allocated twice as much memory as it needed for NUMA
      page status.
     </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;07c1c6ec5">&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;f79e239e0">&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: Michael Paquier <michael@paquier.xyz>
Branch: master [5d95219fa] 2026-01-20 08:11:12 +0900
Branch: REL_18_STABLE [3304e97b1] 2026-01-20 08:11:16 +0900
-->
     <para>
      Avoid crash in <filename>contrib/pg_stat_statements</filename> when
      an <literal>IN</literal> list contains both constants and
      non-constant expressions (Sami Imseih)
      <ulink url="&commit_baseurl;3304e97b1">&sect;</ulink>
     </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;6574bee64">&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-18-1">
  <title>Release 18.1</title>

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

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

  <sect2 id="release-18-1-migration">
   <title>Migration to Version 18.1</title>

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

  <sect2 id="release-18-1-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;00eb646ea">&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;7eb8fcad8">&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;dc9125111">&sect;</ulink>
      <ulink url="&commit_baseurl;1baae827e">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [18d261409] 2025-10-21 12:35:36 +0900
Branch: REL_18_STABLE [40c242830] 2025-10-21 12:38:16 +0900
Branch: REL_18_STABLE [ee49f2cf4] 2025-10-21 14:12:13 +0900
-->
     <para>
      Avoid incorrect optimization of
      variable-free <literal>HAVING</literal> clauses with grouping sets
      (Richard Guo)
      <ulink url="&commit_baseurl;40c242830">&sect;</ulink>
      <ulink url="&commit_baseurl;ee49f2cf4">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [257ee7834] 2025-10-30 11:58:45 +0900
Branch: REL_18_STABLE [ef6168baf] 2025-10-30 12:03:15 +0900
-->
     <para>
      Do not use parallelism in hash right semi joins (Richard Guo)
      <ulink url="&commit_baseurl;ef6168baf">&sect;</ulink>
     </para>

     <para>
      The case does not work reliably due to a race condition in updating
      the join's shared hash table.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [c1777f2d6] 2025-11-05 18:09:21 +0900
Branch: REL_18_STABLE [500f64636] 2025-11-05 18:15:02 +0900
-->
     <para>
      Avoid possible division-by-zero when creating ordered-append plans
      (Richard Guo)
      <ulink url="&commit_baseurl;500f64636">&sect;</ulink>
     </para>

     <para>
      This mistake could result in incorrect selection of the cheapest
      path, or in an assertion failure in debug builds.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [35e53b684] 2025-10-28 10:07:29 +0100
Branch: REL_18_STABLE [74197bdc8] 2025-10-28 10:11:35 +0100
-->
     <para>
      Fix planner failure with index types that can do ordered access but
      not index-only scans (Maxime Schoemans)
      <ulink url="&commit_baseurl;74197bdc8">&sect;</ulink>
     </para>

     <para>
      This oversight resulted in errors like <quote>no data returned for
      index-only scan</quote>.  The case does not arise with any in-core
      index type, but some extensions encountered the problem.
     </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;61de81a49">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [c98dffcb7] 2025-11-04 18:51:17 +0100
Branch: REL_18_STABLE [a26b753a0] 2025-11-04 18:47:14 +0100
-->
     <para>
      Avoid possible out-of-memory or <quote>invalid memory alloc request
      size</quote> failures during parallel GIN index build (Tomas Vondra)
      <ulink url="&commit_baseurl;a26b753a0">&sect;</ulink>
     </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;419ffde23">&sect;</ulink>
      <ulink url="&commit_baseurl;8733f0b54">&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;715983a81">&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;ceb51d09b">&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 [5c0a20003] 2025-10-18 16:07:04 +1300
Branch: REL_18_STABLE [0b6a02f03] 2025-10-18 16:07:41 +1300
-->
     <para>
      Fix rare crash when processing hashed <literal>GROUPING
      SETS</literal> queries (David Rowley)
      <ulink url="&commit_baseurl;0b6a02f03">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [b85c4700f] 2025-10-17 22:21:50 +0200
Branch: REL_18_STABLE [aa151022e] 2025-10-17 22:27:49 +0200
-->
     <para>
      Repair faulty hash-table-size-choosing logic in hash joins
      (Tomas Vondra)
      <ulink url="&commit_baseurl;aa151022e">&sect;</ulink>
     </para>

     <para>
      Hash joins sometimes used more memory than intended, or failed to
      divide it in an efficient way.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [688dc6299] 2025-10-15 12:47:33 -0500
Branch: REL_18_STABLE [c8af5019b] 2025-10-15 12:47:33 -0500
Branch: REL_18_STABLE [15d7dded0] 2025-10-15 13:14:00 -0500
-->
     <para>
      Improve relation lookup logic in statistics manipulation functions
      (Nathan Bossart)
      <ulink url="&commit_baseurl;c8af5019b">&sect;</ulink>
      <ulink url="&commit_baseurl;15d7dded0">&sect;</ulink>
     </para>

     <para>
      Fix <function>pg_restore_relation_stats()</function>,
      <function>pg_clear_relation_stats()</function>,
      <function>pg_restore_attribute_stats()</function>, and
      <function>pg_clear_attribute_stats()</function> to check
      privileges before acquiring lock on the target relation
      rather than after.
     </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;a2387c32f">&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: Amit Langote <amitlan@postgresql.org>
Branch: master [905e932f0] 2025-10-16 14:01:44 +0900
Branch: REL_18_STABLE [1296dcf18] 2025-10-16 14:01:50 +0900
-->
     <para>
      Fix crash during EvalPlanQual rechecks on partitioned tables (David
      Rowley, Amit Langote)
      <ulink url="&commit_baseurl;1296dcf18">&sect;</ulink>
     </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;b14144325">&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;08c037dff">&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;ba99c9491">&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;0f9e0068b">&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: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [cf8be0225] 2025-11-03 15:58:19 +0100
Branch: REL_18_STABLE [d9ffc2729] 2025-11-03 15:58:19 +0100
-->
     <para>
      Prevent setting a column as identity if it has a not-null constraint
      but the constraint is marked as invalid (Jian He)
      <ulink url="&commit_baseurl;d9ffc2729">&sect;</ulink>
     </para>

     <para>
      Identity columns must be not-null, but the check for that missed
      this edge case.
     </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;76613b539">&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;d024160ff">&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: Á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;33e7b4a7c">&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;9670032cc">&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;6ff7ba9fe">&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;b45a8d7d8">&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;9a6ea00ac">&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;37fc5de43">&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;a14201073">&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: 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;32b95fc71">&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;bf3dba508">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [d115de9d8] 2025-11-04 16:48:16 -0800
Branch: REL_18_STABLE [3ebea75f9] 2025-11-04 16:49:00 -0800
-->
     <para>
      Re-establish special case for <literal>C</literal> collation in
      locale setup (Jeff Davis)
      <ulink url="&commit_baseurl;3ebea75f9">&sect;</ulink>
     </para>

     <para>
      This fixes a regression in access to shared catalogs early in
      backend startup, before a database has been selected.  It is not
      known to be a problem for any
      core <productname>PostgreSQL</productname> code, but some extensions
      were broken.
     </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;b48ae226e">&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 [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;6d8acb777">&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;af3a79e08">&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;78a284b0b">&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;447a794f6">&sect;</ulink>
     </para>

     <para>
      This fixes a session-lifespan memory leak introduced in our previous
      minor releases.
     </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;d83879a32">&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;0fe07fa11">&sect;</ulink>
     </para>

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

    <listitem>
<!--
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
      foreign key constraints (Álvaro Herrera)
      <ulink url="&commit_baseurl;162e70ea0">&sect;</ulink>
     </para>

     <para>
      Ensure consistent ordering of these database objects, as was
      already done for other object types.
     </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;8980c724b">&sect;</ulink>
      <ulink url="&commit_baseurl;6a4009747">&sect;</ulink>
      <ulink url="&commit_baseurl;aa1fcd087">&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;c00637b5f">&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;29aabbc43">&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;c736808e0">&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;e2072b47b">&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;71aa2e114">&sect;</ulink>
      <ulink url="&commit_baseurl;0beb7e933">&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;3ccf8e9ac">&sect;</ulink>
      <ulink url="&commit_baseurl;c29d32d27">&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: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [16edc1b94] 2025-10-29 12:35:02 +0100
Branch: REL_18_STABLE [b1635c166] 2025-10-29 12:35:02 +0100
-->
     <para>
      In <filename>contrib/pg_stat_statements</filename>, avoid
      crash when two or more constants are marked as having the same
      location in the SQL statement text (Sami Imseih, Dmitry Dolgov)
      <ulink url="&commit_baseurl;b1635c166">&sect;</ulink>
     </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;fc295beb7">&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;f8ccab0e9">&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: Á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;6aa04a60c">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
   <title>Release date:</title>
   <para>2025-09-25</para>
  </formalpara>

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

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

   <itemizedlist>

    <listitem>
     <para>
      An asynchronous I/O (AIO) subsystem that can improve performance of
      sequential scans, bitmap heap scans, vacuums, and other operations.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="pgupgrade"><application>pg_upgrade</application></link>
      now retains optimizer statistics.
     </para>
    </listitem>

    <listitem>
     <para>
      Support for "skip scan" lookups that allow using
      <link linkend="indexes-multicolumn">multicolumn B-tree indexes</link> in
      more cases.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="func_uuid_gen_table"><function>uuidv7()</function></link>
      function for generating timestamp-ordered
      <link linkend="datatype-uuid">UUIDs</link>.
     </para>
    </listitem>

    <listitem>
     <para>
      Virtual
      <link linkend="sql-createtable-parms-generated-stored">generated columns</link>
      that compute their values during read operations.  This is now the
      default for generated columns.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="auth-oauth">OAuth authentication</link> support.
     </para>
    </listitem>

    <listitem>
     <para>
      <literal>OLD</literal> and <literal>NEW</literal> support for
      <link linkend="dml-returning"><literal>RETURNING</literal></link> clauses
      in <xref linkend="sql-insert"/>, <xref linkend="sql-update"/>,
      <xref linkend="sql-delete"/>, and <xref linkend="sql-merge"/> commands.
     </para>
    </listitem>

    <listitem>
     <para>
      Temporal constraints, or constraints over ranges, for
      <link linkend="sql-createtable-parms-primary-key">PRIMARY KEY</link>,
      <link linkend="sql-createtable-parms-unique">UNIQUE</link>, and
      <link linkend="sql-createtable-parms-references">FOREIGN KEY</link>
      constraints.
     </para>
    </listitem>
   </itemizedlist>

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

  </sect2>

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

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

   <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-16 [04bec894a04] initdb: Change default to using data checksums.
-->

    <listitem>
    <para>
    Change <xref linkend="app-initdb"/> default to enable data checksums
    (Greg Sabino Mullane)
    <ulink url="&commit_baseurl;04bec894a04">&sect;</ulink>
    </para>

    <para>
    Checksums can be disabled with the
    new <application>initdb</application> option
    <option>--no-data-checksums</option>.  <xref linkend="pgupgrade"/>
    requires matching cluster checksum settings, so this new option can
    be useful to upgrade non-checksum old clusters.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-16 [d7674c9fa] Seek zone abbreviations in the IANA data before timezone
-->

    <listitem>
    <para>
    Change time zone abbreviation handling (Tom Lane)
    <ulink url="&commit_baseurl;d7674c9fa">&sect;</ulink>
    </para>

    <para>
    The system will now favor the current session's time
    zone abbreviations before checking the server variable
    <xref linkend="guc-timezone-abbreviations"/>. Previously
    <varname>timezone_abbreviations</varname> was checked first.
    </para>
    </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-12-02 [db6a4a985] Deprecate MD5 passwords.
-->

    <listitem>
    <para>
    Deprecate <link linkend="auth-password">MD5 password</link>
    authentication (Nathan Bossart)
    <ulink url="&commit_baseurl;db6a4a985">&sect;</ulink>
    </para>

    <para>
    Support for MD5 passwords will be removed in a future major
    version release.  <xref linkend="sql-createrole"/> and <xref
    linkend="sql-alterrole"/> now emit deprecation warnings when
    setting MD5 passwords.  These warnings can be disabled by setting
    the <xref linkend="guc-md5-password-warnings"/> parameter to
    <literal>off</literal>.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-09-24 [62ddf7ee9] Add ONLY support for VACUUM and ANALYZE
-->

    <listitem>
    <para>
    Change <xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/>
    to process the inheritance children of a parent (Michael Harris)
    <ulink url="&commit_baseurl;62ddf7ee9">&sect;</ulink>
    </para>

    <para>
    The previous behavior can be performed by using the new
    <literal>ONLY</literal> option.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-30 [770233748] Do not treat \. as an EOF marker in CSV mode for COPY IN
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-10-01 [da8a4c166] Reject a copy EOF marker that has data ahead of it on th
-->

    <listitem>
    <para>
    Prevent <link linkend="sql-copy"><command>COPY FROM</command></link>
    from treating <literal>\.</literal> as an end-of-file marker when
    reading <acronym>CSV</acronym> files (Daniel Vérité, Tom Lane)
    <ulink url="&commit_baseurl;770233748">&sect;</ulink>
    <ulink url="&commit_baseurl;da8a4c166">&sect;</ulink>
    </para>

    <para>
    <xref linkend="app-psql"/> will still treat
    <literal>\.</literal> as an end-of-file marker when reading
    <acronym>CSV</acronym> files from <literal>STDIN</literal>.
    Older <application>psql</application> clients connecting to
    <productname>PostgreSQL</productname> 18 servers might experience <link
    linkend="app-psql-meta-commands-copy"><literal>\copy</literal></link>
    problems.  This release also enforces that <literal>\.</literal>
    must appear alone on a line.
    </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-03 [e2bab2d79] Remove support for unlogged on partitioned tables
-->

    <listitem>
    <para>
    Disallow unlogged partitioned tables (Michael Paquier)
    <ulink url="&commit_baseurl;e2bab2d79">&sect;</ulink>
    </para>

    <para>
    Previously <link linkend="sql-altertable"><command>ALTER TABLE SET
    [UN]LOGGED</command></link> did nothing, and the creation of an
    unlogged partitioned table did not cause its children to be unlogged.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-23 [01463e1cc] Ensure that AFTER triggers run as the instigating user.
-->

    <listitem>
    <para>
    Execute <literal>AFTER</literal> <link
    linkend="triggers">triggers</link> as the role that was active when
    trigger events were queued (Laurenz Albe)
    <ulink url="&commit_baseurl;01463e1cc">&sect;</ulink>
    </para>

    <para>
    Previously such triggers were run as the role that was active at
    trigger execution time (e.g., at <xref linkend="sql-commit"/>).
    This is significant for cases where the role is changed between queue
    time and transaction commit.
    </para>
    </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-12 [fefa76f70] Remove old RULE privilege completely.
-->

    <listitem>
    <para>
    Remove non-functional support for rule privileges in <xref
    linkend="sql-grant"/>/<xref linkend="sql-revoke"/> (Fujii Masao)
    <ulink url="&commit_baseurl;fefa76f70">&sect;</ulink>
    </para>

    <para>
    These have been non-functional since
    <productname>PostgreSQL</productname> 8.2.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-12 [f0d112759] Remove "parent" column from pg_backend_memory_contexts
-->

    <listitem>
    <para>
    Remove column <link
    linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>.<structfield>parent</structfield>
    (Melih Mutlu)
    <ulink url="&commit_baseurl;f0d112759">&sect;</ulink>
    </para>

    <para>
    This is no longer needed since
    <structname>pg_backend_memory_contexts</structname>.<structfield>path</structfield>
    was added.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-25 [32d3ed816] Add path column to pg_backend_memory_contexts view
Author: David Rowley <drowley@postgresql.org>
2025-04-18 [d9e03864b] Make levels 1-based in
    pg_log_backend_memory_contexts()
Author: Fujii Masao <fujii@postgresql.org>
2025-04-21 [706cbed35] doc: Fix memory context level in pg_log_backend_memory_c
-->

    <listitem>
    <para>
    Change
    <structname>pg_backend_memory_contexts</structname>.<structfield>level</structfield>
    and <link
    linkend="functions-admin-signal-table"><function>pg_log_backend_memory_contexts()</function></link>
    to be one-based (Melih Mutlu, Atsushi Torikoshi, David Rowley,
    Fujii Masao)
    <ulink url="&commit_baseurl;32d3ed816">&sect;</ulink>
    <ulink url="&commit_baseurl;d9e03864b">&sect;</ulink>
    <ulink url="&commit_baseurl;706cbed35">&sect;</ulink>
    </para>

    <para>
    These were previously zero-based.
    </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-12-17 [fb1a18810f0] Remove ts_locale.c's lowerstr()
-->

    <listitem>
    <para>
    Change <link linkend="textsearch">full text search</link> to use the
    default collation provider of the cluster to read configuration files
    and dictionaries, rather than always using libc (Peter Eisentraut)
    <ulink url="&commit_baseurl;fb1a18810f0">&sect;</ulink>
    </para>

    <para>
    Clusters that default to non-libc collation providers (e.g., ICU,
    builtin) that behave differently than libc for characters processed
    by LC_CTYPE could observe changes in behavior of some full-text
    search functions, as well as the <xref linkend="pgtrgm"/> extension.
    When upgrading such clusters using <xref linkend="pgupgrade"/>, it
    is recommended to reindex all indexes related to full-text search
    and <application>pg_trgm</application> after the upgrade.
    </para>
    </listitem>

   </itemizedlist>

  </sect2>

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

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

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

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

     <itemizedlist>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-02-17 [fc069a3a6] Implement Self-Join Elimination
-->

      <listitem>
      <para>
      Automatically remove some unnecessary table self-joins (Andrey
      Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina)
      <ulink url="&commit_baseurl;fc069a3a6">&sect;</ulink>
      </para>

      <para>
      This optimization can be disabled using server variable <xref
      linkend="guc-enable-self-join-elimination"/>.
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-04-04 [c0962a113] Convert 'x IN (VALUES ...)' to 'x = ANY ...' then approp
-->

      <listitem>
      <para>
      Convert some <link
      linkend="functions-comparisons-in-scalar"><literal>IN (VALUES
      ...)</literal></link> to <literal>x = ANY ...</literal> for better
      optimizer statistics (Alena Rybakina, Andrei Lepikhov)
      <ulink url="&commit_baseurl;c0962a113">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-11-24 [ae4569161] Teach bitmap path generation about transforming OR-claus
-->

      <listitem>
      <para>
      Allow transforming <link
      linkend="functions-logical"><literal>OR</literal></link>-clauses
      to arrays for faster index processing (Alexander Korotkov, Andrey
      Lepikhov)
      <ulink url="&commit_baseurl;ae4569161">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-10 [52c707483] Use a hash table to de-duplicate column names in ruleuti
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-12-19 [276279295] Convert SetOp to read its inputs as outerPlan and innerP
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-12-19 [8d96f57d5] Improve planner's handling of SetOp plans.
Author: David Rowley <drowley@postgresql.org>
2024-09-05 [908a96861] Optimize WindowAgg's use of tuplestores
-->

      <listitem>
      <para>
      Speed up the processing of <link
      linkend="sql-intersect"><literal>INTERSECT</literal></link>,
      <link linkend="sql-except"><literal>EXCEPT</literal></link>, <link
      linkend="tutorial-window">window aggregates</link>, and <link
      linkend="sql-createview">view column aliases</link> (Tom Lane,
      David Rowley)
      <ulink url="&commit_baseurl;52c707483">&sect;</ulink>
      <ulink url="&commit_baseurl;276279295">&sect;</ulink>
      <ulink url="&commit_baseurl;8d96f57d5">&sect;</ulink>
      <ulink url="&commit_baseurl;908a96861">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-11-26 [a8ccf4e93] Reordering DISTINCT keys to match input path's pathkeys
-->

      <listitem>
      <para>
      Allow the keys of <link linkend="sql-distinct"><command>SELECT
      DISTINCT</command></link> to be internally reordered to avoid sorting
      (Richard Guo)
      <ulink url="&commit_baseurl;a8ccf4e93">&sect;</ulink>
      </para>

      <para>
      This optimization can be disabled using <xref
      linkend="guc-enable-distinct-reordering"/>.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-12 [bd10ec529] Detect redundant GROUP BY columns using UNIQUE indexes
-->

      <listitem>
      <para>
      Ignore <link linkend="sql-groupby"><literal>GROUP BY</literal></link>
      columns that are functionally dependent on other columns (Zhang
      Mingli, Jian He, David Rowley)
      <ulink url="&commit_baseurl;bd10ec529">&sect;</ulink>
      </para>

      <para>
      If a <literal>GROUP BY</literal> clause includes all columns of
      a unique index, as well as other columns of the same table, those
      other columns are redundant and can be dropped from the grouping.
      This was already true for non-deferred primary keys.
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-10-09 [67a54b9e8] Allow pushdown of HAVING clauses with grouping sets
Author: Richard Guo <rguo@postgresql.org>
2024-09-10 [247dea89f] Introduce an RTE for the grouping step
Author: Richard Guo <rguo@postgresql.org>
2024-09-10 [f5050f795] Mark expressions nullable by grouping sets
Author: Richard Guo <rguo@postgresql.org>
2025-03-13 [cc5d98525] Fix incorrect handling of subquery pullup
-->

      <listitem>
      <para>
      Allow some <link
      linkend="sql-having"><literal>HAVING</literal></link> clauses
      on <link linkend="queries-grouping-sets"><literal>GROUPING
      SETS</literal></link> to be pushed to <link
      linkend="sql-where"><literal>WHERE</literal></link> clauses
      (Richard Guo)
      <ulink url="&commit_baseurl;67a54b9e8">&sect;</ulink>
      <ulink url="&commit_baseurl;247dea89f">&sect;</ulink>
      <ulink url="&commit_baseurl;f5050f795">&sect;</ulink>
      <ulink url="&commit_baseurl;cc5d98525">&sect;</ulink>
      </para>

      <para>
      This allows earlier row filtering.  This release also fixes some
      <literal>GROUPING SETS</literal> queries that used to return
      incorrect results.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-09 [036bdcec9] Teach planner how to estimate rows for timestamp generat
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-12-02 [97173536e] Add a planner support function for numeric generate_seri
-->

      <listitem>
      <para>
      Improve row estimates for <link
      linkend="functions-srf-series"><function>generate_series()</function></link>
      using <link linkend="datatype-numeric"><type>numeric</type></link>
      and <link linkend="datatype-datetime"><type>timestamp</type></link>
      values (David Rowley, Song Jinzhou)
      <ulink url="&commit_baseurl;036bdcec9">&sect;</ulink>
      <ulink url="&commit_baseurl;97173536e">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-07-05 [aa86129e1] Support "Right Semi Join" plan shapes
-->

      <listitem>
      <para>
      Allow the optimizer to use <literal>Right Semi Join</literal> plans
      (Richard Guo)
      <ulink url="&commit_baseurl;aa86129e1">&sect;</ulink>
      </para>

      <para>
      Semi-joins are used when needing to find if there is at least
      one match.
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-10-09 [828e94c9d] Consider explicit incremental sort for mergejoins
-->

      <listitem>
      <para>
      Allow merge joins to use <link
      linkend="guc-enable-incremental-sort">incremental sorts</link>
      (Richard Guo)
      <ulink url="&commit_baseurl;828e94c9d">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Langote <amitlan@postgresql.org>
2025-04-04 [88f55bc97] Make derived clause lookup in EquivalenceClass more effi
Author: David Rowley <drowley@postgresql.org>
2025-04-08 [d69d45a5a] Speedup child EquivalenceMember lookup in planner
-->

      <listitem>
      <para>
      Improve the efficiency of planning queries accessing many partitions
      (Ashutosh Bapat, Yuya Watari, David Rowley)
      <ulink url="&commit_baseurl;88f55bc97">&sect;</ulink>
      <ulink url="&commit_baseurl;d69d45a5a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-07-30 [9b282a935] Fix partitionwise join with partially-redundant join cla
Author: Richard Guo <rguo@postgresql.org>
2024-07-29 [513f4472a] Reduce memory used by partitionwise joins
-->

      <listitem>
      <para>
      Allow <link linkend="guc-enable-partitionwise-join">partitionwise
      joins</link> in more cases, and reduce its memory usage (Richard Guo,
      Tom Lane, Ashutosh Bapat)
      <ulink url="&commit_baseurl;9b282a935">&sect;</ulink>
      <ulink url="&commit_baseurl;513f4472a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-03-10 [fae535da0] Teach Append to consider tuple_fraction when accumulatin
-->

      <listitem>
      <para>
      Improve cost estimates of partition queries (Nikita Malakhov,
      Andrei Lepikhov)
      <ulink url="&commit_baseurl;fae535da0">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-02 [0dca5d68d] Change SQL-language functions to use the plan cache.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-17 [09b07c295] Minor performance improvement for SQL-language functions
-->

      <listitem>
      <para>
      Improve <link linkend="xfunc-sql"><acronym>SQL</acronym>-language
      function</link> plan caching (Alexander Pyhalov, Tom Lane)
      <ulink url="&commit_baseurl;0dca5d68d">&sect;</ulink>
      <ulink url="&commit_baseurl;09b07c295">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-08-21 [e22253467] Treat number of disabled nodes in a path as a separate c
-->

      <listitem>
      <para>
      Improve handling of disabled optimizer features (Robert Haas)
      <ulink url="&commit_baseurl;e22253467">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2025-04-04 [92fe23d93] Add nbtree skip scan optimization.
Author: Peter Geoghegan <pg@bowt.ie>
2025-04-04 [8a510275d] Further optimize nbtree search scan key comparisons.
-->

      <listitem>
      <para>
      Allow skip scans of <link linkend="xfunc-sql">btree</link> indexes
      (Peter Geoghegan)
      <ulink url="&commit_baseurl;92fe23d93">&sect;</ulink>
      <ulink url="&commit_baseurl;8a510275d">&sect;</ulink>
      </para>

      <para>
      This allows multi-column btree indexes to be used in more cases such
      as when there are no restrictions on the first or early indexed
      columns (or there are non-equality ones), and there are useful
      restrictions on later indexed columns.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-18 [f278e1fe3] Allow non-btree unique indexes for partition keys
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-18 [9d6db8bec] Allow non-btree unique indexes for matviews
-->

      <listitem>
      <para>
      Allow non-btree unique indexes to be used as partition keys and in
      materialized views (Mark Dilger)
      <ulink url="&commit_baseurl;f278e1fe3">&sect;</ulink>
      <ulink url="&commit_baseurl;9d6db8bec">&sect;</ulink>
      </para>

      <para>
      The index type must still support equality.
      </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-03-03 [8492feb98] Allow parallel CREATE INDEX for GIN indexes
-->

      <listitem>
      <para>
      Allow <link linkend="gin"><literal>GIN</literal></link> indexes to
      be created in parallel (Tomas Vondra, Matthias van de Meent)
      <ulink url="&commit_baseurl;8492feb98">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [e9e7b6604] Add GiST and btree sortsupport routines for range types
-->

      <listitem>
      <para>
      Allow values to be sorted to speed range-type <link
      linkend="gist">GiST</link> and <link linkend="btree">btree</link>
      index builds (Bernd Helmle)
      <ulink url="&commit_baseurl;e9e7b6604">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-03-17 [02844012b] aio: Basic subsystem initialization
Author: Andres Freund <andres@anarazel.de>
2025-03-17 [da7226993] aio: Add core asynchronous I/O infrastructure
Author: Andres Freund <andres@anarazel.de>
2025-03-18 [55b454d0e] aio: Infrastructure for io_method=worker
Author: Andres Freund <andres@anarazel.de>
2025-03-18 [247ce06b8] aio: Add io_method=worker
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-19 [10f664684] Introduce io_max_combine_limit.
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-19 [06fb5612c] Increase io_combine_limit range to 1MB.
Author: Andres Freund <andres@anarazel.de>
2025-03-26 [c325a7633] aio: Add io_method=io_uring
Author: Andres Freund <andres@anarazel.de>
2025-03-29 [50cb7505b] aio: Implement support for reads in smgr/md/fd
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [047cba7fa] bufmgr: Implement AIO read support
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [12ce89fd0] bufmgr: Use AIO in StartReadBuffers()
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [2a5e709e7] Enable IO concurrency on all systems
-->

      <listitem>
      <para>
      Add an asynchronous I/O subsystem (Andres Freund, Thomas Munro,
      Nazir Bilal Yavuz, Melanie Plageman)
      <ulink url="&commit_baseurl;02844012b">&sect;</ulink>
      <ulink url="&commit_baseurl;da7226993">&sect;</ulink>
      <ulink url="&commit_baseurl;55b454d0e">&sect;</ulink>
      <ulink url="&commit_baseurl;247ce06b8">&sect;</ulink>
      <ulink url="&commit_baseurl;10f664684">&sect;</ulink>
      <ulink url="&commit_baseurl;06fb5612c">&sect;</ulink>
      <ulink url="&commit_baseurl;c325a7633">&sect;</ulink>
      <ulink url="&commit_baseurl;50cb7505b">&sect;</ulink>
      <ulink url="&commit_baseurl;047cba7fa">&sect;</ulink>
      <ulink url="&commit_baseurl;12ce89fd0">&sect;</ulink>
      <ulink url="&commit_baseurl;2a5e709e7">&sect;</ulink>
      </para>

      <para>
      This feature allows backends to queue multiple read requests,
      which allows for more efficient sequential scans, bitmap
      heap scans, vacuums, etc.  This is enabled by server
      variable <xref linkend="guc-io-method"/>, with server
      variables <xref linkend="guc-io-combine-limit"/> and <xref
      linkend="guc-io-max-combine-limit"/> added to control it.
      This also enables <xref linkend="guc-effective-io-concurrency"/>
      and <xref linkend="guc-maintenance-io-concurrency"/>
      values greater than zero for systems without
      <function>fadvise()</function> support.  The new system view <link
      linkend="view-pg-aios"><structname>pg_aios</structname></link>
      shows the file handles being used for asynchronous I/O.
      </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-09-21 [c4d5cb71d] Increase the number of fast-path lock slots
-->

      <listitem>
      <para>
      Improve the locking performance of queries that access many relations
      (Tomas Vondra)
      <ulink url="&commit_baseurl;c4d5cb71d">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-20 [adf97c156] Speed up Hash Join by making ExprStates support hashing
Author: David Rowley <drowley@postgresql.org>
2024-12-11 [0f5738202] Use ExprStates for hashing in GROUP BY and SubPlans
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [4d143509c] Create accessor functions for TupleHashEntry.
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [a0942f441] Add ExecCopySlotMinimalTupleExtra().
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [626df47ad] Remove 'additional' pointer from TupleHashEntryData.
-->

      <listitem>
      <para>
      Improve the performance and reduce memory usage of hash joins and
      <link linkend="sql-groupby"><literal>GROUP BY</literal></link>
      (David Rowley, Jeff Davis)
      <ulink url="&commit_baseurl;adf97c156">&sect;</ulink>
      <ulink url="&commit_baseurl;0f5738202">&sect;</ulink>
      <ulink url="&commit_baseurl;4d143509c">&sect;</ulink>
      <ulink url="&commit_baseurl;a0942f441">&sect;</ulink>
      <ulink url="&commit_baseurl;626df47ad">&sect;</ulink>
      </para>

      <para>
      This also improves hash set operations used by <link
      linkend="sql-except"><literal>EXCEPT</literal></link>, and hash
      lookups of subplan values.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-02-11 [052026c9b] Eagerly scan all-visible pages to amortize aggressive va
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-03 [06eae9e62] Trigger more frequent autovacuums with relallfrozen
-->

      <listitem>
      <para>
      Allow normal vacuums to freeze some pages, even though they are
      all-visible (Melanie Plageman)
      <ulink url="&commit_baseurl;052026c9b">&sect;</ulink>
      <ulink url="&commit_baseurl;06eae9e62">&sect;</ulink>
      </para>

      <para>
      This reduces the overhead of later full-relation
      freezing.  The aggressiveness of this can be
      controlled by server variable and per-table setting <xref
      linkend="guc-vacuum-max-eager-freeze-failure-rate"/>.  Previously
      vacuum never processed all-visible pages until freezing was required.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-20 [0164a0f9e] Add vacuum_truncate configuration parameter.
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-vacuum-truncate"/> to control
      file truncation during <xref linkend="sql-vacuum"/> (Nathan Bossart,
      Gurjeet Singh)
      <ulink url="&commit_baseurl;0164a0f9e">&sect;</ulink>
      </para>

      <para>
      A storage-level parameter with the same name and behavior already
      existed.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [ff79b5b2a] Increase default effective_io_concurrency to 16
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-18 [cc6be07eb] Increase default maintenance_io_concurrency to 16
-->

      <listitem>
      <para>
      Increase server variables <xref
      linkend="guc-effective-io-concurrency"/>'s and <xref
      linkend="guc-maintenance-io-concurrency"/>'s default values to 16
      (Melanie Plageman)
      <ulink url="&commit_baseurl;ff79b5b2a">&sect;</ulink>
      <ulink url="&commit_baseurl;cc6be07eb">&sect;</ulink>
      </para>

      <para>
      This more accurately reflects modern hardware.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [9219093ca] Modularize log_connections output
-->

      <listitem>
      <para>
      Increase the logging granularity of server variable <xref
      linkend="guc-log-connections"/> (Melanie Plageman)
      <ulink url="&commit_baseurl;9219093ca">&sect;</ulink>
      </para>

      <para>
      This server variable was previously only boolean, which is still
      supported.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [18cd15e70] Add connection establishment duration logging
-->

      <listitem>
      <para>
      Add <varname>log_connections</varname> option to report the duration
      of connection stages (Melanie Plageman)
      <ulink url="&commit_baseurl;18cd15e70">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-07 [3516ea768] Add local-address escape "%L" to log_line_prefix.
-->

      <listitem>
      <para>
      Add <xref linkend="guc-log-line-prefix"/> escape
      <literal>%L</literal> to output the client <acronym>IP</acronym>
      address (Greg Sabino Mullane)
      <ulink url="&commit_baseurl;3516ea768">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-03-14 [6d376c3b0] Add GUC option to log lock acquisition failures.
Author: Fujii Masao <fujii@postgresql.org>
2025-06-03 [73bdcfab3] Rename log_lock_failure GUC to log_lock_failures for con
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-log-lock-failures"/> to log
      lock acquisition failures (Yuki Seino, Fujii Masao)
      <ulink url="&commit_baseurl;6d376c3b0">&sect;</ulink>
      <ulink url="&commit_baseurl;73bdcfab3">&sect;</ulink>
      </para>

      <para>
      Specifically it reports <link
      linkend="sql-for-update-share"><command>SELECT
      ... NOWAIT</command></link> lock failures.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-01-28 [30a6ed0ce] Track per-relation cumulative time spent in [auto]vacuum
-->

      <listitem>
      <para>
      Modify <link
      linkend="monitoring-pg-stat-all-tables-view"><structname>pg_stat_all_tables</structname></link>
      and its variants to report the time spent in <xref
      linkend="sql-vacuum"/>, <xref linkend="sql-analyze"/>, and their
      <link linkend="autovacuum">automatic</link> variants (Sami Imseih)
      <ulink url="&commit_baseurl;30a6ed0ce">&sect;</ulink>
      </para>

      <para>
      The new columns are <structfield>total_vacuum_time</structfield>,
      <structfield>total_autovacuum_time</structfield>,
      <structfield>total_analyze_time</structfield>, and
      <structfield>total_autoanalyze_time</structfield>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-11 [bb8dff999] Add cost-based vacuum delay time to progress views.
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-14 [7720082ae] Add delay time to VACUUM/ANALYZE (VERBOSE) and autovacuu
-->

      <listitem>
      <para>
      Add delay time reporting to <xref linkend="sql-vacuum"/> and <xref
      linkend="sql-analyze"/> (Bertrand Drouvot, Nathan Bossart)
      <ulink url="&commit_baseurl;bb8dff999">&sect;</ulink>
      <ulink url="&commit_baseurl;7720082ae">&sect;</ulink>
      </para>

      <para>
      This information appears in the server log, the system views <link
      linkend="vacuum-progress-reporting"><structname>pg_stat_progress_vacuum</structname></link>
      and <link
      linkend="pg-stat-progress-analyze-view"><structname>pg_stat_progress_analyze</structname></link>,
      and the output of <xref linkend="sql-vacuum"/> and <xref
      linkend="sql-analyze"/> when in <literal>VERBOSE</literal>
      mode; tracking must be enabled with the server variable <xref
      linkend="guc-track-cost-delay-timing"/>.
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-08-13 [4c1b4cdb8] Add resource statistics reporting to ANALYZE VERBOSE.
Author: Masahiko Sawada <msawada@postgresql.org>
2024-09-09 [bb7775234] Add WAL usage reporting to ANALYZE VERBOSE output.
-->

      <listitem>
      <para>
      Add <acronym>WAL</acronym>, <acronym>CPU</acronym>, and average
      read statistics output to <command>ANALYZE VERBOSE</command>
      (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;4c1b4cdb8">&sect;</ulink>
      <ulink url="&commit_baseurl;bb7775234">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [6a8a7ce47] Add information about WAL buffers full to VACUUM/ANALYZE
-->

      <listitem>
      <para>
      Add full <acronym>WAL</acronym> buffer count to
      <command>VACUUM</command>/<command>ANALYZE (VERBOSE)</command>
      and autovacuum log output (Bertrand Drouvot)
      <ulink url="&commit_baseurl;6a8a7ce47">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-12-19 [9aea73fc6] Add backend-level statistics to pgstats
Author: Michael Paquier <michael@paquier.xyz>
2025-03-03 [3f1db99bf] Handle auxiliary processes in SQL functions of backend s
-->

      <listitem>
      <para>
      Add per-backend I/O statistics reporting (Bertrand Drouvot)
      <ulink url="&commit_baseurl;9aea73fc6">&sect;</ulink>
      <ulink url="&commit_baseurl;3f1db99bf">&sect;</ulink>
      </para>

      <para>
      The statistics are accessed via <link
      linkend="pg-stat-get-backend-io"><function>pg_stat_get_backend_io()</function></link>.
      Per-backend I/O statistics can be cleared via <link
      linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_backend_stats()</function></link>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-01-14 [f92c854cf] Make pg_stat_io count IOs as bytes instead of blocks for
-->

      <listitem>
      <para>
      Add <link
      linkend="monitoring-pg-stat-io-view"><structname>pg_stat_io</structname></link>
      columns to report I/O activity in bytes (Nazir Bilal Yavuz)
      <ulink url="&commit_baseurl;f92c854cf">&sect;</ulink>
      </para>

      <para>
      The new columns are <structfield>read_bytes</structfield>,
      <structfield>write_bytes</structfield>, and
      <structfield>extend_bytes</structfield>.  The
      <structfield>op_bytes</structfield> column, which always equaled
      <link linkend="guc-block-size"><varname>BLCKSZ</varname></link>,
      has been removed.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-04 [a051e71e2] Add data for WAL in pg_stat_io and backend statistics
Author: Michael Paquier <michael@paquier.xyz>
2025-02-20 [4538bd3f1] doc: Add details about object "wal" in pg_stat_io
Author: Michael Paquier <michael@paquier.xyz>
2025-03-06 [7f7f324eb] Add more monitoring data for WAL writes in the WAL recei
-->

      <listitem>
      <para>
      Add <acronym>WAL</acronym> I/O activity rows to
      <structname>pg_stat_io</structname> (Nazir Bilal Yavuz, Bertrand
      Drouvot, Michael Paquier)
      <ulink url="&commit_baseurl;a051e71e2">&sect;</ulink>
      <ulink url="&commit_baseurl;4538bd3f1">&sect;</ulink>
      <ulink url="&commit_baseurl;7f7f324eb">&sect;</ulink>
      </para>

      <para>
      This includes <acronym>WAL</acronym> receiver activity and a wait
      event for such writes.
      </para>

      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-26 [6c349d83b] Re-add GUC track_wal_io_timing
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-track-wal-io-timing"/>
      to control tracking <acronym>WAL</acronym> timing
      in <structname>pg_stat_io</structname> instead of <link
      linkend="pg-stat-wal-view"><structname>pg_stat_wal</structname></link>
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;6c349d83b">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-24 [2421e9a51] Remove read/sync fields from pg_stat_wal and GUC track_w
Author: Michael Paquier <michael@paquier.xyz>
2025-02-26 [6c349d83b] Re-add GUC track_wal_io_timing
-->

      <listitem>
      <para>
      Remove read/sync columns from <structname>pg_stat_wal</structname>
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;2421e9a51">&sect;</ulink>
      <ulink url="&commit_baseurl;6c349d83b">&sect;</ulink>
      </para>

      <para>
      This removes columns <structfield>wal_write</structfield>,
      <structfield>wal_sync</structfield>,
      <structfield>wal_write_time</structfield>, and
      <structfield>wal_sync_time</structfield>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-03-11 [76def4cdd] Add WAL data to backend statistics
-->

      <listitem>
      <para>
      Add function <link
      linkend="pg-stat-get-backend-wal"><function>pg_stat_get_backend_wal()</function></link>
      to return per-backend <acronym>WAL</acronym> statistics (Bertrand
      Drouvot)
      <ulink url="&commit_baseurl;76def4cdd">&sect;</ulink>
      </para>

      <para>
      Per-backend <acronym>WAL</acronym>
      statistics can be cleared via <link
      linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_backend_stats()</function></link>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-10-11 [4e1fad378] Add pg_ls_summariesdir().
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-admin-genfile-table"><function>pg_ls_summariesdir()</function></link>
      to specifically list the contents of <link
      linkend="storage-file-layout"><envar>PGDATA</envar></link>/<link
      linkend="guc-wal-summary-keep-time"><filename>pg_wal/summaries</filename></link>
      (Yushi Ogiwara)
      <ulink url="&commit_baseurl;4e1fad378">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-30 [559efce1d] Add num_done counter to the pg_stat_checkpointer view.
-->

      <listitem>
      <para>
      Add column <link
      linkend="monitoring-pg-stat-checkpointer-view"><structname>pg_stat_checkpointer</structname></link>.<structfield>num_done</structfield>
      to report the number of completed checkpoints (Anton A. Melnikov)
      <ulink url="&commit_baseurl;559efce1d">&sect;</ulink>
      </para>

      <para>
      Columns <structfield>num_timed</structfield> and
      <structfield>num_requested</structfield> count both completed and
      skipped checkpoints.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-02 [17cc5f666] Fix inconsistent reporting of checkpointer stats.
-->

      <listitem>
      <para>
      Add column
      <structname>pg_stat_checkpointer</structname>.<structfield>slru_written</structfield>
      to report <acronym>SLRU</acronym> buffers written (Nitin Jadhav)
      <ulink url="&commit_baseurl;17cc5f666">&sect;</ulink>
      </para>

      <para>
      Also, modify the checkpoint server log message to report separate
      shared buffer and <acronym>SLRU</acronym> buffer values.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-11-11 [e7a9496de] Add two attributes to pg_stat_database for parallel work
-->

      <listitem>
      <para>
      Add columns to <link
      linkend="monitoring-pg-stat-database-view"><structname>pg_stat_database</structname></link>
      to report parallel worker activity (Benoit Lobréau)
      <ulink url="&commit_baseurl;e7a9496de">&sect;</ulink>
      </para>

      <para>
      The new columns are
      <structfield>parallel_workers_to_launch</structfield> and
      <structfield>parallel_workers_launched</structfield>.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-18 [62d712ecf] Introduce squashing of constant lists in query jumbling
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-27 [9fbd53dea] Remove the query_id_squash_values GUC
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master Release: REL_18_BR [c2da1a5d6] 2025-06-24 19:36:32 +0200
-->

      <listitem>
      <para>
      Have <link linkend="guc-compute-query-id">query id</link> computation
      of constant lists consider only the first and last constants (Dmitry
      Dolgov, Sami Imseih)
      <ulink url="&commit_baseurl;62d712ecf">&sect;</ulink>
      <ulink url="&commit_baseurl;9fbd53dea">&sect;</ulink>
      <ulink url="&commit_baseurl;c2da1a5d6">&sect;</ulink>
      </para>

      <para>
      Jumbling is used by <xref linkend="pgstatstatements"/>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-03-26 [787514b30] Use relation name instead of OID in query jumbling for R
-->

      <listitem>
      <para>
      Adjust query id computations to group together queries using the
      same relation name (Michael Paquier, Sami Imseih)
      <ulink url="&commit_baseurl;787514b30">&sect;</ulink>
      </para>

      <para>
      This is true even if the tables in different schemas have different
      column names.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-01 [12227a1d5] Add context type field to pg_backend_memory_contexts
-->

      <listitem>
      <para>
      Add column <link
      linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>.<structfield>type</structfield>
      to report the type of memory context (David Rowley)
      <ulink url="&commit_baseurl;12227a1d5">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-25 [32d3ed816] Add path column to pg_backend_memory_contexts view
-->

      <listitem>
      <para>
      Add column
      <structname>pg_backend_memory_contexts</structname>.<structfield>path</structfield>
      to show memory context parents (Melih Mutlu)
      <ulink url="&commit_baseurl;32d3ed816">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-04 [4564f1ceb] Add pg_get_acl() to get the ACL for a database object
Author: Michael Paquier <michael@paquier.xyz>
2024-07-10 [d898665bf] Extend pg_get_acl() to handle sub-object IDs
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-info-object-table"><function>pg_get_acl()</function></link>
      to retrieve database access control details (Joel Jacobson)
      <ulink url="&commit_baseurl;4564f1ceb">&sect;</ulink>
      <ulink url="&commit_baseurl;d898665bf">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-12 [4eada203a] Add has_largeobject_privilege function.
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-info-access-table"><function>has_largeobject_privilege()</function></link>
      to check large object privileges (Yugo Nagata)
      <ulink url="&commit_baseurl;4eada203a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-04-04 [0d6c47766] Extend ALTER DEFAULT PRIVILEGES to define default privil
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-alterdefaultprivileges"/> to define
      large object default privileges (Takatsuka Haruka, Yugo Nagata,
      Laurenz Albe)
      <ulink url="&commit_baseurl;0d6c47766">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-07-09 [ccd38024b] Introduce pg_signal_autovacuum_worker.
-->

      <listitem>
      <para>
      Add predefined role <link
      linkend="predefined-roles"><literal>pg_signal_autovacuum_worker</literal></link>
      (Kirill Reshke)
      <ulink url="&commit_baseurl;ccd38024b">&sect;</ulink>
      </para>

      <para>
      This allows sending signals to autovacuum workers.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-02-20 [b3f0be788] Add support for OAUTHBEARER SASL mechanism
-->

      <listitem>
      <para>
      Add support for the <link linkend="auth-oauth">OAuth authentication
      method</link> (Jacob Champion, Daniel Gustafsson, Thomas Munro)
      <ulink url="&commit_baseurl;b3f0be788">&sect;</ulink>
      </para>

      <para>
      This adds an <literal>oauth</literal> authentication method to <link
      linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>,
      libpq OAuth options, a server variable <xref
      linkend="guc-oauth-validator-libraries"/> to load
      token validation libraries, and a configure flag <link
      linkend="configure-option-with-libcurl"><option>--with-libcurl</option></link>
      to add the required compile-time libraries.
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [45188c2ea] Support configuring TLSv1.3 cipher suites
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-ssl-tls13-ciphers"/> to allow
      specification of multiple colon-separated TLSv1.3 cipher suites
      (Erica Zhang, Daniel Gustafsson)
      <ulink url="&commit_baseurl;45188c2ea">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-03-18 [daa02c6bd] Add X25519 to the default set of curves
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-ssl-groups"/>'s default
      to include elliptic curve X25519 (Daniel Gustafsson, Jacob Champion)
      <ulink url="&commit_baseurl;daa02c6bd">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [3d1ef3a15] Support configuring multiple ECDH curves
-->

      <listitem>
      <para>
      Rename server variable <varname>ssl_ecdh_curve</varname> to <xref
      linkend="guc-ssl-groups"/> and allow multiple colon-separated
      <acronym>ECDH</acronym> curves to be specified (Erica Zhang,
      Daniel Gustafsson)
      <ulink url="&commit_baseurl;3d1ef3a15">&sect;</ulink>
      </para>

      <para>
      The previous name still works.
      </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [a460251f0] Make cancel request keys longer
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-07-29 [9d9b9d46f] Move cancel key generation to after forking the backend
-->

      <listitem>
      <para>
      Make <link linkend="functions-admin-signal-table">cancel request
      keys</link> 256 bits (Heikki Linnakangas, Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;a460251f0">&sect;</ulink>
      <ulink url="&commit_baseurl;9d9b9d46f">&sect;</ulink>
      </para>

      <para>
      This is only possible when the server and client support wire
      protocol version 3.2, introduced in this release.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-01-06 [c758119e5] Allow changing autovacuum_max_workers without restarting
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-autovacuum-worker-slots"/>
      to specify the maximum number of background workers (Nathan Bossart)
      <ulink url="&commit_baseurl;c758119e5">&sect;</ulink>
      </para>

      <para>
      With this variable set, <xref linkend="guc-autovacuum-max-workers"/>
      can be adjusted at runtime up to this maximum without a server
      restart.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-05 [306dc520b] Introduce autovacuum_vacuum_max_threshold.
-->

      <listitem>
      <para>
      Allow specification of the fixed number of dead tuples that will
      trigger an <link linkend="autovacuum">autovacuum</link> (Nathan
      Bossart, Frédéric Yhuel)
      <ulink url="&commit_baseurl;306dc520b">&sect;</ulink>
      </para>

      <para>
      The server variable is <xref
      linkend="guc-autovacuum-vacuum-max-threshold"/>.  Percentages are
      still used for triggering.
      </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-03-24 [adb5f85fa] Redefine max_files_per_process to control additionally o
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-max-files-per-process"/>
      to limit only files opened by a backend (Andres Freund)
      <ulink url="&commit_baseurl;adb5f85fa">&sect;</ulink>
      </para>

      <para>
      Previously files opened by the postmaster were also counted toward
      this limit.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-07-26 [0dcaea569] Introduce num_os_semaphores GUC.
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-num-os-semaphores"/> to
      report the required number of semaphores (Nathan Bossart)
      <ulink url="&commit_baseurl;0dcaea569">&sect;</ulink>
      </para>

      <para>
      This is useful for operating system configuration.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-19 [4f7f7b037] extension_control_path
Author: Peter Eisentraut <peter@eisentraut.org>
2025-05-02 [81eaaa2c4] Make "directory" setting work with extension_control_pat
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-extension-control-path"/> to
      specify the location of extension control files (Peter Eisentraut,
      Matheus Alcantara)
      <ulink url="&commit_baseurl;4f7f7b037">&sect;</ulink>
      <ulink url="&commit_baseurl;81eaaa2c4">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-02-19 [ac0e33136] Invalidate inactive replication slots.
-->

      <listitem>
      <para>
      Allow inactive replication slots to be automatically invalidated using
      server variable <xref linkend="guc-idle-replication-slot-timeout"/>
      (Nisha Moond, Bharath Rupireddy)
      <ulink url="&commit_baseurl;ac0e33136">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-03-21 [04ff636cb] Add GUC option to control maximum active replication ori
-->

      <listitem>
      <para>
      Add server variable <xref
      linkend="guc-max-active-replication-origins"/> to control the
      maximum active replication origins (Euler Taveira)
      <ulink url="&commit_baseurl;04ff636cb">&sect;</ulink>
      </para>

      <para>
      This was previously controlled by <xref
      linkend="guc-max-replication-slots"/>, but this new setting allows
      a higher origin count in cases where fewer slots are required.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-10-30 [745217a05] Replicate generated columns when specified in the column
Author: Amit Kapila <akapila@postgresql.org>
2024-11-07 [7054186c4] Replicate generated columns when 'publish_generated_colu
Author: Amit Kapila <akapila@postgresql.org>
2024-12-04 [87ce27de6] Ensure stored generated columns must be published when r
Author: Amit Kapila <akapila@postgresql.org>
2025-01-30 [6252b1eaf] Doc: Generated column replication.
-->

      <listitem>
      <para>
      Allow the values of <link
      linkend="sql-createtable-parms-generated-stored">generated
      columns</link> to be logically replicated (Shubham Khanna, Vignesh C,
      Zhijie Hou, Shlok Kyal, Peter Smith)
      <ulink url="&commit_baseurl;745217a05">&sect;</ulink>
      <ulink url="&commit_baseurl;7054186c4">&sect;</ulink>
      <ulink url="&commit_baseurl;87ce27de6">&sect;</ulink>
      <ulink url="&commit_baseurl;6252b1eaf">&sect;</ulink>
      </para>

      <para>
      If the publication specifies a column list, all specified
      columns, generated and non-generated, are published.
      Without a specified column list, publication option
      <literal>publish_generated_columns</literal> controls whether
      generated columns are published. Previously generated columns
      were not replicated and the subscriber had to compute
      the values if possible;  this is particularly useful for
      non-<productname>PostgreSQL</productname> subscribers which lack
      such a capability.
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-10-28 [1bf1140be] Change the default value of the streaming option to 'par
-->

      <listitem>
      <para>
      Change the default <xref linkend="sql-createsubscription"/> streaming
      option from <literal>off</literal> to <literal>parallel</literal>
      (Vignesh C)
      <ulink url="&commit_baseurl;1bf1140be">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-07-24 [1462aad2e] Allow altering of two_phase option of a SUBSCRIPTION.
Author: Amit Kapila <akapila@postgresql.org>
2025-04-03 [4868c96bc] Fix slot synchronization for two_phase enabled slots.
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-altersubscription"/> to change the
      replication slot's two-phase commit behavior (Hayato Kuroda, Ajin
      Cherian, Amit Kapila, Zhijie Hou)
      <ulink url="&commit_baseurl;1462aad2e">&sect;</ulink>
      <ulink url="&commit_baseurl;4868c96bc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-08-20 [9758174e2] Log the conflicts while applying changes in logical repl
Author: Amit Kapila <akapila@postgresql.org>
2024-08-22 [edcb71258] Doc: explain the log format of logical replication confl
Author: Amit Kapila <akapila@postgresql.org>
2024-08-29 [640178c92] Rename the conflict types for the origin differ cases.
Author: Amit Kapila <akapila@postgresql.org>
2024-09-04 [6c2b5edec] Collect statistics about conflicts in logical replicatio
Author: Amit Kapila <akapila@postgresql.org>
2025-03-24 [73eba5004] Detect and Log multiple_unique_conflicts type conflict.
-->

      <listitem>
      <para>
      Log <link linkend="hot-standby-conflict">conflicts</link> while
      applying logical replication changes (Zhijie Hou, Nisha Moond)
      <ulink url="&commit_baseurl;9758174e2">&sect;</ulink>
      <ulink url="&commit_baseurl;edcb71258">&sect;</ulink>
      <ulink url="&commit_baseurl;640178c92">&sect;</ulink>
      <ulink url="&commit_baseurl;6c2b5edec">&sect;</ulink>
      <ulink url="&commit_baseurl;73eba5004">&sect;</ulink>
      </para>

      <para>
      Also report in new columns of <link
      linkend="monitoring-pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link>.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-02-07 [83ea6c540] Virtual generated columns
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-28 [cdc168ad4] Add support for not-null constraints on virtual generate
Author: Richard Guo <rguo@postgresql.org>
2025-02-25 [1e4351af3] Expand virtual generated columns in the planner
-->

     <listitem>
     <para>
     Allow <link linkend="sql-createtable-parms-generated-stored">generated
     columns</link> to be virtual, and make them the default (Peter
     Eisentraut, Jian He, Richard Guo, Dean Rasheed)
     <ulink url="&commit_baseurl;83ea6c540">&sect;</ulink>
     <ulink url="&commit_baseurl;cdc168ad4">&sect;</ulink>
     <ulink url="&commit_baseurl;1e4351af3">&sect;</ulink>
     </para>

     <para>
     Virtual generated columns generate their values when the columns
     are read, not written.  The write behavior can still be specified
     via the <literal>STORED</literal> option.
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-16 [80feb727c] Add OLD/NEW support to RETURNING in DML queries.
-->

     <listitem>
     <para>
     Add <literal>OLD</literal>/<literal>NEW</literal> support to <link
     linkend="dml-returning"><literal>RETURNING</literal></link> in
     <acronym>DML</acronym> queries (Dean Rasheed)
     <ulink url="&commit_baseurl;80feb727c">&sect;</ulink>
     </para>

     <para>
     Previously <literal>RETURNING</literal> only returned new values for
     <xref linkend="sql-insert"/> and <xref linkend="sql-update"/>, and old
     values for <xref linkend="sql-delete"/>; <xref linkend="sql-merge"/>
     would return the appropriate value for the internal query executed.
     This new syntax allows the <literal>RETURNING</literal> list of
     <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>
     to explicitly return old and new values by using the special aliases
     <literal>old</literal> and <literal>new</literal>.  These aliases
     can be renamed to avoid identifier conflicts.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-19 [302cf1575] Add support for LIKE in CREATE FOREIGN TABLE
-->

     <listitem>
     <para>
     Allow foreign tables to be created like existing local tables
     (Zhang Mingli)
     <ulink url="&commit_baseurl;302cf1575">&sect;</ulink>
     </para>

     <para>
     The syntax is <link linkend="sql-createforeigntable"><command>CREATE
     FOREIGN TABLE ... LIKE</command></link>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-11-27 [85b7efa1c] Support LIKE with nondeterministic collations
-->

     <listitem>
     <para>
     Allow <link linkend="functions-like"><literal>LIKE</literal></link>
     with <link linkend="collation-nondeterministic">nondeterministic
     collations</link> (Peter Eisentraut)
     <ulink url="&commit_baseurl;85b7efa1c">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-02-21 [329304c90] Support text position search functions with nondetermini
-->

     <listitem>
     <para>
     Allow text position search functions with nondeterministic collations
     (Peter Eisentraut)
     <ulink url="&commit_baseurl;329304c90">&sect;</ulink>
     </para>

     <para>
     These used to generate an error.
     </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-17 [d3d098316] Support PG_UNICODE_FAST locale in the builtin collation
-->

     <listitem>
     <para>
     Add builtin collation provider <link
     linkend="locale-providers"><literal>PG_UNICODE_FAST</literal></link>
     (Jeff Davis)
     <ulink url="&commit_baseurl;d3d098316">&sect;</ulink>
     </para>

     <para>
     This locale supports case mapping, but sorts in code point order,
     not natural language order.
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-09-24 [62ddf7ee9] Add ONLY support for VACUUM and ANALYZE
-->

     <listitem>
     <para>
     Allow <xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/>
     to process partitioned tables without processing their children
     (Michael Harris)
     <ulink url="&commit_baseurl;62ddf7ee9">&sect;</ulink>
     </para>

     <para>
     This is enabled with the new <literal>ONLY</literal> option.  This is
     useful since autovacuum does not process partitioned tables, just
     its children.
     </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2024-10-11 [e839c8ecc] Create functions pg_set_relation_stats, pg_clear_relatio
Author: Jeff Davis <jdavis@postgresql.org>
2024-10-24 [d32d14639] Add functions pg_restore_relation_stats(), pg_restore_at
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-25 [650ab8aaf] Stats: use schemaname/relname instead of regclass.
-->

     <listitem>
     <para>
     Add functions to modify per-relation and per-column optimizer
     statistics (Corey Huinker)
     <ulink url="&commit_baseurl;e839c8ecc">&sect;</ulink>
     <ulink url="&commit_baseurl;d32d14639">&sect;</ulink>
     <ulink url="&commit_baseurl;650ab8aaf">&sect;</ulink>
     </para>

     <para>
     The functions are <link
     linkend="functions-admin-statsmod"><function>pg_restore_relation_stats()</function></link>,
     <function>pg_restore_attribute_stats()</function>,
     <function>pg_clear_relation_stats()</function>, and
     <function>pg_clear_attribute_stats()</function>.
     </para>
     </listitem>


<!--
Author: Thomas Munro <tmunro@postgresql.org>
2025-04-08 [f78ca6f3e] Introduce file_copy_method setting.
-->

     <listitem>
     <para>
     Add server variable <xref linkend="guc-file-copy-method"/> to control
     the file copying method (Nazir Bilal Yavuz)
     <ulink url="&commit_baseurl;f78ca6f3e">&sect;</ulink>
     </para>

     <para>
     This controls whether <link
     linkend="sql-createdatabase"><command>CREATE DATABASE
     ... STRATEGY=FILE_COPY</command></link> and <link
     linkend="sql-alterdatabase"><command>ALTER DATABASE ... SET
     TABLESPACE</command></link> uses file copy or clone.
     </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-18-constraints">
     <title><link linkend="ddl-constraints">Constraints</link></title>

     <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [fc0438b4e] Add temporal PRIMARY KEY and UNIQUE constraints
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [89f908a6d] Add temporal FOREIGN KEY contraints
-->

      <listitem>
      <para>
      Allow the specification of non-overlapping <link
      linkend="sql-createtable-parms-primary-key"><literal>PRIMARY
      KEY</literal></link>, <link linkend="sql-createtable-parms-unique">
      <literal>UNIQUE</literal></link>, and
      <link linkend="sql-createtable-parms-references">foreign key</link>
      constraints (Paul A. Jungwirth)
      <ulink url="&commit_baseurl;fc0438b4e">&sect;</ulink>
      <ulink url="&commit_baseurl;89f908a6d">&sect;</ulink>
      </para>

      <para>
      This is specified by <literal>WITHOUT OVERLAPS</literal> for
      <literal>PRIMARY KEY</literal> and <literal>UNIQUE</literal>, and by
      <literal>PERIOD</literal> for foreign keys, all applied to the last
      specified column.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-11 [ca87c415e] Add support for NOT ENFORCED in CHECK constraints
Author: Peter Eisentraut <peter@eisentraut.org>
2025-04-02 [eec0040c4] Add support for NOT ENFORCED in foreign key constraints
-->

      <listitem>
      <para>
      Allow <link
      linkend="sql-createtable-parms-check"><literal>CHECK</literal></link>
      and <link linkend="sql-createtable-parms-references">foreign
      key</link> constraints to be specified as <literal>NOT
      ENFORCED</literal> (Amul Sul)
      <ulink url="&commit_baseurl;ca87c415e">&sect;</ulink>
      <ulink url="&commit_baseurl;eec0040c4">&sect;</ulink>
      </para>

      <para>
      This also adds column <link
      linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.<structfield>conenforced</structfield>.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-11-15 [9321d2fdf] Fix collation handling for foreign keys
-->

      <listitem>
      <para>
      Require <link
      linkend="sql-createtable-parms-references">primary/foreign key</link>
      relationships to use either deterministic collations or the the
      same nondeterministic collations (Peter Eisentraut)
      <ulink url="&commit_baseurl;9321d2fdf">&sect;</ulink>
      </para>

      <para>
      The restore of a <xref linkend="app-pgdump"/>, also used by <xref
      linkend="pgupgrade"/>, will fail if these requirements are not met;
      schema changes must be made for these upgrade methods to succeed.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-11-08 [14e87ffa5] Add pg_constraint rows for not-null constraints
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_18_BR [81ce602d4] 2025-06-26 20:25:34 +0900
-->

      <listitem>
      <para>
      Store column <link
      linkend="sql-createtable-parms-not-null"><literal>NOT
      NULL</literal></link> specifications in <link
      linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>
      (Álvaro Herrera, Bernd Helmle)
      <ulink url="&commit_baseurl;14e87ffa5">&sect;</ulink>
      <ulink url="&commit_baseurl;81ce602d4">&sect;</ulink>
      </para>

      <para>
      This allows names to be specified for <literal>NOT NULL</literal>
      constraint.  This also adds <literal>NOT NULL</literal> constraints
      to foreign tables and <literal>NOT NULL</literal> inheritance
      control to local tables.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-04-07 [a379061a2] Allow NOT NULL constraints to be added as NOT VALID
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-altertable"/> to set the <literal>NOT
      VALID</literal> attribute of <literal>NOT NULL</literal> constraints
      (Rushabh Lathia, Jian He)
      <ulink url="&commit_baseurl;a379061a2">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-05 [f4e53e10b] Add ALTER TABLE ... ALTER CONSTRAINT ... SET [NO] INHERI
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-27 [4a02af8b1] Simplify syntax for ALTER TABLE ALTER CONSTRAINT NO INHE
-->

      <listitem>
      <para>
      Allow modification of the inheritability of <literal>NOT
      NULL</literal> constraints (Suraj Kharage, Álvaro Herrera)
      <ulink url="&commit_baseurl;f4e53e10b">&sect;</ulink>
      <ulink url="&commit_baseurl;4a02af8b1">&sect;</ulink>
      </para>

      <para>
      The syntax is <link linkend="sql-altertable"><command>ALTER TABLE
      ... ALTER CONSTRAINT ... [NO] INHERIT</command></link>.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-01-23 [b663b9436] Allow NOT VALID foreign key constraints on partitioned t
-->

      <listitem>
      <para>
      Allow <literal>NOT VALID</literal> foreign key constraints on
      partitioned tables (Amul Sul)
      <ulink url="&commit_baseurl;b663b9436">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-09-30 [4dea33ce7] Don't disallow DROP of constraints ONLY on partitioned t
-->

      <listitem>
      <para>
      Allow <link
      linkend="sql-altertable-desc-drop-constraint">dropping</link>
      of constraints <literal>ONLY</literal> on partitioned tables
      (Álvaro Herrera)
      <ulink url="&commit_baseurl;4dea33ce7">&sect;</ulink>
      </para>

      <para>
      This was previously erroneously prohibited.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

    <sect4 id="release-18-copy">
     <title><xref linkend="sql-copy"/></title>

     <itemizedlist>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-08 [4ac2a9bec] Add REJECT_LIMIT option to the COPY command.
-->

      <listitem>
      <para>
      Add <literal>REJECT_LIMIT</literal> to control the number of invalid
      rows <command>COPY FROM</command> can ignore (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;4ac2a9bec">&sect;</ulink>
      </para>

      <para>
      This is available when <literal>ON_ERROR = 'ignore'</literal>.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-04-04 [534874fac] Allow "COPY table TO" command to copy rows from material
-->

      <listitem>
      <para>
      Allow <command>COPY TO</command> to copy rows from populated
      materialized views (Jian He)
      <ulink url="&commit_baseurl;534874fac">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-03 [e7834a1a2] Add LOG_VERBOSITY = 'silent' support to COPY command.
-->

      <listitem>
      <para>
      Add <command>COPY</command> <literal>LOG_VERBOSITY</literal> level
      <literal>silent</literal> to suppress log output of ignored rows
      (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;e7834a1a2">&sect;</ulink>
      </para>

      <para>
      This new level suppresses output for discarded input rows when
      <literal>on_error = 'ignore'</literal>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-06 [401a6956f] Disallow COPY FREEZE on foreign tables.
-->

      <listitem>
      <para>
      Disallow <command>COPY FREEZE</command> on foreign tables (Nathan
      Bossart)
      <ulink url="&commit_baseurl;401a6956f">&sect;</ulink>
      </para>

      <para>
      Previously, the <command>COPY</command> worked but the
      <literal>FREEZE</literal> was ignored, so disallow this command.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

    <sect4 id="release-18-explain">
     <title><xref linkend="sql-explain"/></title>

     <itemizedlist>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-11 [c2a4078eb] Enable BUFFERS with EXPLAIN ANALYZE by default
-->

      <listitem>
      <para>
      Automatically include <literal>BUFFERS</literal> output in
      <command>EXPLAIN ANALYZE</command> (Guillaume Lelarge, David Rowley)
      <ulink url="&commit_baseurl;c2a4078eb">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [320545bfc] Add information about WAL buffers being full to EXPLAIN
-->

      <listitem>
      <para>
      Add full <acronym>WAL</acronym> buffer count to <command>EXPLAIN
      (WAL)</command> output (Bertrand Drouvot)
      <ulink url="&commit_baseurl;320545bfc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2025-03-11 [0fbceae84] Show index search count in EXPLAIN ANALYZE, take 2.
-->

      <listitem>
      <para>
      In <command>EXPLAIN ANALYZE</command>, report the number of index
      lookups used per index scan node (Peter Geoghegan)
      <ulink url="&commit_baseurl;0fbceae84">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-02-21 [ddb17e387] Allow EXPLAIN to indicate fractional rows.
Author: Robert Haas <rhaas@postgresql.org>
2025-02-27 [95dbd827f] EXPLAIN: Always use two fractional digits for row counts
-->

      <listitem>
      <para>
      Modify <command>EXPLAIN</command> to output fractional row counts
      (Ibrar Ahmed, Ilia Evdokimov, Robert Haas)
      <ulink url="&commit_baseurl;ddb17e387">&sect;</ulink>
      <ulink url="&commit_baseurl;95dbd827f">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-05 [1eff8279d] Add memory/disk usage for Material nodes in EXPLAIN
Author: David Rowley <drowley@postgresql.org>
2024-07-05 [53abb1e0e] Fix newly introduced issue in EXPLAIN for Materialize no
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-09-17 [95d6e9af0] Add memory/disk usage for Window aggregate nodes in EXPL
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-09-23 [40708acd6] Add memory/disk usage for more executor nodes.
-->

      <listitem>
      <para>
      Add memory and disk usage details to <literal>Material</literal>,
      <literal>Window Aggregate</literal>, and common table expression
      nodes to <command>EXPLAIN</command> output (David Rowley, Tatsuo
      Ishii)
      <ulink url="&commit_baseurl;1eff8279d">&sect;</ulink>
      <ulink url="&commit_baseurl;53abb1e0e">&sect;</ulink>
      <ulink url="&commit_baseurl;95d6e9af0">&sect;</ulink>
      <ulink url="&commit_baseurl;40708acd6">&sect;</ulink>
      </para>
      </listitem>


<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-11 [8b1b34254] Improve EXPLAIN's display of window functions.
-->

      <listitem>
      <para>
      Add details about window function arguments to
      <command>EXPLAIN</command> output (Tom Lane)
      <ulink url="&commit_baseurl;8b1b34254">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-09 [5a1e6df3b] Show Parallel Bitmap Heap Scan worker stats in EXPLAIN A
-->

      <listitem>
      <para>
      Add <literal>Parallel Bitmap Heap Scan</literal> worker cache
      statistics to <command>EXPLAIN ANALYZE</command> (David Geier,
      Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley)
      <ulink url="&commit_baseurl;5a1e6df3b">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-08-21 [c01743aa4] Show number of disabled nodes in EXPLAIN ANALYZE output.
Author: David Rowley <drowley@postgresql.org>
2024-10-11 [161320b4b] Adjust EXPLAIN's output for disabled nodes
Author: David Rowley <drowley@postgresql.org>
2024-10-29 [84b8fccbe] Doc: add detail about EXPLAIN's "Disabled" property
-->

      <listitem>
      <para>
      Indicate disabled nodes in <command>EXPLAIN ANALYZE</command> output
      (Robert Haas, David Rowley, Laurenz Albe)
      <ulink url="&commit_baseurl;c01743aa4">&sect;</ulink>
      <ulink url="&commit_baseurl;161320b4b">&sect;</ulink>
      <ulink url="&commit_baseurl;84b8fccbe">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-23 [4e7f62bc3] Add support for Unicode case folding.
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-17 [286a365b9] Support Unicode full case mapping and conversion.
-->

     <listitem>
     <para>
     Improve <link linkend="collation-managing-standard">Unicode</link>
     full case mapping and conversion (Jeff Davis)
     <ulink url="&commit_baseurl;4e7f62bc3">&sect;</ulink>
     <ulink url="&commit_baseurl;286a365b9">&sect;</ulink>
     </para>

     <para>
     This adds the ability to do conditional and title case mapping,
     and case map single characters to multiple characters.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-24 [a5579a90a] Make jsonb casts to scalar types translate JSON null to
-->

     <listitem>
     <para>
     Allow <link linkend="datatype-json"><type>jsonb</type></link>
     <literal>null</literal> values to be cast to scalar types as
     <literal>NULL</literal> (Tom Lane)
     <ulink url="&commit_baseurl;a5579a90a">&sect;</ulink>
     </para>

     <para>
     Previously such casts generated an error.
     </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2025-03-05 [4603903d2] Allow json{b}_strip_nulls() to remove null array elements
-->

     <listitem>
     <para>
     Add optional parameter to <link
     linkend="functions-json-processing-table"><function>json{b}_strip_nulls</function></link>
     to allow removal of null array elements (Florents Tselai)
     <ulink url="&commit_baseurl;4603903d2">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-01 [6c12ae09f] Introduce a SQL-callable function array_sort(anyarray).
-->

     <listitem>
     <para>
     Add function <link
     linkend="array-functions-table"><function>array_sort()</function></link>
     which sorts an array's first dimension (Junwang Zhao, Jian He)
     <ulink url="&commit_baseurl;6c12ae09f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-11-01 [49d6c7d8d] Add SQL function array_reverse()
-->

     <listitem>
     <para>
     Add function <link
     linkend="array-functions-table"><function>array_reverse()</function></link>
     which reverses an array's first dimension (Aleksander Alekseev)
     <ulink url="&commit_baseurl;49d6c7d8d">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-13 [0697b2390] Add reverse(bytea).
-->

     <listitem>
     <para>
     Add function <link
     linkend="functions-string-other"><function>reverse()</function></link>
     to reverse bytea bytes (Aleksander Alekseev)
     <ulink url="&commit_baseurl;0697b2390">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-03-07 [6da469bad] Allow casting between bytea and integer types.
-->

     <listitem>
     <para>
     Allow casting between integer types and <link
     linkend="datatype-binary"><type>bytea</type></link> (Aleksander
     Alekseev)
     <ulink url="&commit_baseurl;6da469bad">&sect;</ulink>
     </para>

     <para>
     The integer values are stored as <type>bytea</type> two's complement
     values.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-04-03 [82a46cca9] Update Unicode data to Unicode 16.0.0
-->

     <listitem>
     <para>
     Update Unicode data to <link
     linkend="collation-managing-standard">Unicode</link> 16.0.0 (Peter
     Eisentraut)
     <ulink url="&commit_baseurl;82a46cca9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-02-18 [b464e51ab] Update to latest Snowball sources.
-->

     <listitem>
     <para>
     Add full text search <link
     linkend="textsearch-snowball-dictionary">stemming</link> for Estonian
     (Tom Lane)
     <ulink url="&commit_baseurl;b464e51ab">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-24 [cd838e200] Neaten up our choices of SQLSTATEs for XML-related error
-->

     <listitem>
     <para>
     Improve the <link linkend="datatype-xml"><type>XML</type></link>
     error codes to more closely match the <acronym>SQL</acronym> standard
     (Tom Lane)
     <ulink url="&commit_baseurl;cd838e200">&sect;</ulink>
     </para>

     <para>
     These errors are reported via <link
     linkend="errcodes-appendix"><literal>SQLSTATE</literal></link>.
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-24 [bfc599206] Add SQL function CASEFOLD().
-->

     <listitem>
     <para>
     Add function <link
     linkend="functions-string-other"><function>casefold()</function></link>
     to allow for more sophisticated case-insensitive matching (Jeff Davis)
     <ulink url="&commit_baseurl;bfc599206">&sect;</ulink>
     </para>

     <para>
     This allows more accurate comparisons, i.e., a character can have
     multiple upper or lower case equivalents, or upper or lower case
     conversion changes the number of characters.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-11 [a0f1fce80] Add min and max aggregates for composite types (records)
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-10-08 [2d24fd942] Add min and max aggregates for bytea type.
-->

     <listitem>
     <para>
     Allow <link
     linkend="functions-aggregate-table"><function>MIN()</function></link>/<link
     linkend="functions-aggregate-table"><function>MAX()</function></link>
     aggregates on arrays and composite types (Aleksander Alekseev,
     Marat Buharov)
     <ulink url="&commit_baseurl;a0f1fce80">&sect;</ulink>
     <ulink url="&commit_baseurl;2d24fd942">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-08-16 [6be39d77a] Fix extraction of week and quarter fields from intervals
-->

     <listitem>
     <para>
     Add a <literal>WEEK</literal> option to <link
     linkend="functions-datetime-extract"><function>EXTRACT()</function></link>
     (Tom Lane)
     <ulink url="&commit_baseurl;6be39d77a">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-08-16 [6be39d77a] Fix extraction of week and quarter fields from intervals
-->

     <listitem>
     <para>
     Improve the output <literal>EXTRACT(QUARTER ...)</literal> for
     negative values (Tom Lane)
     <ulink url="&commit_baseurl;6be39d77a">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-22 [172e6b3ad] Support RN (roman-numeral format) in to_number().
-->

     <listitem>
     <para>
     Add roman numeral support to <link
     linkend="functions-formatting-table"><function>to_number()</function></link>
     (Hunaid Sohail)
     <ulink url="&commit_baseurl;172e6b3ad">&sect;</ulink>
     </para>

     <para>
     This is accessed via the <literal>RN</literal> pattern.
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-12-11 [78c5e141e] Add UUID version 7 generation function.
-->

     <listitem>
     <para>
     Add <link linkend="datatype-uuid"><type>UUID</type></link>
     version 7 generation function <link
     linkend="func_uuid_gen_table"><function>uuidv7()</function></link>
     (Andrey Borodin)
     <ulink url="&commit_baseurl;78c5e141e">&sect;</ulink>
     </para>

     <para>
     This <type>UUID</type> value is
     temporally sortable.  Function alias <link
     linkend="func_uuid_gen_table"><function>uuidv4()</function></link>
     has been added to explicitly generate version 4 UUIDs.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-08-12 [760162fed] Add user-callable CRC functions.
-->

     <listitem>
     <para>
     Add functions <link
     linkend="functions-binarystring-other"><function>crc32()</function></link>
     and <link
     linkend="functions-binarystring-other"><function>crc32c()</function></link>
     to compute <acronym>CRC</acronym> values (Aleksander Alekseev)
     <ulink url="&commit_baseurl;760162fed">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-03-26 [a3b6dfd41] Add support for gamma() and lgamma() functions.
-->

     <listitem>
     <para>
     Add math functions <link
     linkend="functions-math-func-table"><function>gamma()</function></link>
     and <link
     linkend="functions-math-func-table"><function>lgamma()</function></link>
     (Dean Rasheed)
     <ulink url="&commit_baseurl;a3b6dfd41">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-03 [246dedc5d] Allow =&gt; syntax for named cursor arguments in plpgsql.
-->

     <listitem>
     <para>
     Allow <literal>=&gt;</literal> syntax for named cursor arguments in
     <link linkend="plpgsql">PL/pgSQL</link> (Pavel Stehule)
     <ulink url="&commit_baseurl;246dedc5d">&sect;</ulink>
     </para>

     <para>
     We previously only accepted <literal>:=</literal>.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-25 [580f8727c] Add argument names to the regexp_XXX functions.
-->

     <listitem>
     <para>
     Allow <link
     linkend="functions-posix-regexp"><function>regexp_match[es]()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_like()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_replace()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_count()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_instr()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_substr()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_split_to_table()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_split_to_array()</function></link>
     to use named arguments (Jian He)
     <ulink url="&commit_baseurl;580f8727c">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-09-09 [cdb6b0fdb] Add PQfullProtocolVersion() to surface the precise proto
-->

     <listitem>
     <para>
     Add function <link
     linkend="libpq-PQfullProtocolVersion"><function>PQfullProtocolVersion()</function></link>
     to report the full, including minor, protocol version number (Jacob
     Champion, Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;cdb6b0fdb">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [285613c60] libpq: Add min/max_protocol_version connection options
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [507034910] libpq: Handle NegotiateProtocolVersion message different
-->

     <listitem>
     <para>
     Add libpq connection <link
     linkend="libpq-connect-ssl-max-protocol-version">parameters</link>
     and <link linkend="libpq-envars">environment variables</link> to
     specify the minimum and maximum acceptable protocol version for
     connections (Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;285613c60">&sect;</ulink>
     <ulink url="&commit_baseurl;507034910">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-08-19 [28a1121fd] Mark search_path as GUC_REPORT
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-08-19 [0d06a7eac] Document that search_path is reported by the server
-->

     <listitem>
     <para>
     Report <xref linkend="guc-search-path"/> changes to the client
     (Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra)
     <ulink url="&commit_baseurl;28a1121fd">&sect;</ulink>
     <ulink url="&commit_baseurl;0d06a7eac">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-12 [ea92f3a0a] libpq: Trace frontend authentication challenges
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-14 [a5c6b8f22] libpq: Trace responses to SSLRequest and GSSENCRequest
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-16 [b8b3f861f] libpq: Trace all messages received from the server
Author: Robert Haas <rhaas@postgresql.org>
2025-02-24 [e87c14b19] libpq: Trace all NegotiateProtocolVersion fields
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-09 [7adec2d5f] libpq: Trace StartupMessage/SSLRequest/GSSENCRequest cor
-->

     <listitem>
     <para>
     Add <link
     linkend="libpq-PQtrace"><function>PQtrace()</function></link> output
     for all message types, including authentication (Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;ea92f3a0a">&sect;</ulink>
     <ulink url="&commit_baseurl;a5c6b8f22">&sect;</ulink>
     <ulink url="&commit_baseurl;b8b3f861f">&sect;</ulink>
     <ulink url="&commit_baseurl;e87c14b19">&sect;</ulink>
     <ulink url="&commit_baseurl;7adec2d5f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-04-03 [2da74d8d6] libpq: Add support for dumping SSL key material to file
-->

     <listitem>
     <para>
     Add libpq connection parameter <link
     linkend="libpq-connect-sslkeylogfile"><varname>sslkeylogfile</varname></link>
     which dumps out <acronym>SSL</acronym> key material (Abhishek Chanda,
     Daniel Gustafsson)
     <ulink url="&commit_baseurl;2da74d8d6">&sect;</ulink>
     </para>

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

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-25 [3c86223c9] libpq: Deprecate pg_int64.
-->

     <listitem>
     <para>
     Modify some libpq function signatures to use
     <literal>int64_t</literal> (Thomas Munro)
     <ulink url="&commit_baseurl;3c86223c9">&sect;</ulink>
     </para>

     <para>
     These previously used <literal>pg_int64</literal>, which is now
     deprecated.
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-08-22 [d55322b0d] psql: Add more meta-commands able to use the extended pr
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [fc39b286a] 2025-06-24 13:12:46 +0900
-->

     <listitem>
     <para>
     Allow <application>psql</application> to parse, bind, and close
     named prepared statements (Anthonin Bonnefoy, Michael Paquier)
     <ulink url="&commit_baseurl;d55322b0d">&sect;</ulink>
     <ulink url="&commit_baseurl;fc39b286a">&sect;</ulink>
     </para>

     <para>
     This is accomplished with new commands <link
     linkend="app-psql-meta-command-parse"><literal>\parse</literal></link>,
     <link
     linkend="app-psql-meta-command-bind-named"><literal>\bind_named</literal></link>,
     and <link
     linkend="app-psql-meta-command-close-prepared"><literal>\close_prepared</literal></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-21 [41625ab8e] psql: Add support for pipelines
Author: Michael Paquier <michael@paquier.xyz>
2025-03-18 [17caf6644] psql: Add \sendpipeline to send query buffers while in a
Author: Michael Paquier <michael@paquier.xyz>
2025-03-19 [2cce0fe44] psql: Allow queries terminated by semicolons while in pi
-->

     <listitem>
     <para>
     Add <application>psql</application> backslash commands to allowing
     issuance of pipeline queries (Anthonin Bonnefoy)
     <ulink url="&commit_baseurl;41625ab8e">&sect;</ulink>
     <ulink url="&commit_baseurl;17caf6644">&sect;</ulink>
     <ulink url="&commit_baseurl;2cce0fe44">&sect;</ulink>
     </para>

     <para>
     The new commands are <link
     linkend="app-psql-meta-command-pipeline"><literal>\startpipeline</literal></link>,
     <literal>\syncpipeline</literal>, <literal>\sendpipeline</literal>,
     <literal>\endpipeline</literal>, <literal>\flushrequest</literal>,
     <literal>\flush</literal>, and <literal>\getresults</literal>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-25 [3ce357584] psql: Add pipeline status to prompt and some state varia
-->

     <listitem>
     <para>
     Allow adding pipeline status to the <application>psql</application>
     prompt and add related state variables (Anthonin Bonnefoy)
     <ulink url="&commit_baseurl;3ce357584">&sect;</ulink>
     </para>

     <para>
     The new prompt character is <literal>%P</literal> and
     the new <application>psql</application> variables are <link
     linkend="app-psql-variables-pipeline-sync-count"><literal>PIPELINE_SYNC_COUNT</literal></link>,
     <link
     linkend="app-psql-variables-pipeline-command-count"><literal>PIPELINE_COMMAND_COUNT</literal></link>,
     and <link
     linkend="app-psql-variables-pipeline-result-count"><literal>PIPELINE_RESULT_COUNT</literal></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-12-18 [477728b5d] psql: Add more information about service name
-->

     <listitem>
     <para>
     Allow adding the connection service name to the
     <application>psql</application> prompt or access it via
     <application>psql</application> variable (Michael Banck)
     <ulink url="&commit_baseurl;477728b5d">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-14 [00f4c2959] psql: Add option to use expanded mode to all list comman
-->

     <listitem>
     <para>
     Add <application>psql</application> option to use expanded mode on
     all list commands (Dean Rasheed)
     <ulink url="&commit_baseurl;00f4c2959">&sect;</ulink>
     </para>

     <para>
     Adding backslash suffix <literal>x</literal> enables this.
     </para>
     </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-02-22 [bba2fbc62] Change \conninfo to use tabular format
-->

     <listitem>
     <para>
     Change <application>psql</application>'s <xref
     linkend="app-psql-meta-command-conninfo"/> to use tabular format
     and include more information (Álvaro Herrera, Maiquel Grassi,
     Hunaid Sohail)
     <ulink url="&commit_baseurl;bba2fbc62">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-14 [2355e5111] psql: Add leakproof indicator to \df+, \do+, \dAo+, and
-->

     <listitem>
     <para>
     Add function's leakproof indicator
     to <application>psql</application>'s <link
     linkend="app-psql-meta-command-df-lc"><literal>\df+</literal></link>,
     <literal>\do+</literal>, <literal>\dAo+</literal>, and
     <literal>\dC+</literal> outputs (Yugo Nagata)
     <ulink url="&commit_baseurl;2355e5111">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-02 [978f38c77] Add information about access method for partitioned rela
-->

     <listitem>
     <para>
     Add access method details for partitioned relations in <link
     linkend="app-psql-meta-command-dp-uc"><literal>\dP+</literal></link>
     (Justin Pryzby)
     <ulink url="&commit_baseurl;978f38c77">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Magnus Hagander <magnus@hagander.net>
2025-03-24 [d696406a9] psql: show default extension version in \dx output
-->

     <listitem>
     <para>
     Add <literal>default_version</literal>
     to the <application>psql</application> <link
     linkend="app-psql-meta-command-dx-lc"><literal>\dx</literal></link>
     extension output (Magnus Hagander)
     <ulink url="&commit_baseurl;d696406a9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-03-25 [1a759c832] psql: Make default \watch interval configurable
-->

     <listitem>
     <para>
     Add <application>psql</application> variable <xref
     linkend="app-psql-variables-watch-interval"/> to set the default <link
     linkend="app-psql-meta-command-watch"><literal>\watch</literal></link>
     wait time (Daniel Gustafsson)
     <ulink url="&commit_baseurl;1a759c832">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-01 [983a588e0] initdb: Add new option "- -no-data-checksums"
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-16 [04bec894a] initdb: Change default to using data checksums.
-->

     <listitem>
     <para>
     Change <xref linkend="app-initdb"/> to default to enabling checksums
     (Greg Sabino Mullane)
     <ulink url="&commit_baseurl;983a588e0">&sect;</ulink>
     <ulink url="&commit_baseurl;04bec894a">&sect;</ulink>
     </para>

     <para>
     The new <application>initdb</application> option
     <option>--no-data-checksums</option> disables checksums.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [cf131fa94] initdb: Add - -no-sync-data-files.
-->

     <listitem>
     <para>
     Add <application>initdb</application> option
     <option>--no-sync-data-files</option> to avoid syncing heap/index
     files (Nathan Bossart)
     <ulink url="&commit_baseurl;cf131fa94">&sect;</ulink>
     </para>

     <para>
     <application>initdb</application> option <option>--no-sync</option>
     is still available to avoid syncing any files.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-18 [edba754f0] vacuumdb: Add option for analyzing only relations missin
Author: Nathan Bossart <nathan@postgresql.org>
2025-04-30 [987910502] vacuumdb: Don't skip empty relations in - -missing-stats-
-->

     <listitem>
     <para>
     Add <xref linkend="app-vacuumdb"/> option
     <option>--missing-stats-only</option> to compute only missing
     optimizer statistics (Corey Huinker, Nathan Bossart)
     <ulink url="&commit_baseurl;edba754f0">&sect;</ulink>
     <ulink url="&commit_baseurl;987910502">&sect;</ulink>
     </para>

     <para>
     This option can only be run by superusers and can only
     be used with options <option>--analyze-only</option> and
     <option>--analyze-in-stages</option>.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-17 [99aeb8470] pg_combinebackup: Add -k, - -link option.
-->

     <listitem>
     <para>
     Add <xref linkend="app-pgcombinebackup"/> option
     <option>-k</option>/<option>--link</option> to enable hard linking
     (Israel Barth Rubio, Robert Haas)
     <ulink url="&commit_baseurl;99aeb8470">&sect;</ulink>
     </para>

     <para>
     Only some files can be hard linked.  This should not be used if the
     backups will be used independently.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-09-27 [8dfd31290] pg_verifybackup: Verify tar-format backups.
-->

     <listitem>
     <para>
     Allow <xref linkend="app-pgverifybackup"/> to verify tar-format
     backups (Amul Sul)
     <ulink url="&commit_baseurl;8dfd31290">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-03-12 [4ecdd4110] pg_rewind: Add dbname to primary_conninfo when using - -w
-->

     <listitem>
     <para>
     If <xref linkend="app-pgrewind"/>'s <option>--source-server</option>
     specifies a database name, use it in
     <option>--write-recovery-conf</option> output (Masahiko Sawada)
     <ulink url="&commit_baseurl;4ecdd4110">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [30666d185] pg_resetwal: Add - -char-signedness option to change the
-->

     <listitem>
     <para>
     Add <xref linkend="app-pgresetwal"/> option
     <option>--char-signedness</option> to change the default
     <type>char</type> signedness (Masahiko Sawada)
     <ulink url="&commit_baseurl;30666d185">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>


    <sect4 id="release-18-pgdump">
     <title><link
     linkend="app-pgdump"><application>pg_dump</application></link>/<link
     linkend="app-pg-dumpall"><application>pg_dumpall</application></link>/<link
     linkend="app-pgrestore"><application>pg_restore</application></link></title>

     <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-25 [bde2fb797] Add pg_dump - -with-{schema|data|statistics} options.
Author: Jeff Davis <jdavis@postgresql.org>
2025-08-02 [a3e8dc143] Simplify options in pg_dump and pg_restore.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgdump"/> option <option>--statistics</option>
      (Jeff Davis)
      <ulink url="&commit_baseurl;bde2fb797">&sect;</ulink>
      <ulink url="&commit_baseurl;a3e8dc143">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [9c49f0e8c] pg_dump: Add - -sequence-data.
Author: Nathan Bossart <nathan@postgresql.org>
2025-05-07 [acea3fc49] pg_dumpall: Add - -sequence-data.
-->

      <listitem>
      <para>
      Add <application>pg_dump</application> and <xref
      linkend="app-pg-dumpall"/> option <option>--sequence-data</option> to
      dump sequence data that would normally be excluded (Nathan Bossart)
      <ulink url="&commit_baseurl;9c49f0e8c">&sect;</ulink>
      <ulink url="&commit_baseurl;acea3fc49">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgdump"/>, <xref linkend="app-pg-dumpall"/>,
      and <xref linkend="app-pgrestore"/> options
      <option>--statistics-only</option>, <option>--no-statistics</option>,
      <option>--no-data</option>, and <option>--no-schema</option>
      (Corey Huinker, Jeff Davis)
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-16 [cd3c45125] pg_dump, pg_dumpall, pg_restore: Add - -no-policies optio
-->

      <listitem>
      <para>
      Add option <option>--no-policies</option> to disable row level
      security policy processing in <xref linkend="app-pgdump"/>,
      <xref linkend="app-pg-dumpall"/>, <xref linkend="app-pgrestore"/>
      (Nikolay Samokhvalov)
      <ulink url="&commit_baseurl;cd3c45125">&sect;</ulink>
      </para>

      <para>
      This is useful for migrating to systems with different policies.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-pgupgrade">
     <title><xref linkend="pgupgrade"/></title>

     <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-18 [c9d502eb6] Update guidance for running vacuumdb after pg_upgrade.
Author: Nathan Bossart <nathan@postgresql.org>
2025-04-30 [d5f1b6a75] Further adjust guidance for running vacuumdb after pg_up
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
-->

      <listitem>
      <para>
      Allow <application>pg_upgrade</application> to preserve optimizer
      statistics (Corey Huinker, Jeff Davis, Nathan Bossart)
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      <ulink url="&commit_baseurl;c9d502eb6">&sect;</ulink>
      <ulink url="&commit_baseurl;d5f1b6a75">&sect;</ulink>
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      </para>

      <para>
      Extended statistics are not preserved.  Also add
      <application>pg_upgrade</application> option
      <option>--no-statistics</option> to disable statistics preservation.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [40e2e5e92] Introduce framework for parallelizing various pg_upgrade
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [6d3d2e8e5] pg_upgrade: Parallelize retrieving relation information.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [7baa36de5] pg_upgrade: Parallelize subscription check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [46cad8b31] pg_upgrade: Parallelize retrieving loadable libraries.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [6ab8f27bc] pg_upgrade: Parallelize retrieving extension updates.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [bbf83cab9] pg_upgrade: Parallelize data type checks.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [9db3018cf] pg_upgrade: Parallelize contrib/isn check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [c34eabfbb] pg_upgrade: Parallelize postfix operator check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [cf2f82a37] pg_upgrade: Parallelize incompatible polymorphics check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [f93f5f7b9] pg_upgrade: Parallelize WITH OIDS check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [c880cf258] pg_upgrade: Parallelize encoding conversion check.
-->

      <listitem>
      <para>
      Allow <application>pg_upgrade</application> to process database
      checks in parallel (Nathan Bossart)
      <ulink url="&commit_baseurl;40e2e5e92">&sect;</ulink>
      <ulink url="&commit_baseurl;6d3d2e8e5">&sect;</ulink>
      <ulink url="&commit_baseurl;7baa36de5">&sect;</ulink>
      <ulink url="&commit_baseurl;46cad8b31">&sect;</ulink>
      <ulink url="&commit_baseurl;6ab8f27bc">&sect;</ulink>
      <ulink url="&commit_baseurl;bbf83cab9">&sect;</ulink>
      <ulink url="&commit_baseurl;9db3018cf">&sect;</ulink>
      <ulink url="&commit_baseurl;c34eabfbb">&sect;</ulink>
      <ulink url="&commit_baseurl;cf2f82a37">&sect;</ulink>
      <ulink url="&commit_baseurl;f93f5f7b9">&sect;</ulink>
      <ulink url="&commit_baseurl;c880cf258">&sect;</ulink>
      </para>

      <para>
      This is controlled by the existing <option>--jobs</option> option.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [626d7236b] pg_upgrade: Add - -swap for faster file transfer.
-->

      <listitem>
      <para>
      Add <application>pg_upgrade</application> option
      <option>--swap</option> to swap directories rather than copy, clone,
      or link files (Nathan Bossart)
      <ulink url="&commit_baseurl;626d7236b">&sect;</ulink>
      </para>

      <para>
      This mode is potentially the fastest.
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [a8238f87f] pg_upgrade: Preserve default char signedness value from
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [1aab68059] pg_upgrade: Add - -set-char-signedness to set the default
-->

      <listitem>
      <para>
      Add <application>pg_upgrade</application> option
      <option>--set-char-signedness</option> to set the default
      <type>char</type> signedness of new cluster (Masahiko Sawada)
      <ulink url="&commit_baseurl;a8238f87f">&sect;</ulink>
      <ulink url="&commit_baseurl;1aab68059">&sect;</ulink>
      </para>

      <para>
      This is to handle cases where a
      pre-<productname>PostgreSQL</productname> 18 cluster's default
      <acronym>CPU</acronym> signedness does not match the new cluster.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-logicalrep-app">
     <title>Logical Replication Applications</title>

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-03-28 [fb2ea12f4] pg_createsubscriber: Add '- -all' option.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgcreatesubscriber"/> option
      <option>--all</option> to create logical replicas for all databases
      (Shubham Khanna)
      <ulink url="&commit_baseurl;fb2ea12f4">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-03-20 [e5aeed4b8] pg_createsubscriber: Add -R publications option.
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master Release: REL_18_BR [60dda7bbc] 2025-06-25 10:50:43 +0200
-->

      <listitem>
      <para>
      Add <application>pg_createsubscriber</application> option
      <option>--clean</option> to remove publications (Shubham Khanna)
      <ulink url="&commit_baseurl;e5aeed4b8">&sect;</ulink>
      <ulink url="&commit_baseurl;60dda7bbc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-02-26 [e117cfb2f] Add two-phase option in pg_createsubscriber.
-->

      <listitem>
      <para>
      Add <application>pg_createsubscriber</application> option
      <option>--enable-two-phase</option> to enable prepared transactions
      (Shubham Khanna)
      <ulink url="&commit_baseurl;e117cfb2f">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-04-04 [cf2655a90] pg_recvlogical: Add - -failover option.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgrecvlogical"/> option
      <option>--enable-failover</option> to specify failover slots (Hayato Kuroda)
      <ulink url="&commit_baseurl;cf2655a90">&sect;</ulink>
      </para>

      <para>
      Also add option <option>--enable-two-phase</option> as a synonym
      for <option>--two-phase</option>, and deprecate the latter.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-03-25 [c68100aa4] Allow pg_recvlogical - -drop-slot to work without - -dbnam
-->

      <listitem>
      <para>
      Allow <application>pg_recvlogical</application>
      <option>--drop-slot</option> to work without
      <option>--dbname</option> (Hayato Kuroda)
      <ulink url="&commit_baseurl;c68100aa4">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-05 [4b211003e] Support loading of injection points
Author: Michael Paquier <michael@paquier.xyz>
2024-07-18 [a0a5869a8] Add INJECTION_POINT_CACHED() to run injection points dir
-->

     <listitem>
     <para>
     Separate the loading and running of <link
     linkend="xfunc-addin-injection-points">injection points</link>
     (Michael Paquier, Heikki Linnakangas)
     <ulink url="&commit_baseurl;4b211003e">&sect;</ulink>
     <ulink url="&commit_baseurl;a0a5869a8">&sect;</ulink>
     </para>

     <para>
     Injection points can now be created, but not run, via <link
     linkend="xfunc-addin-injection-points"><function>INJECTION_POINT_LOAD()</function></link>,
     and such injection points can be run via <link
     linkend="xfunc-addin-injection-points"><function>INJECTION_POINT_CACHED()</function></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-05-10 [371f2db8b] Add support for runtime arguments in injection points
-->

     <listitem>
     <para>
     Support runtime arguments in injection points (Michael Paquier)
     <ulink url="&commit_baseurl;371f2db8b">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-07-26 [20e0e7da9] Add test for early backend startup errors
-->

     <listitem>
     <para>
     Allow inline injection point test code with <link
     linkend="xfunc-addin-injection-points"><function>IS_INJECTION_POINT_ATTACHED()</function></link>
     (Heikki Linnakangas)
     <ulink url="&commit_baseurl;20e0e7da9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-05 [ca6fde922] Optimize JSON escaping using SIMD
-->

     <listitem>
     <para>
     Improve the performance of processing long <link
     linkend="datatype-json"><type>JSON</type></link> strings using
     <acronym>SIMD</acronym> (Single Instruction Multiple Data) (David
     Rowley)
     <ulink url="&commit_baseurl;ca6fde922">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2025-04-06 [3c6e8c123] Compute CRC32C using AVX-512 instructions where availabl
-->

     <listitem>
     <para>
     Speed up CRC32C calculations using x86 <acronym>AVX</acronym>-512
     instructions (Raghuveer Devulapalli, Paul Amonson)
     <ulink url="&commit_baseurl;3c6e8c123">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-28 [6be53c276] Optimize popcount functions with ARM Neon intrinsics.
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-28 [519338ace] Optimize popcount functions with ARM SVE intrinsics.
-->

     <listitem>
     <para>
     Add <acronym>ARM</acronym> Neon and <acronym>SVE CPU</acronym>
     intrinsics for popcount (integer bit counting) (Chiranmoy
     Bhattacharya, Devanga Susmitha, Rama Malladi)
     <ulink url="&commit_baseurl;6be53c276">&sect;</ulink>
     <ulink url="&commit_baseurl;519338ace">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-07-09 [ca481d3c9] Optimise numeric multiplication for short inputs.
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-08-15 [c4e44224c] Extend mul_var_short() to 5 and 6-digit inputs.
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-08-15 [8dc28d7eb] Optimise numeric multiplication using base-NBASE^2 arith
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-10-04 [9428c001f] Speed up numeric division by always using the "fast" alg
-->

     <listitem>
     <para>
     Improve the speed of numeric multiplication and division (Joel
     Jacobson, Dean Rasheed)
     <ulink url="&commit_baseurl;ca481d3c9">&sect;</ulink>
     <ulink url="&commit_baseurl;c4e44224c">&sect;</ulink>
     <ulink url="&commit_baseurl;8dc28d7eb">&sect;</ulink>
     <ulink url="&commit_baseurl;9428c001f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [65c298f61] Add support for basic NUMA awareness
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [8cc139bec] Introduce pg_shmem_allocations_numa view
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [ba2a3c230] Add pg_buffercache_numa view with NUMA node info
-->

     <listitem>
     <para>
     Add configure option <link
     linkend="configure-option-with-libnuma"><option>--with-libnuma</option></link>
     to enable <acronym>NUMA</acronym> awareness (Jakub Wartak, Bertrand
     Drouvot)
     <ulink url="&commit_baseurl;65c298f61">&sect;</ulink>
     <ulink url="&commit_baseurl;8cc139bec">&sect;</ulink>
     <ulink url="&commit_baseurl;ba2a3c230">&sect;</ulink>
     </para>

     <para>
     The function <link
     linkend="functions-info-session-table"><function>pg_numa_available()</function></link>
     reports on <acronym>NUMA</acronym> awareness, and system views <link
     linkend="view-pg-shmem-allocations-numa"><structname>pg_shmem_allocations_numa</structname></link>
     and <link
     linkend="pgbuffercache-pg-buffercache-numa"><structname>pg_buffercache_numa</structname></link>
     which report on shared memory distribution across
     <acronym>NUMA</acronym> nodes.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-18 [b52c4fc3c] Add TOAST table to pg_index.
-->

     <listitem>
     <para>
     Add <link
     linkend="storage-toast"><acronym>TOAST</acronym></link> table to <link
     linkend="catalog-pg-index"><structname>pg_index</structname></link>
     to allow for very large expression indexes (Nathan Bossart)
     <ulink url="&commit_baseurl;b52c4fc3c">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-20 [02a8d0c45] Remove pg_attribute.attcacheoff column
-->

     <listitem>
     <para>
     Remove column <link
     linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attcacheoff</structfield>
     (David Rowley)
     <ulink url="&commit_baseurl;02a8d0c45">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-03 [99f8f3fbb] Add relallfrozen to pg_class
-->

     <listitem>
     <para>
     Add column <link
     linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relallfrozen</structfield>
     (Melanie Plageman)
     <ulink url="&commit_baseurl;99f8f3fbb">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-10 [56fead44d] Add amgettreeheight index AM API routine
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-07 [af4002b38] Rename amcancrosscompare
-->

     <listitem>
     <para>
     Add <link
     linkend="indexam"><structfield>amgettreeheight</structfield></link>,
     <literal>amconsistentequality</literal>, and
     <literal>amconsistentordering</literal> to the index access method
     <acronym>API</acronym> (Mark Dilger)
     <ulink url="&commit_baseurl;56fead44d">&sect;</ulink>
     <ulink url="&commit_baseurl;af4002b38">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [7406ab623] Add stratnum GiST support function
-->

     <listitem>
     <para>
     Add GiST support function <link
     linkend="gist-extensibility"><function>stratnum()</function></link>
     (Paul A. Jungwirth)
     <ulink url="&commit_baseurl;7406ab623">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [44fe30fda] Add default_char_signedness field to ControlFileData.
-->

     <listitem>
     <para>
     Record the default <acronym>CPU</acronym> signedness of
     <literal>char</literal> in <xref linkend="app-pgcontroldata"/>
     (Masahiko Sawada)
     <ulink url="&commit_baseurl;44fe30fda">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-12 [72a3d0462] Prepare for Python "Limited API" in PL/Python
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-14 [0793ab810] Activate Python "Limited API" in PL/Python
-->

     <listitem>
     <para>
     Add support for Python "Limited <acronym>API</acronym>" in <link
     linkend="plpython">PL/Python</link> (Peter Eisentraut)
     <ulink url="&commit_baseurl;72a3d0462">&sect;</ulink>
     <ulink url="&commit_baseurl;0793ab810">&sect;</ulink>
     </para>

     <para>
     This helps prevent problems caused by
     <application>Python</application> 3.x version mismatches.
     </para>
     </listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2025-04-29 [45363fca6] Bump the minimum supported Python version to 3.6.8
-->

     <listitem>
     <para>
     Change the minimum supported <application>Python</application>
     version to 3.6.8 (Jacob Champion)
     <ulink url="&commit_baseurl;45363fca6">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-09-02 [a70e01d43] Remove support for OpenSSL older than 1.1.0
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [6c66b7443] Raise the minimum supported OpenSSL version to 1.1.1
-->

     <listitem>
     <para>
     Remove support for <application>OpenSSL</application> versions older
     than 1.1.1 (Daniel Gustafsson)
     <ulink url="&commit_baseurl;a70e01d43">&sect;</ulink>
     <ulink url="&commit_baseurl;6c66b7443">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-01 [972c2cd28] jit: Require at least LLVM 14, if enabled.
-->

     <listitem>
     <para>
     If <application>LLVM</application> is enabled, require version 14
     or later (Thomas Munro)
     <ulink url="&commit_baseurl;972c2cd28">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-26 [9324c8c58] Introduce PG_MODULE_MAGIC_EXT macro.
-->

     <listitem>
     <para>
     Add macro <link
     linkend="functions-info"><literal>PG_MODULE_MAGIC_EXT</literal></link>
     to allow extensions to report their name and version (Andrei Lepikhov)
     <ulink url="&commit_baseurl;9324c8c58">&sect;</ulink>
     </para>

     <para>
     This information can be access via the new function <link
     linkend="functions-info-session-table"><function>pg_get_loaded_modules()</function></link>.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-09 [218527d01] Don't bother checking the result of SPI_connect[_ext] an
-->

     <listitem>
     <para>
     Document that <link
     linkend="spi-spi-connect"><function>SPI_connect()</function></link>/<link
     linkend="spi-spi-connect"><function>SPI_connect_ext()</function></link>
     always returns success (<literal>SPI_OK_CONNECT</literal>) (Stepan
     Neretin)
     <ulink url="&commit_baseurl;218527d01">&sect;</ulink>
     </para>

     <para>
     Errors are always reported via <function>ereport()</function>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-07-31 [e54a42ac9] Add API and ABI stability guidance to the C language doc
-->

     <listitem>
     <para>
     Add <link linkend="xfunc-api-abi-stability-guidance">documentation
     section</link> about <acronym>API</acronym> and <acronym>ABI</acronym>
     compatibility (David Wheeler, Peter Eisentraut)
     <ulink url="&commit_baseurl;e54a42ac9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-27 [5afaba629] doc: Meson is not experimental on Windows
-->

     <listitem>
     <para>
     Remove the experimental designation of
     <application>Meson</application> builds on <systemitem
     class="osname">Windows</systemitem> (Aleksander Alekseev)
     <ulink url="&commit_baseurl;5afaba629">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-07-30 [e25626677] Remove - -disable-spinlocks.
Author: Thomas Munro <tmunro@postgresql.org>
2024-07-30 [813852613] Remove - -disable-atomics, require 32 bit atomics.
-->

     <listitem>
     <para>
     Remove configure options <option>--disable-spinlocks</option> and
     <option>--disable-atomics</option> (Thomas Munro)
     <ulink url="&commit_baseurl;e25626677">&sect;</ulink>
     <ulink url="&commit_baseurl;813852613">&sect;</ulink>
     </para>

     <para>
     Thirty-two-bit atomic operations are now required.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-01 [edadeb071] Remove support for HPPA (a/k/a PA-RISC) architecture.
-->

     <listitem>
     <para>
     Remove support for the
     <acronym>HPPA</acronym>/<acronym>PA-RISC</acronym> architecture
     (Tom Lane)
     <ulink url="&commit_baseurl;edadeb071">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-10-14 [7cdfeee32] Add contrib/pg_logicalinspect.
-->

     <listitem>
     <para>
     Add extension <xref linkend="pglogicalinspect"/> to inspect logical
     snapshots (Bertrand Drouvot)
     <ulink url="&commit_baseurl;7cdfeee32">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-26 [8d5ceb113] pg_overexplain: Additional EXPLAIN options for debugging
-->

     <listitem>
     <para>
     Add extension <xref linkend="pgoverexplain"/> which adds debug details
     to <link linkend="sql-explain"><command>EXPLAIN</command></link>
     output (Robert Haas)
     <ulink url="&commit_baseurl;8d5ceb113">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-07-26 [c297a47c5] postgres_fdw: Add "used_in_xact" column to postgres_fdw_
Author: Fujii Masao <fujii@postgresql.org>
2024-07-26 [857df3cef] postgres_fdw: Add connection status check to postgres_fd
Author: Fujii Masao <fujii@postgresql.org>
2024-09-18 [4f08ab554] postgres_fdw: Extend postgres_fdw_get_connections to ret
Author: Fujii Masao <fujii@postgresql.org>
2025-03-03 [fe186bda7] postgres_fdw: Extend postgres_fdw_get_connections to ret
-->

     <listitem>
     <para>
     Add output columns to <link
     linkend="postgres-fdw-functions"><function>postgres_fdw_get_connections()</function></link>
     (Hayato Kuroda, Sagar Dilip Shedge)
     <ulink url="&commit_baseurl;c297a47c5">&sect;</ulink>
     <ulink url="&commit_baseurl;857df3cef">&sect;</ulink>
     <ulink url="&commit_baseurl;4f08ab554">&sect;</ulink>
     <ulink url="&commit_baseurl;fe186bda7">&sect;</ulink>
     </para>

     <para>
     New output column <structfield>used_in_xact</structfield> indicates
     if the foreign data wrapper is being used by a current transaction,
     <structfield>closed</structfield> indicates if it is closed,
     <structfield>user_name</structfield> indicates the user name, and
     <structfield>remote_backend_pid</structfield> indicates the remote
     backend process identifier.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-15 [761c79508] postgres_fdw: SCRAM authentication pass-through
-->

     <listitem>
     <para>
     Allow <link linkend="auth-password"><acronym>SCRAM</acronym></link>
     authentication from the client to be passed to <xref
     linkend="postgres-fdw"/> servers (Matheus Alcantara, Peter Eisentraut)
     <ulink url="&commit_baseurl;761c79508">&sect;</ulink>
     </para>

     <para>
     This avoids storing <application>postgres_fdw</application>
     authentication information in the database, and is
     enabled with the <application>postgres_fdw</application> <link
     linkend="postgres-fdw-option-use-scram-passthrough"><literal>use_scram_passthrough</literal></link>
     connection option.  libpq uses new connection parameters
     <xref linkend="libpq-connect-scram-client-key"/> and <xref
     linkend="libpq-connect-scram-server-key"/>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-26 [3642df265] dblink: SCRAM authentication pass-through
-->

     <listitem>
     <para>
     Allow <acronym>SCRAM</acronym> authentication from the client to be
     passed to <xref linkend="dblink"/> servers (Matheus Alcantara)
     <ulink url="&commit_baseurl;3642df265">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-03 [a1c4c8a9e] file_fdw: Add on_error and log_verbosity options to file
-->

     <listitem>
     <para>
     Add <literal>on_error</literal> and <literal>log_verbosity</literal>
     options to <xref linkend="file-fdw"/> (Atsushi Torikoshi)
     <ulink url="&commit_baseurl;a1c4c8a9e">&sect;</ulink>
     </para>

     <para>
     These control how <application>file_fdw</application> handles and
     reports invalid file rows.
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-11-20 [6c8f67032] file_fdw: Add REJECT_LIMIT option to file_fdw.
-->

     <listitem>
     <para>
     Add <literal>reject_limit</literal> to control the number of
     invalid rows <application>file_fdw</application> can ignore (Atsushi
     Torikoshi)
     <ulink url="&commit_baseurl;6c8f67032">&sect;</ulink>
     </para>

     <para>
     This is active when <literal>ON_ERROR = 'ignore'</literal>.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-01-07 [f7e1b3828] Add passwordcheck.min_password_length.
-->

     <listitem>
     <para>
     Add configurable variable <varname>min_password_length</varname> to
     <xref linkend="passwordcheck"/> (Emanuele Musella, Maurizio Boriani)
     <ulink url="&commit_baseurl;f7e1b3828">&sect;</ulink>
     </para>

     <para>
     This controls the minimum password length.
     </para>
     </listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-10-11 [cae0f3c40] pgbench: Improve result outputs related to failed transa
-->

     <listitem>
     <para>
     Have <xref linkend="pgbench"/> report the number of failed, retried,
     or skipped transactions in per-script reports (Yugo Nagata)
     <ulink url="&commit_baseurl;cae0f3c40">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-16 [448904423] contrib/isn: Make weak mode a GUC setting, and fix relat
-->

     <listitem>
     <para>
     Add <xref linkend="isn"/> server variable <literal>weak</literal>
     to control invalid check digit acceptance (Viktor Holmberg)
     <ulink url="&commit_baseurl;448904423">&sect;</ulink>
     </para>

     <para>
     This was previously only controlled by function <link
     linkend="isn-functions"><function>isn_weak()</function></link>.
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-03 [e4309f73f] Add support for sorted gist index builds to btree_gist
-->

     <listitem>
     <para>
     Allow values to be sorted to speed <xref linkend="btree-gist"/>
     index builds (Bernd Helmle, Andrey Borodin)
     <ulink url="&commit_baseurl;e4309f73f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-03-29 [14ffaece0] amcheck: Add gin_index_check() to verify GIN index
-->

     <listitem>
     <para>
     Add <xref linkend="amcheck"/> check function <link
     linkend="amcheck-functions"><function>gin_index_check()</function></link>
     to verify <literal>GIN</literal> indexes (Grigory Kryachko, Heikki
     Linnakangas, Andrey Borodin)
     <ulink url="&commit_baseurl;14ffaece0">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-04-08 [dcf7e1697] Add pg_buffercache_evict_{relation,all} functions
-->

     <listitem>
     <para>
     Add functions <link
     linkend="pgbuffercache-pg-buffercache-evict-relation"><function>pg_buffercache_evict_relation()</function></link>
     and <link
     linkend="pgbuffercache-pg-buffercache-evict-all"><function>pg_buffercache_evict_all()</function></link>
     to evict unpinned shared buffers (Nazir Bilal Yavuz)
     <ulink url="&commit_baseurl;dcf7e1697">&sect;</ulink>
     </para>

     <para>
     The existing function <link
     linkend="pgbuffercache-pg-buffercache-evict"><function>pg_buffercache_evict()</function></link>
     now returns the buffer flush status.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-18 [c65bc2e1d] Make it possible for loadable modules to add EXPLAIN opt
Author: Robert Haas <rhaas@postgresql.org>
2025-03-18 [4fd02bf7c] Add some new hooks so extensions can add details to EXPL
Author: Robert Haas <rhaas@postgresql.org>
2025-03-20 [50ba65e73] Add an additional hook for EXPLAIN option validation.
-->

     <listitem>
     <para>
     Allow extensions to install custom <xref linkend="sql-explain"/>
     options (Robert Haas, Sami Imseih)
     <ulink url="&commit_baseurl;c65bc2e1d">&sect;</ulink>
     <ulink url="&commit_baseurl;4fd02bf7c">&sect;</ulink>
     <ulink url="&commit_baseurl;50ba65e73">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-08-04 [7949d9594] Introduce pluggable APIs for Cumulative Statistics
Author: Michael Paquier <michael@paquier.xyz>
2024-08-05 [2eff9e678] Add helper routines to retrieve data for custom fixed-nu
-->

     <listitem>
     <para>
     Allow extensions to use the server's cumulative statistics
     <acronym>API</acronym> (Michael Paquier)
     <ulink url="&commit_baseurl;7949d9594">&sect;</ulink>
     <ulink url="&commit_baseurl;2eff9e678">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-18-pgstatstatements">
     <title><xref linkend="pgstatstatements"/></title>

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-28 [6b652e6ce] Set query ID for inner queries of CREATE TABLE AS and DE
-->

      <listitem>
      <para>
      Allow the queries of <xref linkend="sql-createtableas"/>
      and <xref linkend="sql-declare"/> to be tracked by
      <application>pg_stat_statements</application> (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;6b652e6ce">&sect;</ulink>
      </para>

      <para>
      They are also now assigned query ids.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-09-30 [dc6851596] Show values of SET statements as constants in pg_stat_st
-->

      <listitem>
      <para>
      Allow the parameterization of <xref linkend="sql-set"/> values in
      <application>pg_stat_statements</application> (Greg Sabino Mullane,
      Michael Paquier)
      <ulink url="&commit_baseurl;dc6851596">&sect;</ulink>
      </para>

      <para>
      This reduces the bloat caused by <command>SET</command> statements
      with differing constants.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-09 [cf54a2c00] pg_stat_statements: Add columns to track parallel worker
-->

      <listitem>
      <para>
      Add <link
      linkend="pgstatstatements-pg-stat-statements"><structname>pg_stat_statements</structname></link>
      columns to report parallel activity (Guillaume Lelarge)
      <ulink url="&commit_baseurl;cf54a2c00">&sect;</ulink>
      </para>

      <para>
      The new columns are
      <structfield>parallel_workers_to_launch</structfield> and
      <structfield>parallel_workers_launched</structfield>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [ce5bcc4a9] pg_stat_statements: Add wal_buffers_full
-->

      <listitem>
      <para>
      Add
      <structname>pg_stat_statements</structname>.<structfield>wal_buffers_full</structfield>
      to report full <acronym>WAL</acronym> buffers (Bertrand Drouvot)
      <ulink url="&commit_baseurl;ce5bcc4a9">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-pgcrypto">
     <title><xref linkend="pgcrypto"/></title>

     <itemizedlist>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-04-05 [749a9e20c] Add modern SHA-2 based password hashes to pgcrypto.
-->

      <listitem>
      <para>
      Add <application>pgcrypto</application> algorithms <link
      linkend="pgcrypto-crypt-algorithms"><literal>sha256crypt</literal></link>
      and <link
      linkend="pgcrypto-crypt-algorithms"><literal>sha512crypt</literal></link>
      (Bernd Helmle)
      <ulink url="&commit_baseurl;749a9e20c">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-02-14 [9ad1b3d01] pgcrypto: Add support for CFB mode in AES encryption
-->

      <listitem>
      <para>
      Add <link
      linkend="pgcrypto-raw-enc-funcs"><acronym>CFB</acronym></link> mode
      to <application>pgcrypto</application> encryption and decryption
      (Umar Hayat)
      <ulink url="&commit_baseurl;9ad1b3d01">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-01-24 [924d89a35] pgcrypto: Add function to check FIPS mode
-->

      <listitem>
      <para>
      Add function <link
      linkend="pgcrypto-openssl-support-funcs"><function>fips_mode()</function></link>
      to report the server's <acronym>FIPS</acronym> mode (Daniel
      Gustafsson)
      <ulink url="&commit_baseurl;924d89a35">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-01-24 [035f99cbe] pgcrypto: Make it possible to disable built-in crypto
-->

      <listitem>
      <para>
      Add <application>pgcrypto</application> server variable <link
      linkend="pgcrypto-configuration-parameters-builtin_crypto_enabled"><varname>builtin_crypto_enabled</varname></link>
      to allow disabling builtin non-<acronym>FIPS</acronym> mode
      cryptographic functions (Daniel Gustafsson, Joe Conway)
      <ulink url="&commit_baseurl;035f99cbe">&sect;</ulink>
      </para>

      <para>
      This is useful for guaranteeing <acronym>FIPS</acronym> mode behavior.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-18-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>Abhishek Chanda</member>
    <member>Adam Guo</member>
    <member>Adam Rauch</member>
    <member>Aidar Imamov</member>
    <member>Ajin Cherian</member>
    <member>Alastair Turner</member>
    <member>Alec Cozens</member>
    <member>Aleksander Alekseev</member>
    <member>Alena Rybakina</member>
    <member>Alex Friedman</member>
    <member>Alex Richman</member>
    <member>Alexander Alehin</member>
    <member>Alexander Borisov</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Kozhemyakin</member>
    <member>Alexander Kukushkin</member>
    <member>Alexander Kuzmenkov</member>
    <member>Alexander Kuznetsov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Pyhalov</member>
    <member>Alexandra Wang</member>
    <member>Alexey Dvoichenkov</member>
    <member>Alexey Makhmutov</member>
    <member>Alexey Shishkin</member>
    <member>Ali Akbar</member>
    <member>Álvaro Herrera</member>
    <member>Álvaro Mongil</member>
    <member>Amit Kapila</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Scherbaum</member>
    <member>Andreas Ulbrich</member>
    <member>Andrei Lepikhov</member>
    <member>Andres Freund</member>
    <member>Andrew</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Jackson</member>
    <member>Andrew Kane</member>
    <member>Andrew Watkins</member>
    <member>Andrey Borodin</member>
    <member>Andrey Chudnovsky</member>
    <member>Andrey Rachitskiy</member>
    <member>Andrey Rudometov</member>
    <member>Andy Alsup</member>
    <member>Andy Fan</member>
    <member>Anthonin Bonnefoy</member>
    <member>Anthony Hsu</member>
    <member>Anthony Leung</member>
    <member>Anton Melnikov</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Antti Lampinen</member>
    <member>Arseniy Mukhin</member>
    <member>Artur Zakirov</member>
    <member>Arun Thirupathi</member>
    <member>Ashutosh Bapat</member>
    <member>Asphator</member>
    <member>Atsushi Torikoshi</member>
    <member>Avi Weinberg</member>
    <member>Aya Iwata</member>
    <member>Ayush Tiwari</member>
    <member>Ayush Vatsa</member>
    <member>Bastien Roucariès</member>
    <member>Ben Peachey Higdon</member>
    <member>Benoit Lobréau</member>
    <member>Bernd Helmle</member>
    <member>Bernd Reiß</member>
    <member>Bernhard Wiedemann</member>
    <member>Bertrand Drouvot</member>
    <member>Bertrand Mamasam</member>
    <member>Bharath Rupireddy</member>
    <member>Bogdan Grigorenko</member>
    <member>Boyu Yang</member>
    <member>Braulio Fdo Gonzalez</member>
    <member>Bruce Momjian</member>
    <member>Bykov Ivan</member>
    <member>Cameron Vogt</member>
    <member>Cary Huang</member>
    <member>Cédric Villemain</member>
    <member>Cees van Zeeland</member>
    <member>ChangAo Chen</member>
    <member>Chao Li</member>
    <member>Chapman Flack</member>
    <member>Charles Samborski</member>
    <member>Chengwen Wu</member>
    <member>Chengxi Sun</member>
    <member>Chiranmoy Bhattacharya</member>
    <member>Chris Gooch</member>
    <member>Christian Charukiewicz</member>
    <member>Christoph Berg</member>
    <member>Christophe Courtois</member>
    <member>Christopher Inokuchi</member>
    <member>Clemens Ruck</member>
    <member>Corey Huinker</member>
    <member>Craig Milhiser</member>
    <member>Crisp Lee</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Daniel Elishakov</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Westermann</member>
    <member>Daniele Varrazzo</member>
    <member>Daniil Davydov</member>
    <member>Daria Shanina</member>
    <member>Dave Cramer</member>
    <member>Dave Page</member>
    <member>David Benjamin</member>
    <member>David Christensen</member>
    <member>David Fiedler</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Wheeler</member>
    <member>David Zhang</member>
    <member>Davinder Singh</member>
    <member>Dean Rasheed</member>
    <member>Devanga Susmitha</member>
    <member>Devrim Gündüz</member>
    <member>Dian Fay</member>
    <member>Dilip Kumar</member>
    <member>Dimitrios Apostolou</member>
    <member>Dipesh Dhameliya</member>
    <member>Dmitrii Bondar</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Koval</member>
    <member>Dmitry Kovalenko</member>
    <member>Dmitry Yurichev</member>
    <member>Dominique Devienne</member>
    <member>Donghang Lin</member>
    <member>Dorjpalam Batbaatar</member>
    <member>Drew Callahan</member>
    <member>Duncan Sands</member>
    <member>Dwayne Towell</member>
    <member>Dzmitry Jachnik</member>
    <member>Egor Chindyaskin</member>
    <member>Egor Rogov</member>
    <member>Emanuel Ionescu</member>
    <member>Emanuele Musella</member>
    <member>Emre Hasegeli</member>
    <member>Eric Cyr</member>
    <member>Erica Zhang</member>
    <member>Erik Nordström</member>
    <member>Erik Rijkers</member>
    <member>Erik Wienhold</member>
    <member>Erki Eessaar</member>
    <member>Ethan Mertz</member>
    <member>Etienne LAFARGE</member>
    <member>Etsuro Fujita</member>
    <member>Euler Taveira</member>
    <member>Evan Si</member>
    <member>Evgeniy Gorbanev</member>
    <member>Fabio R. Sluzala</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Feike Steenbergen</member>
    <member>Feliphe Pozzer</member>
    <member>Felix</member>
    <member>Fire Emerald</member>
    <member>Florents Tselai</member>
    <member>Francesco Degrassi</member>
    <member>Frank Streitzig</member>
    <member>Frédéric Yhuel</member>
    <member>Fredrik Widlert</member>
    <member>Gabriele Bartolini</member>
    <member>Gavin Panella</member>
    <member>Geoff Winkless</member>
    <member>George MacKerron</member>
    <member>Gilles Darold</member>
    <member>Grant Gryczan</member>
    <member>Greg Burd</member>
    <member>Greg Sabino Mullane</member>
    <member>Greg Stark</member>
    <member>Grigory Kryachko</member>
    <member>Guillaume Lelarge</member>
    <member>Gunnar Morling</member>
    <member>Gunnar Wagner</member>
    <member>Gurjeet Singh</member>
    <member>Haifang Wang</member>
    <member>Hajime Matsunaga</member>
    <member>Hamid Akhtar</member>
    <member>Hannu Krosing</member>
    <member>Hari Krishna Sunder</member>
    <member>Haruka Takatsuka</member>
    <member>Hayato Kuroda</member>
    <member>Heikki Linnakangas</member>
    <member>Hironobu Suzuki</member>
    <member>Holger Jakobs</member>
    <member>Hubert Lubaczewski</member>
    <member>Hugo Dubois</member>
    <member>Hugo Zhang</member>
    <member>Hunaid Sohail</member>
    <member>Hywel Carver</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Igor Gnatyuk</member>
    <member>Igor Korot</member>
    <member>Ilia Evdokimov</member>
    <member>Ilya Gladyshev</member>
    <member>Ilyasov Ian</member>
    <member>Imran Zaheer</member>
    <member>Isaac Morland</member>
    <member>Israel Barth Rubio</member>
    <member>Ivan Kush</member>
    <member>Jacob Brazeal</member>
    <member>Jacob Champion</member>
    <member>Jaime Casanova</member>
    <member>Jakob Egger</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Hunter</member>
    <member>Jan Behrens</member>
    <member>Japin Li</member>
    <member>Jason Smith</member>
    <member>Jayesh Dehankar</member>
    <member>Jeevan Chalke</member>
    <member>Jeff Davis</member>
    <member>Jehan-Guillaume de Rorthais</member>
    <member>Jelte Fennema-Nio</member>
    <member>Jian He</member>
    <member>Jianghua Yang</member>
    <member>Jiao Shuntian</member>
    <member>Jim Jones</member>
    <member>Jim Nasby</member>
    <member>Jingtang Zhang</member>
    <member>Jingzhou Fu</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Hutchins</member>
    <member>John Naylor</member>
    <member>Jonathan Katz</member>
    <member>Jorge Solórzano</member>
    <member>José Villanova</member>
    <member>Josef Šimánek</member>
    <member>Joseph Koshakow</member>
    <member>Julien Rouhaud</member>
    <member>Junwang Zhao</member>
    <member>Justin Pryzby</member>
    <member>Kaido Vaikla</member>
    <member>Kaimeh</member>
    <member>Karina Litskevich</member>
    <member>Karthik S</member>
    <member>Kartyshov Ivan</member>
    <member>Kashif Zeeshan</member>
    <member>Keisuke Kuroda</member>
    <member>Kevin Hale Boyes</member>
    <member>Kevin K Biju</member>
    <member>Kirill Reshke</member>
    <member>Kirill Zdornyy</member>
    <member>Koen De Groote</member>
    <member>Koichi Suzuki</member>
    <member>Koki Nakamura</member>
    <member>Konstantin Knizhnik</member>
    <member>Kouhei Sutou</member>
    <member>Kuntal Ghosh</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lakshmi Narayana Velayudam</member>
    <member>Lars Kanis</member>
    <member>Laurence Parry</member>
    <member>Laurenz Albe</member>
    <member>Lele Gaifax</member>
    <member>Li Yong</member>
    <member>Lilian Ontowhee</member>
    <member>Lingbin Meng</member>
    <member>Luboslav Špilák</member>
    <member>Luca Vallisa</member>
    <member>Lukas Fittl</member>
    <member>Maciek Sakrejda</member>
    <member>Magnus Hagander</member>
    <member>Mahendra Singh Thalor</member>
    <member>Mahendrakar Srinivasarao</member>
    <member>Maiquel Grassi</member>
    <member>Maksim Korotkov</member>
    <member>Maksim Melnikov</member>
    <member>Man Zeng</member>
    <member>Marat Buharov</member>
    <member>Marc Balmer</member>
    <member>Marco Nenciarini</member>
    <member>Marcos Pegoraro</member>
    <member>Marina Polyakova</member>
    <member>Mark Callaghan</member>
    <member>Mark Dilger</member>
    <member>Marlene Brandstaetter</member>
    <member>Marlene Reiterer</member>
    <member>Martin Rakhmanov</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masao Fujii</member>
    <member>Mason Mackaman</member>
    <member>Mat Arye</member>
    <member>Matheus Alcantara</member>
    <member>Mats Kindahl</member>
    <member>Matthew Gabeler-Lee</member>
    <member>Matthew Kim</member>
    <member>Matthew Sterrett</member>
    <member>Matthew Woodcraft</member>
    <member>Matthias van de Meent</member>
    <member>Matthieu Denais</member>
    <member>Maurizio Boriani</member>
    <member>Max Johnson</member>
    <member>Max Madden</member>
    <member>Maxim Boguk</member>
    <member>Maxim Orlov</member>
    <member>Maximilian Chrzan</member>
    <member>Melanie Plageman</member>
    <member>Melih Mutlu</member>
    <member>Mert Alev</member>
    <member>Michael Banck</member>
    <member>Michael Bondarenko</member>
    <member>Michael Christofides</member>
    <member>Michael Guissine</member>
    <member>Michael Harris</member>
    <member>Michaël Paquier</member>
    <member>Michail Nikolaev</member>
    <member>Michal Kleczek</member>
    <member>Michel Pelletier</member>
    <member>Mikaël Gourlaouen</member>
    <member>Mikhail Gribkov</member>
    <member>Mikhail Kot</member>
    <member>Milosz Chmura</member>
    <member>Muralikrishna Bandaru</member>
    <member>Murat Efendioglu</member>
    <member>Mutaamba Maasha</member>
    <member>Naeem Akhter</member>
    <member>Nat Makarevitch</member>
    <member>Nathan Bossart</member>
    <member>Navneet Kumar</member>
    <member>Nazir Bilal Yavuz</member>
    <member>Neil Conway</member>
    <member>Niccolò Fei</member>
    <member>Nick Davies</member>
    <member>Nicolas Maus</member>
    <member>Niek Brasa</member>
    <member>Nikhil Raj</member>
    <member>Nikita</member>
    <member>Nikita Kalinin</member>
    <member>Nikita Malakhov</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nisha Moond</member>
    <member>Nitin Jadhav</member>
    <member>Nitin Motiani</member>
    <member>Noah Misch</member>
    <member>Noboru Saito</member>
    <member>Noriyoshi Shinoda</member>
    <member>Ole Peder Brandtzæg</member>
    <member>Oleg Sibiryakov</member>
    <member>Oleg Tselebrovskiy</member>
    <member>Olleg Samoylov</member>
    <member>Onder Kalaci</member>
    <member>Ondrej Navratil</member>
    <member>Patrick Stählin</member>
    <member>Paul Amonson</member>
    <member>Paul Jungwirth</member>
    <member>Paul Ramsey</member>
    <member>Pavel Borisov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Nekrasov</member>
    <member>Pavel Stehule</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Mittere</member>
    <member>Peter Smith</member>
    <member>Phil Eaton</member>
    <member>Philipp Salvisberg</member>
    <member>Philippe Beaudoin</member>
    <member>Pierre Giraud</member>
    <member>Pixian Shi</member>
    <member>Polina Bungina</member>
    <member>Przemyslaw Sztoch</member>
    <member>Quynh Tran</member>
    <member>Rafia Sabih</member>
    <member>Raghuveer Devulapalli</member>
    <member>Rahila Syed</member>
    <member>Rama Malladi</member>
    <member>Ran Benita</member>
    <member>Ranier Vilela</member>
    <member>Renan Alves Fonseca</member>
    <member>Richard Guo</member>
    <member>Richard Neill</member>
    <member>Rintaro Ikeda</member>
    <member>Robert Haas</member>
    <member>Robert Treat</member>
    <member>Robins Tharakan</member>
    <member>Roman Zharkov</member>
    <member>Ronald Cruz</member>
    <member>Ronan Dunklau</member>
    <member>Rui Zhao</member>
    <member>Rushabh Lathia</member>
    <member>Rustam Allakov</member>
    <member>Ryo Kanbayashi</member>
    <member>Ryohei Takahashi</member>
    <member>RyotaK</member>
    <member>Sagar Dilip Shedge</member>
    <member>Salvatore Dipietro</member>
    <member>Sam Gabrielsson</member>
    <member>Sam James</member>
    <member>Sameer Kumar</member>
    <member>Sami Imseih</member>
    <member>Samuel Thibault</member>
    <member>Satyanarayana Narlapuram</member>
    <member>Sebastian Skalacki</member>
    <member>Senglee Choi</member>
    <member>Sergei Kornilov</member>
    <member>Sergey Belyashov</member>
    <member>Sergey Dudoladov</member>
    <member>Sergey Prokhorenko</member>
    <member>Sergey Sargsyan</member>
    <member>Sergey Soloviev</member>
    <member>Sergey Tatarintsev</member>
    <member>Shaik Mohammad Mujeeb</member>
    <member>Shawn McCoy</member>
    <member>Shenhao Wang</member>
    <member>Shihao Zhong</member>
    <member>Shinya Kato</member>
    <member>Shlok Kyal</member>
    <member>Shubham Khanna</member>
    <member>Shveta Malik</member>
    <member>Simon Riggs</member>
    <member>Smolkin Grigory</member>
    <member>Sofia Kopikova</member>
    <member>Song Hongyu</member>
    <member>Song Jinzhou</member>
    <member>Soumyadeep Chakraborty</member>
    <member>Sravan Kumar</member>
    <member>Srinath Reddy</member>
    <member>Stan Hu</member>
    <member>Stepan Neretin</member>
    <member>Stephen Fewer</member>
    <member>Stephen Frost</member>
    <member>Steve Chavez</member>
    <member>Steven Niu</member>
    <member>Suraj Kharage</member>
    <member>Sven Klemm</member>
    <member>Takamichi Osumi</member>
    <member>Takeshi Ideriha</member>
    <member>Tatsuo Ishii</member>
    <member>Ted Yu</member>
    <member>Tels</member>
    <member>Tender Wang</member>
    <member>Teodor Sigaev</member>
    <member>Thom Brown</member>
    <member>Thomas Baehler</member>
    <member>Thomas Krennwallner</member>
    <member>Thomas Munro</member>
    <member>Tim Wood</member>
    <member>Timur Magomedov</member>
    <member>Tobias Wendorff</member>
    <member>Todd Cook</member>
    <member>Tofig Aliev</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tomasz Rybak</member>
    <member>Tomasz Szypowski</member>
    <member>Torsten Foertsch</member>
    <member>Toshi Harada</member>
    <member>Tristan Partin</member>
    <member>Triveni N</member>
    <member>Umar Hayat</member>
    <member>Vallimaharajan G</member>
    <member>Vasya Boytsov</member>
    <member>Victor Yegorov</member>
    <member>Vignesh C</member>
    <member>Viktor Holmberg</member>
    <member>Vinícius Abrahão</member>
    <member>Vinod Sridharan</member>
    <member>Virender Singla</member>
    <member>Vitaly Davydov</member>
    <member>Vladlen Popolitov</member>
    <member>Vladyslav Nebozhyn</member>
    <member>Walid Ibrahim</member>
    <member>Webbo Han</member>
    <member>Wenhui Qiu</member>
    <member>Will Mortensen</member>
    <member>Will Storey</member>
    <member>Wolfgang Walther</member>
    <member>Xin Zhang</member>
    <member>Xing Guo</member>
    <member>Xuneng Zhou</member>
    <member>Yan Chengpen</member>
    <member>Yang Lei</member>
    <member>Yaroslav Saburov</member>
    <member>Yaroslav Syrytsia</member>
    <member>Yasir Hussain</member>
    <member>Yasuo Honda</member>
    <member>Yogesh Sharma</member>
    <member>Yonghao Lee</member>
    <member>Yoran Heling</member>
    <member>Yu Liang</member>
    <member>Yugo Nagata</member>
    <member>Yuhang Qiu</member>
    <member>Yuki Seino</member>
    <member>Yura Sokolov</member>
    <member>Yurii Rashkovskii</member>
    <member>Yushi Ogiwara</member>
    <member>Yusuke Sugie</member>
    <member>Yuta Katsuragi</member>
    <member>Yuto Sasaki</member>
    <member>Yuuki Fujii</member>
    <member>Yuya Watari</member>
    <member>Zane Duffield</member>
    <member>Zeyuan Hu</member>
    <member>Zhang Mingli</member>
    <member>Zhihong Yu</member>
    <member>Zhijie Hou</member>
    <member>Zsolt Parragi</member>
   </simplelist>
  </sect2>

 </sect1>
