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

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

  <formalpara>
  <title>Release date:</title>
  <para>2026-08-13</para>
  </formalpara>

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

  <sect2 id="release-16-15-migration">
   <title>Migration to Version 16.15</title>

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

   <para>
    However, the first three security entries below describe configuration
    adjustments and data cleanups that you may need to make after updating.
   </para>

   <para>
    Also, if you use <filename>contrib/btree_gist</filename>
    or <filename>contrib/ltree</filename>, you may need to reindex indexes
    made with those extensions; see the relevant entries below.
   </para>

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [226e49cbe] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [5d47df21e] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [2a29b607d] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [01992176e] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [4e1252ee5] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [99f205407] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [bf3842a64] 2026-08-10 06:38:36 -0700
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [20e9dcefd] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [7082ce248] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [82fd68801] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [4fcccea97] 2026-08-10 06:38:18 -0700
-->
     <para>
      Restrict logical decoding output plugins to the set specified by a
      new server parameter <varname>output_plugin_libraries</varname>
      (Jacob Champion)
      <ulink url="&commit_baseurl;4e1252ee5">&sect;</ulink>
     </para>

     <para>
      Previously, a replication user could select any loadable library for
      logical decoding, allowing exploits of various sorts.  To allow
      locking this down without breaking setups that worked before,
      introduce a whitelist of allowed output plugins.
     </para>

     <para>
      By default, only the output plugins shipped as part
      of <productname>PostgreSQL</productname>
      (<literal>pgoutput</literal> and <literal>test_decoding</literal>)
      are included in <varname>output_plugin_libraries</varname>.
      Installations that rely on other output plugins must add them
      after updating the server, for example
<programlisting>
output_plugin_libraries = 'pgoutput, test_decoding, my_trusted_decoder'
</programlisting>
     </para>

     <para>
      Additionally, <command>pg_upgrade --check</command> will fail if the
      <varname>output_plugin_libraries</varname> parameter on the new
      cluster does not permit the plugins of logical replication slots
      on the old cluster, when migrating from versions 17 and later.
      Make necessary additions to the new cluster's setting before
      performing <application>pg_upgrade</application>.
     </para>

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

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [d0ecee6de] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [ba207f58f] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [fe32b10fc] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [b05cfc693] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [6ca6023ca] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [472ef7e4a] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [7e29eb6f4] 2026-08-10 06:38:37 -0700
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [49e795414] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [d97b3f58c] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [4c5128ca0] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [7eed42aa8] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [ba2a63faf] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [953be116c] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [e2c48c81f] 2026-08-10 06:38:37 -0700
-->
     <para>
      Fix <filename>contrib/pgcrypto</filename>'s PGP encryption to detect
      unsupported ciphers (Daniel Gustafsson)
      <ulink url="&commit_baseurl;6ca6023ca">&sect;</ulink>
      <ulink url="&commit_baseurl;ba2a63faf">&sect;</ulink>
     </para>

     <para>
      Previously, if OpenSSL rejected the requested cipher (for example,
      because it is running in FIPS mode, or the legacy provider hasn't
      been loaded), <application>pgcrypto</application> failed to notice
      the failure and simply XOR'd the non-encrypted block with the
      plaintext, rendering the <quote>encryption</quote> trivially
      breakable.  This will typically occur with deprecated or non-FIPS
      cipher algorithms (cipher-algo=blowfish/bf, twofish, cast5, or
      3des).
     </para>

     <para>
      By default, <application>pgcrypto</application> will now fail to
      decrypt any messages that were affected in this way.  To allow
      retrieval of such data, a new
      option <literal>ignore-cipher-failure</literal> has been added
      to <function>pgp_pub_decrypt()</function>
      and <function>pgp_sym_decrypt()</function>.
      Setting <literal>ignore-cipher-failure=1</literal> will restore
      their previous behavior, allowing the faulty encryption wrapper to
      be stripped off:
<programlisting>
pgp_sym_decrypt(encrypted_column, <replaceable>any key</replaceable>, 'ignore-cipher-failure=1')
</programlisting>
      Once the affected messages are identified and stripped of their
      wrappers, they can then be re-encrypted with a modern algorithm. It
      is important however that the behavior of OpenSSL be the same as it
      was when the faulty messages were created: if the set of unsupported
      algorithms is not the same, this approach will not work. See the
      documentation for <literal>ignore-cipher-failure</literal>.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Shishir Sharma
      for reporting this problem.
      (CVE-2026-14663)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3045a25ba] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [d6ab88d37] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [29921259e] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [46fa1f6f3] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [2bdfd5cdc] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [3fdcfa8f7] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [5c51ae455] 2026-08-10 06:38:36 -0700
Branch: master [cf754f741] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [8cf01e213] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [900894d35] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [dca6627de] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [db96e87f9] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [8cdbabea7] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [7215c7e96] 2026-08-10 06:38:36 -0700
-->
     <para>
      Fix <application>psql</application> to skip in-line data following a
      scripted <command>COPY ... FROM STDIN</command> command, even if
      the <command>COPY</command> fails before
      sending <literal>PGRES_COPY_IN</literal> (Tom Lane)
      <ulink url="&commit_baseurl;2bdfd5cdc">&sect;</ulink>
      <ulink url="&commit_baseurl;db96e87f9">&sect;</ulink>
     </para>

     <para>
      Previously, if a <literal>COPY</literal> command failed at startup
      (for instance, because the target table doesn't exist)
      <application>psql</application> would not realize that and would
      proceed to read the following in-line data as SQL commands.  In the
      best case that's wrong and in the worst case it's a SQL-injection
      hazard.  Teach <application>psql</application> to recognize
      syntactically-valid <command>COPY ... FROM STDIN</command> commands
      and to skip data on its own authority if the server doesn't respond
      with <literal>PGRES_COPY_IN</literal>.
     </para>

     <para>
      While this fix is unlikely to affect any production SQL scripts,
      test scripts might intentionally exercise failing <command>COPY
      ... FROM STDIN</command> commands.  Those will need to gain
      a <literal>\.</literal> data terminator line after each such
      command.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Alexander Lakhin
      for reporting this problem.
      (CVE-2026-6464)
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [9e02e2e18] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [64a65ead1] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [37b8f3b0e] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [60887d348] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [7d150b5c9] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [fc933ce00] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [1f49beef2] 2026-08-10 06:38:36 -0700
-->
     <para>
      Cross-check the output row type of a portal
      running <command>EXECUTE</command> or <command>FETCH</command>
      (Robert Haas)
      <ulink url="&commit_baseurl;7d150b5c9">&sect;</ulink>
     </para>

     <para>
      <command>EXECUTE</command> and <command>FETCH</command> use two
      portals: an outer one for the statement itself, and an inner one
      running the query being executed on its behalf.  It was previously
      possible to make the declared row types of the two portals diverge,
      leading to server memory disclosure and arbitrary code execution.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Ben Morris (in collaboration with Claude and Anthropic Research)
      and Peter Geoghegan
      for reporting this problem.
      (CVE-2026-16239)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3d724bf4f] 2026-08-10 06:37:47 -0700
Branch: REL_19_STABLE [3294ab839] 2026-08-10 06:38:03 -0700
Branch: REL_18_STABLE [4fafe2380] 2026-08-10 06:38:10 -0700
Branch: REL_17_STABLE [12a620686] 2026-08-10 06:38:17 -0700
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: REL_16_STABLE [5dbeb69bc] 2026-07-29 17:15:45 +0200
Branch: REL_15_STABLE [8f64cc83f] 2026-07-29 17:15:45 +0200
Branch: REL_14_STABLE [5fb3c6389] 2026-07-29 17:15:45 +0200
-->
     <para>
      Fix buffer overrun with long time zone abbreviation in
      <function>to_char()</function> (Tom Lane)
      <ulink url="&commit_baseurl;5dbeb69bc">&sect;</ulink>
     </para>

     <para>
      This can easily crash the server, and exploits leading to arbitrary
      code execution have been reported.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Hcamael, Amjad Shahzad, Tan Zhen of AntAISecurityLab, Tomer Fichman,
      Zheng Yu, Amy Burnett (OpenAI Codex Security), Rick de Jager, Heewon
      Song, Sylvie Mayer, Aleksander Alekseev, and Hillai Ben Sasson
      for reporting this problem.
      (CVE-2026-14669)
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [343aabf1d] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [7df2aa8ef] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [b7e5c3f63] 2026-08-10 06:38:10 -0700
Branch: REL_17_STABLE [e91dcfcca] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [3179253c2] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [127a0673f] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [890327639] 2026-08-10 06:38:35 -0700
-->
     <para>
      Fix buffer overrun in regexp match/split functions (Masahiko Sawada)
      <ulink url="&commit_baseurl;3179253c2">&sect;</ulink>
     </para>

     <para>
      If passed invalidly-encoded data, these functions could write past
      the end of their conversion buffer.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Francesco Verardi
      for reporting this problem.
      (CVE-2026-14664)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a16c31d39] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [80ce920a5] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [08e812c02] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [849da8210] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [ac450853d] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [3b925133b] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [42d333a78] 2026-08-10 06:38:36 -0700
-->
     <para>
      Harden the <function>ascii()</function> function against invalid
      input (Michael Paquier)
      <ulink url="&commit_baseurl;ac450853d">&sect;</ulink>
     </para>

     <para>
      By supplying invalidly-encoded input, this function could be coaxed
      to read and return a few bytes of data that it shouldn't.  In
      assert-enabled builds, its assertions could be triggered too.
     </para>

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [57835938f] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [b3d9262bb] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [08454e8b2] 2026-08-10 06:38:12 -0700
Branch: REL_18_STABLE [8d428c6e6] 2026-08-10 06:38:12 -0700
-->
     <para>
      Fix multirange type handling
      in <function>pg_restore_attribute_stats()</function>
      (OpenAI Security Research Team)
     </para>

     <para>
      <function>pg_restore_attribute_stats()</function> treated multirange
      types just like their underlying range type.  This works correctly
      for the bounds histogram, but it was wrong for all the other
      statistics kinds.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Amy Burnett (OpenAI Codex Security)
      for reporting this problem.
      (CVE-2026-16238)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8f0c3d2fe] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [0d60ee717] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [a2cb5a1cf] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [0ebf896f4] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [591192e2e] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [005ffaa7f] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [59205c7e9] 2026-08-10 06:38:35 -0700
-->
     <para>
      Make <function>scalarineqsel()</function> check that a constant it
      expects to be of type <type>tid</type> actually is (Tom Lane)
      <ulink url="&commit_baseurl;591192e2e">&sect;</ulink>
     </para>

     <para>
      This expectation will hold for all the built-in operators that use
      this estimator, but a maliciously-constructed operator could violate
      it, leading to a crash or server memory disclosure.
     </para>

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [23d9ad771] 2026-08-10 06:37:47 -0700
Branch: REL_19_STABLE [cb947ca31] 2026-08-10 06:38:03 -0700
Branch: REL_18_STABLE [e25135057] 2026-08-10 06:38:10 -0700
Branch: REL_17_STABLE [fe0b5bd6d] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [7c1a8805a] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [f443d0a0a] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [7c2ba321d] 2026-08-10 06:38:34 -0700
Branch: master [90649b6f8] 2026-08-10 06:37:47 -0700
Branch: REL_19_STABLE [3b2238fbe] 2026-08-10 06:38:03 -0700
Branch: REL_18_STABLE [dddc8a69f] 2026-08-10 06:38:10 -0700
Branch: REL_17_STABLE [8e87bd473] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [84b6a7a06] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [4f8b37b6b] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [1e3014f37] 2026-08-10 06:38:34 -0700
-->
     <para>
      Harden <type>tsvector</type> and <type>tsquery</type> code against
      overly long values (both individual lexemes and total vector/query
      length) (Tom Lane)
      <ulink url="&commit_baseurl;7c1a8805a">&sect;</ulink>
      <ulink url="&commit_baseurl;84b6a7a06">&sect;</ulink>
     </para>

     <para>
      The documented limits were not enforced in all code paths.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Yuhang Wu, Zhenpeng Lin, Zheng Yu, and Hcamael
      for reporting these problems.
      (CVE-2026-14662)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7bd56f7a3] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [92972e815] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [7f0e1aac7] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [797e3cc4c] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [8c67c4cf5] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [b417744a7] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [cf44ff5e6] 2026-08-10 06:38:35 -0700
Branch: master [60e7329b9] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [42d9749b7] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [2a03f21da] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [8a40f4b09] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [32e0d25d4] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [eb2fa2704] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [c7f462838] 2026-08-10 06:38:35 -0700
-->
     <para>
      Fix various places that mistakenly assumed they would not have to
      deal with more than <literal>FUNC_MAX_ARGS</literal> function
      arguments (Tom Lane)
      <ulink url="&commit_baseurl;8c67c4cf5">&sect;</ulink>
      <ulink url="&commit_baseurl;32e0d25d4">&sect;</ulink>
     </para>

     <para>
      Notably, the server's actual limit on the number of arguments to an
      aggregate function is <literal>FUNC_MAX_ARGS - 1</literal>, but the
      parser failed to enforce that, creating hazards downstream.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Zheng Yu, ylwangtju, and Masahiko Sawada
      for reporting these problems.
      (CVE-2026-14679)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8f7e35b08] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [21a00de43] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [54649de65] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [eb9e55297] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [4c0c1b2cd] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [e926a9aac] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [155dacbc5] 2026-08-10 06:38:35 -0700
Branch: master [1aa601b4f] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [21d8cfb18] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [722695db1] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [83d0a083f] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [7f308dd7c] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [d6e861e19] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [913fe0c31] 2026-08-10 06:38:35 -0700
-->
     <para>
      Reject calls from SQL to functions that take or return
      type <type>internal</type> (Tom Lane)
      <ulink url="&commit_baseurl;4c0c1b2cd">&sect;</ulink>
      <ulink url="&commit_baseurl;7f308dd7c">&sect;</ulink>
     </para>

     <para>
      The existing defenses against doing this have been shown to be
      insufficient, so add more explicit checks.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Amy Burnett (OpenAI Codex Security)
      for reporting this problem.
      (CVE-2026-14680)
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [6713a6e04] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [93b93f28f] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [a1fa24127] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [75a03c569] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [7c3367ab5] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [fb6d1ca8d] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [70a3b4e18] 2026-08-10 06:38:35 -0700
-->
     <para>
      Preserve the ownership of extended statistics objects when they are
      rebuilt by <command>ALTER TABLE</command> (Masahiko Sawada)
      <ulink url="&commit_baseurl;7c3367ab5">&sect;</ulink>
     </para>

     <para>
      Previously, the role running <command>ALTER TABLE</command> gained
      ownership of such objects, but that seems inappropriate.
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [f9729b507] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [a3832a757] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [0ddd9098a] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [5981fe370] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [5e5ea74e3] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [44ea6764b] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [967acab87] 2026-08-10 06:38:35 -0700
-->
     <para>
      When deparsing an <function>EXTRACT()</function> function call,
      quote the field name if needed (Nathan Bossart)
      <ulink url="&commit_baseurl;5e5ea74e3">&sect;</ulink>
     </para>

     <para>
      The parser accepts any string literal as a field name
      in <function>EXTRACT()</function>, deferring validation to
      execution.  If the call is stored and deparsed (for example
      during <application>pg_dump</application>), the string body was
      regurgitated verbatim, allowing SQL injection.
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [a9f6e768a] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [efdb26072] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [2e91f8548] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [fd6d3e7e9] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [24855357c] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [97e277402] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [323af0a4e] 2026-08-10 06:38:36 -0700
Branch: master [53ed5ebd8] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [bb1bc525d] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [57f59ca1d] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [671359605] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [7a761fe40] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [c062734cd] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [b6e45b4f8] 2026-08-10 06:38:36 -0700
Branch: master [4fac4c108] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [424fb7160] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [278053843] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [d1c8aa0b0] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [7ce056b17] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [6dbedd48b] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [1a358b8f2] 2026-08-10 06:38:36 -0700
-->
     <para>
      Check for <literal>USAGE</literal> privilege on data types in places
      that formerly failed to check that (Nathan Bossart)
      <ulink url="&commit_baseurl;24855357c">&sect;</ulink>
      <ulink url="&commit_baseurl;7a761fe40">&sect;</ulink>
      <ulink url="&commit_baseurl;7ce056b17">&sect;</ulink>
     </para>

     <para>
      <command>CREATE TYPE AS RANGE</command> did not check, nor
      did <command>ALTER TABLE OF</command>, nor did commands that create
      stored expressions.  These omissions allowed roles
      without <literal>USAGE</literal> privilege to nonetheless create
      objects depending on the type, possibly blocking the type's owner
      from changing the type later.
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [ffca23839] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [567286b76] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [0b12f56bf] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [1974acf23] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [f5f2da795] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [17b6083db] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [f4174aa84] 2026-08-10 06:38:36 -0700
-->
     <para>
      Invalidate role-dependent cached plans after role changes
      (Ilya Staroverov, Shinya Kato, Nathan Bossart)
      <ulink url="&commit_baseurl;f5f2da795">&sect;</ulink>
     </para>

     <para>
      Role membership, role attribute, and database ownership changes may
      impact the expected behavior of row-level security policies, but
      previously we'd continue to use cached plans that were made
      according to the old state of affairs.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Ilya Staroverov and Shinya Kato
      for reporting this problem.
      (CVE-2026-14666)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3bf185b4b] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [bf1bb7e29] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [203a48209] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [067a64d40] 2026-08-10 06:38:18 -0700
-->
     <para>
      Reject GSSEncRequest after direct SSL connection (Michael Paquier)
     </para>

     <para>
      After establishing a TLS-encrypted connection, the server would
      still accept a request for GSSAPI encryption.  If that succeeded,
      the connection would proceed using TLS encryption, but it would look
      like a GSS connection to the <filename>pg_hba</filename> rules.
      Thus, a <filename>pg_hba</filename> policy intending to disallow TLS
      would not be enforced correctly.
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [feb8b0182] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [4d192fa16] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [822143c4d] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [dec60e8ad] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [fadbe882d] 2026-08-10 06:38:24 -0700
-->
     <para>
      Make mock SCRAM authentication secrets more plausible (Nathan Bossart)
      <ulink url="&commit_baseurl;fadbe882d">&sect;</ulink>
     </para>

     <para>
      If a SCRAM login is attempted against a role that doesn't exist or
      doesn't have a SCRAM secret, we generate a mock secret and carry out
      the authentication handshake anyway, to avoid revealing these facts
      to an attacker.  But the mock secret was made with a fixed iteration
      count, which in itself can be an observable response discrepancy.
      Use the configuration setting <varname>scram_iterations</varname>
      instead, to make the mock secret look more like the installation's
      real secrets.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Radim Marek
      for reporting this problem.
      (CVE-2026-14672)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [c7da85fec] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [457b8737a] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [a14ba29b1] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [c3c830272] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [39f855e0e] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [5737110b6] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [74c59d062] 2026-08-10 06:38:35 -0700
-->
     <para>
      Fix out-of-bounds writes in <application>ecpg</application>
      applications caused by invalid <type>bytea</type> data received from
      the server (Michael Paquier)
      <ulink url="&commit_baseurl;39f855e0e">&sect;</ulink>
     </para>

     <para>
      <application>ecpg</application> assumed without checking that
      any <type>bytea</type> value must begin with <literal>\x</literal>.
      A broken or malicious server might send a string shorter than 2
      bytes, resulting in memory clobber in the application.
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [086f6f176] 2026-08-10 06:37:50 -0700
Branch: REL_19_STABLE [0119aa30e] 2026-08-10 06:38:06 -0700
Branch: REL_18_STABLE [71ca694c7] 2026-08-10 06:38:13 -0700
Branch: REL_17_STABLE [0bfac9e1f] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [33d0c63fb] 2026-08-10 06:38:25 -0700
Branch: REL_15_STABLE [df245c374] 2026-08-10 06:38:31 -0700
Branch: REL_14_STABLE [2006fca40] 2026-08-10 06:38:37 -0700
-->
     <para>
      Do not do backquote expansion on the argument
      of <application>psql</application>'s <command>\unrestrict</command>
      command (Nathan Bossart)
      <ulink url="&commit_baseurl;33d0c63fb">&sect;</ulink>
     </para>

     <para>
      This oversight in the fix for CVE-2025-8714 allows a malicious
      server to inject shell commands into plain-text dump output that
      will be run at restore time on the machine
      running <application>psql</application>, the exact scenario that
      CVE-2025-8714 intended to prevent.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Lucas Velgus, Filip Janus, and Daniel Bakker
      for reporting this problem.
      (CVE-2026-18408)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [13bb73aeb] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [86cd82bf4] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [3392cce5c] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [c2b16f5d4] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [3299c2ba0] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [71ba5705d] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [57aa21f69] 2026-08-10 06:38:35 -0700
-->
     <para>
      Remove <application>pg_dump</application>'s assumption that
      <structname>pg_proc</structname>.<structfield>protrftypes</structfield>
      cannot have more than <literal>FUNC_MAX_ARGS</literal> entries
      (Tom Lane)
      <ulink url="&commit_baseurl;3299c2ba0">&sect;</ulink>
     </para>

     <para>
      Since there could be entries for both input and output arguments,
      it's feasible for this array's length to exceed
      <literal>FUNC_MAX_ARGS</literal> (which constrains only input
      arguments).  Even if that were not so,
      <application>pg_dump</application> cannot assume that the server was
      built with the same value of <literal>FUNC_MAX_ARGS</literal> that
      it has.  An overrun would lead to a memory clobber
      inside <application>pg_dump</application>.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Masahiko Sawada
      for reporting this problem.
      (CVE-2026-19385)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [63cb15f40] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [8c48cd615] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [87c4b8219] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [2d78c34f8] 2026-08-10 06:38:17 -0700
Branch: REL_16_STABLE [477a6bdb0] 2026-08-10 06:38:23 -0700
Branch: REL_15_STABLE [cf4ae7c3b] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [d7fcfead3] 2026-08-10 06:38:35 -0700
-->
     <para>
      Harden <application>PL/Perl</application>
      against <quote>tied</quote> Perl arrays and hashes (Tom Lane)
      <ulink url="&commit_baseurl;477a6bdb0">&sect;</ulink>
     </para>

     <para>
      A tied object that doesn't behave like a regular one could lead to
      memory overwrite, or to constructing a corrupt result array (which
      would likely cause problems later).
     </para>

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

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [776467301] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [a1c1727cb] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [028ee716a] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [b56cc7deb] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [8bbdc0540] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [1eb0d5380] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [aff9dac1c] 2026-08-10 06:38:35 -0700
-->
     <para>
      Fix integer overflows in memory-allocation calculations
      in <application>PL/Perl</application>
      and <application>PL/Tcl</application> (Heikki Linnakangas)
      <ulink url="&commit_baseurl;8bbdc0540">&sect;</ulink>
     </para>

     <para>
      This is the same type of problem as CVE-2026-6473, just in a
      different part of the code, and is fixed in the same way.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      the Tulya Project (Team Dhiutsa, Bitecope Technologies Private Ltd)
      for reporting this problem.
      (CVE-2026-14677)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [0fbf785b1] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [557cc7186] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [0a61fcde0] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [e41c72aff] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [2cc147318] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [e43e74756] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [39d792040] 2026-08-10 06:38:36 -0700
-->
     <para>
      Ensure that <filename>contrib/amcheck</filename> functions
      restrict <varname>search_path</varname> before executing index
      expressions (Noah Misch)
      <ulink url="&commit_baseurl;2cc147318">&sect;</ulink>
     </para>

     <para>
      Because amcheck will run such index expressions as the owner of
      their tables, a caller could potentially
      hijack <varname>search_path</varname>-dependent functions to run
      arbitrary code as the table owner.  By default this is not a
      vulnerability because only superusers are allowed to call amcheck
      functions; but if that privilege was granted out, it created a
      larger hazard than the documentation suggests.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Yuelin Wang and Jacob Brazeal
      for reporting this problem.
      (CVE-2026-14673)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [918683d12] 2026-08-10 06:37:49 -0700
Branch: REL_19_STABLE [62c31b490] 2026-08-10 06:38:05 -0700
Branch: REL_18_STABLE [e88eb4e76] 2026-08-10 06:38:12 -0700
Branch: REL_17_STABLE [c4d51b627] 2026-08-10 06:38:19 -0700
Branch: REL_16_STABLE [61481aa0e] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [74916136f] 2026-08-10 06:38:30 -0700
Branch: REL_14_STABLE [9505175f2] 2026-08-10 06:38:36 -0700
-->
     <para>
      Fix integer overflows in <filename>contrib/fuzzystrmatch</filename>'s
      <function>levenshtein()</function>
      and <function>levenshtein_less_equal()</function> functions
      (Nathan Bossart)
      <ulink url="&commit_baseurl;61481aa0e">&sect;</ulink>
     </para>

     <para>
      Passing large cost values to these functions could cause integer
      overflows, thereby producing nonsensical results, and even causing
      out-of-bounds writes in some cases.
     </para>

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

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [1e2795dde] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [bb02eba53] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [8a31ffc2d] 2026-08-10 06:38:11 -0700
-->
     <para>
      Fix buffer overrun
      in <filename>contrib/pg_stat_statements</filename> (Álvaro Herrera)
     </para>

     <para>
      Query normalization didn't accurately account for the amount of
      space the normalized string would require.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Sajeeb Lohani (with TrendAI Zero Day Initiative) and Yuelin Wang
      for reporting this problem.
      (CVE-2026-14676)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [66c2dbb20] 2026-08-10 06:37:48 -0700
Branch: REL_19_STABLE [aa7b5815e] 2026-08-10 06:38:04 -0700
Branch: REL_18_STABLE [849019a50] 2026-08-10 06:38:11 -0700
Branch: REL_17_STABLE [1af08af69] 2026-08-10 06:38:18 -0700
Branch: REL_16_STABLE [24c88cd39] 2026-08-10 06:38:24 -0700
Branch: REL_15_STABLE [c7c82a88c] 2026-08-10 06:38:29 -0700
Branch: REL_14_STABLE [a74aa0854] 2026-08-10 06:38:35 -0700
-->
     <para>
      Fix datatype error in <filename>contrib/pg_trgm</filename>'s GiST
      picksplit function (Heikki Linnakangas)
      <ulink url="&commit_baseurl;24c88cd39">&sect;</ulink>
     </para>

     <para>
      This mistake resulted in reading past the end of the buffer,
      typically causing bad split decisions; but a crash could ensue
      if you're very unlucky.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Mehmet D. Ince
      for reporting this problem.
      (CVE-2026-14678)
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master Release: REL_19_BR [1fbe2066d] 2026-06-05 12:08:05 -0500
Branch: REL_18_STABLE [79a506228] 2026-06-05 12:08:05 -0500
Branch: REL_17_STABLE [66a5146dc] 2026-06-05 12:08:05 -0500
Branch: REL_16_STABLE [a572dd213] 2026-06-05 12:08:05 -0500
Branch: REL_15_STABLE [b7b513d9a] 2026-06-05 12:08:05 -0500
Branch: REL_14_STABLE [5b72d0279] 2026-06-05 12:08:05 -0500
-->
     <para>
      Remove the plan cache in <filename>contrib/refint</filename>
      (Ayush Tiwari)
      <ulink url="&commit_baseurl;a572dd213">&sect;</ulink>
     </para>

     <para>
      This caching behavior has several serious bugs, notably that
      <function>check_foreign_key()</function> embeds the new key values
      in its cascade-UPDATE queries, so a cached plan reuses the
      originally-needed values rather than the key values that should be
      used.  The simplest solution is to remove it.
     </para>

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

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_16_STABLE [42a3194e5] 2026-05-27 11:49:50 +0300
Branch: REL_15_STABLE [2dfe75f98] 2026-05-27 11:50:31 +0300
Branch: REL_14_STABLE [2bb60eb4f] 2026-05-27 11:50:56 +0300
-->
     <para>
      Fix self-deadlock when replaying WAL generated by an older minor
      version (Andrey Borodin)
      <ulink url="&commit_baseurl;42a3194e5">&sect;</ulink>
     </para>

     <para>
      This error was introduced in the previous set of minor releases.  It
      caused standby servers that were following a primary of an older
      minor release version to get stuck in some scenarios.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [f57df2068] 2026-08-07 17:30:00 +0900
Branch: REL_19_STABLE [7d74b2644] 2026-08-07 17:30:01 +0900
Branch: REL_18_STABLE [4ea497a92] 2026-08-07 17:30:02 +0900
Branch: REL_17_STABLE [3704870b2] 2026-08-07 17:30:03 +0900
Branch: REL_16_STABLE [894da35b3] 2026-08-07 17:30:04 +0900
Branch: REL_15_STABLE [7213cbfa0] 2026-08-07 17:30:05 +0900
Branch: REL_14_STABLE [cec48686a] 2026-08-07 17:30:06 +0900
-->
     <para>
      Fix mis-handling of asynchronous reads when rescanning an
      asynchronous Append plan node (Alexander Korotkov, Gleb Kashkin,
      Etsuro Fujita)
      <ulink url="&commit_baseurl;894da35b3">&sect;</ulink>
     </para>

     <para>
      When an upper plan node rescans an Append before having read the
      entire Append output, we need to discard any in-flight requests sent
      to external servers (by <filename>postgres_fdw</filename> for
      example).  This was not done correctly in cases where a subplan has
      parameter changes or is discarded by partition pruning in the next
      scan.  The outcome could be incorrect query results, an infinite
      loop, or an assertion failure.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [709dfd27f] 2026-07-31 15:36:31 +1200
Branch: REL_19_STABLE [f9282a650] 2026-07-31 15:37:12 +1200
Branch: REL_18_STABLE [02e69be47] 2026-07-31 15:37:42 +1200
Branch: REL_17_STABLE [31f2acde5] 2026-07-31 15:38:10 +1200
Branch: REL_16_STABLE [9a0cd8e73] 2026-07-31 15:38:34 +1200
Branch: REL_15_STABLE [5190732c9] 2026-07-31 15:39:01 +1200
Branch: REL_14_STABLE [6098f35f4] 2026-07-31 15:39:21 +1200
-->
     <para>
      Fix error in partition pruning for RANGE-partitioned tables
      (David Rowley)
      <ulink url="&commit_baseurl;9a0cd8e73">&sect;</ulink>
     </para>

     <para>
      In some cases the DEFAULT partition would be skipped when it should
      not be, which could lead to rows missing from query results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [239eabda4] 2026-07-28 16:09:03 -0400
Branch: REL_19_STABLE [9740c68ff] 2026-07-28 16:09:03 -0400
Branch: REL_18_STABLE [277122036] 2026-07-28 16:09:03 -0400
Branch: REL_17_STABLE [26d6b7dc9] 2026-07-28 16:09:04 -0400
Branch: REL_16_STABLE [6fcee189b] 2026-07-28 16:09:04 -0400
Branch: REL_15_STABLE [53470ffba] 2026-07-28 16:09:04 -0400
Branch: REL_14_STABLE [13b627a3e] 2026-07-28 16:09:04 -0400
-->
     <para>
      Fix planner's nullability and strictness checks
      for <literal><replaceable>value</replaceable> IN
      (<replaceable>array</replaceable>)</literal> expressions
      (Ayush Tiwari)
      <ulink url="&commit_baseurl;6fcee189b">&sect;</ulink>
     </para>

     <para>
      These checks should only succeed if the array operand is known to be
      non-empty, but that consideration was missed, allowing optimizations
      to be applied that should not be.  This could result in wrong query
      answers if the array actually was empty.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [1df9e8d96] 2026-07-18 14:09:10 -0400
Branch: REL_19_STABLE [8bc479627] 2026-07-18 14:09:10 -0400
Branch: REL_18_STABLE [21f5e659e] 2026-07-18 14:09:10 -0400
Branch: REL_17_STABLE [cdcec567d] 2026-07-18 14:09:10 -0400
Branch: REL_16_STABLE [3e1fe25e6] 2026-07-18 14:09:10 -0400
Author: Richard Guo <rguo@postgresql.org>
Branch: master [0da71d90d] 2026-07-20 12:13:11 +0900
Branch: REL_19_STABLE [72457f1df] 2026-07-20 12:15:09 +0900
Branch: REL_18_STABLE [9e40d07e1] 2026-07-20 12:15:57 +0900
Branch: REL_17_STABLE [b308eb366] 2026-07-20 12:16:58 +0900
Branch: REL_16_STABLE [d610d8e8b] 2026-07-20 12:17:40 +0900
-->
     <para>
      Fix incorrect join removal logic (Matheus Alcantara, Richard Guo)
      <ulink url="&commit_baseurl;3e1fe25e6">&sect;</ulink>
      <ulink url="&commit_baseurl;d610d8e8b">&sect;</ulink>
     </para>

     <para>
      In edge cases, it was possible for a constant output value coming
      from within the nullable side of an outer join to not be replaced by
      NULL when it should be.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [06e94eccf] 2026-06-08 11:48:16 -0400
Branch: REL_18_STABLE [11aed8d19] 2026-06-08 11:48:17 -0400
Branch: REL_17_STABLE [19152e3c2] 2026-06-08 11:48:17 -0400
Branch: REL_16_STABLE [cf2bfe073] 2026-06-08 11:48:17 -0400
Branch: REL_15_STABLE [caebac5f1] 2026-06-08 11:48:18 -0400
Branch: REL_14_STABLE [64778fac7] 2026-06-08 11:48:18 -0400
-->
     <para>
      Add missed checks for hashability of equality comparisons on
      container datatypes (arrays, composites, ranges) (Andrei Lepikhov,
      Tom Lane)
      <ulink url="&commit_baseurl;cf2bfe073">&sect;</ulink>
     </para>

     <para>
      The planner must verify hashability of the container's component
      type(s) before deciding it can use a hash-based plan type.  This
      step was missed in some places, leading to <quote>could not identify
      a hash function</quote> failures at execution.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d007800f0] 2026-07-07 23:57:45 +1200
Branch: REL_19_STABLE [fcd58c6d9] 2026-07-07 23:58:29 +1200
Branch: REL_18_STABLE [cf184ec77] 2026-07-07 23:59:08 +1200
Branch: REL_17_STABLE [be63b285e] 2026-07-07 23:59:33 +1200
Branch: REL_16_STABLE [a85732162] 2026-07-08 00:00:03 +1200
Branch: REL_15_STABLE [842e34efa] 2026-07-08 00:00:34 +1200
-->
     <para>
      Fix mis-optimization of <function>COUNT</function> window functions
      that have an <literal>EXCLUDE</literal> clause or
      lack <literal>ORDER BY</literal> (Chengpeng Yan, David Rowley)
      <ulink url="&commit_baseurl;a85732162">&sect;</ulink>
     </para>

     <para>
      These window functions were treated as monotonic when they should
      not be, allowing wrong answers to be computed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [fef160d8b] 2026-08-04 09:06:46 +0200
Branch: REL_19_STABLE [ce6e434ce] 2026-08-04 09:06:46 +0200
Branch: REL_18_STABLE [c374f2807] 2026-08-04 09:06:46 +0200
Branch: REL_17_STABLE [18006c1bd] 2026-08-04 09:06:46 +0200
Branch: REL_16_STABLE [34785a0d5] 2026-08-04 09:06:46 +0200
Branch: REL_15_STABLE [785289de0] 2026-08-04 09:06:46 +0200
Branch: REL_14_STABLE [cad17745e] 2026-08-04 09:06:46 +0200
-->
     <para>
      Fix <command>ALTER COLUMN ... DROP EXPRESSION</command> to work when
      there are multiple levels of partitions (Alberto Piai)
      <ulink url="&commit_baseurl;34785a0d5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a8c2547ea] 2026-07-04 11:34:26 -0400
Branch: REL_19_STABLE [80c7f5467] 2026-07-04 11:34:26 -0400
Branch: REL_18_STABLE [a7f7958ab] 2026-07-04 11:34:26 -0400
Branch: REL_17_STABLE [e99fb3262] 2026-07-04 11:34:26 -0400
Branch: REL_16_STABLE [a69503fb1] 2026-07-04 11:34:26 -0400
Branch: REL_15_STABLE [eada45dd8] 2026-07-04 11:34:26 -0400
Branch: REL_14_STABLE [1b17a6e3c] 2026-07-04 11:34:26 -0400
-->
     <para>
      Disallow renaming a rule to <literal>_RETURN</literal> (Tom Lane)
      <ulink url="&commit_baseurl;a69503fb1">&sect;</ulink>
     </para>

     <para>
      That name is reserved for a view's <literal>ON SELECT</literal>
      rule, but <command>ALTER RULE</command> allowed renaming other rules
      to <literal>_RETURN</literal>, causing trouble later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [b48caa7df] 2026-08-03 12:21:05 -0700
Branch: REL_19_STABLE [9eccdae22] 2026-08-03 12:25:15 -0700
Branch: REL_18_STABLE [a0daa0b41] 2026-08-03 12:25:31 -0700
Branch: REL_17_STABLE [25e54cec7] 2026-08-03 12:25:41 -0700
Branch: REL_16_STABLE [e61d44fde] 2026-08-03 12:25:49 -0700
-->
     <para>
      Fix missing lock release for role membership grants in <command>DROP
      OWNED BY</command> (Jeff Davis)
      <ulink url="&commit_baseurl;e61d44fde">&sect;</ulink>
     </para>

     <para>
      This oversight resulted in a warning message, followed by retaining
      a lock on the membership grant until the end of the transaction.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [96ab9a990] 2026-07-08 08:46:43 +0900
Branch: REL_19_STABLE [eaa561fb6] 2026-07-08 08:48:29 +0900
Branch: REL_18_STABLE [45364e496] 2026-07-08 08:49:12 +0900
Branch: REL_17_STABLE [dcda1f07d] 2026-07-08 08:50:14 +0900
Branch: REL_16_STABLE [485527190] 2026-07-08 08:51:09 +0900
-->
     <para>
      Fix failure of <command>EXPLAIN</command> when
      deparsing <literal>SQL/JSON</literal> aggregates (Richard Guo)
      <ulink url="&commit_baseurl;485527190">&sect;</ulink>
     </para>

     <para>
      Some plan structures resulted in <quote>invalid
      JsonConstructorExpr underlying node type</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [74276e685] 2026-07-28 08:33:23 +0900
Branch: REL_19_STABLE [9f6fb1191] 2026-07-28 08:35:09 +0900
Branch: REL_18_STABLE [e4527519b] 2026-07-28 08:35:12 +0900
Branch: REL_17_STABLE [28269fed6] 2026-07-28 08:35:14 +0900
Branch: REL_16_STABLE [ac222bea5] 2026-07-28 08:35:17 +0900
Branch: REL_15_STABLE [5b3712e31] 2026-07-28 08:35:19 +0900
Branch: REL_14_STABLE [55adef7ab] 2026-07-28 08:35:21 +0900
-->
     <para>
      Fix use of <command>REINDEX CONCURRENTLY</command> with
      a deferred uniqueness constraint (Nitin Motiani)
      <ulink url="&commit_baseurl;ac222bea5">&sect;</ulink>
     </para>

     <para>
      The transient index copy created during <command>REINDEX
      CONCURRENTLY</command> was incorrectly marked as enforcing immediate
      uniqueness, causing spurious reports of constraint violation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [fd2b89854] 2026-08-05 11:40:39 +0200
Branch: REL_19_STABLE [55ea76426] 2026-08-05 11:40:39 +0200
Branch: REL_18_STABLE [011384ba4] 2026-08-05 11:40:39 +0200
Branch: REL_17_STABLE [8acfaa12a] 2026-08-05 11:40:39 +0200
Branch: REL_16_STABLE [b594efe52] 2026-08-05 11:40:39 +0200
Branch: REL_15_STABLE [0de744cd5] 2026-08-05 11:40:39 +0200
Branch: REL_14_STABLE [49a712f32] 2026-08-05 11:40:39 +0200
-->
     <para>
      Fix matching of localized month/day names
      in <function>to_date()</function> (Heikki Linnakangas)
      <ulink url="&commit_baseurl;b594efe52">&sect;</ulink>
     </para>

     <para>
      The matching logic misbehaved in cases where case-folding changes
      the byte length of the string.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [f2ff15e4c] 2026-06-05 07:50:08 +0900
Branch: REL_18_STABLE [273fe9485] 2026-06-05 07:50:12 +0900
Branch: REL_17_STABLE [0c9cbbfb5] 2026-06-05 07:50:13 +0900
Branch: REL_16_STABLE [82116023e] 2026-06-05 07:50:15 +0900
Branch: REL_15_STABLE [c391375ba] 2026-06-05 07:50:16 +0900
Branch: REL_14_STABLE [8bb935d61] 2026-06-05 07:50:18 +0900
-->
     <para>
      Fix incorrect NFC recomposition for Hangul U+11A7 (TBASE)
      (Diego Frias, Michael Paquier)
      <ulink url="&commit_baseurl;82116023e">&sect;</ulink>
     </para>

     <para>
      This character was treated as a valid T syllable, which it is not,
      and hence silently swallowed during normalization.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master Release: REL_19_BR [9234e3337] 2026-06-08 11:47:53 -0700
Branch: REL_18_STABLE [89e648498] 2026-06-08 11:47:40 -0700
Branch: REL_17_STABLE [3805641cb] 2026-06-08 11:48:27 -0700
Branch: REL_16_STABLE [b32df590c] 2026-06-08 11:48:48 -0700
Branch: REL_15_STABLE [a7e0e42a2] 2026-06-08 11:49:11 -0700
Branch: REL_14_STABLE [1e0458172] 2026-06-08 11:49:27 -0700
-->
     <para>
      Avoid possible truncation of output lexemes in case-insensitive
      <literal>synonym</literal> dictionaries (Jeff Davis)
      <ulink url="&commit_baseurl;b32df590c">&sect;</ulink>
     </para>

     <para>
      If folding to lower case increased the byte length of a lexeme, it
      was incorrectly truncated to its original byte length when emitted.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [273a3c776] 2026-06-03 12:47:22 +0900
Branch: REL_18_STABLE [b3f13c032] 2026-06-03 12:47:26 +0900
Branch: REL_17_STABLE [203e238bb] 2026-06-03 12:47:28 +0900
Branch: REL_16_STABLE [8b5580a05] 2026-06-03 12:47:30 +0900
Branch: REL_15_STABLE [259b627d5] 2026-06-03 12:47:32 +0900
Branch: REL_14_STABLE [74d3482f4] 2026-06-03 12:47:34 +0900
-->
     <para>
      Fix typo in <function>hash_record_extended()</function> (Man Zeng)
      <ulink url="&commit_baseurl;8b5580a05">&sect;</ulink>
     </para>

     <para>
      The code failed to initialize the second isnull argument passed to
      FunctionCallInvoke().  This is harmless for existing in-core
      extended hash support functions, which will not examine that value.
      However, extension-provided hash functions could be affected if they
      inspect <literal>PG_ARGISNULL(1)</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [63e7a0d2c] 2026-07-28 10:39:36 -0700
Branch: REL_19_STABLE [28c995948] 2026-07-28 10:39:40 -0700
Branch: REL_18_STABLE [73d63d1c1] 2026-07-28 10:39:43 -0700
Branch: REL_17_STABLE [dcbc96685] 2026-07-28 10:39:47 -0700
Branch: REL_16_STABLE [6c760f6b6] 2026-07-28 10:39:50 -0700
-->
     <para>
      Fix <function>pg_get_publication_tables()</function> to not fail if
      a publishable table is dropped concurrently (Bharath Rupireddy)
      <ulink url="&commit_baseurl;6c760f6b6">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
Branch: master [e8914ec22] 2026-07-06 12:51:29 -0400
Branch: REL_19_STABLE [2ddc45662] 2026-07-06 12:31:42 -0400
Branch: REL_18_STABLE [0c06ebf12] 2026-07-06 12:24:03 -0400
Branch: REL_17_STABLE [52af6fef4] 2026-07-06 12:24:10 -0400
Branch: REL_16_STABLE [6de480156] 2026-07-06 12:24:16 -0400
Branch: REL_15_STABLE [d39b9eed0] 2026-07-06 12:24:23 -0400
Branch: REL_14_STABLE [0115650de] 2026-07-06 12:24:28 -0400
-->
     <para>
      Prevent <function>satisfies_hash_partition()</function> from
      crashing with <literal>VARIADIC NULL</literal> (Robert Haas)
      <ulink url="&commit_baseurl;6de480156">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [ce6bf3cd1] 2026-06-04 12:24:51 -0400
Branch: REL_18_STABLE [c5194139c] 2026-06-04 12:24:51 -0400
Branch: REL_17_STABLE [0626fbfeb] 2026-06-04 12:24:51 -0400
Branch: REL_16_STABLE [ed5ca5828] 2026-06-04 12:24:51 -0400
Branch: REL_15_STABLE [b3a86eb6d] 2026-06-04 12:24:51 -0400
Branch: REL_14_STABLE [262cc4df2] 2026-06-04 12:24:51 -0400
-->
     <para>
      Report invalid-weight errors more cleanly and consistently
      in <function>tsvector_filter()</function> and allied functions
      (Ewan Young)
      <ulink url="&commit_baseurl;ed5ca5828">&sect;</ulink>
     </para>

     <para>
      In particular, report weight characters that are not printable ASCII
      in octal form (<literal>\<replaceable>nnn</replaceable></literal>),
      as <function>charout()</function> would render them.  This avoids
      possibly producing an invalidly-encoded error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [8bf257aeb] 2026-06-12 10:25:45 +0900
Branch: REL_18_STABLE [4c777d6dd] 2026-06-12 10:25:49 +0900
Branch: REL_17_STABLE [6c08cbb7a] 2026-06-12 10:25:51 +0900
Branch: REL_16_STABLE [174076601] 2026-06-12 10:25:53 +0900
Branch: REL_15_STABLE [1d8c72b2e] 2026-06-12 10:25:54 +0900
Branch: REL_14_STABLE [41876c8d7] 2026-06-12 10:25:59 +0900
Branch: master Release: REL_19_BR [0b74df66f] 2026-06-12 12:37:21 +0900
Branch: REL_18_STABLE [0d145be2c] 2026-06-12 12:39:11 +0900
Branch: REL_17_STABLE [940916549] 2026-06-12 12:39:17 +0900
Branch: REL_16_STABLE [fac26fd41] 2026-06-12 12:39:22 +0900
Branch: REL_15_STABLE [9618e790c] 2026-06-12 12:39:34 +0900
Branch: REL_14_STABLE [a17f39aa2] 2026-06-12 12:39:40 +0900
-->
     <para>
      Fix mishandling of namespace nodes in <function>xpath()</function>
      (Michael Paquier)
      <ulink url="&commit_baseurl;174076601">&sect;</ulink>
      <ulink url="&commit_baseurl;fac26fd41">&sect;</ulink>
     </para>

     <para>
      This fix avoids an unexpected <quote>could not copy node</quote>
      error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: REL_16_STABLE [1daeef6e0] 2026-06-18 15:55:02 +0900
Branch: REL_15_STABLE [8af173e28] 2026-06-18 15:54:16 +0900
Branch: REL_14_STABLE [364014327] 2026-06-18 15:51:38 +0900
-->
     <para>
      Treat an undefined jsonpath variable as an error even when no
      variables are supplied (Andrey Rachitskiy)
      <ulink url="&commit_baseurl;1daeef6e0">&sect;</ulink>
     </para>

     <para>
      The <type>jsonb</type> <literal>@?</literal>
      and <literal>@@</literal> operators cannot supply any variables to
      be used in their jsonpath expressions.  This code path erroneously
      treated an unknown jsonpath variable as a JSON null, rather than
      raising an error as expected.  Aside from not being the expected
      behavior, this mistake could result in unbounded memory consumption.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master Release: REL_19_BR [7dd153259] 2026-06-11 16:17:58 +0200
Branch: REL_18_STABLE [35d9a6263] 2026-06-11 16:17:58 +0200
Branch: REL_17_STABLE [d0acd2535] 2026-06-11 16:17:58 +0200
Branch: REL_16_STABLE [60abb3c73] 2026-06-11 16:17:58 +0200
-->
     <para>
      Fix NULL-pointer crash when <literal>IS JSON</literal> or similar
      constructs have an argument that is of string category but lacks a
      cast to type <type>text</type> (Ayush Tiwari)
      <ulink url="&commit_baseurl;60abb3c73">&sect;</ulink>
     </para>

     <para>
      There are no such data types in
      core <productname>PostgreSQL</productname>, but the problem is
      reachable with some extension types.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [b4dfae2ff] 2026-08-04 17:59:13 +1200
Branch: REL_19_STABLE [7746f7492] 2026-08-04 17:59:58 +1200
Branch: REL_18_STABLE [6298a41b4] 2026-08-04 18:00:27 +1200
Branch: REL_17_STABLE [1416f304d] 2026-08-04 18:00:49 +1200
Branch: REL_16_STABLE [86f42357c] 2026-08-04 18:01:10 +1200
Branch: REL_15_STABLE [d782c97e1] 2026-08-04 18:01:31 +1200
Branch: REL_14_STABLE [fec40878c] 2026-08-04 18:01:55 +1200
-->
     <para>
      Avoid machine-dependent behavior when dividing the smallest
      possible <type>money</type> value by -1 (Andrey Rachitskiy)
      <ulink url="&commit_baseurl;86f42357c">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4e68b7e29] 2026-08-02 16:49:17 -0400
Branch: REL_19_STABLE [df8407d7d] 2026-08-02 16:49:18 -0400
Branch: REL_18_STABLE [81b1e7916] 2026-08-02 16:49:18 -0400
Branch: REL_17_STABLE [634a8dcb8] 2026-08-02 16:49:18 -0400
Branch: REL_16_STABLE [83336e3ed] 2026-08-02 16:49:18 -0400
Branch: REL_15_STABLE [025228104] 2026-08-02 16:49:18 -0400
Branch: REL_14_STABLE [dda622edc] 2026-08-02 16:49:18 -0400
-->
     <para>
      Fix crash after out-of-memory failure partway through creation of a
      cache entry for a text search dictionary (Tom Lane)
      <ulink url="&commit_baseurl;83336e3ed">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [330a72052] 2026-08-02 13:22:39 -0400
Branch: REL_19_STABLE [3fe4062cc] 2026-08-02 13:22:39 -0400
Branch: REL_18_STABLE [4689ea9ce] 2026-08-02 13:22:39 -0400
Branch: REL_17_STABLE [5fdea3aa3] 2026-08-02 13:22:39 -0400
Branch: REL_16_STABLE [444038bb7] 2026-08-02 13:22:39 -0400
Branch: REL_15_STABLE [0fb88979b] 2026-08-02 13:22:39 -0400
Branch: REL_14_STABLE [cfc720ef4] 2026-08-02 13:22:39 -0400
-->
     <para>
      Fix memory-safety bugs in processing of incorrect ispell/hunspell
      dictionary files (Andrey Rachitskiy)
      <ulink url="&commit_baseurl;444038bb7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master Release: REL_19_BR [ce146621f] 2026-05-14 15:01:17 +0300
Branch: REL_18_STABLE [1b0dd0815] 2026-05-14 15:06:27 +0300
Branch: REL_17_STABLE [4dfae59a1] 2026-05-14 15:07:03 +0300
Branch: master [c40819ebf] 2026-07-03 18:02:14 +0300
Branch: REL_19_STABLE [8021cdceb] 2026-07-03 18:01:25 +0300
Branch: REL_18_STABLE [3aaefe892] 2026-07-03 18:01:21 +0300
Branch: REL_17_STABLE [4e49f68b7] 2026-07-03 18:01:03 +0300
Branch: REL_16_STABLE [cc3fe7e2a] 2026-07-03 18:01:00 +0300
-->
     <para>
      Prevent access to other sessions' temporary tables (Jim Jones,
      Daniil Davydov, Alexander Korotkov)
      <ulink url="&commit_baseurl;cc3fe7e2a">&sect;</ulink>
     </para>

     <para>
      Some code paths failed to prevent this, leading to silently wrong
      (inconsistent) results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [8a045f760] 2026-07-28 10:50:22 +0200
Branch: REL_19_STABLE [70dad584e] 2026-07-28 10:50:53 +0200
Branch: REL_18_STABLE [7becb647d] 2026-07-28 10:52:59 +0200
Branch: REL_17_STABLE [ba5e46329] 2026-07-28 10:56:27 +0200
Branch: REL_16_STABLE [006ac761e] 2026-07-28 10:56:34 +0200
Branch: REL_15_STABLE [7123abab7] 2026-07-28 10:56:38 +0200
Branch: REL_14_STABLE [15fd7a3e2] 2026-07-28 10:56:39 +0200
-->
     <para>
      Honor query cancel and vacuum delay during GIN index posting-tree
      cleanup (Paul Kim, Alexander Korotkov)
      <ulink url="&commit_baseurl;006ac761e">&sect;</ulink>
     </para>

     <para>
      The posting tree for a common value can be large, so that this
      missed check could allow vacuum to run for a long time before
      noticing an interrupt.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [c9ea37231] 2026-07-17 15:53:10 -0400
Branch: REL_19_STABLE [1d4c81ad6] 2026-07-17 15:53:07 -0400
Branch: REL_18_STABLE [959b7fa2c] 2026-07-17 15:53:05 -0400
Branch: REL_17_STABLE [355faed5a] 2026-07-17 15:53:02 -0400
Branch: REL_16_STABLE [e58192546] 2026-07-17 15:53:00 -0400
Branch: REL_15_STABLE [126141425] 2026-07-17 15:52:58 -0400
Branch: REL_14_STABLE [e4ad22eb0] 2026-07-17 15:52:56 -0400
-->
     <para>
      Fix possible mis-decoding of index tuples during GiST and SP-GiST
      index-only scans (Peter Geoghegan)
      <ulink url="&commit_baseurl;e58192546">&sect;</ulink>
     </para>

     <para>
      This error could lead to emitting corrupted data from an index-only
      scan plan.  The only affected core opclass is GiST's range_ops, and
      it could only fail if the range column were not the first index
      column.
     </para>
    </listitem>

    <listitem>
<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
Branch: master [a2fd8d65a] 2026-07-15 15:51:05 -0400
Branch: REL_19_STABLE [7a103928a] 2026-07-15 15:52:43 -0400
Branch: REL_18_STABLE [eabc9a9dd] 2026-07-15 15:54:54 -0400
Branch: REL_17_STABLE [768ae083e] 2026-07-15 15:56:06 -0400
Branch: REL_16_STABLE [0fd5595aa] 2026-07-15 15:58:15 -0400
-->
     <para>
      Ensure that the new last block of a bulk-extended table is added to
      its free space map promptly (Jingtang Zhang)
      <ulink url="&commit_baseurl;0fd5595aa">&sect;</ulink>
     </para>

     <para>
      An off-by-one error caused the last block of a multi-block table
      extension to not be marked as free in the map.  This would
      eventually get corrected by vacuum, but meanwhile the space wouldn't
      be used.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [f25a07b2d] 2026-06-19 12:52:00 -0400
Branch: REL_18_STABLE [aa80c34c8] 2026-06-19 12:52:00 -0400
Branch: REL_17_STABLE [f0a831ef3] 2026-06-19 12:52:00 -0400
Branch: REL_16_STABLE [9951e3d38] 2026-06-19 12:52:00 -0400
Branch: REL_15_STABLE [4647ac142] 2026-06-19 12:52:00 -0400
Branch: REL_14_STABLE [4b3bc6b71] 2026-06-19 12:52:00 -0400
-->
     <para>
      When creating directories, tolerate concurrent creation of the same
      directory (Andrew Dunstan, Tom Lane)
      <ulink url="&commit_baseurl;9951e3d38">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_19_BR [2fbb21170] 2026-05-27 18:41:14 +0300
Branch: REL_18_STABLE [c8cd3d697] 2026-05-27 18:36:28 +0300
Branch: REL_17_STABLE [3a9909eda] 2026-05-27 18:36:51 +0300
Branch: REL_16_STABLE [d9bc0d96c] 2026-05-27 18:37:12 +0300
Branch: REL_15_STABLE [5fa137727] 2026-05-27 18:37:32 +0300
Branch: REL_14_STABLE [5100bdbd3] 2026-05-27 18:37:56 +0300
Branch: master Release: REL_19_BR [fd93ee100] 2026-05-27 18:41:03 +0300
Branch: REL_18_STABLE [f9d5a52da] 2026-05-27 18:36:25 +0300
Branch: REL_17_STABLE [c1588f92a] 2026-05-27 18:36:46 +0300
Branch: REL_16_STABLE [d44cd4674] 2026-05-27 18:37:04 +0300
Branch: REL_15_STABLE [ef3d7b15e] 2026-05-27 18:37:27 +0300
Branch: REL_14_STABLE [36b6ed260] 2026-05-27 18:37:48 +0300
-->
     <para>
      Prevent creation of dangling object dependencies by acquiring a
      shared lock on any object being depended on (Bertrand Drouvot)
      <ulink url="&commit_baseurl;d9bc0d96c">&sect;</ulink>
      <ulink url="&commit_baseurl;d44cd4674">&sect;</ulink>
     </para>

     <para>
      The shared lock will conflict with any attempt to drop the
      depended-on object, eliminating the race condition that formerly
      existed.  For example, if one session drops a schema (that appears
      empty to it) concurrently with some other session creating a
      function in that schema, previously both transactions could commit,
      leaving an invalid function definition behind.  Now, one transaction
      or the other will fail.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [ce3f19e26] 2026-07-25 12:01:35 -0400
Branch: REL_19_STABLE [2aa3c6d1f] 2026-07-25 12:01:34 -0400
Branch: REL_18_STABLE [d560e730e] 2026-07-25 12:01:32 -0400
Branch: REL_17_STABLE [8434c9385] 2026-07-25 12:01:30 -0400
Branch: REL_16_STABLE [e321faaae] 2026-07-25 12:01:28 -0400
Branch: REL_15_STABLE [5d18105ca] 2026-07-25 12:01:26 -0400
Branch: REL_14_STABLE [2fc3e1b44] 2026-07-25 12:01:24 -0400
-->
     <para>
      Fix race condition in conflict detection
      for <literal>SERIALIZABLE</literal> isolation mode
      (Peter Geoghegan)
      <ulink url="&commit_baseurl;e321faaae">&sect;</ulink>
     </para>

     <para>
      A conflict could be missed when examining an initially-empty btree
      index, allowing failure of serializability due to improperly
      allowing conflicting transactions to commit.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master Release: REL_19_BR [d79bf7612] 2026-05-27 16:25:56 -0700
Branch: REL_18_STABLE [1a9b1cc18] 2026-05-27 16:25:59 -0700
Branch: REL_17_STABLE [a651b8a89] 2026-05-27 16:26:02 -0700
Branch: REL_16_STABLE [cdb9b2830] 2026-05-27 16:26:05 -0700
Branch: REL_15_STABLE [159324a73] 2026-05-27 16:26:08 -0700
-->
     <para>
      Fix race condition in ProcSignalBarrier code (Masahiko Sawada)
      <ulink url="&commit_baseurl;cdb9b2830">&sect;</ulink>
     </para>

     <para>
      This error could result in processes getting stuck, typically after
      reporting <quote>still waiting for backend with
      PID <replaceable>nnnn</replaceable> to accept
      ProcSignalBarrier</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [563104523] 2026-05-27 14:48:56 +0900
Branch: REL_18_STABLE [ae08eb168] 2026-05-27 14:48:59 +0900
Branch: REL_17_STABLE [d489c4439] 2026-05-27 14:49:01 +0900
Branch: REL_16_STABLE [65d04df60] 2026-05-27 14:49:02 +0900
Branch: REL_15_STABLE [d5cc6df60] 2026-05-27 14:49:04 +0900
Branch: REL_14_STABLE [8007d1185] 2026-05-27 14:52:31 +0900
Branch: master Release: REL_19_BR [84b9d6bce] 2026-05-27 17:19:20 +0900
Branch: REL_18_STABLE [12c9b8b42] 2026-05-27 17:19:53 +0900
Branch: REL_17_STABLE [e14b4ea4a] 2026-05-27 17:19:55 +0900
Branch: REL_16_STABLE [4e8edf53f] 2026-05-27 17:19:56 +0900
Branch: REL_15_STABLE [e786fb5aa] 2026-05-27 17:19:58 +0900
Branch: REL_14_STABLE [db4d12fc9] 2026-05-27 17:20:00 +0900
-->
     <para>
      Fix race conditions when a set of processes that belong to the same
      lock group exit at the same time (Vlad Lesin)
      <ulink url="&commit_baseurl;65d04df60">&sect;</ulink>
      <ulink url="&commit_baseurl;4e8edf53f">&sect;</ulink>
     </para>

     <para>
      These errors could lead to PANIC aborts, with messages such
      as <quote>latch already owned</quote>.  The issue does not normally
      arise in regular parallel query, since the leader won't exit before
      seeing its workers finish; but some extensions reach the problem.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [eb4e7224a] 2026-06-11 17:28:57 +0900
Branch: REL_18_STABLE [b4bd13850] 2026-06-11 17:29:38 +0900
Branch: REL_17_STABLE [16b89ff04] 2026-06-11 17:29:39 +0900
Branch: REL_16_STABLE [8cd687c44] 2026-06-11 17:29:41 +0900
Branch: REL_16_STABLE [2a04624da] 2026-06-11 14:43:07 +0900
Branch: master Release: REL_19_BR [a8ee70bd5] 2026-06-12 11:44:11 +0900
Branch: REL_18_STABLE [4bff3aa51] 2026-06-12 11:44:14 +0900
Branch: REL_17_STABLE [ab5334d8b] 2026-06-12 11:44:16 +0900
Branch: REL_16_STABLE [d9b49e5b4] 2026-06-12 11:44:19 +0900
-->
     <para>
      Fix race with timeline selection in logical decoding during standby
      promotion (Bertrand Drouvot)
      <ulink url="&commit_baseurl;8cd687c44">&sect;</ulink>
      <ulink url="&commit_baseurl;2a04624da">&sect;</ulink>
      <ulink url="&commit_baseurl;d9b49e5b4">&sect;</ulink>
     </para>

     <para>
      Logical decoding being performed on the standby could fail with
      a <quote>requested WAL segment has already been removed</quote>
      error.  A repeat attempt would succeed, so there was no permanent
      problem but there was an availability hazard.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [c37b38806] 2026-05-23 08:10:07 +0900
Branch: REL_18_STABLE [b903d1792] 2026-05-23 08:10:12 +0900
Branch: REL_17_STABLE [c89499a79] 2026-05-23 08:10:14 +0900
Branch: REL_16_STABLE [e037a4199] 2026-05-23 08:10:15 +0900
Branch: REL_15_STABLE [065cbfb88] 2026-05-23 08:10:17 +0900
Branch: REL_14_STABLE [e18b77153] 2026-05-23 08:10:18 +0900
-->
     <para>
      Avoid exposing a WAL receiver's full connection string during timeline
      jumps (Chao Li)
      <ulink url="&commit_baseurl;e037a4199">&sect;</ulink>
     </para>

     <para>
      The <structname>pg_stat_wal_receiver</structname> view should show a
      sanitized version of the connection string, without sensitive data.
      But it transiently showed the full string when we re-use an existing
      WAL receiver.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master Release: REL_19_BR [bf7d19be9] 2026-05-16 18:01:35 -0700
Branch: REL_18_STABLE [dc3db3a83] 2026-05-16 18:01:38 -0700
Branch: REL_17_STABLE [15f4e3d0c] 2026-05-16 18:01:39 -0700
Branch: REL_16_STABLE [59759e1a5] 2026-05-16 18:01:39 -0700
Branch: REL_15_STABLE [871d4f5b6] 2026-05-16 18:01:40 -0700
Branch: REL_14_STABLE [510a05f07] 2026-05-16 18:01:46 -0700
-->
     <para>
      Use run-time checks, not just Asserts, to verify the correct number
      of columns in tuples received during logical replication (Varik
      Matevosyan)
      <ulink url="&commit_baseurl;59759e1a5">&sect;</ulink>
     </para>

     <para>
      A malicious or buggy publisher could send inconsistent numbers of
      columns.  While we could not find a scenario in which this would
      have serious ill effects, extra caution seems warranted.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [a75bd485b] 2026-06-15 15:35:37 -0400
Branch: REL_18_STABLE [abb582555] 2026-06-15 15:35:37 -0400
Branch: REL_17_STABLE [14810cc0d] 2026-06-15 15:35:37 -0400
Branch: REL_16_STABLE [26d6c19d0] 2026-06-15 15:35:37 -0400
Branch: REL_15_STABLE [819e5b964] 2026-06-15 15:35:37 -0400
Branch: REL_14_STABLE [2a00840e8] 2026-06-15 15:35:37 -0400
-->
     <para>
      Clean up quoting of string parameters within constructed replication
      commands (Tom Lane)
      <ulink url="&commit_baseurl;26d6c19d0">&sect;</ulink>
     </para>

     <para>
      Various places that generate replication commands were not being
      adequately careful about quoting replication slot names and other
      parameters that need to be inserted into those commands.  This could
      result in unexpected syntax errors in those commands.  In principle,
      a crafted replication slot name could result in SQL injection; but
      such a scenario seems very unlikely to occur in practice, since
      replication operations can only be invoked by highly-privileged
      users and there is no reason for them to use a slot name coming from
      an untrustworthy source.
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [acaa100f9] 2026-07-28 12:33:28 -0700
Branch: REL_19_STABLE [2289e65e1] 2026-07-28 12:33:31 -0700
Branch: REL_18_STABLE [b563fc6bd] 2026-07-28 12:33:35 -0700
Branch: REL_17_STABLE [8c4519c71] 2026-07-28 12:33:40 -0700
Branch: REL_16_STABLE [744618346] 2026-07-28 12:33:43 -0700
Branch: REL_15_STABLE [0dbfb8520] 2026-07-28 12:33:47 -0700
Branch: REL_14_STABLE [c2d34db0a] 2026-07-28 12:33:50 -0700
-->
     <para>
      Fix logical decoding of empty prepared transactions (Masahiko Sawada)
      <ulink url="&commit_baseurl;744618346">&sect;</ulink>
     </para>

     <para>
      A prepared transaction that did not cause any decodable updates could
      result in sending <command>COMMIT/ROLLBACK PREPARED</command> to the
      output plugin with no preceding <command>PREPARE</command>.  For the
      built-in subscriber this breaks replication, and other plugins will
      probably not like it either.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [8e684ce11] 2026-06-30 08:48:47 +0900
Branch: REL_19_STABLE [22af34b98] 2026-06-30 08:50:08 +0900
Branch: REL_18_STABLE [627605713] 2026-06-30 08:50:50 +0900
Branch: REL_17_STABLE [a1ed6a9a0] 2026-06-30 08:51:22 +0900
Branch: REL_16_STABLE [913d3b610] 2026-06-30 08:51:51 +0900
Branch: REL_15_STABLE [d2980067b] 2026-06-30 08:52:50 +0900
-->
     <para>
      Fix corruption of unlogged sequences after standby promotion
      (Fujii Masao)
      <ulink url="&commit_baseurl;913d3b610">&sect;</ulink>
     </para>

     <para>
      Previously, if an unlogged sequence was created on the primary and
      replicated to a standby, accessing the sequence after promoting the
      standby could fail with <quote>bad magic number in sequence</quote>
      or related errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [b614de487] 2026-07-29 17:15:45 +0200
Branch: REL_19_STABLE [bef46aed3] 2026-07-29 17:15:45 +0200
Branch: REL_18_STABLE [331016322] 2026-07-29 17:15:45 +0200
Branch: REL_17_STABLE [2cf28d1b9] 2026-07-29 17:15:45 +0200
Branch: REL_16_STABLE [5dbeb69bc] 2026-07-29 17:15:45 +0200
Branch: REL_15_STABLE [8f64cc83f] 2026-07-29 17:15:45 +0200
Branch: REL_14_STABLE [5fb3c6389] 2026-07-29 17:15:45 +0200
-->
     <para>
      Fix cascading standby reconnect failure after archive fallback
      (Marco Nenciarini)
      <ulink url="&commit_baseurl;5dbeb69bc">&sect;</ulink>
     </para>

     <para>
      A cascading standby could fail to reconnect to its upstream standby
      with <quote>requested starting point ... is ahead of the WAL flush
      position</quote> after falling back to archive recovery.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_19_BR [f2081a780] 2026-06-03 18:44:56 +0900
Branch: REL_18_STABLE [f833c9207] 2026-06-03 18:46:49 +0900
Branch: REL_17_STABLE [080d61f07] 2026-06-03 18:47:10 +0900
Branch: REL_16_STABLE [51e79222c] 2026-06-03 18:47:31 +0900
Branch: REL_15_STABLE [a4eb59d40] 2026-06-03 18:47:46 +0900
Branch: REL_14_STABLE [968c50845] 2026-06-03 18:47:52 +0900
-->
     <para>
      Avoid race condition while dropping ephemeral replication slots
      (Zhijie Hou)
      <ulink url="&commit_baseurl;51e79222c">&sect;</ulink>
     </para>

     <para>
      The slot-releasing code performed some additional updates to the
      replication slot's shared-memory entry after releasing the slot.
      This is unsafe since another session could immediately re-use the
      dropped slot's shared-memory entry.  Skip those updates in the case
      of an ephemeral slot.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_19_BR [422e54e30] 2026-05-13 11:44:31 +0900
Branch: REL_18_STABLE [d9cd9b4d7] 2026-05-13 11:46:08 +0900
Branch: REL_17_STABLE [f2acab534] 2026-05-13 11:46:12 +0900
Branch: REL_16_STABLE [d140237da] 2026-05-13 11:46:17 +0900
Branch: REL_15_STABLE [b5f7e7569] 2026-05-13 11:46:21 +0900
Branch: REL_14_STABLE [e3c4e3746] 2026-05-13 11:46:26 +0900
-->
     <para>
      Fix stale progress reports during logical replication table
      synchronization (Shinya Kato)
      <ulink url="&commit_baseurl;d140237da">&sect;</ulink>
     </para>

     <para>
      Previously, the <structname>pg_stat_progress_copy</structname> view
      in the subscriber would continue to show the
      initial <command>COPY</command> operation as active even after the
      data copy had finished.  The stale entry remained visible until
      synchronization caught up with the publisher.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [55f0a13e9] 2026-07-01 23:04:18 +0900
Branch: REL_19_STABLE [b70000837] 2026-07-01 23:05:04 +0900
Branch: REL_18_STABLE [e7564ee8c] 2026-07-01 23:05:12 +0900
Branch: REL_17_STABLE [e2ea6bfed] 2026-07-01 23:05:34 +0900
Branch: REL_16_STABLE [7cbd80340] 2026-07-01 23:06:43 +0900
Branch: REL_15_STABLE [cf7530cf7] 2026-07-01 23:06:49 +0900
Branch: REL_18_STABLE [e2ad214dd] 2026-07-06 09:46:15 +0900
Branch: REL_17_STABLE [a240e8cd2] 2026-07-06 09:47:56 +0900
Branch: REL_16_STABLE [fffa4d870] 2026-07-06 09:48:01 +0900
Branch: REL_15_STABLE [a8fb98b7b] 2026-07-06 09:48:06 +0900
-->
     <para>
      Clear base backup progress on backup failure (Chao Li)
      <ulink url="&commit_baseurl;7cbd80340">&sect;</ulink>
      <ulink url="&commit_baseurl;fffa4d870">&sect;</ulink>
     </para>

     <para>
      Previously the <structname>pg_stat_progress_basebackup</structname>
      view would continue to show a stale progress entry after a failure,
      until the replication client
      disconnected.  <application>pg_basebackup</application> normally
      disconnects immediately, but other clients might not.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [850b9218c] 2026-06-18 11:49:30 +0900
Branch: REL_18_STABLE [5cc59834b] 2026-06-18 11:49:34 +0900
Branch: REL_17_STABLE [2e0c61aed] 2026-06-18 11:49:36 +0900
Branch: REL_16_STABLE [bf4616b59] 2026-06-18 11:49:39 +0900
Branch: REL_15_STABLE [1e9e62193] 2026-06-18 11:49:41 +0900
Branch: REL_18_STABLE [8a4f389dd] 2026-06-18 14:48:37 +0900
Branch: REL_17_STABLE [39e649d44] 2026-06-18 14:48:40 +0900
Branch: REL_16_STABLE [7c457ea15] 2026-06-18 14:48:42 +0900
Branch: REL_15_STABLE [75aca8b93] 2026-06-18 14:48:43 +0900
Branch: REL_18_STABLE [fe464e9e6] 2026-06-23 07:58:04 +0900
Branch: REL_17_STABLE [afb076b29] 2026-06-23 07:59:00 +0900
Branch: REL_16_STABLE [e34b1ff5d] 2026-06-23 07:59:02 +0900
Branch: REL_15_STABLE [9e4771825] 2026-06-23 07:59:03 +0900
-->
     <para>
      Fix possible PANIC due to concurrent drop of pgstats entries
      when <varname>track_functions</varname> is enabled (Sami Imseih,
      Michael Paquier)
      <ulink url="&commit_baseurl;bf4616b59">&sect;</ulink>
      <ulink url="&commit_baseurl;7c457ea15">&sect;</ulink>
      <ulink url="&commit_baseurl;e34b1ff5d">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [4069df21b] 2026-08-07 14:23:28 +0900
Branch: REL_19_STABLE [89fc6a7c1] 2026-08-07 14:23:33 +0900
Branch: REL_18_STABLE [2fd8d45ec] 2026-08-07 14:23:35 +0900
Branch: REL_17_STABLE [fc9283b21] 2026-08-07 14:23:36 +0900
Branch: REL_16_STABLE [636bcd6a5] 2026-08-07 14:23:38 +0900
Branch: REL_15_STABLE [10e20e59e] 2026-08-07 14:23:39 +0900
-->
     <para>
      Clean up broken local pgstats entry after failing to obtain space for
      the corresponding shared hashtable entry (Niall Newman)
      <ulink url="&commit_baseurl;636bcd6a5">&sect;</ulink>
     </para>

     <para>
      Failure to do this led to a null-pointer dereference the next time
      the local entry was used.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master Release: REL_19_BR [4015abe14] 2026-06-24 09:09:48 +0900
Branch: REL_18_STABLE [e430ecc59] 2026-06-24 09:11:56 +0900
Branch: REL_17_STABLE [d424d06ed] 2026-06-24 09:14:06 +0900
Branch: REL_16_STABLE [3854f4afc] 2026-06-24 09:15:08 +0900
Branch: REL_15_STABLE [9b2a6ccc4] 2026-06-24 09:16:24 +0900
Branch: REL_14_STABLE [e520ad34b] 2026-06-24 09:17:36 +0900
-->
     <para>
      In <application>PL/Perl</application>, avoid NULL pointer
      dereference crash when working with an
      invalid <type>PostgreSQL::InServer::ARRAY</type> object (Xing Guo)
      <ulink url="&commit_baseurl;3854f4afc">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master Release: REL_19_BR [8612f0b7c] 2026-06-29 11:38:39 +0900
Branch: REL_18_STABLE [53482fcb9] 2026-06-29 11:39:50 +0900
Branch: REL_17_STABLE [3dc59c173] 2026-06-29 11:40:49 +0900
Branch: REL_16_STABLE [e92f23bde] 2026-06-29 11:41:50 +0900
Branch: REL_15_STABLE [12bff46ff] 2026-06-29 11:43:26 +0900
Branch: REL_14_STABLE [0b7719f74] 2026-06-29 11:44:35 +0900
Branch: REL_14_STABLE [309dc4526] 2026-06-29 14:21:15 +0900
-->
     <para>
      In <application>PL/Python</application>, properly check for errors
      when working with sequence and mapping objects (Richard Guo)
      <ulink url="&commit_baseurl;e92f23bde">&sect;</ulink>
     </para>

     <para>
      Previously, a broken object or an unhandled exception could result
      in a NULL pointer dereference crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [ffd080d94] 2026-07-07 18:45:34 +0300
Branch: REL_19_STABLE [eeb2940ae] 2026-07-07 18:46:10 +0300
Branch: REL_18_STABLE [2167302b7] 2026-07-07 18:46:24 +0300
Branch: REL_17_STABLE [c162810a5] 2026-07-07 18:46:58 +0300
Branch: REL_16_STABLE [d3f329656] 2026-07-07 18:47:07 +0300
Branch: REL_15_STABLE [4ecba7fa3] 2026-07-07 18:53:51 +0300
Branch: REL_14_STABLE [1b018b5d1] 2026-07-07 18:54:09 +0300
Branch: master [343594a26] 2026-07-07 18:45:37 +0300
Branch: REL_19_STABLE [7f8745543] 2026-07-07 18:46:14 +0300
Branch: REL_18_STABLE [bb0a54518] 2026-07-07 18:46:33 +0300
Branch: REL_17_STABLE [177a2a2e3] 2026-07-07 18:46:58 +0300
Branch: REL_16_STABLE [477bc27a5] 2026-07-07 18:47:07 +0300
Branch: REL_15_STABLE [05908afcd] 2026-07-07 18:53:52 +0300
Branch: REL_14_STABLE [d3888c90a] 2026-07-07 18:54:09 +0300
Branch: master [d293f0345] 2026-07-09 18:34:24 +0300
Branch: REL_19_STABLE [536512f34] 2026-07-09 18:34:53 +0300
Branch: REL_18_STABLE [27761c015] 2026-07-09 18:35:12 +0300
Branch: REL_17_STABLE [0958c3ea4] 2026-07-09 18:35:24 +0300
Branch: REL_16_STABLE [6243ea6c3] 2026-07-09 18:35:37 +0300
Branch: REL_15_STABLE [21a6c69ea] 2026-07-09 18:35:47 +0300
Branch: REL_14_STABLE [f5f569713] 2026-07-09 18:36:30 +0300
Branch: master [17accbe0f] 2026-07-09 18:34:27 +0300
Branch: REL_19_STABLE [d9eb70c9c] 2026-07-09 18:34:53 +0300
Branch: REL_18_STABLE [87c3a79ea] 2026-07-09 18:35:12 +0300
Branch: REL_17_STABLE [bab0a2db7] 2026-07-09 18:35:24 +0300
Branch: REL_16_STABLE [56988064b] 2026-07-09 18:35:37 +0300
Branch: REL_15_STABLE [5ba13f8c0] 2026-07-09 18:36:18 +0300
Branch: REL_14_STABLE [7532f2117] 2026-07-09 18:36:41 +0300
-->
     <para>
      In <application>libpq</application>, always drain all pending bytes
      from the SSL or GSS decryption buffer
      during <function>pqReadData()</function> (Jacob Champion)
      <ulink url="&commit_baseurl;d3f329656">&sect;</ulink>
      <ulink url="&commit_baseurl;477bc27a5">&sect;</ulink>
      <ulink url="&commit_baseurl;6243ea6c3">&sect;</ulink>
      <ulink url="&commit_baseurl;56988064b">&sect;</ulink>
     </para>

     <para>
      This avoids edge cases where <application>libpq</application> or its
      calling application waits for more data to arrive on the socket, but
      actually all the data has already arrived.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_19_BR [e0511883c] 2026-06-15 11:28:45 +0300
Branch: REL_18_STABLE [b1ab4bc52] 2026-06-15 11:35:20 +0300
Branch: REL_17_STABLE [e4183c667] 2026-06-15 11:35:41 +0300
Branch: REL_16_STABLE [8d516d2b9] 2026-06-15 11:38:07 +0300
Branch: REL_15_STABLE [0f63b74a4] 2026-06-15 11:38:30 +0300
Branch: REL_14_STABLE [1b79c8d1a] 2026-06-15 11:38:40 +0300
-->
     <para>
      Allow <application>libpq</application> to accept
      ParameterDescription messages exceeding 30000 bytes (Ning Sun)
      <ulink url="&commit_baseurl;8d516d2b9">&sect;</ulink>
     </para>

     <para>
      Previously, this message type was not among those
      that <application>libpq</application>'s validity heuristics believed
      could be long.  The limit resulted in failure for prepared queries
      having more than 7498 parameters, which is unlikely but supported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_19_BR [4484165b0] 2026-06-08 17:09:46 +0900
Branch: REL_18_STABLE [081434b0f] 2026-06-08 17:10:25 +0900
Branch: REL_17_STABLE [fe8c0a762] 2026-06-08 17:11:12 +0900
Branch: REL_16_STABLE [4d4b73cfd] 2026-06-08 17:14:10 +0900
Branch: REL_15_STABLE [bfeddcf09] 2026-06-08 17:14:15 +0900
Branch: REL_14_STABLE [9e8fd9f7a] 2026-06-08 17:14:20 +0900
-->
     <para>
      Reject multiple descriptor header items
      in <application>ecpg</application>'s <literal>GET/SET
      DESCRIPTOR</literal> statements (Masashi Kamura)
      <ulink url="&commit_baseurl;4d4b73cfd">&sect;</ulink>
     </para>

     <para>
      Previously the grammar allowed this syntax, but broken C code was
      generated.  Adjust the grammar and the documentation to allow only
      one header item.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [3d0d6741d] 2026-06-08 14:37:51 +0900
Branch: REL_18_STABLE [07a6c262b] 2026-06-08 14:37:56 +0900
Branch: REL_17_STABLE [efd885d05] 2026-06-08 14:37:57 +0900
Branch: REL_16_STABLE [1edbe6695] 2026-06-08 14:37:59 +0900
Branch: REL_15_STABLE [022ba5c61] 2026-06-08 14:38:00 +0900
Branch: REL_14_STABLE [a4ca91ea1] 2026-06-08 14:38:01 +0900
-->
     <para>
      Make line widths match in <application>psql</application>'s expanded
      aligned output format (Pavel Stehule)
      <ulink url="&commit_baseurl;1edbe6695">&sect;</ulink>
     </para>

     <para>
      When the table's data rows are narrower than the record header lines,
      widen the data rows to match the headers, avoiding unsightly output.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [38afc3dcb] 2026-07-25 19:08:27 +0900
Branch: REL_19_STABLE [77aeca802] 2026-07-25 19:09:19 +0900
Branch: REL_18_STABLE [f2d6cf880] 2026-07-25 19:10:15 +0900
Branch: REL_17_STABLE [41949c6f3] 2026-07-25 19:10:22 +0900
Branch: REL_16_STABLE [844bc718a] 2026-07-25 19:10:28 +0900
Branch: REL_15_STABLE [e6e8a3078] 2026-07-25 19:10:49 +0900
Branch: REL_14_STABLE [4e19081da] 2026-07-25 19:11:34 +0900
-->
     <para>
      Fix <application>psql</application>'s privilege check for showing
      database size in <command>\l+</command> (Christoph Berg)
      <ulink url="&commit_baseurl;844bc718a">&sect;</ulink>
     </para>

     <para>
      The underlying server function permits users who
      have <literal>pg_read_all_stats</literal> privileges to see the
      sizes of all databases, even if they lack <literal>CONNECT</literal>
      privilege.  But <application>psql</application> was unaware of that
      provision and would not call the function unless the user
      has <literal>CONNECT</literal> privilege.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [6d4ca6de9] 2026-07-03 13:48:59 +0900
Branch: REL_19_STABLE [558e0de6d] 2026-07-03 13:50:01 +0900
Branch: REL_18_STABLE [598af79b1] 2026-07-03 13:50:08 +0900
Branch: REL_17_STABLE [355a4fcf9] 2026-07-03 13:50:15 +0900
Branch: REL_16_STABLE [f9afdb6d1] 2026-07-03 13:50:20 +0900
Branch: REL_15_STABLE [c25737c89] 2026-07-03 13:50:26 +0900
Branch: REL_14_STABLE [2d44bb900] 2026-07-03 13:50:51 +0900
-->
     <para>
      Fix <application>psql</application>'s tab completion
      for <command>\df</command> to consider procedures too
      (Erik Wienhold)
      <ulink url="&commit_baseurl;f9afdb6d1">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_19_BR [61f8a85a5] 2026-05-14 12:30:34 +0900
Branch: REL_18_STABLE [98dd6c204] 2026-05-14 12:31:14 +0900
Branch: REL_17_STABLE [52b3e7001] 2026-05-14 12:31:19 +0900
Branch: REL_16_STABLE [6432a4cd6] 2026-05-14 12:31:25 +0900
Branch: REL_15_STABLE [f18fcd9a4] 2026-05-14 12:31:43 +0900
-->
     <para>
      Fix thread-safety bug in <application>pgbench</application>
      (Fujii Masao)
      <ulink url="&commit_baseurl;6432a4cd6">&sect;</ulink>
     </para>

     <para>
      When <application>pgbench</application> runs with multiple threads
      and the <option>--verbose-errors</option> option, different threads
      could attempt to use the same buffer to construct error messages,
      leading to corrupted log output.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_19_BR [263d1e6df] 2026-05-20 15:54:13 +0900
Branch: REL_18_STABLE [89b4b3ae3] 2026-05-20 15:56:58 +0900
Branch: REL_17_STABLE [ddd12d1a5] 2026-05-20 15:57:04 +0900
Branch: REL_16_STABLE [9590dcfca] 2026-05-20 15:57:09 +0900
Branch: REL_15_STABLE [ba9833a75] 2026-05-20 15:57:14 +0900
Branch: REL_14_STABLE [5552a15a3] 2026-05-20 15:57:19 +0900
-->
     <para>
      Use the source cluster's group-read file permissions
      for <application>pg_recvlogical</application> output files
      (Fujii Masao)
      <ulink url="&commit_baseurl;9590dcfca">&sect;</ulink>
     </para>

     <para>
      <application>pg_recvlogical</application> was documented to behave
      this way, but it never actually enabled group-read.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master Release: REL_19_BR [da1eff08a] 2026-06-14 04:04:48 +0300
Branch: REL_18_STABLE [897e79486] 2026-06-14 04:05:50 +0300
Branch: REL_17_STABLE [8abb8a155] 2026-06-14 04:07:00 +0300
Branch: REL_16_STABLE [c89a1ca01] 2026-06-14 04:07:42 +0300
Branch: REL_15_STABLE [4284476c0] 2026-06-14 04:08:00 +0300
Branch: REL_14_STABLE [af09b18cb] 2026-06-14 04:06:43 +0300
-->
     <para>
      In <filename>contrib/amcheck</filename>, handle short-header varlena
      datums correctly (Andrey Borodin)
      <ulink url="&commit_baseurl;c89a1ca01">&sect;</ulink>
     </para>

     <para>
      This error could result in doing excess work while verifying a btree
      index, but seems not to have had any worse consequences.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7d3448961] 2026-07-01 13:27:22 -0400
Branch: REL_19_STABLE [a47005f0b] 2026-07-01 13:27:22 -0400
Branch: REL_18_STABLE [1e1d07792] 2026-07-01 13:27:22 -0400
Branch: REL_17_STABLE [d215d2cc2] 2026-07-01 13:27:22 -0400
Branch: REL_16_STABLE [d569ccd40] 2026-07-01 13:27:22 -0400
Branch: REL_15_STABLE [98dd4406f] 2026-07-01 13:27:22 -0400
Branch: REL_14_STABLE [255bce448] 2026-07-01 13:27:22 -0400
-->
     <para>
      In <filename>contrib/btree_gist</filename>,
      fix <literal>NaN</literal> handling in the <type>float4</type>
      and <type>float8</type> opclasses (Bill Kim, Tom Lane)
      <ulink url="&commit_baseurl;d569ccd40">&sect;</ulink>
     </para>

     <para>
      Comparisons, as well as the GiST penalty and distance functions, did
      not account for <literal>NaN</literal> and would give the wrong
      answer when handed one.  It is recommended to
      reindex <filename>btree_gist</filename> indexes on float columns
      after installing this update, if there is any possibility that there
      are <literal>NaN</literal> entries in those columns.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [eef644e57] 2026-07-03 13:50:14 -0400
Branch: REL_19_STABLE [fc6649abe] 2026-07-03 13:50:14 -0400
Branch: REL_18_STABLE [12c519207] 2026-07-03 13:50:14 -0400
Branch: REL_17_STABLE [86992769e] 2026-07-03 13:50:14 -0400
Branch: REL_16_STABLE [0663382c9] 2026-07-03 13:50:14 -0400
Branch: REL_15_STABLE [8f2a1b3d3] 2026-07-03 13:50:14 -0400
Branch: REL_14_STABLE [286f9a3ce] 2026-07-03 13:50:14 -0400
-->
     <para>
      In <filename>contrib/btree_gist</filename>, fix searches using a
      not-equal operator (Ayush Tiwari)
      <ulink url="&commit_baseurl;0663382c9">&sect;</ulink>
     </para>

     <para>
      For variable-length data types, the code for scanning non-leaf index
      pages applied the wrong comparison function, leading to wrong
      results and potentially crashes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [da82fbb8f] 2026-06-17 11:04:41 -0400
Branch: REL_18_STABLE [e3b7a43fa] 2026-06-17 11:04:41 -0400
Branch: REL_17_STABLE [3df0b7755] 2026-06-17 11:04:41 -0400
Branch: REL_16_STABLE [b0f3465b6] 2026-06-17 11:04:41 -0400
Branch: REL_15_STABLE [a6f23c3ad] 2026-06-17 11:04:41 -0400
Branch: REL_14_STABLE [639fff511] 2026-06-17 11:04:41 -0400
Branch: master Release: REL_19_BR [c0f17b04d] 2026-06-18 12:23:13 -0400
Branch: REL_18_STABLE [d65cf6f80] 2026-06-18 12:22:55 -0400
Branch: REL_17_STABLE [4efef9d18] 2026-06-18 12:22:55 -0400
Branch: REL_16_STABLE [60a1d712a] 2026-06-18 12:22:55 -0400
Branch: REL_15_STABLE [4fbbabb0a] 2026-06-18 12:22:55 -0400
Branch: REL_14_STABLE [1f6b2295f] 2026-06-18 12:22:55 -0400
-->
     <para>
      Fix unguarded recursion and loops in
      <filename>contrib/hstore_plperl</filename>,
      <filename>contrib/jsonb_plperl</filename>, and
      <filename>contrib/jsonb_plpython</filename>
      (Aleksander Alekseev)
      <ulink url="&commit_baseurl;b0f3465b6">&sect;</ulink>
      <ulink url="&commit_baseurl;60a1d712a">&sect;</ulink>
     </para>

     <para>
      Prevent stack overflow when dealing with deeply
      nested <type>jsonb</type> values, and allow interruption of the infinite
      loop caused when attempting to dereference circular chains of Perl
      object references.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master Release: REL_19_BR [524cc0f63] 2026-05-25 18:15:49 -0400
Branch: REL_18_STABLE [e7544c518] 2026-05-25 18:15:49 -0400
Branch: REL_17_STABLE [94b57ab54] 2026-05-25 18:15:49 -0400
Branch: REL_16_STABLE [273be484a] 2026-05-25 18:15:49 -0400
Branch: REL_15_STABLE [702a6d5f6] 2026-05-25 18:15:49 -0400
Branch: REL_14_STABLE [a96b051a9] 2026-05-25 18:15:49 -0400
-->
     <para>
      Fix missed release of statistics catcache entry
      in <filename>contrib/intarray</filename> (Man Zeng)
      <ulink url="&commit_baseurl;273be484a">&sect;</ulink>
     </para>

     <para>
      This oversight led to warnings like <quote>resource was not closed:
      cache pg_statistic</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_19_BR [3f3280491] 2026-06-16 09:29:47 +0300
Branch: REL_18_STABLE [c3e36a9a5] 2026-06-16 09:31:08 +0300
Branch: REL_17_STABLE [c391c00d9] 2026-06-16 09:31:12 +0300
Branch: REL_16_STABLE [aca944e33] 2026-06-16 09:31:17 +0300
Branch: REL_15_STABLE [1bec6b1c1] 2026-06-16 09:31:20 +0300
Branch: REL_14_STABLE [f528a5606] 2026-06-16 09:31:23 +0300
-->
     <para>
      In <filename>contrib/ltree</filename>, fix integer overflow in
      comparisons (Ayush Tiwari)
      <ulink url="&commit_baseurl;aca944e33">&sect;</ulink>
     </para>

     <para>
      <type>ltree</type> values containing more than about 14,653 labels
      resulted in wrong comparison answers due to overflow.  If a btree
      index contains such values, it is probably corrupt and should be
      reindexed after installing this update.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [193a4ded9] 2026-06-06 08:16:36 +0900
Branch: REL_18_STABLE [2b09f8a91] 2026-06-06 08:16:40 +0900
Branch: REL_17_STABLE [0bcf19c9e] 2026-06-06 08:16:41 +0900
Branch: REL_16_STABLE [daf8bc7d4] 2026-06-06 08:16:43 +0900
Branch: REL_15_STABLE [51f63ba2b] 2026-06-06 08:16:44 +0900
Branch: REL_14_STABLE [1eda3eb07] 2026-06-06 08:16:46 +0900
-->
     <para>
      Fix array overrun in <filename>contrib/pg_surgery</filename>'s
      <function>heap_force_kill</function> and
      <function>heap_force_freeze</function> functions (Michael Paquier)
      <ulink url="&commit_baseurl;daf8bc7d4">&sect;</ulink>
     </para>

     <para>
      Attempting to change a TID whose offset number equals
      MaxHeapTuplesPerPage wrote one byte past the end of the allocated
      array, potentially crashing the server.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [346fbdcc2] 2026-08-04 11:44:11 +0200
Branch: REL_19_STABLE [1f24c8237] 2026-08-04 11:44:11 +0200
Branch: REL_18_STABLE [19f0391df] 2026-08-04 11:44:11 +0200
Branch: REL_17_STABLE [1b6c99d96] 2026-08-04 11:44:11 +0200
Branch: REL_16_STABLE [eb28b6f24] 2026-08-04 11:44:11 +0200
Branch: REL_15_STABLE [395700f48] 2026-08-04 11:44:11 +0200
Branch: REL_14_STABLE [e9d53cf45] 2026-08-04 11:44:11 +0200
-->
     <para>
      In <filename>contrib/pg_surgery</filename>, avoid infinite loop with
      TID arrays having more than 64K elements (Andrey Rachitskiy)
      <ulink url="&commit_baseurl;eb28b6f24">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master Release: REL_19_BR [611756948] 2026-05-14 13:11:49 -0500
Branch: REL_18_STABLE [ed0c4d5af] 2026-05-14 13:11:49 -0500
Branch: REL_17_STABLE [6b4de201e] 2026-05-14 13:11:49 -0500
Branch: REL_16_STABLE [eb93f10e2] 2026-05-14 13:11:49 -0500
Branch: REL_15_STABLE [77b2d18e9] 2026-05-14 13:11:49 -0500
Branch: REL_14_STABLE [1de0a711d] 2026-05-14 13:11:49 -0500
-->
     <para>
      Avoid NULL-pointer dereference
      in <filename>contrib/refint</filename>'s
      <function>check_foreign_key()</function> (Ayush Tiwari)
      <ulink url="&commit_baseurl;eb93f10e2">&sect;</ulink>
     </para>

     <para>
      In the on-update-cascade case, a null value of a referenced column
      led to a crash.  This is an oversight in the fix for CVE-2026-6637,
      but the code that was there before that wasn't really right either.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master Release: REL_19_BR [0e1f1ed15] 2026-06-11 12:33:48 +0300
Branch: REL_18_STABLE [0004cab4d] 2026-06-11 12:34:26 +0300
Branch: REL_17_STABLE [bcbbd070d] 2026-06-11 12:34:32 +0300
Branch: REL_16_STABLE [504ca0513] 2026-06-11 12:34:37 +0300
Branch: REL_15_STABLE [b3aa2083a] 2026-06-11 12:34:42 +0300
Branch: REL_14_STABLE [58b91fc73] 2026-06-11 12:34:45 +0300
-->
     <para>
      Fix <filename>contrib/seg</filename> to print segments
      with <literal>~</literal> certainty indicators correctly
      (Ewan Young)
      <ulink url="&commit_baseurl;504ca0513">&sect;</ulink>
     </para>

     <para>
      Due to a typo, <function>seg_out()</function> did not print
      a <literal>~</literal> certainty indicator attached to a segment's
      upper boundary.  Worse, if the lower boundary
      had <literal>~</literal> while the upper boundary had no indicator,
      the upper boundary was not printed at all, incorrectly converting
      the value into an open interval.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_19_BR [9d33a5a80] 2026-06-11 14:29:18 +0900
Branch: REL_18_STABLE [91b57eade] 2026-06-11 14:29:22 +0900
Branch: REL_17_STABLE [4a49ab289] 2026-06-11 14:29:24 +0900
Branch: REL_16_STABLE [18955d412] 2026-06-11 14:29:26 +0900
Branch: REL_15_STABLE [bc5775149] 2026-06-11 14:29:28 +0900
Branch: REL_14_STABLE [f3f901a53] 2026-06-11 14:29:29 +0900
-->
     <para>
      Fix crash with namespace nodes in <filename>contrib/xml2</filename>'s
      <function>xpath_nodeset()</function> function (Andrey Chernyy,
      Michael Paquier)
      <ulink url="&commit_baseurl;18955d412">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: REL_16_STABLE [bc5a873a8] 2026-07-27 10:40:32 -0400
Branch: REL_15_STABLE [eba7f1dc0] 2026-07-27 10:42:31 -0400
Branch: REL_14_STABLE [f1c579fc4] 2026-07-27 10:43:14 -0400
-->
     <para>
      Support building <productname>PostgreSQL</productname> with Visual
      Studio 2026 (Andrew Dunstan)
      <ulink url="&commit_baseurl;bc5a873a8">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master Release: REL_19_BR [89d243d52] 2026-05-29 21:52:35 +0200
Branch: REL_18_STABLE [27cf3b5af] 2026-06-12 13:57:22 +0200
Branch: REL_17_STABLE [8bcabfcce] 2026-06-12 13:57:22 +0200
Branch: REL_16_STABLE [fb8befa7b] 2026-06-12 13:57:22 +0200
Branch: REL_15_STABLE [c7f70fa1b] 2026-06-12 13:57:22 +0200
Branch: REL_14_STABLE [086652c02] 2026-06-12 13:57:22 +0200
-->
     <para>
      Support building <productname>PostgreSQL</productname> with
      OpenSSL 4 (Daniel Gustafsson)
      <ulink url="&commit_baseurl;fb8befa7b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6ca405938] 2026-08-02 11:26:30 -0400
Branch: REL_19_STABLE [3c16aa293] 2026-08-02 11:26:30 -0400
Branch: REL_18_STABLE [5f67124fa] 2026-08-02 11:26:30 -0400
Branch: REL_17_STABLE [669438aed] 2026-08-02 11:26:30 -0400
Branch: REL_16_STABLE [796c275a0] 2026-08-02 11:26:30 -0400
Branch: REL_15_STABLE [af7be5672] 2026-08-02 11:26:30 -0400
Branch: REL_14_STABLE [812cc1a73] 2026-08-02 11:26:30 -0400
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2026c (Tom Lane)
      <ulink url="&commit_baseurl;796c275a0">&sect;</ulink>
     </para>

     <para>
      Alberta (America/Edmonton) will be on year-round UTC-06
      (effectively, permanent DST) beginning in November 2026.  This
      release assumes that their TZ abbreviation will
      be <literal>CST</literal> from that time forward.  That seems likely
      to change, but it's unclear what new abbreviation will be used.
     </para>

     <para>
      Morocco (Africa/Casablanca) will move to permanent UTC+00,
      without daylight saving time transitions, on 2026-09-20.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-14-migration">
   <title>Migration to Version 16.14</title>

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

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

  <sect2 id="release-16-14-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;66cf26b9e">&sect;</ulink>
      <ulink url="&commit_baseurl;c2e6ef863">&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;cfb610eaa">&sect;</ulink>
      <ulink url="&commit_baseurl;aff71f87b">&sect;</ulink>
      <ulink url="&commit_baseurl;a4f089c79">&sect;</ulink>
      <ulink url="&commit_baseurl;c25973124">&sect;</ulink>
      <ulink url="&commit_baseurl;32c525eb6">&sect;</ulink>
      <ulink url="&commit_baseurl;e24fb3247">&sect;</ulink>
      <ulink url="&commit_baseurl;f20b84081">&sect;</ulink>
      <ulink url="&commit_baseurl;924b3e943">&sect;</ulink>
      <ulink url="&commit_baseurl;47dae5e74">&sect;</ulink>
      <ulink url="&commit_baseurl;e42598a41">&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: 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;248a433cd">&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;5919e0005">&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: 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;24e0e3254">&sect;</ulink>
      <ulink url="&commit_baseurl;79b7847c7">&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;d92852d62">&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;00e27235e">&sect;</ulink>
      <ulink url="&commit_baseurl;1604939b2">&sect;</ulink>
     </para>

     <para>
      Use <function>timingsafe_bcmp()</function> instead
      of <function>memcmp()</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;614474996">&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;6778af13e">&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;5c1069c35">&sect;</ulink>
      <ulink url="&commit_baseurl;6f0bff33d">&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;6b6b26fde">&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;710995782">&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;748fe9e60">&sect;</ulink>
      <ulink url="&commit_baseurl;5a24cef08">&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;d509be4ac">&sect;</ulink>
      <ulink url="&commit_baseurl;798dabe83">&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 [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;07b257189">&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: 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;3c7a6bbe6">&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;f6e63d4b8">&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;7bb519635">&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;313355d68">&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: 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;a19edb66a">&sect;</ulink>
     </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;06e304524">&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;1bd90c887">&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;a2a0060d5">&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;e1e60f148">&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;42383d32d">&sect;</ulink>
      <ulink url="&commit_baseurl;17f72e037">&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;0fe032e6a">&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;bb959269e">&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;3b35c10a4">&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;c7cdcbd3e">&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;d052f6c7d">&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: 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;e630f65d0">&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: 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;59c139d53">&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: 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;f42105001">&sect;</ulink>
     </para>

     <para>
      The lag columns frequently read as NULL even while replication
      activity was happening.
     </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;4f4025eac">&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;0af5e64e9">&sect;</ulink>
     </para>

     <para>
      This miscalculation led to out-of-bounds accesses and hence server
      crashes.
     </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;04745ba9c">&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: 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;a4515c9b4">&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;2d347f2cd">&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;77dff5d93">&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;82935467a">&sect;</ulink>
      <ulink url="&commit_baseurl;da21ecf57">&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;54537de35">&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;7e4c871f4">&sect;</ulink>
     </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;1590723f0">&sect;</ulink>
      <ulink url="&commit_baseurl;cce939c71">&sect;</ulink>
      <ulink url="&commit_baseurl;415cc943f">&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: 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;a4649c50a">&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;a38ed212f">&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;28c2b7896">&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;3ed2c7ef7">&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: 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;52edaf9d9">&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;1352651c2">&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;0465c999e">&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-16-13">
  <title>Release 16.13</title>

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

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

  <sect2 id="release-16-13-migration">
   <title>Migration to Version 16.13</title>

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

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

  <sect2 id="release-16-13-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;23064542f">&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;bdfb37228">&sect;</ulink>
      <ulink url="&commit_baseurl;2280ab354">&sect;</ulink>
      <ulink url="&commit_baseurl;45eb47230">&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: 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;ec20a4552">&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: 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;2332911ae">&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;c66f4cff1">&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;31d0b917d">&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-16-12">
  <title>Release 16.12</title>

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

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

  <sect2 id="release-16-12-migration">
   <title>Migration to Version 16.12</title>

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

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

  <sect2 id="release-16-12-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;595956fc7">&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;91d7c0bfd">&sect;</ulink>
      <ulink url="&commit_baseurl;c0887b39d">&sect;</ulink>
      <ulink url="&commit_baseurl;d484bc260">&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;527b730f4">&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;70ff9ede5">&sect;</ulink>
      <ulink url="&commit_baseurl;b0e3f5cf9">&sect;</ulink>
      <ulink url="&commit_baseurl;d837fb029">&sect;</ulink>
      <ulink url="&commit_baseurl;4c08960d9">&sect;</ulink>
      <ulink url="&commit_baseurl;0c33d5608">&sect;</ulink>
      <ulink url="&commit_baseurl;763671b74">&sect;</ulink>
     </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: 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;980b7c736">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [102bdaa9b] 2026-01-15 16:48:45 +0200
Branch: REL_18_STABLE [09532a78b] 2026-01-15 16:49:42 +0200
Branch: REL_17_STABLE [d3ad4cef6] 2026-01-15 16:50:30 +0200
Branch: REL_16_STABLE [c7946e6f3] 2026-01-15 16:50:37 +0200
Branch: REL_15_STABLE [a563ac619] 2026-01-15 16:50:42 +0200
Branch: REL_14_STABLE [46be454ca] 2026-01-15 16:50:46 +0200
-->
     <para>
      Guard against incorrect truncation of the multixact log after a
      crash (Heikki Linnakangas)
      <ulink url="&commit_baseurl;c7946e6f3">&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;c48829ed8">&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;3853f6168">&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;12c2f843c">&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;635166913">&sect;</ulink>
      <ulink url="&commit_baseurl;4d689a176">&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;4d288e33b">&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: 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;1aa57e9ed">&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;0687a6eb0">&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;75f3428f2">&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;24cce33c3">&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;821466722">&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;e22e9ab0c">&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;63a65adf4">&sect;</ulink>
     </para>

     <para>
      The previous behavior allowed transactions to be lost by a
      subscriber.
     </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;a2eeb04f3">&sect;</ulink>
     </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;821c4d27b">&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;977a17a3e">&sect;</ulink>
      <ulink url="&commit_baseurl;e8fd6c9fd">&sect;</ulink>
      <ulink url="&commit_baseurl;a7bdbbada">&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;7600dc79c">&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;600acd34b">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [f94e9141a] 2026-02-06 17:38:49 +1300
Branch: REL_18_STABLE [33e3de6d7] 2026-02-06 17:38:39 +1300
Branch: REL_17_STABLE [4dac22aa1] 2026-02-06 17:41:42 +1300
Branch: REL_16_STABLE [e37b59802] 2026-02-06 17:43:49 +1300
-->
     <para>
      Add new server parameter <xref linkend="guc-file-extend-method"/> to
      control use of <function>posix_fallocate()</function> (Thomas Munro)
      <ulink url="&commit_baseurl;e37b59802">&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;d62a258cd">&sect;</ulink>
      <ulink url="&commit_baseurl;0666ccc16">&sect;</ulink>
      <ulink url="&commit_baseurl;80e8ec772">&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;7369656fa">&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;a1407dade">&sect;</ulink>
     </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;890cc81b6">&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;e039b09f8">&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;098a1fab8">&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;182901626">&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;f2a6df9fd">&sect;</ulink>
     </para>

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

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

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

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

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

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

  <sect2 id="release-16-11-migration">
   <title>Migration to Version 16.11</title>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: Á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;c72b5c536">&sect;</ulink>
     </para>
    </listitem>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ea78bd6d5] 2025-10-05 16:27:47 -0400
Branch: REL_18_STABLE [d83879a32] 2025-10-05 16:27:47 -0400
Branch: REL_17_STABLE [1c4671f7b] 2025-10-05 16:27:47 -0400
Branch: REL_16_STABLE [46c4478db] 2025-10-05 16:27:47 -0400
Branch: REL_15_STABLE [771b106d1] 2025-10-05 16:27:47 -0400
Branch: REL_14_STABLE [f46d77377] 2025-10-05 16:27:47 -0400
Branch: REL_13_STABLE [fc287cf3c] 2025-10-05 16:27:47 -0400
-->
     <para>
      Fix <application>libpq</application>'s handling of socket-related
      errors on Windows within its GSSAPI logic (Ning Wu, Tom Lane)
      <ulink url="&commit_baseurl;46c4478db">&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: Fujii Masao <fujii@postgresql.org>
Branch: master [8e5b92928] 2025-09-16 16:44:58 +0900
Branch: REL_18_STABLE Release: REL_18_0 [176002c5b] 2025-09-16 16:46:28 +0900
Branch: REL_17_STABLE [968141898] 2025-09-16 16:46:36 +0900
Branch: REL_16_STABLE [20b23784f] 2025-09-16 16:46:43 +0900
Branch: REL_15_STABLE [165b07efe] 2025-09-16 16:46:51 +0900
Branch: REL_14_STABLE [295c0a644] 2025-09-16 16:46:58 +0900
Branch: REL_13_STABLE [dff7591a7] 2025-09-16 16:47:05 +0900
-->
     <para>
      In <application>pg_dump</application>, dump security labels on
      subscriptions and event triggers (Jian He, Fujii Masao)
      <ulink url="&commit_baseurl;20b23784f">&sect;</ulink>
     </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-10-migration">
   <title>Migration to Version 16.10</title>

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-9-migration">
   <title>Migration to Version 16.9</title>

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: REL_16_STABLE [82a8f0f46] 2025-04-03 09:33:58 -0700
Branch: REL_15_STABLE [63f6ecb6b] 2025-04-03 09:34:01 -0700
Branch: REL_14_STABLE [a8a918937] 2025-04-03 09:34:01 -0700
Branch: REL_13_STABLE [186c586c3] 2025-04-03 09:34:02 -0700
Author: Andres Freund <andres@anarazel.de>
Branch: REL_15_STABLE [9e129a224] 2025-04-03 09:34:01 -0700
Branch: REL_14_STABLE [aa435d7c4] 2025-04-03 09:34:01 -0700
Branch: REL_13_STABLE [5a3d5c083] 2025-04-03 09:34:02 -0700
-->
     <para>
      Allow <filename>contrib/dblink</filename> queries to be interrupted
      by query cancel (Noah Misch)
      <ulink url="&commit_baseurl;82a8f0f46">&sect;</ulink>
     </para>

     <para>
      This change back-patches a v17-era fix.  It prevents possible hangs
      in <command>CREATE DATABASE</command> and <command>DROP
      DATABASE</command> due to failure to detect deadlocks.
     </para>
    </listitem>

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-8-migration">
   <title>Migration to Version 16.8</title>

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

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

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

   <itemizedlist>

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-7-migration">
   <title>Migration to Version 16.7</title>

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-6-migration">
   <title>Migration to Version 16.6</title>

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

  <sect2 id="release-16-5-migration">
   <title>Migration to Version 16.5</title>

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [52f3de874] 2024-08-19 16:09:10 -0400
Branch: REL_17_STABLE Release: REL_17_0 [11f1218ce] 2024-08-19 16:09:10 -0400
Branch: REL_16_STABLE [a6ff329e7] 2024-08-19 16:09:10 -0400
Branch: REL_15_STABLE [be73e7008] 2024-08-19 16:09:10 -0400
Branch: REL_14_STABLE [3ad4c8615] 2024-08-19 16:09:10 -0400
Branch: master [c899c6839] 2024-08-12 18:17:56 -0400
Branch: REL_17_STABLE Release: REL_17_0 [0820f8062] 2024-08-12 18:17:56 -0400
Branch: REL_16_STABLE [1b9dd6b05] 2024-08-12 18:17:56 -0400
Branch: REL_15_STABLE [305db9543] 2024-08-12 18:17:56 -0400
Branch: REL_14_STABLE [1b4bdf915] 2024-08-12 18:17:56 -0400
-->
     <para>
      Avoid possible crashes and <quote>could not open relation</quote>
      errors in queries on a partitioned table occurring concurrently with
      a <command>DETACH CONCURRENTLY</command> and immediate drop of a
      partition (Álvaro Herrera, Kuntal Gosh)
      <ulink url="&commit_baseurl;a6ff329e7">&sect;</ulink>
      <ulink url="&commit_baseurl;1b9dd6b05">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [a90bdd7a4] 2024-08-08 19:35:13 -0400
Branch: REL_17_STABLE Release: REL_17_0 [344f9f5e2] 2024-08-08 19:35:13 -0400
Branch: REL_16_STABLE [ada34d714] 2024-08-08 19:35:13 -0400
Branch: REL_15_STABLE [8c0944ac8] 2024-08-08 19:35:13 -0400
Branch: REL_14_STABLE [e97121d90] 2024-08-08 19:35:13 -0400
Branch: REL_13_STABLE [2ee02c98d] 2024-08-08 19:35:13 -0400
Branch: REL_12_STABLE [17ed92e1f] 2024-08-08 19:35:13 -0400
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_16_STABLE [57c8b8726] 2024-11-08 07:17:55 +0100
Branch: REL_15_STABLE [38f506470] 2024-11-08 07:31:48 +0100
Branch: REL_14_STABLE [a54a5c426] 2024-11-08 07:32:07 +0100
Branch: REL_13_STABLE [ebbfa2ae3] 2024-11-08 07:32:14 +0100
Branch: REL_12_STABLE [cae459d11] 2024-11-08 07:32:21 +0100
-->
     <para>
      Disallow <command>ALTER TABLE ATTACH PARTITION</command> if the
      table to be attached has a foreign key referencing the partitioned
      table (Álvaro Herrera)
      <ulink url="&commit_baseurl;ada34d714">&sect;</ulink>
      <ulink url="&commit_baseurl;57c8b8726">&sect;</ulink>
     </para>

     <para>
      This arrangement is not supported, and other ways of creating it
      already fail.
     </para>
    </listitem>

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

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

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cb8e50a4a] 2024-08-30 12:42:12 -0400
Branch: REL_17_STABLE Release: REL_17_0 [b43110869] 2024-08-30 12:42:13 -0400
Branch: REL_16_STABLE [80d9c07a4] 2024-08-30 12:42:13 -0400
-->
     <para>
      Fix performance regressions involving flattening of subqueries
      underneath outer joins that are later reduced to plain joins
      (Tom Lane)
      <ulink url="&commit_baseurl;80d9c07a4">&sect;</ulink>
     </para>

     <para>
      v16 failed to optimize some queries as well as prior versions had,
      because of overoptimistic simplification of query-pullup logic.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fae55f0bb] 2024-09-13 16:17:04 -0400
Branch: REL_17_STABLE Release: REL_17_0 [418c6a2c7] 2024-09-13 16:17:04 -0400
Branch: REL_16_STABLE [d23109f4b] 2024-09-13 16:16:47 -0400
Branch: REL_15_STABLE [e0857898b] 2024-09-13 16:16:47 -0400
Branch: REL_14_STABLE [b49013f2e] 2024-09-13 16:16:47 -0400
Branch: REL_13_STABLE [b27215dbb] 2024-09-13 16:16:47 -0400
Branch: REL_12_STABLE [813ade548] 2024-09-13 16:16:47 -0400
-->
     <para>
      Allow cancellation of the second stage of index build for large hash
      indexes (Pavel Borisov)
      <ulink url="&commit_baseurl;d23109f4b">&sect;</ulink>
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [842265631] 2024-09-11 13:21:10 +0200
Branch: REL_17_STABLE Release: REL_17_0 [78bc5f711] 2024-09-11 13:21:30 +0200
Branch: REL_16_STABLE [8e65d9ff9] 2024-09-11 13:22:30 +0200
-->
     <para>
      Fix checking of key uniqueness in JSON object constructors
      (Junwang Zhao, Tomas Vondra)
      <ulink url="&commit_baseurl;8e65d9ff9">&sect;</ulink>
     </para>

     <para>
      When building an object larger than a kilobyte, it was possible to
      accept invalid input that includes duplicate object keys, or to
      falsely report that duplicate keys are present.
     </para>
    </listitem>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [933848d16] 2024-09-18 09:59:09 +0900
Branch: REL_17_STABLE Release: REL_17_0 [7db9bfc1f] 2024-09-18 09:59:14 +0900
Branch: REL_16_STABLE [21aad4bea] 2024-09-18 09:59:19 +0900
Branch: REL_15_STABLE [cbcd4bb41] 2024-09-18 09:59:23 +0900
Branch: REL_14_STABLE [b36ee879c] 2024-09-18 09:59:26 +0900
-->
     <para>
      Report the active query ID for statistics purposes at the start of
      processing of Bind and Execute protocol messages (Sami Imseih)
      <ulink url="&commit_baseurl;21aad4bea">&sect;</ulink>
     </para>

     <para>
      This allows more of the work done in extended query protocol to be
      attributed to the correct query.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d5622acb3] 2024-09-15 13:33:09 -0400
Branch: REL_17_STABLE Release: REL_17_0 [b9645dca1] 2024-09-15 13:33:09 -0400
Branch: REL_16_STABLE [4c9bf947a] 2024-09-15 13:33:09 -0400
Branch: REL_15_STABLE [634804885] 2024-09-15 13:33:09 -0400
Branch: REL_14_STABLE [7721fff06] 2024-09-15 13:33:09 -0400
Branch: REL_13_STABLE [4310dfa25] 2024-09-15 13:33:09 -0400
Branch: REL_12_STABLE [0206795d2] 2024-09-15 13:33:09 -0400
-->
     <para>
      Guard against stack overflow in <application>libxml2</application>
      with too-deeply-nested XML input (Tom Lane, with hat tip to Nick
      Wellnhofer)
      <ulink url="&commit_baseurl;4c9bf947a">&sect;</ulink>
     </para>

     <para>
      Use <function>xmlXPathCtxtCompile()</function> rather
      than <function>xmlXPathCompile()</function>, because the latter
      fails to protect itself against recursion-to-stack-overflow
      in <application>libxml2</application> releases before 2.13.4.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [bccca780e] 2024-09-10 16:20:31 -0400
Branch: REL_17_STABLE Release: REL_17_0 [946f150aa] 2024-09-10 16:20:31 -0400
Branch: REL_16_STABLE [06c285018] 2024-09-10 16:20:31 -0400
-->
     <para>
      Fix some whitespace issues in the result
      of <literal>XMLSERIALIZE(... INDENT)</literal> (Jim Jones)
      <ulink url="&commit_baseurl;06c285018">&sect;</ulink>
     </para>

     <para>
      Fix failure to indent nodes separated by whitespace, and ensure that
      a trailing newline is not added.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5bbdfa8a1] 2024-09-09 13:49:36 +0900
Branch: REL_17_STABLE Release: REL_17_0 [cd6b2ae3e] 2024-09-09 13:49:59 +0900
Branch: REL_16_STABLE [edb0f6e41] 2024-09-09 13:50:02 +0900
Branch: REL_15_STABLE [239837a70] 2024-09-09 13:50:12 +0900
Branch: REL_14_STABLE [902151548] 2024-09-09 13:50:16 +0900
-->
     <para>
      Do not ignore a concurrent <command>REINDEX CONCURRENTLY</command>
      that is working on an index with predicates or expressions (Michail
      Nikolaev)
      <ulink url="&commit_baseurl;edb0f6e41">&sect;</ulink>
     </para>

     <para>
      Normally, <command>REINDEX CONCURRENTLY</command> does not need to
      wait for other <command>REINDEX CONCURRENTLY</command> operations on
      other tables.  However, this optimization is not applied if the
      other <command>REINDEX CONCURRENTLY</command> is processing an index
      with predicates or expressions, on the chance that such expressions
      contain user-defined code that accesses other tables.  Careless
      coding created a race condition such that that rule was not applied
      uniformly, possibly allowing inconsistent behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [43f2e7634] 2024-08-29 13:24:17 -0400
Branch: REL_17_STABLE Release: REL_17_0 [a7eb63356] 2024-08-29 13:24:17 -0400
Branch: REL_16_STABLE [9fe6319dc] 2024-08-29 13:24:17 -0400
-->
     <para>
      Fix mis-deparsing of <literal>ORDER BY</literal> lists when there is
      a name conflict (Tom Lane)
      <ulink url="&commit_baseurl;9fe6319dc">&sect;</ulink>
     </para>

     <para>
      If an <literal>ORDER BY</literal> item in <literal>SELECT</literal>
      is a bare identifier, the parser first seeks it as an output column
      name of the <literal>SELECT</literal>, for SQL92 compatibility.
      However, ruleutils.c expects the SQL99 interpretation where such a
      name is an input column name.  So it was possible to produce an
      incorrect display of a view in the (rather ill-advised) case where
      some other column is renamed in the <literal>SELECT</literal> output
      list to match an input column used in <literal>ORDER BY</literal>.
      Fix by table-qualifying such names in the dumped view text.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b2be5cb2a] 2024-08-11 12:24:56 -0400
Branch: REL_17_STABLE Release: REL_17_0 [aed881386] 2024-08-11 12:24:56 -0400
Branch: REL_16_STABLE [9db6650a5] 2024-08-11 12:24:56 -0400
Branch: REL_15_STABLE [16e67bc5f] 2024-08-11 12:24:56 -0400
Branch: REL_14_STABLE [bc5446a21] 2024-08-11 12:24:56 -0400
Branch: REL_13_STABLE [016f44364] 2024-08-11 12:24:56 -0400
Branch: master [b919a97a6] 2024-08-09 11:21:39 -0400
Branch: REL_17_STABLE Release: REL_17_0 [81a12a447] 2024-08-09 11:21:39 -0400
Branch: REL_16_STABLE [03f679475] 2024-08-09 11:21:39 -0400
Branch: REL_15_STABLE [12010f414] 2024-08-09 11:21:39 -0400
Branch: REL_14_STABLE [120dd0337] 2024-08-09 11:21:39 -0400
Branch: REL_13_STABLE [3ad35d502] 2024-08-09 11:21:39 -0400
Branch: REL_12_STABLE [7408772de] 2024-08-09 11:21:39 -0400
-->
     <para>
      Fix <quote>failed to find plan for subquery/CTE</quote> errors
      in <command>EXPLAIN</command> (Richard Guo, Tom Lane)
      <ulink url="&commit_baseurl;9db6650a5">&sect;</ulink>
      <ulink url="&commit_baseurl;03f679475">&sect;</ulink>
     </para>

     <para>
      This case arose while trying to print references to fields of a
      RECORD-type output of a subquery when the subquery has been
      optimized out of the plan altogether (which is possible at least in
      the case that it has a constant-false <literal>WHERE</literal>
      condition).  Nothing remains in the plan to identify the original
      field names, so fall back to
      printing <literal>f<replaceable>N</replaceable></literal> for
      the <replaceable>N</replaceable>'th record column.  (That's actually
      the right thing anyway, if the record output arose from
      a <literal>ROW()</literal> constructor.)
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [4d68a0432] 2024-08-29 09:06:15 +0200
Branch: REL_17_STABLE Release: REL_17_0 [fdbf7e46a] 2024-08-29 08:59:30 +0200
Branch: REL_16_STABLE [5867ee005] 2024-08-29 09:00:06 +0200
Branch: REL_15_STABLE [cf49a606c] 2024-08-29 09:01:02 +0200
Branch: REL_14_STABLE [ecd19a3cc] 2024-08-29 09:01:33 +0200
Branch: REL_13_STABLE [7589d5c5b] 2024-08-29 09:02:06 +0200
Branch: REL_12_STABLE [1c57ae795] 2024-08-29 09:03:06 +0200
-->
     <para>
      Disallow a <literal>USING</literal> clause when altering the type of
      a generated column (Peter Eisentraut)
      <ulink url="&commit_baseurl;5867ee005">&sect;</ulink>
     </para>

     <para>
      A generated column already has an expression specifying the column
      contents, so including <literal>USING</literal> doesn't make sense.
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [129a2f667] 2024-09-06 11:57:57 -0400
Branch: REL_17_STABLE Release: REL_17_0 [e69030cb5] 2024-09-06 11:58:10 -0400
Branch: REL_16_STABLE [dd20f950d] 2024-09-06 11:58:15 -0400
-->
     <para>
      Fix incorrect output of the <structname>pg_stat_io</structname> view
      on 32-bit machines (Bertrand Drouvot)
      <ulink url="&commit_baseurl;dd20f950d">&sect;</ulink>
     </para>

     <para>
      The <structfield>stats_reset</structfield> timestamp column
      contained garbage on such hardware.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fadff3fc9] 2024-09-05 12:42:33 -0400
Branch: REL_17_STABLE Release: REL_17_0 [7dcbf0afa] 2024-09-05 12:42:33 -0400
Branch: REL_16_STABLE [4fd4d7653] 2024-09-05 12:42:33 -0400
Branch: REL_15_STABLE [f37ac613a] 2024-09-05 12:42:33 -0400
-->
     <para>
      Prevent mis-encoding of <quote>trailing junk after numeric
      literal</quote> error messages (Karina Litskevich)
      <ulink url="&commit_baseurl;4fd4d7653">&sect;</ulink>
     </para>

     <para>
      We do not allow identifiers to appear immediately following numeric
      literals (there must be some whitespace between).  If a multibyte
      character immediately followed a numeric literal, the syntax error
      message about it included only the first byte of that character,
      causing bad-encoding problems both in the report to the client and
      in the postmaster log file.
     </para>
    </listitem>

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

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

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

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [3f28b2fca] 2024-08-21 09:22:32 +0530
Branch: REL_17_STABLE Release: REL_17_0 [915aafe82] 2024-08-21 09:08:16 +0530
Branch: REL_16_STABLE [b39c5272c] 2024-08-21 09:01:11 +0530
-->
     <para>
      In a logical replication apply worker, ensure that origin progress
      is not advanced during an error or apply worker shutdown (Hayato
      Kuroda, Shveta Malik)
      <ulink url="&commit_baseurl;b39c5272c">&sect;</ulink>
     </para>

     <para>
      This avoids possible loss of a transaction, since once the origin
      progress point is advanced the source server won't send that data
      again.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [4fdb6558c] 2024-08-19 12:55:11 +0200
Branch: REL_17_STABLE Release: REL_17_0 [19021d28c] 2024-08-19 12:55:11 +0200
Branch: REL_16_STABLE [9333174af] 2024-08-19 12:55:11 +0200
Branch: REL_15_STABLE [23c200940] 2024-08-19 12:55:11 +0200
Branch: REL_14_STABLE [8cea8c023] 2024-08-19 12:55:11 +0200
Branch: REL_13_STABLE [f925b7f65] 2024-08-19 12:55:11 +0200
Branch: REL_12_STABLE [cd98a142c] 2024-08-19 12:55:11 +0200
-->
     <para>
      Re-disable sending of stateless (TLSv1.2) session tickets
      (Daniel Gustafsson)
      <ulink url="&commit_baseurl;9333174af">&sect;</ulink>
     </para>

     <para>
      A previous change to prevent sending of stateful (TLSv1.3) session
      tickets accidentally re-enabled sending of stateless ones.  Thus,
      while we intended to prevent clients from thinking that TLS session
      resumption is supported, some still did.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [0f92b230f] 2024-08-19 00:04:48 +0200
Branch: REL_17_STABLE Release: REL_17_0 [d1da80115] 2024-08-19 00:05:23 +0200
Branch: REL_16_STABLE [545794515] 2024-08-19 00:05:42 +0200
Branch: REL_15_STABLE [df9c5fb58] 2024-08-19 00:06:03 +0200
Branch: REL_14_STABLE [b3bb1e24b] 2024-08-19 00:06:23 +0200
Branch: REL_13_STABLE [33c615f76] 2024-08-19 00:07:04 +0200
Branch: REL_12_STABLE [f18d3e47f] 2024-08-19 00:07:20 +0200
Branch: master [5cb902e9d] 2024-08-19 13:31:51 +0200
Branch: REL_17_STABLE Release: REL_17_0 [de8770b47] 2024-08-19 13:43:27 +0200
Branch: REL_16_STABLE [f6991cafa] 2024-08-19 13:43:43 +0200
Branch: REL_15_STABLE [e498d22e2] 2024-08-19 14:00:50 +0200
Branch: REL_14_STABLE [3acbe198e] 2024-08-19 13:47:07 +0200
Branch: REL_13_STABLE [4e7531fda] 2024-08-19 13:49:23 +0200
Branch: REL_12_STABLE [9d42627bc] 2024-08-19 13:49:36 +0200
-->
     <para>
      Avoid <quote>wrong tuple length</quote> failure when dropping a
      database with many ACL (permission) entries (Ayush Tiwari)
      <ulink url="&commit_baseurl;545794515">&sect;</ulink>
      <ulink url="&commit_baseurl;f6991cafa">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [364de74cf] 2024-08-10 15:51:30 -0400
Branch: REL_17_STABLE Release: REL_17_0 [2b8d33f66] 2024-08-10 15:51:28 -0400
Branch: REL_16_STABLE [f3ab5d3a2] 2024-08-10 15:51:28 -0400
Branch: REL_15_STABLE [2f4e895be] 2024-08-10 15:51:28 -0400
Branch: REL_14_STABLE [546a26b3d] 2024-08-10 15:51:28 -0400
Branch: REL_13_STABLE [adf9808fa] 2024-08-10 15:51:28 -0400
Branch: REL_12_STABLE [adc28d01e] 2024-08-10 15:51:28 -0400
-->
     <para>
      Allow adjusting the <varname>session_authorization</varname>
      and <varname>role</varname> settings in parallel workers (Tom Lane)
      <ulink url="&commit_baseurl;f3ab5d3a2">&sect;</ulink>
     </para>

     <para>
      Our code intends to allow modifiable server settings to be set by
      function <literal>SET</literal> clauses, but not otherwise within a
      parallel worker.  <literal>SET</literal> clauses failed for these
      two settings, though.
     </para>
    </listitem>

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

     <para>
      As with a similar fix in our previous quarterly releases, this case
      allowed such functions to be passed the wrong snapshot, causing them
      to see stale values of rows modified since the start of the outer
      transaction.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8d148bb8b] 2024-08-07 12:54:39 -0400
Branch: REL_17_STABLE Release: REL_17_0 [0dd33a6fc] 2024-08-07 12:54:39 -0400
Branch: REL_16_STABLE [a073835c1] 2024-08-07 12:54:39 -0400
Branch: REL_15_STABLE [de3520701] 2024-08-07 12:54:39 -0400
Branch: REL_14_STABLE [7f875fb5b] 2024-08-07 12:54:39 -0400
-->
     <para>
      Fix <quote>cache lookup failed for function</quote> errors in edge
      cases in PL/pgSQL's <command>CALL</command> (Tom Lane)
      <ulink url="&commit_baseurl;a073835c1">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [2676040df] 2024-08-07 10:43:52 +0300
Branch: REL_17_STABLE Release: REL_17_0 [ffac8ac48] 2024-08-07 10:44:00 +0300
Branch: REL_16_STABLE [0583863e9] 2024-08-07 10:44:05 +0300
Branch: REL_15_STABLE [a38f5f880] 2024-08-07 10:44:10 +0300
Branch: REL_14_STABLE [7696b2ea5] 2024-08-07 10:44:16 +0300
-->
     <para>
      Fix thread safety of our fallback (non-OpenSSL) MD5 implementation
      on big-endian hardware (Heikki Linnakangas)
      <ulink url="&commit_baseurl;0583863e9">&sect;</ulink>
     </para>

     <para>
      Thread safety is not currently a concern in the server, but it is
      for libpq.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [920d51979] 2024-10-02 17:30:36 -0400
Branch: REL_17_STABLE [c7a201053] 2024-10-02 17:30:36 -0400
Branch: REL_16_STABLE [65f431aff] 2024-10-02 17:30:36 -0400
Branch: REL_15_STABLE [bb8c89dbc] 2024-10-02 17:30:36 -0400
Branch: REL_14_STABLE [e7af9b52f] 2024-10-02 17:30:36 -0400
Branch: REL_13_STABLE [2120eda94] 2024-10-02 17:30:36 -0400
Branch: REL_12_STABLE [47d8a15de] 2024-10-02 17:30:36 -0400
-->
     <para>
      Parse <application>libpq</application>'s <literal>keepalives</literal>
      connection option in the same way as other integer-valued options
      (Yuto Sasaki)
      <ulink url="&commit_baseurl;65f431aff">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [5388216f6] 2024-08-07 09:21:07 +0200
Branch: REL_17_STABLE Release: REL_17_0 [e9e05c655] 2024-08-08 07:41:02 +0200
Branch: REL_16_STABLE [ee2997c67] 2024-08-08 07:42:21 +0200
Branch: REL_15_STABLE [2de129b35] 2024-08-08 07:42:31 +0200
Branch: REL_14_STABLE [355718553] 2024-08-08 07:42:44 +0200
Branch: REL_13_STABLE [f0096ef13] 2024-08-08 07:42:46 +0200
-->
     <para>
      Avoid use of <function>pnstrdup()</function>
      in <application>ecpglib</application> (Jacob Champion)
      <ulink url="&commit_baseurl;ee2997c67">&sect;</ulink>
     </para>

     <para>
      That function will call <function>exit()</function> on
      out-of-memory, which is undesirable in a library.  The calling code
      already handles allocation failures properly.
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [87eeadaea] 2024-09-19 15:39:01 +0900
Branch: REL_17_STABLE Release: REL_17_0 [b0ae6db20] 2024-09-19 16:25:07 +0900
Branch: REL_16_STABLE [c2fb2f9e2] 2024-09-19 16:25:11 +0900
-->
     <para>
      Fix memory leak in <application>psql</application> during repeated
      use of <command>\bind</command> (Michael Paquier)
      <ulink url="&commit_baseurl;c2fb2f9e2">&sect;</ulink>
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [918e21d25] 2024-09-17 15:53:35 -0400
Branch: REL_17_STABLE Release: REL_17_0 [f7567f9e5] 2024-09-17 15:53:36 -0400
Branch: REL_16_STABLE [b8b175a4c] 2024-09-17 15:53:26 -0400
Branch: REL_15_STABLE [fc2d1ac1a] 2024-09-17 15:53:26 -0400
-->
     <para>
      Fix <application>pg_dump</application>'s handling of identity
      sequences that have persistence different from their owning table's
      persistence (Tom Lane)
      <ulink url="&commit_baseurl;b8b175a4c">&sect;</ulink>
     </para>

     <para>
      Since v15, it's been possible to set an identity sequence to be
      LOGGED when its owning table is UNLOGGED or vice versa.
      However, <application>pg_dump</application>'s method for recreating
      that situation failed in binary-upgrade mode,
      causing <application>pg_upgrade</application> to fail when such
      sequences are present.  Fix by introducing a new option
      for <literal>ADD/ALTER COLUMN GENERATED AS IDENTITY</literal> to
      allow the sequence's persistence to be set correctly at creation.
      Note that this means a dump from a database containing such a
      sequence will only load into a server of this minor version or
      newer.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [49dc191bd] 2024-08-08 10:20:25 +0300
Branch: REL_17_STABLE Release: REL_17_0 [a7bf3e668] 2024-08-08 10:21:12 +0300
Branch: REL_16_STABLE [e8240dbd8] 2024-08-08 10:22:49 +0300
Branch: REL_15_STABLE [b5a5027c9] 2024-08-08 10:22:45 +0300
Branch: REL_14_STABLE [bb5592cac] 2024-08-08 10:22:39 +0300
Branch: REL_13_STABLE [c943e2aae] 2024-08-08 10:22:30 +0300
Branch: REL_12_STABLE [8b86e289f] 2024-08-08 10:22:04 +0300
-->
     <para>
      Include the source timeline history
      in <application>pg_rewind</application>'s debug output
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;e8240dbd8">&sect;</ulink>
     </para>

     <para>
      This was the intention to begin with, but a coding error caused the
      source history to always print as empty.
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [05036a315] 2024-09-12 16:31:29 -0500
Branch: REL_17_STABLE Release: REL_17_0 [6ea7f04b7] 2024-09-12 16:31:29 -0500
Branch: REL_16_STABLE [2bd4c06bb] 2024-09-12 16:31:29 -0500
Branch: REL_15_STABLE [e03042a70] 2024-09-12 16:31:29 -0500
Branch: REL_14_STABLE [8a94af8a2] 2024-09-12 16:31:29 -0500
Branch: REL_13_STABLE [ca902529c] 2024-09-12 16:31:29 -0500
Branch: REL_12_STABLE [dd5670fa5] 2024-09-12 16:31:29 -0500
Branch: master [70d1c664f] 2024-09-13 10:16:40 -0500
Branch: REL_17_STABLE Release: REL_17_0 [9b3c3c0fc] 2024-09-13 10:16:40 -0500
Branch: REL_16_STABLE [0938a4ecd] 2024-09-13 10:16:40 -0500
Branch: REL_15_STABLE [a63aef5e4] 2024-09-13 10:16:40 -0500
Branch: REL_14_STABLE [0970889e3] 2024-09-13 10:16:40 -0500
Branch: REL_13_STABLE [ef46a73f6] 2024-09-13 10:16:40 -0500
Branch: REL_12_STABLE [e0277d90a] 2024-09-13 10:16:40 -0500
-->
     <para>
      Allow inspection of sequence relations in relevant functions
      of <filename>contrib/pageinspect</filename>
      and <filename>contrib/pgstattuple</filename> (Nathan Bossart, Ayush
      Vatsa)
      <ulink url="&commit_baseurl;2bd4c06bb">&sect;</ulink>
      <ulink url="&commit_baseurl;0938a4ecd">&sect;</ulink>
     </para>

     <para>
      This had been allowed in the past, but it got broken during the
      introduction of non-default access methods for tables.
     </para>
    </listitem>

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

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

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

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

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [bc46104fc] 2024-09-14 08:47:06 -0400
Branch: REL_17_STABLE Release: REL_17_0 [648397b1d] 2024-09-14 08:48:04 -0400
Branch: REL_16_STABLE [0a0db4631] 2024-09-14 08:50:44 -0400
Branch: REL_15_STABLE [17c35ab23] 2024-09-14 09:17:51 -0400
Branch: REL_14_STABLE [9f7749464] 2024-09-14 09:19:04 -0400
Branch: REL_13_STABLE [f40d9e9f1] 2024-09-14 09:19:53 -0400
Branch: REL_12_STABLE [d94e3b33e] 2024-09-14 09:20:12 -0400
-->
     <para>
      Fix building with Strawberry Perl on Windows (Andrew Dunstan)
      <ulink url="&commit_baseurl;0a0db4631">&sect;</ulink>
     </para>
    </listitem>

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     <para>
      In some code paths, it was possible for stale statistics to be
      returned.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [059de3ca4] 2023-12-26 17:57:48 -0500
Branch: REL_16_STABLE [e87252ceb] 2023-12-26 17:57:48 -0500
Branch: REL_15_STABLE [76dd3d94a] 2023-12-26 17:57:48 -0500
Branch: REL_14_STABLE [bf4f30a0f] 2023-12-26 17:57:48 -0500
Branch: REL_13_STABLE [cb88f44ec] 2023-12-26 17:57:48 -0500
Branch: REL_12_STABLE [ea61b1cf6] 2023-12-26 17:57:48 -0500
-->
     <para>
      Make the <structname>pg_file_settings</structname> view check
      validity of unapplied values for settings
      with <literal>backend</literal>
      or <literal>superuser-backend</literal> context (Tom Lane)
      <ulink url="&commit_baseurl;e87252ceb">&sect;</ulink>
     </para>

     <para>
      Invalid values were not noted in the view as intended.  This escaped
      detection because there are very few settings in these groups.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [a11c9c42e] 2023-12-01 16:05:41 +0100
Branch: REL_16_STABLE [267f33f68] 2023-12-01 16:09:54 +0100
Branch: REL_15_STABLE [15d485921] 2023-12-01 16:14:22 +0100
Branch: REL_14_STABLE [e846fc491] 2023-12-01 16:17:38 +0100
Branch: REL_13_STABLE [3c49fa2af] 2023-12-01 16:23:18 +0100
Branch: REL_12_STABLE [5d40b3c4f] 2023-12-01 16:27:18 +0100
-->
     <para>
      Match collation too when matching an existing index to a new
      partitioned index (Peter Eisentraut)
      <ulink url="&commit_baseurl;267f33f68">&sect;</ulink>
     </para>

     <para>
      Previously we could accept an index that has a different collation
      from the corresponding element of the partition key, possibly
      leading to misbehavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [0ae3b4662] 2024-01-18 16:30:11 +0900
Branch: REL_16_STABLE [c030e263e] 2024-01-18 16:31:38 +0900
Branch: REL_15_STABLE [a0c19de11] 2024-01-18 16:31:46 +0900
Branch: REL_14_STABLE [b6f2e019d] 2024-01-18 16:31:50 +0900
Branch: master [8013850c8] 2024-01-18 15:04:24 +0900
Branch: REL_16_STABLE [7ce65c6f7] 2024-01-18 15:04:31 +0900
Branch: REL_15_STABLE [1cf2dba84] 2024-01-18 15:04:35 +0900
Branch: REL_14_STABLE [b685b41cf] 2024-01-18 15:04:39 +0900
-->
     <para>
      Avoid failure if a child index is dropped concurrently
      with <command>REINDEX INDEX</command> on a partitioned index
      (Fei Changhong)
      <ulink url="&commit_baseurl;c030e263e">&sect;</ulink>
      <ulink url="&commit_baseurl;7ce65c6f7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [6a1ea02c4] 2024-01-29 13:46:22 +0200
Branch: REL_16_STABLE [b899e00e7] 2024-01-29 13:46:30 +0200
Branch: REL_15_STABLE [e43425f48] 2024-01-29 13:46:42 +0200
Branch: REL_14_STABLE [f120c0872] 2024-01-29 13:46:43 +0200
Branch: REL_13_STABLE [e74c91665] 2024-01-29 13:46:45 +0200
Branch: REL_12_STABLE [e6511fe64] 2024-01-29 13:46:48 +0200
-->
     <para>
      Fix insufficient locking when cleaning up an incomplete split of
      a GIN index's internal page (Fei Changhong, Heikki Linnakangas)
      <ulink url="&commit_baseurl;b899e00e7">&sect;</ulink>
     </para>

     <para>
      The code tried to do this with shared rather than exclusive lock on
      the buffer.  This could lead to index corruption if two processes
      attempted the cleanup concurrently.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5c62ecf6e] 2023-11-13 11:44:35 -0500
Branch: REL_16_STABLE [f76b975d5] 2023-11-13 11:44:48 -0500
Branch: REL_15_STABLE [4c73ec604] 2023-11-13 11:44:57 -0500
Branch: REL_14_STABLE [d900e74e0] 2023-11-13 11:45:04 -0500
Branch: REL_13_STABLE [c859d688b] 2023-11-13 11:45:09 -0500
Branch: REL_12_STABLE [5a6937ec9] 2023-11-13 11:45:13 -0500
-->
     <para>
      Avoid premature release of buffer pin in GIN index insertion
      (Tom Lane)
      <ulink url="&commit_baseurl;f76b975d5">&sect;</ulink>
     </para>

     <para>
      If an index root page split occurs concurrently with our own
      insertion, the code could fail with <quote>buffer NNNN is not owned
      by resource owner</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [903737c5b] 2023-12-21 12:43:36 -0500
Branch: REL_16_STABLE [0977bd64e] 2023-12-21 12:43:36 -0500
Branch: REL_15_STABLE [ab04c1901] 2023-12-21 12:43:36 -0500
Branch: REL_14_STABLE [375f441bd] 2023-12-21 12:43:36 -0500
Branch: REL_13_STABLE [cc3865150] 2023-12-21 12:43:36 -0500
Branch: REL_12_STABLE [1771ec9a8] 2023-12-21 12:43:36 -0500
-->
     <para>
      Avoid failure with partitioned SP-GiST indexes (Tom Lane)
      <ulink url="&commit_baseurl;0977bd64e">&sect;</ulink>
     </para>

     <para>
      Trying to use an index of this kind could lead to <quote>No such
      file or directory</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [59bd34c2f] 2023-12-15 13:55:05 -0500
Branch: REL_16_STABLE [152bfc0af] 2023-12-15 13:55:05 -0500
-->
     <para>
      Fix ownership tests for large objects (Tom Lane)
      <ulink url="&commit_baseurl;152bfc0af">&sect;</ulink>
     </para>

     <para>
      Operations on large objects that require ownership privilege failed
      with <quote>unrecognized class ID: 2613</quote>, unless run by a
      superuser.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [59bd34c2f] 2023-12-15 13:55:05 -0500
Branch: REL_16_STABLE [152bfc0af] 2023-12-15 13:55:05 -0500
Branch: REL_15_STABLE [7a99fb6e1] 2023-12-15 13:55:05 -0500
Branch: REL_14_STABLE [f552f2be2] 2023-12-15 13:55:05 -0500
Branch: REL_13_STABLE [55b5c67da] 2023-12-15 13:55:05 -0500
Branch: REL_12_STABLE [ba66f2533] 2023-12-15 13:55:05 -0500
-->
     <para>
      Fix ownership change reporting for large objects (Tom Lane)
      <ulink url="&commit_baseurl;152bfc0af">&sect;</ulink>
     </para>

     <para>
      A no-op <command>ALTER LARGE OBJECT OWNER</command> command (that
      is, one selecting the existing owner) passed the wrong class ID to
      the <varname>PostAlterHook</varname>, probably confusing any
      extension using that hook.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: REL_16_STABLE [db69101a1] 2023-12-14 09:59:47 +0100
Branch: REL_15_STABLE [8dd70828b] 2023-12-14 09:59:52 +0100
-->
     <para>
      Fix reporting of I/O timing data in <literal>EXPLAIN
      (BUFFERS)</literal> (Michael Paquier)
      <ulink url="&commit_baseurl;db69101a1">&sect;</ulink>
     </para>

     <para>
      The numbers labeled as <quote>shared/local</quote> actually refer
      only to shared buffers, so change that label
      to <quote>shared</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [df220714e] 2024-02-01 13:44:19 -0800
Branch: REL_16_STABLE [6d423e9ff] 2024-02-01 13:44:22 -0800
Branch: REL_15_STABLE [d493bed28] 2024-02-01 13:44:22 -0800
Branch: master [0b6517a3b] 2024-02-01 13:44:19 -0800
Branch: REL_16_STABLE [48a6bf5c4] 2024-02-01 13:44:22 -0800
Branch: REL_15_STABLE [8fa4a1ac6] 2024-02-01 13:44:23 -0800
-->
     <para>
      Ensure durability of <command>CREATE DATABASE</command> (Noah Misch)
      <ulink url="&commit_baseurl;6d423e9ff">&sect;</ulink>
      <ulink url="&commit_baseurl;48a6bf5c4">&sect;</ulink>
     </para>

     <para>
      If an operating system crash occurred during or shortly
      after <command>CREATE DATABASE</command>, recovery could fail, or
      subsequent connections to the new database could fail.  If a base
      backup was taken in that window, similar problems could be observed
      when trying to use the backup.  The symptom would be that the
      database directory, <filename>PG_VERSION</filename> file, or
      <filename>pg_filenode.map</filename> file was missing or empty.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1d35f705e] 2024-01-25 17:07:56 +0900
Branch: REL_16_STABLE [edbd1b41a] 2024-01-29 09:04:51 +0900
Branch: REL_15_STABLE [8b34cff33] 2024-01-29 09:04:55 +0900
-->
     <para>
      Add more <literal>LOG</literal> messages when starting and ending
      recovery from a backup (Andres Freund)
      <ulink url="&commit_baseurl;edbd1b41a">&sect;</ulink>
     </para>

     <para>
      This change provides additional information in the postmaster log
      that may be useful for diagnosing recovery problems.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8a7cbfce1] 2023-12-12 17:05:18 +0100
Branch: REL_16_STABLE [0e2c05af9] 2023-12-12 17:05:27 +0100
Branch: REL_15_STABLE [f5d8f59ca] 2023-12-12 17:05:29 +0100
Branch: REL_14_STABLE [0cfd3ddfe] 2023-12-12 17:05:33 +0100
Branch: REL_13_STABLE [d99294e77] 2023-12-12 17:05:34 +0100
Branch: REL_12_STABLE [4d45ecc92] 2023-12-12 17:05:36 +0100
-->
     <para>
      Prevent standby servers from incorrectly processing dead index
      tuples during subtransactions (Fei Changhong)
      <ulink url="&commit_baseurl;0e2c05af9">&sect;</ulink>
     </para>

     <para>
      The <structfield>startedInRecovery</structfield> flag was not
      correctly set for a subtransaction.  This affects only processing of
      dead index tuples.  It could allow a query in a subtransaction to
      ignore index entries that it should return (if they are already dead
      on the primary server, but not dead to the standby transaction), or
      to prematurely mark index entries as dead that are not yet dead on
      the primary.  It is not clear that the latter case has any serious
      consequences, but it's not the intended behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [21ef4d4d8] 2024-01-23 10:38:07 +0200
Branch: REL_16_STABLE [c5a6d5337] 2024-01-23 10:53:23 +0200
-->
     <para>
      Fix signal handling in walreceiver processes (Heikki Linnakangas)
      <ulink url="&commit_baseurl;c5a6d5337">&sect;</ulink>
     </para>

     <para>
      Revert a change that made walreceivers non-responsive
      to <systemitem>SIGTERM</systemitem> while waiting for the
      replication connection to be established.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [cd7f19da3] 2023-12-08 16:09:03 +1300
Branch: REL_16_STABLE [8ca56620c] 2023-12-08 16:10:23 +1300
Branch: REL_15_STABLE [b9f687f5a] 2023-12-08 16:11:12 +1300
-->
     <para>
      Fix integer overflow hazard in checking whether a record will fit
      into the WAL decoding buffer (Thomas Munro)
      <ulink url="&commit_baseurl;8ca56620c">&sect;</ulink>
     </para>

     <para>
      This bug appears to be only latent except when running a
      32-bit <productname>PostgreSQL</productname> build on a 64-bit
      platform.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [8d7d2197f] 2023-12-11 08:50:43 +0530
Branch: REL_16_STABLE [01cc92fa6] 2023-12-11 08:36:17 +0530
Branch: REL_15_STABLE [332b43063] 2023-12-11 08:23:33 +0530
Branch: REL_14_STABLE [3f86867d5] 2023-12-11 08:10:46 +0530
Branch: REL_13_STABLE [b47ea4f3d] 2023-12-11 07:57:50 +0530
Branch: REL_12_STABLE [e81e617f3] 2023-12-11 07:45:45 +0530
-->
     <para>
      Fix deadlock between a logical replication apply worker, its
      tablesync worker, and a session process trying to alter the
      subscription (Shlok Kyal)
      <ulink url="&commit_baseurl;01cc92fa6">&sect;</ulink>
     </para>

     <para>
      One edge of the deadlock loop did not involve a lock wait, so the
      deadlock went undetected and would persist until manual
      intervention.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [360392fa2] 2023-11-27 08:49:55 +0530
Branch: REL_16_STABLE [d7ca9209c] 2023-11-27 08:59:12 +0530
Branch: REL_15_STABLE [a77fb8c68] 2023-11-27 09:14:17 +0530
-->
     <para>
      Ensure that column default values are correctly transmitted by
      the <application>pgoutput</application> logical replication plugin
      (Nikhil Benesch)
      <ulink url="&commit_baseurl;d7ca9209c">&sect;</ulink>
     </para>

     <para>
      <command>ALTER TABLE ADD COLUMN</command> with a constant default
      value for the new column avoids rewriting existing tuples, instead
      expecting that reading code will insert the correct default into a
      tuple that lacks that column.  If replication was subsequently
      initiated on the table, <application>pgoutput</application> would
      transmit NULL instead of the correct default for such a column,
      causing incorrect replication on the subscriber.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [eeb0ebad7] 2023-11-22 11:44:14 +0530
Branch: REL_16_STABLE [1b6da28e0] 2023-11-22 11:27:38 +0530
Branch: REL_15_STABLE [57aae65ae] 2023-11-22 11:14:35 +0530
-->
     <para>
      Fix failure of logical replication's initial sync for a table with
      no columns (Vignesh C)
      <ulink url="&commit_baseurl;1b6da28e0">&sect;</ulink>
     </para>

     <para>
      This case generated an improperly-formatted <command>COPY</command>
      command.
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [5c3166905] 2024-01-12 13:41:36 -0800
Branch: REL_16_STABLE [4c03ac7e2] 2024-01-12 13:42:09 -0800
Branch: master [dd3ca8cbb] 2024-01-18 14:59:59 -0800
Branch: REL_16_STABLE [5b5318c38] 2024-01-18 15:00:15 -0800
-->
     <para>
      Re-validate a subscription's connection string before use (Vignesh C)
      <ulink url="&commit_baseurl;4c03ac7e2">&sect;</ulink>
      <ulink url="&commit_baseurl;5b5318c38">&sect;</ulink>
     </para>

     <para>
      This is meant to detect cases where a subscription was created
      without a password (which is allowed to superusers) but then the
      subscription owner is changed to a non-superuser.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [aaf09c592] 2024-01-03 17:40:41 -0500
Branch: REL_16_STABLE [fb464a1ae] 2024-01-03 17:40:38 -0500
Branch: REL_15_STABLE [a0d016393] 2024-01-03 17:40:38 -0500
Branch: REL_14_STABLE [9b042e27e] 2024-01-03 17:40:38 -0500
Branch: REL_13_STABLE [5810888c5] 2024-01-03 17:40:38 -0500
Branch: REL_12_STABLE [c20f2aab6] 2024-01-03 17:40:38 -0500
-->
     <para>
      Return the correct status code when a new client disconnects without
      responding to the server's password challenge (Liu Lang, Tom Lane)
      <ulink url="&commit_baseurl;fb464a1ae">&sect;</ulink>
     </para>

     <para>
      In some cases we'd treat this as a loggable error, which was not the
      intention and tends to create log spam, since common clients
      like <application>psql</application> frequently do this.  It may
      also confuse extensions that
      use <varname>ClientAuthentication_hook</varname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c82207a54] 2023-11-28 12:34:03 -0500
Branch: REL_16_STABLE [efa8f6064] 2023-11-28 12:34:03 -0500
Branch: REL_15_STABLE [5dd30bb54] 2023-11-28 12:34:03 -0500
Branch: REL_14_STABLE [b2b1f1288] 2023-11-28 12:34:03 -0500
Branch: REL_13_STABLE [efb804682] 2023-11-28 12:34:03 -0500
Branch: REL_12_STABLE [0bd682246] 2023-11-28 12:34:03 -0500
-->
     <para>
      Fix incompatibility with <application>OpenSSL</application> 3.2
      (Tristan Partin, Bo Andreson)
      <ulink url="&commit_baseurl;efa8f6064">&sect;</ulink>
     </para>

     <para>
      Use the BIO <quote>app_data</quote> field for our private storage,
      instead of assuming it's okay to use the <quote>data</quote> field.
      This mistake didn't cause problems before, but with 3.2 it leads
      to crashes and complaints about double frees.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0a5c46a7a] 2023-12-11 11:51:56 -0500
Branch: REL_16_STABLE [ebbd499d4] 2023-12-11 11:51:56 -0500
Branch: REL_15_STABLE [551d4b28e] 2023-12-11 11:51:56 -0500
Branch: REL_14_STABLE [07ce24326] 2023-12-11 11:51:56 -0500
Branch: REL_13_STABLE [87b46ad90] 2023-12-11 11:51:56 -0500
Branch: REL_12_STABLE [271d24f31] 2023-12-11 11:51:56 -0500
-->
     <para>
      Be more wary about <application>OpenSSL</application> not
      setting <varname>errno</varname> on error (Tom Lane)
      <ulink url="&commit_baseurl;ebbd499d4">&sect;</ulink>
     </para>

     <para>
      If <varname>errno</varname> isn't set, assume the cause of the
      reported failure is read EOF.  This fixes rare cases of strange
      error reports like <quote>could not accept SSL connection:
      Success</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: REL_16_STABLE [501cfd07d] 2023-11-23 13:30:13 +0200
Branch: REL_15_STABLE [481d7d1c0] 2023-11-23 13:31:51 +0200
Branch: REL_14_STABLE [555276f85] 2023-11-23 13:31:57 +0200
-->
     <para>
      Fix file descriptor leakage when a foreign data
      wrapper's <function>ForeignAsyncRequest</function> function fails
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;501cfd07d">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [45da69371] 2024-01-12 21:40:23 -0800
Branch: REL_16_STABLE [41820e640] 2024-01-12 21:39:35 -0800
-->
     <para>
      Fix minor memory leak in connection string validation
      for <command>CREATE SUBSCRIPTION</command> (Jeff Davis)
      <ulink url="&commit_baseurl;41820e640">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e4e63cd98] 2024-02-02 15:34:29 -0500
Branch: REL_16_STABLE [a15378100] 2024-02-02 15:34:29 -0500
Branch: REL_15_STABLE [3766b8b64] 2024-02-02 15:34:29 -0500
Branch: REL_14_STABLE [329b96882] 2024-02-02 15:34:29 -0500
Branch: REL_13_STABLE [29df29dad] 2024-02-02 15:34:29 -0500
Branch: REL_12_STABLE [4493bfb70] 2024-02-02 15:34:29 -0500
-->
     <para>
      Report <systemitem>ENOMEM</systemitem> errors from file-related system
      calls as <literal>ERRCODE_OUT_OF_MEMORY</literal>,
      not <literal>ERRCODE_INTERNAL_ERROR</literal> (Alexander Kuzmenkov)
      <ulink url="&commit_baseurl;a15378100">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [57b440ec1] 2024-01-18 16:11:16 -0500
Branch: REL_16_STABLE [00f941356] 2024-01-18 16:10:57 -0500
Branch: REL_15_STABLE [de2d393a8] 2024-01-18 16:10:57 -0500
Branch: REL_14_STABLE [b7e8f27d1] 2024-01-18 16:10:57 -0500
-->
     <para>
      In <application>PL/pgSQL</application>, support SQL commands that
      are <command>CREATE FUNCTION</command>/<command>CREATE
      PROCEDURE</command> with SQL-standard bodies (Tom Lane)
      <ulink url="&commit_baseurl;00f941356">&sect;</ulink>
     </para>

     <para>
      Previously, such cases failed with parsing errors due to the
      semicolon(s) appearing in the function body.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [b8ba7344e] 2023-12-05 12:43:24 +0100
Branch: REL_16_STABLE [878aa41f8] 2023-12-05 12:43:24 +0100
Branch: REL_15_STABLE [1171c6e74] 2023-12-05 12:43:24 +0100
Branch: REL_14_STABLE [f89681816] 2023-12-05 12:43:24 +0100
Branch: master [c6605c1bd] 2024-01-16 12:27:52 +0100
Branch: REL_16_STABLE [39aab1108] 2024-01-16 12:27:52 +0100
Branch: REL_15_STABLE [2b656cbd2] 2024-01-16 12:27:52 +0100
Branch: REL_14_STABLE [7a7c8c98a] 2024-01-16 12:27:52 +0100
-->
     <para>
      Fix <application>libpq</application>'s
      handling of errors in pipelines (&Aacute;lvaro Herrera)
      <ulink url="&commit_baseurl;878aa41f8">&sect;</ulink>
      <ulink url="&commit_baseurl;39aab1108">&sect;</ulink>
     </para>

     <para>
      The pipeline state could get out of sync if an error is returned
      for reasons other than a query problem (for example, if the
      connection is lost).  Potentially this would lead to a busy-loop in
      the calling application.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1a5594b95] 2023-11-08 16:44:08 +0100
Branch: REL_16_STABLE [42f832685] 2023-11-08 16:44:08 +0100
Branch: REL_15_STABLE [0e28091d5] 2023-11-08 16:44:08 +0100
Branch: REL_14_STABLE [99fa98766] 2023-11-08 16:44:08 +0100
-->
     <para>
      Make <application>libpq</application>'s
      <function>PQsendFlushRequest()</function> function flush the client
      output buffer under the same rules as
      other <literal>PQsend</literal> functions (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;42f832685">&sect;</ulink>
     </para>

     <para>
      In pipeline mode, it may still be necessary to
      call <function>PQflush()</function> as well; but this change removes
      some inconsistency.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [01eca6a91] 2023-11-27 09:40:44 +0900
Branch: REL_16_STABLE [8984480b5] 2023-11-27 09:40:49 +0900
Branch: REL_15_STABLE [b97226815] 2023-11-27 09:40:50 +0900
Branch: REL_14_STABLE [c3b79223f] 2023-11-27 09:40:52 +0900
Branch: REL_13_STABLE [09f680d11] 2023-11-27 09:40:55 +0900
Branch: REL_12_STABLE [0217a7444] 2023-11-27 09:40:57 +0900
-->
     <para>
      Avoid race condition when <application>libpq</application>
      initializes OpenSSL support concurrently in two different threads
      (Willi Mann, Michael Paquier)
      <ulink url="&commit_baseurl;8984480b5">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d053a879b] 2023-11-23 13:30:18 -0500
Branch: REL_16_STABLE [85eb77185] 2023-11-23 13:30:18 -0500
Branch: REL_15_STABLE [a50053777] 2023-11-23 13:30:18 -0500
Branch: REL_14_STABLE [8f23e6a45] 2023-11-23 13:30:18 -0500
Branch: REL_13_STABLE [5abdfd88f] 2023-11-23 13:30:18 -0500
Branch: REL_12_STABLE [18fad508b] 2023-11-23 13:30:19 -0500
-->
     <para>
      Fix timing-dependent failure in GSSAPI data transmission (Tom Lane)
      <ulink url="&commit_baseurl;85eb77185">&sect;</ulink>
     </para>

     <para>
      When using GSSAPI encryption in non-blocking
      mode, <application>libpq</application> sometimes failed
      with <quote>GSSAPI caller failed to retransmit all data needing to
      be retried</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3d185cfc0] 2024-01-10 18:09:29 -0500
Branch: REL_16_STABLE [ba33775fd] 2024-01-10 18:09:29 -0500
-->
     <para>
      Change <application>initdb</application> to always un-comment
      the <filename>postgresql.conf</filename> entries for
      the <literal>lc_<replaceable>xxx</replaceable></literal> parameters
      (Kyotaro Horiguchi)
      <ulink url="&commit_baseurl;ba33775fd">&sect;</ulink>
     </para>

     <para>
      <application>initdb</application> used to work this way before v16,
      and now it does again.  The change
      caused <application>initdb</application>'s <option>--no-locale</option>
      option to not have the intended effect
      on <varname>lc_messages</varname>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a70f2a57f] 2023-11-13 17:04:26 -0500
Branch: REL_16_STABLE [64d2467fc] 2023-11-13 17:04:26 -0500
Branch: REL_15_STABLE [f15147df6] 2023-11-13 17:04:10 -0500
Branch: REL_14_STABLE [15439205d] 2023-11-13 17:04:10 -0500
Branch: REL_13_STABLE [9e08789d4] 2023-11-13 17:04:10 -0500
Branch: REL_12_STABLE [891afa84c] 2023-11-13 17:04:10 -0500
Branch: master [1e3f461e8] 2023-11-14 00:31:39 -0500
Branch: REL_16_STABLE [f1674ac6b] 2023-11-14 00:31:39 -0500
Branch: REL_15_STABLE [63c1b4d88] 2023-11-14 00:31:39 -0500
Branch: REL_14_STABLE [c532be99d] 2023-11-14 00:31:39 -0500
Branch: REL_13_STABLE [7836f6838] 2023-11-14 00:31:39 -0500
Branch: REL_12_STABLE [e43790342] 2023-11-14 00:31:39 -0500
-->
     <para>
      In <application>pg_dump</application>, don't dump RLS policies or
      security labels for extension member objects (Tom Lane, Jacob
      Champion)
      <ulink url="&commit_baseurl;64d2467fc">&sect;</ulink>
      <ulink url="&commit_baseurl;f1674ac6b">&sect;</ulink>
     </para>

     <para>
      Previously, commands would be included in the dump to set these
      properties, which is really incorrect since they should be
      considered as internal affairs of the extension.  Moreover, the
      restoring user might not have adequate privilege to set them, and
      indeed the dumping user might not have enough privilege to dump them
      (since dumping RLS policies requires acquiring lock on their table).
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7418767f1] 2023-12-29 10:57:11 -0500
Branch: REL_16_STABLE [b2c9936a7] 2023-12-29 10:57:11 -0500
Branch: REL_15_STABLE [1e0841426] 2023-12-29 10:57:11 -0500
Branch: REL_14_STABLE [aa2e323ee] 2023-12-29 10:57:11 -0500
Branch: REL_13_STABLE [8d4e8b746] 2023-12-29 10:57:11 -0500
Branch: REL_12_STABLE [69d7edb06] 2023-12-29 10:57:11 -0500
-->
     <para>
      In <application>pg_dump</application>, don't dump an extended
      statistics object if its underlying table isn't being dumped
      (Rian McGuire, Tom Lane)
      <ulink url="&commit_baseurl;b2c9936a7">&sect;</ulink>
     </para>

     <para>
      This conforms to the behavior for other dependent objects such as
      indexes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [30e54d5c5] 2023-12-20 22:37:28 +0100
Branch: REL_16_STABLE [5b5db413d] 2023-12-20 22:37:28 +0100
-->
     <para>
      Properly detect out-of-memory in one code path
      in <application>pg_dump</application> (Daniel Gustafsson)
      <ulink url="&commit_baseurl;5b5db413d">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [49f7c6c44] 2024-01-22 17:48:30 +0100
Branch: REL_16_STABLE [07b53de70] 2024-01-22 17:48:30 +0100
Branch: REL_15_STABLE [3fd36be52] 2024-01-22 17:48:30 +0100
Branch: REL_14_STABLE [85ecff891] 2024-01-22 17:48:30 +0100
-->
     <para>
      Make it an error for a <application>pgbench</application> script to
      end with an open pipeline (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;07b53de70">&sect;</ulink>
     </para>

     <para>
      Previously, <application>pgbench</application> would behave oddly if
      a <command>\startpipeline</command> command lacked a
      matching <command>\endpipeline</command>.  This seems like a
      scripting mistake rather than a case
      that <application>pgbench</application> needs to handle nicely, so
      throw an error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9034a2d51] 2024-01-07 15:19:50 -0500
Branch: REL_16_STABLE [cf6f802bf] 2024-01-07 15:19:50 -0500
Branch: REL_15_STABLE [940ab02b5] 2024-01-07 15:19:50 -0500
Branch: REL_14_STABLE [90e8b86fc] 2024-01-07 15:19:50 -0500
Branch: REL_13_STABLE [9e7432faf] 2024-01-07 15:19:50 -0500
Branch: REL_12_STABLE [1c7443521] 2024-01-07 15:19:50 -0500
-->
     <para>
      Fix crash in <filename>contrib/intarray</filename> if an array with
      an element equal to <literal>INT_MAX</literal> is inserted into
      a <literal>gist__int_ops</literal> index
      (Alexander Lakhin, Tom Lane)
      <ulink url="&commit_baseurl;cf6f802bf">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [208470136] 2023-12-19 18:19:05 +0900
Branch: REL_16_STABLE [7f68b1462] 2023-12-19 18:19:15 +0900
Branch: REL_15_STABLE [2e08440d6] 2023-12-19 18:19:16 +0900
Branch: REL_14_STABLE [bfbe4a146] 2023-12-19 18:19:18 +0900
Branch: REL_13_STABLE [586c6a091] 2023-12-19 18:19:19 +0900
Branch: REL_12_STABLE [f610d4f11] 2023-12-19 18:19:21 +0900
-->
     <para>
      Report a better error
      when <filename>contrib/pageinspect</filename>'s
      <function>hash_bitmap_info()</function> function is applied to a
      partitioned hash index (Alexander Lakhin, Michael Paquier)
      <ulink url="&commit_baseurl;7f68b1462">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a8dd62ef4] 2023-12-19 15:20:39 +0900
Branch: REL_16_STABLE [b4948ed66] 2023-12-19 15:20:48 +0900
Branch: REL_15_STABLE [b745f1680] 2023-12-19 15:20:50 +0900
Branch: REL_14_STABLE [f729fdab4] 2023-12-19 15:20:52 +0900
Branch: REL_13_STABLE [b4c1d255c] 2023-12-19 15:20:53 +0900
Branch: REL_12_STABLE [bd2d3c928] 2023-12-19 15:20:55 +0900
-->
     <para>
      Report a better error
      when <filename>contrib/pgstattuple</filename>'s
      <function>pgstathashindex()</function> function is applied to a
      partitioned hash index (Alexander Lakhin)
      <ulink url="&commit_baseurl;b4948ed66">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [9886744a3] 2024-01-10 10:41:57 +0900
Branch: REL_16_STABLE [714bfb781] 2024-01-12 13:53:07 +0900
Branch: REL_15_STABLE [33d1be06a] 2024-01-12 13:53:10 +0900
Branch: REL_14_STABLE [4c6944223] 2024-01-12 13:53:12 +0900
Branch: REL_13_STABLE [c8aab699e] 2024-01-12 13:53:13 +0900
Branch: REL_12_STABLE [9e70e6564] 2024-01-12 13:53:14 +0900
Branch: master [b83747a8a] 2024-01-11 10:39:58 +0900
Branch: REL_16_STABLE [506c77f9b] 2024-01-12 13:59:51 +0900
Branch: REL_15_STABLE [7e7d827f5] 2024-01-12 13:59:58 +0900
Branch: REL_14_STABLE [4a7475e9a] 2024-01-12 14:00:00 +0900
Branch: REL_13_STABLE [2a0eb80ae] 2024-01-12 14:00:01 +0900
Branch: REL_12_STABLE [e50a52b2b] 2024-01-12 14:00:02 +0900
-->
     <para>
      On Windows, suppress autorun options when launching subprocesses
      in <application>pg_ctl</application>
      and <application>pg_regress</application> (Kyotaro Horiguchi)
      <ulink url="&commit_baseurl;714bfb781">&sect;</ulink>
      <ulink url="&commit_baseurl;506c77f9b">&sect;</ulink>
     </para>

     <para>
      When launching a child process via <filename>cmd.exe</filename>,
      pass the <option>/D</option> flag to prevent executing any autorun
      commands specified in the registry.  This avoids possibly-surprising
      side effects.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [97287bdfa] 2024-01-29 12:08:57 -0600
Branch: REL_16_STABLE [1b924a86e] 2024-01-29 12:09:03 -0600
Branch: REL_15_STABLE [3726c1cb0] 2024-01-29 12:09:08 -0600
-->
     <para>
      Move <function>is_valid_ascii()</function>
      from <filename>mb/pg_wchar.h</filename>
      to <filename>utils/ascii.h</filename> (Jubilee Young)
      <ulink url="&commit_baseurl;1b924a86e">&sect;</ulink>
     </para>

     <para>
      This change avoids the need to
      include <filename>&lt;simd.h&gt;</filename>
      in <filename>pg_wchar.h</filename>, which was causing problems for
      some third-party code.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [400928b83] 2024-01-29 12:06:13 -0500
Branch: REL_16_STABLE [e02fea093] 2024-01-29 12:06:07 -0500
Branch: REL_15_STABLE [3f8ac13b1] 2024-01-29 12:06:07 -0500
Branch: REL_14_STABLE [29e25a6b1] 2024-01-29 12:06:08 -0500
Branch: REL_13_STABLE [7c53b1977] 2024-01-29 12:06:08 -0500
Branch: REL_12_STABLE [b2fd1dab9] 2024-01-29 12:06:08 -0500
-->
     <para>
      Fix compilation failures with <application>libxml2</application>
      version 2.12.0 and later (Tom Lane)
      <ulink url="&commit_baseurl;e02fea093">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [7636725b9] 2023-12-06 14:10:39 +0900
Branch: REL_16_STABLE [6248a2bb9] 2023-12-06 14:11:41 +0900
Branch: REL_15_STABLE [87ed81a87] 2023-12-06 14:11:44 +0900
Branch: REL_14_STABLE [c49b6cab1] 2023-12-06 14:11:46 +0900
Branch: REL_13_STABLE [7d5a74033] 2023-12-06 14:11:47 +0900
-->
     <para>
      Fix compilation failure of <literal>WAL_DEBUG</literal> code on
      Windows (Bharath Rupireddy)
      <ulink url="&commit_baseurl;6248a2bb9">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [58c3151bb] 2023-12-26 16:16:37 -0500
Branch: REL_16_STABLE [b0115e7e2] 2023-12-26 16:16:29 -0500
Branch: REL_15_STABLE [5f8d6d709] 2023-12-26 16:16:29 -0500
Branch: REL_14_STABLE [7978eee02] 2023-12-26 16:16:29 -0500
Branch: REL_13_STABLE [48e797164] 2023-12-26 16:16:29 -0500
Branch: REL_12_STABLE [1613e2fae] 2023-12-26 16:16:29 -0500
Branch: master [a46972e30] 2023-12-26 17:03:02 -0500
Branch: REL_16_STABLE [c72049dbc] 2023-12-26 17:03:24 -0500
-->
     <para>
      Suppress compiler warnings from Python's header files
      (Peter Eisentraut, Tom Lane)
      <ulink url="&commit_baseurl;b0115e7e2">&sect;</ulink>
      <ulink url="&commit_baseurl;c72049dbc">&sect;</ulink>
     </para>

     <para>
      Our preferred compiler options provoke warnings about constructs
      appearing in recent versions of Python's header files.  When using
      <application>gcc</application>, we can suppress these warnings with
      a pragma.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [d282e88e5] 2024-01-25 13:44:54 +1300
Branch: REL_16_STABLE [60ba7cae7] 2024-01-25 13:45:22 +1300
Branch: REL_15_STABLE [67f7aaa38] 2024-01-25 13:46:07 +1300
Branch: REL_14_STABLE [364283c92] 2024-01-25 13:46:38 +1300
Branch: REL_13_STABLE [70a82f40a] 2024-01-25 13:47:20 +1300
Branch: REL_12_STABLE [d060cb658] 2024-01-25 13:47:35 +1300
-->
     <para>
      Avoid deprecation warning when compiling with LLVM 18 (Thomas Munro)
      <ulink url="&commit_baseurl;60ba7cae7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [272a7c303] 2024-02-01 15:57:53 -0500
Branch: REL_16_STABLE [b4fb76fb5] 2024-02-01 15:57:53 -0500
Branch: REL_15_STABLE [970b1aeeb] 2024-02-01 15:57:53 -0500
Branch: REL_14_STABLE [35b8b2c4a] 2024-02-01 15:57:53 -0500
Branch: REL_13_STABLE [ac3afc3f7] 2024-02-01 15:57:53 -0500
Branch: REL_12_STABLE [b59ae79b7] 2024-02-01 15:57:53 -0500
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2024a for DST law changes in Greenland, Kazakhstan, and
      Palestine, plus corrections for the Antarctic stations Casey and
      Vostok.  Also historical corrections for Vietnam, Toronto, and
      Miquelon. (Tom Lane)
      <ulink url="&commit_baseurl;b4fb76fb5">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16-1">
  <title>Release 16.1</title>

  <formalpara>
  <title>Release date:</title>
  <para>2023-11-09</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 16.0.
   For information about new features in major release 16, see
   <xref linkend="release-16"/>.
  </para>

  <sect2 id="release-16-1-migration">
   <title>Migration to Version 16.1</title>

   <para>
    A dump/restore is not required for those running 16.X.
   </para>

   <para>
    However, several mistakes have been discovered that could lead to
    certain types of indexes yielding wrong search results or being
    unnecessarily inefficient.  It is advisable
    to <command>REINDEX</command> potentially-affected indexes after
    installing this update.  See the fourth through seventh changelog
    entries below.
   </para>
  </sect2>

  <sect2 id="release-16-1-changes">
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3b0776fde] 2023-11-06 10:38:00 -0500
Branch: REL_16_STABLE [d3d1e2509] 2023-11-06 10:38:00 -0500
Branch: REL_15_STABLE [4f4a422fb] 2023-11-06 10:38:00 -0500
Branch: REL_14_STABLE [9146d0d65] 2023-11-06 10:38:00 -0500
Branch: REL_13_STABLE [d3de70fdb] 2023-11-06 10:38:00 -0500
Branch: REL_12_STABLE [e911afd09] 2023-11-06 10:38:00 -0500
Branch: REL_11_STABLE [8c6633f4d] 2023-11-06 10:38:00 -0500
-->
     <para>
      Fix handling of unknown-type arguments
      in <literal>DISTINCT</literal> <type>"any"</type> aggregate
      functions (Tom Lane)
      <ulink url="&commit_baseurl;d3d1e2509">&sect;</ulink>
     </para>

     <para>
      This error led to a <type>text</type>-type value being interpreted
      as an <type>unknown</type>-type value (that is, a zero-terminated
      string) at runtime.  This could result in disclosure of server
      memory following the <type>text</type> value.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Jingzhou Fu
      for reporting this problem.
      (CVE-2023-5868)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [18b585155] 2023-11-06 10:56:43 -0500
Branch: REL_16_STABLE [e24daa94b] 2023-11-06 10:56:43 -0500
Branch: REL_15_STABLE [3bc6bc3ee] 2023-11-06 10:56:43 -0500
Branch: REL_14_STABLE [edc0a8d82] 2023-11-06 10:56:43 -0500
Branch: REL_13_STABLE [26c599beb] 2023-11-06 10:56:43 -0500
Branch: REL_12_STABLE [d267cea24] 2023-11-06 10:56:43 -0500
Branch: REL_11_STABLE [c48008f59] 2023-11-06 10:56:43 -0500
-->
     <para>
      Detect integer overflow while computing new array dimensions
      (Tom Lane)
      <ulink url="&commit_baseurl;e24daa94b">&sect;</ulink>
     </para>

     <para>
      When assigning new elements to array subscripts that are outside the
      current array bounds, an undetected integer overflow could occur in
      edge cases.  Memory stomps that are potentially exploitable for
      arbitrary code execution are possible, and so is disclosure of
      server memory.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Pedro
      Gallegos for reporting this problem.
      (CVE-2023-5869)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [3a9b18b30] 2023-11-06 06:14:13 -0800
Branch: REL_16_STABLE [785412731] 2023-11-06 06:14:16 -0800
Branch: REL_15_STABLE [595c988c9] 2023-11-06 06:14:16 -0800
Branch: REL_14_STABLE [508acb901] 2023-11-06 06:14:17 -0800
Branch: REL_13_STABLE [28b609550] 2023-11-06 06:14:17 -0800
Branch: REL_12_STABLE [2893f2f40] 2023-11-06 06:14:17 -0800
Branch: REL_11_STABLE [e082734c8] 2023-11-06 06:14:18 -0800
Author: Noah Misch <noah@leadboat.com>
Branch: master [b72de09a1] 2023-11-06 06:14:13 -0800
Branch: REL_16_STABLE [2c3c5ec49] 2023-11-06 06:14:16 -0800
Branch: REL_15_STABLE [fbc371909] 2023-11-06 06:14:16 -0800
Branch: REL_14_STABLE [ecd5d240c] 2023-11-06 06:14:17 -0800
Branch: REL_13_STABLE [2c7a2a00a] 2023-11-06 06:14:17 -0800
Branch: REL_12_STABLE [7bbf4d037] 2023-11-06 06:14:17 -0800
Branch: REL_11_STABLE [a27be40c1] 2023-11-06 06:14:18 -0800
-->
     <para>
      Prevent the <literal>pg_signal_backend</literal> role from
      signalling background workers and autovacuum processes
      (Noah Misch, Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;785412731">&sect;</ulink>
      <ulink url="&commit_baseurl;2c3c5ec49">&sect;</ulink>
     </para>

     <para>
      The documentation says that <literal>pg_signal_backend</literal>
      cannot issue signals to superuser-owned processes.  It was able to
      signal these background processes, though, because they advertise a
      role OID of zero.  Treat that as indicating superuser ownership.
      The security implications of cancelling one of these process types
      are fairly small so far as the core code goes (we'll just start
      another one), but extensions might add background workers that are
      more vulnerable.
     </para>

     <para>
      Also ensure that the <varname>is_superuser</varname> parameter is
      set correctly in such processes.  No specific security consequences
      are known for that oversight, but it might be significant for some
      extensions.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Hemanth Sandrana and Mahendrakar Srinivasarao
      for reporting this problem.
      (CVE-2023-5870)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [28d3c2ddc] 2023-09-26 14:14:49 +0300
Branch: REL_16_STABLE [d7f521325] 2023-09-26 14:15:01 +0300
Branch: REL_15_STABLE [c3c284b37] 2023-09-26 14:15:19 +0300
Branch: REL_14_STABLE [747cef5a5] 2023-09-26 14:15:28 +0300
Branch: REL_13_STABLE [db7394d4d] 2023-09-26 14:15:35 +0300
Branch: REL_12_STABLE [26917ebea] 2023-09-26 15:41:44 +0300
-->
     <para>
      Fix misbehavior during recursive page split in GiST index build
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;d7f521325">&sect;</ulink>
     </para>

     <para>
      Fix a case where the location of a page downlink was incorrectly
      tracked, and introduce some logic to allow recovering from such
      situations rather than silently doing the wrong thing.  This error
      could result in incorrect answers from subsequent index searches.
      It may be advisable to reindex all GiST indexes after installing
      this update.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [5f27b5f84] 2023-10-14 16:33:51 -0700
Branch: REL_16_STABLE [bf1c21c4f] 2023-10-14 16:33:54 -0700
Branch: REL_15_STABLE [782be0f71] 2023-10-14 16:33:54 -0700
Branch: REL_14_STABLE [0834df909] 2023-10-14 16:33:54 -0700
Branch: REL_13_STABLE [6fd1dbdb2] 2023-10-14 16:33:54 -0700
-->
     <para>
      Prevent de-duplication of btree index entries
      for <type>interval</type> columns (Noah Misch)
      <ulink url="&commit_baseurl;bf1c21c4f">&sect;</ulink>
     </para>

     <para>
      There are <type>interval</type> values that are distinguishable but
      compare equal, for example <literal>24:00:00</literal>
      and <literal>1 day</literal>.  This breaks assumptions made by btree
      de-duplication, so <type>interval</type> columns need to be excluded
      from de-duplication.  This oversight can cause incorrect results
      from index-only scans.  Moreover, after
      updating <application>amcheck</application> will report an error for
      almost all such indexes.  Users should reindex any btree indexes
      on <type>interval</type> columns.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [394d51731] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [e7965226d] 2023-10-27 18:28:19 +0200
Branch: REL_15_STABLE [088233f8d] 2023-10-27 18:37:59 +0200
Branch: REL_14_STABLE [d1740e169] 2023-10-27 18:46:49 +0200
-->
     <para>
      Process <type>date</type> values more sanely in
      BRIN <literal>datetime_minmax_multi_ops</literal> indexes
      (Tomas Vondra)
      <ulink url="&commit_baseurl;e7965226d">&sect;</ulink>
     </para>

     <para>
      The distance calculation for dates was backward, causing poor
      decisions about which entries to merge.  The index still produces
      correct results, but is much less efficient than it should be.
      Reindexing BRIN <literal>minmax_multi</literal> indexes
      on <type>date</type> columns is advisable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [8da86d62a] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [497fc9208] 2023-10-27 18:28:28 +0200
Branch: REL_15_STABLE [d04a9283b] 2023-10-27 18:38:02 +0200
Branch: REL_14_STABLE [52c934cc1] 2023-10-27 18:46:53 +0200
Branch: master [b5489b75c] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [0635fe02b] 2023-10-27 18:28:04 +0200
Branch: REL_15_STABLE [daa7b0d7c] 2023-10-27 18:37:56 +0200
Branch: REL_14_STABLE [90c4da6d4] 2023-10-27 18:46:46 +0200
-->
     <para>
      Process large <type>timestamp</type> and <type>timestamptz</type>
      values more sanely in
      BRIN <literal>datetime_minmax_multi_ops</literal> indexes
      (Tomas Vondra)
      <ulink url="&commit_baseurl;497fc9208">&sect;</ulink>
      <ulink url="&commit_baseurl;0635fe02b">&sect;</ulink>
     </para>

     <para>
      Infinities were mistakenly treated as having distance zero rather
      than a large distance from other values, causing poor decisions
      about which entries to merge.  Also, finite-but-very-large values
      (near the endpoints of the representable timestamp range) could
      result in internal overflows, again causing poor decisions.  The
      index still produces correct results, but is much less efficient
      than it should be.  Reindexing BRIN <literal>minmax_multi</literal>
      indexes on <type>timestamp</type> and <type>timestamptz</type>
      columns is advisable if the column contains, or has contained,
      infinities or large finite values.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [c6cf6d353] 2023-10-27 18:15:37 +0200
Branch: REL_16_STABLE [924e0e2ee] 2023-10-27 18:28:37 +0200
Branch: REL_15_STABLE [2fbb2fcb0] 2023-10-27 18:38:05 +0200
Branch: REL_14_STABLE [0fa73c5cd] 2023-10-27 18:46:56 +0200
-->
     <para>
      Avoid calculation overflows in
      BRIN <literal>interval_minmax_multi_ops</literal> indexes with
      extreme interval values (Tomas Vondra)
      <ulink url="&commit_baseurl;924e0e2ee">&sect;</ulink>
     </para>

     <para>
      This bug might have caused unexpected failures while trying to
      insert large interval values into such an index.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d9e46dfb7] 2023-10-13 01:12:31 +1300
Branch: REL_16_STABLE [595db9e9c] 2023-10-13 01:13:07 +1300
Branch: REL_15_STABLE [1e81d3e6e] 2023-10-13 01:13:36 +1300
Branch: REL_14_STABLE [d26f33c32] 2023-10-13 01:13:59 +1300
Branch: REL_13_STABLE [890a73ba3] 2023-10-13 01:14:22 +1300
Branch: REL_12_STABLE [3cc0c2517] 2023-10-13 01:14:46 +1300
Branch: REL_11_STABLE [2759924f3] 2023-10-13 01:15:12 +1300
Author: David Rowley <drowley@postgresql.org>
Branch: master [f0c409d9c] 2023-10-12 19:50:38 +1300
Branch: REL_16_STABLE [6352f1627] 2023-10-12 19:51:26 +1300
Branch: REL_15_STABLE [916adc7c5] 2023-10-12 19:52:05 +1300
Branch: REL_14_STABLE [cd15bff48] 2023-10-12 19:52:31 +1300
Branch: REL_13_STABLE [45c4b2a3a] 2023-10-12 19:52:58 +1300
Branch: REL_12_STABLE [cd259de50] 2023-10-12 19:53:23 +1300
Branch: REL_11_STABLE [07f261b31] 2023-10-12 19:53:50 +1300
-->
     <para>
      Fix partition step generation and runtime partition pruning for
      hash-partitioned tables with multiple partition keys (David Rowley)
      <ulink url="&commit_baseurl;595db9e9c">&sect;</ulink>
      <ulink url="&commit_baseurl;6352f1627">&sect;</ulink>
     </para>

     <para>
      Some cases involving an <literal>IS NULL</literal> condition on one
      of the partition keys could result in a crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [1d5caec22] 2023-09-30 10:52:21 +0100
Branch: REL_16_STABLE [6d2de076c] 2023-09-30 10:54:29 +0100
Branch: REL_15_STABLE [3c1a1af91] 2023-09-30 10:55:24 +0100
-->
     <para>
      Fix inconsistent rechecking of concurrently-updated rows
      during <command>MERGE</command> (Dean Rasheed)
      <ulink url="&commit_baseurl;6d2de076c">&sect;</ulink>
     </para>

     <para>
      In <literal>READ COMMITTED</literal> mode, an update that finds that
      its target row was just updated by a concurrent transaction will
      recheck the query's <literal>WHERE</literal> conditions on the
      updated row.  <command>MERGE</command> failed to ensure that the
      proper rows of other joined tables were used during this recheck,
      possibly resulting in incorrect decisions about whether the
      newly-updated row should be updated again
      by <command>MERGE</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [387f9ed0a] 2023-10-24 14:48:33 -0400
Branch: REL_16_STABLE [b1444a09d] 2023-10-24 14:48:34 -0400
Branch: REL_15_STABLE [1268e7378] 2023-10-24 14:48:34 -0400
Branch: REL_14_STABLE [8f4a6b9e4] 2023-10-24 14:48:34 -0400
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [01575ad78] 2023-10-26 11:53:56 +0900
Branch: REL_16_STABLE [178ee1d85] 2023-10-26 11:53:41 +0900
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [1f06b7fc6] 2023-10-26 17:32:38 +0900
Branch: REL_16_STABLE [2bf99b48d] 2023-10-26 17:29:32 +0900
-->
     <para>
      Correctly identify the target table in an
      inherited <command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>
      even when the parent table is excluded by constraints (Amit Langote,
      Tom Lane)
      <ulink url="&commit_baseurl;b1444a09d">&sect;</ulink>
      <ulink url="&commit_baseurl;178ee1d85">&sect;</ulink>
      <ulink url="&commit_baseurl;2bf99b48d">&sect;</ulink>
     </para>

     <para>
      If the initially-named table is excluded by constraints, but not all
      its inheritance descendants are, the first non-excluded descendant
      was identified as the primary target table.  This would lead to
      firing statement-level triggers associated with that table, rather
      than the initially-named table as should happen.  In v16, the same
      oversight could also lead to <quote>invalid perminfoindex 0 in RTE
      with relid NNNN</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [714780dcd] 2023-09-28 16:29:37 -0700
Branch: REL_16_STABLE [3fa81b62e] 2023-09-28 16:29:35 -0700
Branch: REL_15_STABLE [cac37c1a1] 2023-09-28 16:29:32 -0700
Branch: REL_14_STABLE [41486c4aa] 2023-09-28 16:29:29 -0700
Branch: REL_13_STABLE [d4724e94a] 2023-09-28 16:29:27 -0700
Branch: REL_12_STABLE [b36d72cbc] 2023-09-28 16:29:24 -0700
Branch: REL_11_STABLE [7c07305e6] 2023-09-28 16:29:22 -0700
-->
     <para>
      Fix edge case in btree mark/restore processing of ScalarArrayOpExpr
      clauses (Peter Geoghegan)
      <ulink url="&commit_baseurl;3fa81b62e">&sect;</ulink>
     </para>

     <para>
      When restoring an indexscan to a previously marked position, the
      code could miss required setup steps if the scan had advanced
      exactly to the end of the matches for a ScalarArrayOpExpr (that is,
      an <literal>indexcol = ANY(ARRAY[])</literal>) clause.  This could
      result in missing some rows that should have been fetched.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [0b053e78b] 2023-10-05 20:30:47 +1300
Branch: REL_16_STABLE [31b2b2d72] 2023-10-05 20:31:25 +1300
Branch: REL_15_STABLE [689af6db6] 2023-10-05 20:31:51 +1300
Branch: REL_14_STABLE [e4b95b9b0] 2023-10-05 20:32:14 +1300
-->
     <para>
      Fix intra-query memory leak in Memoize execution
      (Orlov Aleksej, David Rowley)
      <ulink url="&commit_baseurl;31b2b2d72">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [237f8765d] 2023-10-28 14:05:01 -0400
Branch: REL_16_STABLE [07494a0df] 2023-10-28 14:04:43 -0400
Branch: REL_15_STABLE [592cb11fb] 2023-10-28 14:04:43 -0400
Branch: REL_14_STABLE [5d7515d7d] 2023-10-28 14:04:43 -0400
Branch: REL_13_STABLE [b7684473d] 2023-10-28 14:04:43 -0400
Branch: REL_12_STABLE [d8d7f282f] 2023-10-28 14:04:43 -0400
Branch: REL_11_STABLE [7ab6971c6] 2023-10-28 14:04:43 -0400
-->
     <para>
      Fix intra-query memory leak when a set-returning function repeatedly
      returns zero rows (Tom Lane)
      <ulink url="&commit_baseurl;07494a0df">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [f73fa5a47] 2023-09-18 14:28:17 -0400
Branch: REL_16_STABLE [ec693a3f3] 2023-09-18 14:27:47 -0400
Branch: REL_15_STABLE [95f54f0d0] 2023-09-18 14:27:47 -0400
Branch: REL_14_STABLE [9baabfa38] 2023-09-18 14:27:47 -0400
Branch: REL_13_STABLE [e6e50ada0] 2023-09-18 14:27:47 -0400
Branch: REL_12_STABLE [123337079] 2023-09-18 14:27:47 -0400
Branch: REL_11_STABLE [db00be6d7] 2023-09-18 14:27:47 -0400
-->
     <para>
      Don't crash if <function>cursor_to_xmlschema()</function> is applied
      to a non-data-returning Portal (Boyu Yang)
      <ulink url="&commit_baseurl;ec693a3f3">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [54ccfd658] 2023-09-27 14:32:51 +0530
Branch: REL_16_STABLE [8d05be931] 2023-09-27 14:20:57 +0530
-->
     <para>
      Fix improper sharing of origin filter condition across
      successive <function>pg_logical_slot_get_changes()</function> calls
      (Hou Zhijie)
      <ulink url="&commit_baseurl;8d05be931">&sect;</ulink>
     </para>

     <para>
      The origin condition set by one call of this function would be
      re-used by later calls that did not specify the origin argument.
      This was not intended.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [73635b6d6] 2023-10-31 16:42:08 +1300
Branch: REL_16_STABLE [a98f01c93] 2023-10-31 16:42:35 +1300
Branch: REL_15_STABLE [136068353] 2023-10-31 16:43:01 +1300
Branch: REL_14_STABLE [c5988e69f] 2023-10-31 16:43:28 +1300
Branch: REL_13_STABLE [b3c8d1d0e] 2023-10-31 16:44:00 +1300
Branch: REL_12_STABLE [efcb601d2] 2023-10-31 16:44:27 +1300
-->
     <para>
      Throw the intended error if <function>pgrowlocks()</function> is
      applied to a partitioned table (David Rowley)
      <ulink url="&commit_baseurl;a98f01c93">&sect;</ulink>
     </para>

     <para>
      Previously, a not-on-point complaint <quote>only heap AM is
      supported</quote> would be raised.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [13503eb59] 2023-10-30 14:46:05 -0700
Branch: REL_16_STABLE [1a368dd3e] 2023-10-30 14:46:08 -0700
Branch: REL_15_STABLE [e633e9b13] 2023-10-30 14:46:08 -0700
Branch: REL_14_STABLE [0a7b183fd] 2023-10-30 14:46:09 -0700
Branch: REL_13_STABLE [123b0d111] 2023-10-30 14:46:09 -0700
Branch: REL_12_STABLE [975ae0553] 2023-10-30 14:46:09 -0700
Branch: REL_11_STABLE [bae063db4] 2023-10-30 14:46:09 -0700
-->
     <para>
      Handle invalid indexes more cleanly in assorted SQL functions
      (Noah Misch)
      <ulink url="&commit_baseurl;1a368dd3e">&sect;</ulink>
     </para>

     <para>
      Report an error if <function>pgstatindex()</function>,
      <function>pgstatginindex()</function>,
      <function>pgstathashindex()</function>,
      or <function>pgstattuple()</function> is applied to an invalid
      index.  If <function>brin_desummarize_range()</function>,
      <function>brin_summarize_new_values()</function>,
      <function>brin_summarize_range()</function>,
      or <function>gin_clean_pending_list()</function> is applied to an
      invalid index, do nothing except to report a debug-level message.
      Formerly these functions attempted to process the index, and might
      fail in strange ways depending on what the failed <command>CREATE
      INDEX</command> had left behind.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cf1c65070] 2023-09-25 11:50:28 -0400
Branch: REL_16_STABLE [8465efc1a] 2023-09-25 11:50:28 -0400
Branch: REL_15_STABLE [71bb73f60] 2023-09-25 11:50:28 -0400
Branch: REL_14_STABLE [a2799f53d] 2023-09-25 11:50:28 -0400
Branch: REL_13_STABLE [52a676ef4] 2023-09-25 11:50:28 -0400
Branch: REL_12_STABLE [4a81ed29d] 2023-09-25 11:50:28 -0400
Branch: REL_11_STABLE [0fb91ed2b] 2023-09-25 11:50:28 -0400
-->
     <para>
      Avoid premature memory allocation failure with long inputs
      to <function>to_tsvector()</function> (Tom Lane)
      <ulink url="&commit_baseurl;8465efc1a">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5b7b38246] 2023-10-01 13:16:47 -0400
Branch: REL_16_STABLE [5c34a7374] 2023-10-01 13:16:59 -0400
Branch: REL_15_STABLE [55e188a15] 2023-10-01 13:17:06 -0400
Branch: REL_14_STABLE [cf12c4fd2] 2023-10-01 13:17:11 -0400
Branch: REL_13_STABLE [9da153846] 2023-10-01 13:17:15 -0400
Branch: REL_12_STABLE [2296bc362] 2023-10-01 13:17:20 -0400
Branch: REL_11_STABLE [7a310cae0] 2023-10-01 13:17:25 -0400
-->
     <para>
      Fix over-allocation of the constructed <type>tsvector</type>
      in <function>tsvectorrecv()</function> (Denis Erokhin)
      <ulink url="&commit_baseurl;5c34a7374">&sect;</ulink>
     </para>

     <para>
      If the incoming vector includes position data, the binary receive
      function left wasted space (roughly equal to the size of the
      position data) in the finished <type>tsvector</type>.  In extreme
      cases this could lead to <quote>maximum total lexeme length
      exceeded</quote> failures for vectors that were under the length
      limit when emitted.  In any case it could lead to wasted space
      on-disk.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9b103f861] 2023-10-18 20:43:27 -0400
Branch: REL_16_STABLE [cfa4eba02] 2023-10-18 20:43:17 -0400
Branch: REL_15_STABLE [985ac5ce2] 2023-10-18 20:43:17 -0400
Branch: REL_14_STABLE [2c63dc035] 2023-10-18 20:43:17 -0400
Branch: REL_13_STABLE [817669ea2] 2023-10-18 20:43:17 -0400
-->
     <para>
      Improve checks for corrupt PGLZ compressed data (Flavien Guedez)
      <ulink url="&commit_baseurl;cfa4eba02">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [f062cddaf] 2023-09-13 09:34:30 +0530
Branch: REL_16_STABLE [a81e5516f] 2023-09-13 09:48:31 +0530
-->
     <para>
      Fix <command>ALTER SUBSCRIPTION</command> so that a commanded change
      in the <literal>run_as_owner</literal> option is actually applied
      (Hou Zhijie)
      <ulink url="&commit_baseurl;a81e5516f">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [22655aa23] 2023-10-13 19:16:44 -0700
Branch: REL_16_STABLE [0002feb82] 2023-10-13 19:17:28 -0700
-->
     <para>
      Fix bulk table insertion into partitioned tables (Andres Freund)
      <ulink url="&commit_baseurl;0002feb82">&sect;</ulink>
     </para>

     <para>
      Improper sharing of insertion state across partitions could result
      in failures during <command>COPY FROM</command>, typically
      manifesting as <quote>could not read block NNNN in file XXXX: read
      only 0 of 8192 bytes</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [276393f53] 2023-10-01 10:18:41 -0400
Branch: REL_16_STABLE [910eb61b2] 2023-10-01 10:25:33 -0400
-->
     <para>
      In <command>COPY FROM</command>, avoid evaluating column default
      values that will not be needed by the command (Laurenz Albe)
      <ulink url="&commit_baseurl;910eb61b2">&sect;</ulink>
     </para>

     <para>
      This avoids a possible error if the default value isn't actually
      valid for the column, or if the default's expression would fail in
      the current execution context.  Such edge cases sometimes arise
      while restoring dumps, for example.  Previous releases did not fail
      in this situation, so prevent v16 from doing so.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d8a09939a] 2023-10-01 12:09:26 -0400
Branch: REL_16_STABLE [ea0e7cd6b] 2023-10-01 12:09:26 -0400
Branch: REL_15_STABLE [95fd5c89f] 2023-10-01 12:09:26 -0400
Branch: REL_14_STABLE [a715c0212] 2023-10-01 12:09:26 -0400
-->
     <para>
      In <command>COPY FROM</command>, fail cleanly when an unsupported
      encoding conversion is needed (Tom Lane)
      <ulink url="&commit_baseurl;ea0e7cd6b">&sect;</ulink>
     </para>

     <para>
      Recent refactoring accidentally removed the intended error check for
      this, such that it ended in <quote>cache lookup failed for function
      0</quote> instead of a useful error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7704a1a72] 2023-11-02 11:47:33 -0400
Branch: REL_16_STABLE [82063edd4] 2023-11-02 11:47:33 -0400
Branch: REL_15_STABLE [ae33659d4] 2023-11-02 11:47:33 -0400
Branch: REL_14_STABLE [47c0f00cf] 2023-11-02 11:47:33 -0400
Branch: REL_13_STABLE [137227c6d] 2023-11-02 11:47:33 -0400
Branch: REL_12_STABLE [65810fc6d] 2023-11-02 11:47:33 -0400
Branch: REL_11_STABLE [6e1cca511] 2023-11-02 11:47:33 -0400 !! no live bug
-->
     <para>
      Avoid crash in <command>EXPLAIN</command> if a parameter marked to
      be displayed by <command>EXPLAIN</command> has a NULL boot-time
      value (Xing Guo, Aleksander Alekseev, Tom Lane)
      <ulink url="&commit_baseurl;82063edd4">&sect;</ulink>
     </para>

     <para>
      No built-in parameter fits this description, but an extension could
      define such a parameter.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [54b208f90] 2023-10-16 14:06:14 -0400
Branch: REL_16_STABLE [57e6e861d] 2023-10-16 14:06:15 -0400
Branch: REL_15_STABLE [0d1a7cd14] 2023-10-16 14:06:15 -0400
Branch: REL_14_STABLE [f6e1ee3cf] 2023-10-16 14:06:11 -0400
Branch: REL_13_STABLE [1e678175c] 2023-10-16 14:06:11 -0400
Branch: REL_12_STABLE [07eb22a77] 2023-10-16 14:06:11 -0400
Branch: REL_11_STABLE [a295684b8] 2023-10-16 14:06:12 -0400
-->
     <para>
      Ensure we have a snapshot while dropping <literal>ON COMMIT
      DROP</literal> temp tables (Tom Lane)
      <ulink url="&commit_baseurl;57e6e861d">&sect;</ulink>
     </para>

     <para>
      This prevents possible misbehavior if any catalog entries for the
      temp tables have fields wide enough to require toasting (such as a
      very complex <literal>CHECK</literal> condition).
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [97550c071] 2023-10-17 10:41:48 -0500
Branch: REL_16_STABLE [ee06199fc] 2023-10-17 10:41:58 -0500
Branch: REL_15_STABLE [c9265ae80] 2023-10-17 10:42:06 -0500
Branch: REL_14_STABLE [54fc9dca5] 2023-10-17 10:42:12 -0500
Branch: REL_13_STABLE [ac1dfc303] 2023-10-17 10:42:17 -0500
Branch: REL_12_STABLE [e2e169042] 2023-10-17 10:42:22 -0500
Branch: REL_11_STABLE [d0e7f95b4] 2023-10-17 10:42:28 -0500
Author: Nathan Bossart <nathan@postgresql.org>
Branch: REL_14_STABLE [555bc89c9] 2023-10-17 16:11:03 -0500
Branch: REL_13_STABLE [ebc093fa6] 2023-10-17 16:11:08 -0500
Branch: REL_12_STABLE [0e32652a7] 2023-10-17 16:11:13 -0500
Branch: REL_11_STABLE [bc322c73c] 2023-10-17 16:11:18 -0500
-->
     <para>
      Avoid improper response to shutdown signals in child processes
      just forked by <function>system()</function> (Nathan Bossart)
      <ulink url="&commit_baseurl;ee06199fc">&sect;</ulink>
     </para>

     <para>
      This fix avoids a race condition in which a child process that has
      been forked off by <function>system()</function>, but hasn't yet
      exec'd the intended child program, might receive and act on a signal
      intended for the parent server process.  That would lead to
      duplicate cleanup actions being performed, which will not end well.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [63a582222] 2023-10-16 17:33:08 +1300
Branch: REL_16_STABLE [5725e4ebe] 2023-10-16 17:21:41 +1300
Branch: REL_15_STABLE [5e39884d3] 2023-10-16 17:23:02 +1300
Branch: REL_14_STABLE [dc75748a9] 2023-10-16 17:23:25 +1300
Branch: REL_13_STABLE [67060be3d] 2023-10-16 17:24:35 +1300
Branch: REL_12_STABLE [43c979086] 2023-10-16 17:25:43 +1300
-->
     <para>
      Cope with torn reads of <filename>pg_control</filename> in frontend
      programs (Thomas Munro)
      <ulink url="&commit_baseurl;5725e4ebe">&sect;</ulink>
     </para>

     <para>
      On some file systems, reading <filename>pg_control</filename> may
      not be an atomic action when the server concurrently writes that
      file.  This is detectable via a bad CRC.  Retry a few times to see
      if the file becomes valid before we report error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [c558e6fd9] 2023-10-16 10:43:47 +1300
Branch: REL_16_STABLE [2371432cd] 2023-10-16 10:45:05 +1300
Branch: REL_15_STABLE [606be8a35] 2023-10-16 10:45:18 +1300
Branch: REL_14_STABLE [a56fe5cf0] 2023-10-16 10:47:01 +1300
Branch: REL_13_STABLE [ae9da357b] 2023-10-16 10:47:10 +1300
Branch: REL_12_STABLE [637e86ecc] 2023-10-16 10:47:33 +1300
Branch: REL_11_STABLE [f1634c968] 2023-10-16 10:52:40 +1300
-->
     <para>
      Avoid torn reads of <filename>pg_control</filename> in relevant SQL
      functions (Thomas Munro)
      <ulink url="&commit_baseurl;2371432cd">&sect;</ulink>
     </para>

     <para>
      Acquire the appropriate lock before
      reading <filename>pg_control</filename>, to ensure we get a
      consistent view of that file.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [d8a295389] 2023-10-09 16:37:05 +1300
Branch: REL_16_STABLE [9154ededf] 2023-10-09 16:37:33 +1300
-->
     <para>
      Fix <quote>could not find pathkey item to sort</quote> errors
      occurring while planning aggregate functions with <literal>ORDER
      BY</literal> or <literal>DISTINCT</literal> options (David Rowley)
      <ulink url="&commit_baseurl;9154ededf">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a956bd3fa] 2023-10-03 15:37:00 +0900
Branch: REL_16_STABLE [75f31a3f2] 2023-10-03 15:37:18 +0900
Branch: REL_15_STABLE [95e91da66] 2023-10-03 15:37:19 +0900
Branch: REL_14_STABLE [f91c87b31] 2023-10-03 15:37:21 +0900
Branch: REL_13_STABLE [a0b013625] 2023-10-03 15:37:23 +0900
Branch: REL_12_STABLE [9b3900cdb] 2023-10-03 15:37:24 +0900
-->
     <para>
      Avoid integer overflow when computing size of backend activity
      string array (Jakub Wartak)
      <ulink url="&commit_baseurl;75f31a3f2">&sect;</ulink>
     </para>

     <para>
      On 64-bit machines we will allow values
      of <varname>track_activity_query_size</varname> large enough to
      cause 32-bit overflow when multiplied by the allowed number of
      connections.  The code actually allocating the per-backend local
      array was careless about this though, and allocated the array
      incorrectly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [c181f2e2b] 2023-09-30 17:03:50 +0300
Branch: REL_16_STABLE [992d2ca81] 2023-09-30 17:07:24 +0300
Branch: REL_15_STABLE [5ae245664] 2023-09-30 17:07:32 +0300
Branch: REL_14_STABLE [2d4f99bc6] 2023-09-30 17:07:37 +0300
Branch: REL_13_STABLE [ed9247cd7] 2023-09-30 17:07:41 +0300
-->
     <para>
      Fix briefly showing inconsistent progress statistics
      for <command>ANALYZE</command> on inherited tables
      (Heikki Linnakangas)
      <ulink url="&commit_baseurl;992d2ca81">&sect;</ulink>
     </para>

     <para>
      The block-level counters should be reset to zero at the same time we
      update the current-relation field.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [e64c733bb] 2023-10-02 12:39:35 +0300
Branch: REL_16_STABLE [4a97a43a7] 2023-10-02 12:49:25 +0300
Branch: REL_15_STABLE [0684d1949] 2023-10-02 12:49:29 +0300
Branch: REL_14_STABLE [594001864] 2023-10-02 12:50:32 +0300
-->
     <para>
      Fix the background writer to report any WAL writes it makes to the
      statistics counters (Nazir Bilal Yavuz)
      <ulink url="&commit_baseurl;4a97a43a7">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [e221c0bef] 2023-09-26 09:29:47 +0900
Branch: REL_16_STABLE [280f70221] 2023-09-26 09:30:36 +0900
Branch: REL_15_STABLE [802fcb9ed] 2023-09-26 09:30:39 +0900
-->
     <para>
      Fix confusion about forced-flush behavior
      in <function>pgstat_report_wal()</function>
      (Ryoga Yoshida, Michael Paquier)
      <ulink url="&commit_baseurl;280f70221">&sect;</ulink>
     </para>

     <para>
      This could result in some statistics about WAL I/O being forgotten
      in a shutdown.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [7369798a8] 2023-09-13 19:14:09 -0700
Branch: REL_16_STABLE [c4758649b] 2023-09-13 19:14:11 -0700
-->
     <para>
      Fix statistics tracking of temporary-table extensions (Karina
      Litskevich, Andres Freund)
      <ulink url="&commit_baseurl;c4758649b">&sect;</ulink>
     </para>

     <para>
      These were counted as normal-table writes when they should be
      counted as temp-table writes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d17ffc734] 2023-10-18 14:54:33 +0900
Branch: REL_16_STABLE [2308f18c0] 2023-10-18 14:54:39 +0900
-->
     <para>
      When <varname>track_io_timing</varname> is enabled, include the
      time taken by relation extension operations as write time
      (Nazir Bilal Yavuz)
      <ulink url="&commit_baseurl;2308f18c0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [dc8d72c1c] 2023-09-25 14:42:17 -0400
Branch: REL_16_STABLE [055f786ea] 2023-09-25 14:42:17 -0400
Branch: REL_15_STABLE [0e59266a5] 2023-09-25 14:41:57 -0400
Branch: REL_14_STABLE [5cff431bc] 2023-09-25 14:41:57 -0400
Branch: REL_13_STABLE [8cfc3e80b] 2023-09-25 14:41:57 -0400
Branch: REL_12_STABLE [4435a8d5d] 2023-09-25 14:41:57 -0400
Branch: REL_11_STABLE [fdc7cf73b] 2023-09-25 14:41:57 -0400
-->
     <para>
      Track the dependencies of cached <command>CALL</command> statements,
      and re-plan them when needed (Tom Lane)
      <ulink url="&commit_baseurl;055f786ea">&sect;</ulink>
     </para>

     <para>
      DDL commands, such as replacement of a function that has been
      inlined into a <command>CALL</command> argument, can create the need
      to re-plan a <command>CALL</command> that has been cached by
      PL/pgSQL.  That was not happening, leading to misbehavior or strange
      errors such as <quote>cache lookup failed</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [5f3aa309a] 2023-09-22 11:18:25 +0200
Branch: REL_16_STABLE [f720875a4] 2023-09-22 11:18:25 +0200
Branch: REL_15_STABLE [9dc85806d] 2023-09-22 11:18:25 +0200
-->
     <para>
      Avoid a possible pfree-a-NULL-pointer crash after an error in
      OpenSSL connection setup (Sergey Shinderuk)
      <ulink url="&commit_baseurl;f720875a4">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e0e492e5a] 2023-09-15 17:01:52 -0400
Branch: REL_16_STABLE [53630f12d] 2023-09-15 17:01:26 -0400
Branch: REL_15_STABLE [2679a107a] 2023-09-15 17:01:26 -0400
Branch: REL_14_STABLE [ae13f8166] 2023-09-15 17:01:26 -0400
Branch: REL_13_STABLE [c5b7f791d] 2023-09-15 17:01:26 -0400
Branch: REL_12_STABLE [d29812c0c] 2023-09-15 17:01:26 -0400
Branch: REL_11_STABLE [a374f6c61] 2023-09-15 17:01:26 -0400
-->
     <para>
      Track nesting depth correctly when
      inspecting <type>RECORD</type>-type Vars from outer query levels
      (Richard Guo)
      <ulink url="&commit_baseurl;53630f12d">&sect;</ulink>
     </para>

     <para>
      This oversight could lead to assertion failures, core dumps,
      or <quote>bogus varno</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [ee3a551e9] 2023-09-14 11:27:29 +1200
Branch: REL_16_STABLE [1a6900e58] 2023-09-14 11:27:16 +1200
Branch: REL_15_STABLE [17a3f1c34] 2023-09-14 11:27:00 +1200
Branch: REL_14_STABLE [6341cb0b0] 2023-09-14 11:27:43 +1200
-->
     <para>
      Track hash function and negator function dependencies of
      ScalarArrayOpExpr plan nodes (David Rowley)
      <ulink url="&commit_baseurl;1a6900e58">&sect;</ulink>
     </para>

     <para>
      In most cases this oversight was harmless, since these functions
      would be unlikely to disappear while the node's original operator
      remains present.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [3acd0599b] 2023-09-13 14:58:22 +1200
Branch: REL_16_STABLE [f899c7f1e] 2023-09-13 15:06:07 +1200
Branch: REL_15_STABLE [a26cc0334] 2023-09-13 14:43:04 +1200
Branch: REL_14_STABLE [e2452c2a6] 2023-09-13 14:46:16 +1200
Branch: REL_13_STABLE [189097db8] 2023-09-13 14:48:00 +1200
Branch: REL_12_STABLE [012b80ad2] 2023-09-13 14:50:14 +1200
Branch: REL_11_STABLE [6ae57f190] 2023-09-13 14:52:34 +1200
-->
     <para>
      Fix error-handling bug in <type>RECORD</type> type cache management
      (Thomas Munro)
      <ulink url="&commit_baseurl;f899c7f1e">&sect;</ulink>
     </para>

     <para>
      An out-of-memory error occurring at just the wrong point could leave
      behind inconsistent state that would lead to an infinite loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6b18b3fe2] 2023-10-03 10:21:44 +0900
Branch: REL_16_STABLE [a06efbc3a] 2023-10-03 10:25:12 +0900
Branch: REL_15_STABLE [afc79591d] 2023-10-03 10:25:14 +0900
Branch: REL_14_STABLE [baeb8542c] 2023-10-03 10:25:15 +0900
Branch: REL_13_STABLE [6103d2cca] 2023-10-03 10:25:17 +0900
Branch: REL_12_STABLE [22b2e6e9d] 2023-10-03 10:25:19 +0900
-->
     <para>
      Treat out-of-memory failures as fatal while reading WAL
      (Michael Paquier)
      <ulink url="&commit_baseurl;a06efbc3a">&sect;</ulink>
     </para>

     <para>
      Previously this would be treated as a bogus-data condition, leading
      to the conclusion that we'd reached the end of WAL, which is
      incorrect and could lead to inconsistent WAL replay.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [bae868caf] 2023-09-23 10:26:24 +1200
Branch: REL_16_STABLE [ce497f648] 2023-09-23 10:27:02 +1200
Branch: REL_15_STABLE [f4d152edd] 2023-09-23 10:28:12 +1200
Branch: REL_14_STABLE [3ce3b53d7] 2023-09-23 10:28:40 +1200
Branch: REL_13_STABLE [6606c5716] 2023-09-23 10:29:44 +1200
Branch: REL_12_STABLE [e8f3c0687] 2023-09-23 10:29:56 +1200
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [becfbdd6c] 2023-09-26 10:53:38 +1300
Branch: REL_16_STABLE [10d0591ea] 2023-09-26 10:53:52 +1300
Branch: REL_15_STABLE [99d334a18] 2023-09-26 10:54:02 +1300
Branch: REL_14_STABLE [3d413c5a7] 2023-09-26 10:54:24 +1300
Branch: REL_13_STABLE [45d1fe8b5] 2023-09-26 10:54:47 +1300
Branch: REL_12_STABLE [bde2f1847] 2023-09-26 10:59:49 +1300
-->
     <para>
      Fix possible recovery failure due to trying to allocate memory based
      on a bogus WAL record length field (Thomas Munro, Michael Paquier)
      <ulink url="&commit_baseurl;ce497f648">&sect;</ulink>
      <ulink url="&commit_baseurl;10d0591ea">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [dab889d60] 2023-10-22 10:04:55 +1300
Branch: REL_16_STABLE [174ccda5e] 2023-10-22 10:05:22 +1300
Branch: REL_15_STABLE [f72790b29] 2023-10-22 10:05:40 +1300
Branch: REL_14_STABLE [fb9a16a1a] 2023-10-22 10:05:59 +1300
-->
     <para>
      Fix <quote>could not duplicate handle</quote> error occurring on
      Windows when <varname>min_dynamic_shared_memory</varname> is set
      above zero (Thomas Munro)
      <ulink url="&commit_baseurl;174ccda5e">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [ef74c7197] 2023-10-10 11:01:13 -0700
Branch: REL_16_STABLE [b8963e8a2] 2023-10-10 11:01:55 -0700
Branch: REL_15_STABLE [b9bb02620] 2023-10-10 11:02:45 -0700
Branch: REL_14_STABLE [6615bb95a] 2023-10-10 11:02:56 -0700
Branch: REL_13_STABLE [469d367be] 2023-10-10 11:03:03 -0700
Branch: REL_12_STABLE [6dbd01b9f] 2023-10-10 11:03:10 -0700
Branch: REL_11_STABLE [04f0baa85] 2023-10-10 11:03:20 -0700
-->
     <para>
      Fix order of operations in <function>GenericXLogFinish</function>
      (Jeff Davis)
      <ulink url="&commit_baseurl;b8963e8a2">&sect;</ulink>
     </para>

     <para>
      This code violated the conditions required for crash safety by
      writing WAL before marking changed buffers dirty.  No core code uses
      this function, but extensions do (<filename>contrib/bloom</filename>
      does, for example).
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [af5b3c3d1] 2023-09-19 08:31:06 +0900
Branch: REL_16_STABLE [f171430f0] 2023-09-19 08:31:22 +0900
Branch: REL_15_STABLE [9e0ce80f3] 2023-09-19 08:31:24 +0900
Branch: REL_14_STABLE [bb65f3c1b] 2023-09-19 08:31:26 +0900
Branch: REL_13_STABLE [35e8ba3e5] 2023-09-19 08:31:27 +0900
Branch: REL_12_STABLE [99d27e55c] 2023-09-19 08:31:29 +0900
Branch: REL_11_STABLE [ddded779a] 2023-09-19 08:31:31 +0900
-->
     <para>
      Remove incorrect assertion in PL/Python exception handling
      (Alexander Lakhin)
      <ulink url="&commit_baseurl;f171430f0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5ba4cc309] 2023-10-29 12:56:35 -0400
Branch: REL_16_STABLE [67738dbf9] 2023-10-29 12:56:24 -0400
-->
     <para>
      Fix <application>pg_dump</application> to dump the
      new <literal>run_as_owner</literal> option of subscriptions
      (Philip Warner)
      <ulink url="&commit_baseurl;67738dbf9">&sect;</ulink>
     </para>

     <para>
      Due to this oversight, subscriptions would always be restored
      with <literal>run_as_owner</literal> set
      to <literal>false</literal>, which is not equivalent to their
      behavior in pre-v16 releases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [06c0c3688] 2023-10-02 13:27:58 -0400
Branch: REL_16_STABLE [aaaf8fbb6] 2023-10-02 13:27:51 -0400
Branch: REL_15_STABLE [10e705bd2] 2023-10-02 13:27:51 -0400
Branch: REL_14_STABLE [829d91cc6] 2023-10-02 13:27:51 -0400
Branch: REL_13_STABLE [295953f8b] 2023-10-02 13:27:51 -0400
Branch: REL_12_STABLE [c02f29758] 2023-10-02 13:27:51 -0400
Branch: REL_11_STABLE [4f16152d9] 2023-10-02 13:27:51 -0400
-->
     <para>
      Fix <application>pg_restore</application> so that selective restores
      will include both table-level and column-level ACLs for selected
      tables (Euler Taveira, Tom Lane)
      <ulink url="&commit_baseurl;aaaf8fbb6">&sect;</ulink>
     </para>

     <para>
      Formerly, only the table-level ACL would get restored if both types
      were present.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [2e3dc8c14] 2023-09-25 14:27:33 +0200
Branch: REL_16_STABLE [fb9ddd0fa] 2023-09-25 14:34:06 +0200
Branch: REL_15_STABLE [8845d8597] 2023-09-25 14:34:06 +0200
Branch: REL_14_STABLE [26c291a15] 2023-09-25 14:34:06 +0200
Branch: REL_13_STABLE [d3946c4f6] 2023-09-25 14:34:05 +0200
Branch: REL_12_STABLE [af9f6cd1d] 2023-09-25 14:34:05 +0200
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: REL_15_STABLE [04d2d605f] 2023-11-03 12:07:11 -0400
Branch: REL_14_STABLE [f9280e77e] 2023-11-03 12:07:25 -0400
Branch: REL_13_STABLE [2f1f49975] 2023-11-03 12:07:35 -0400
Branch: REL_12_STABLE [d3246a2ad] 2023-11-03 12:07:40 -0400
-->
     <para>
      Add logic to <application>pg_upgrade</application> to check for use
      of <type>abstime</type>, <type>reltime</type>,
      and <type>tinterval</type> data types (&Aacute;lvaro Herrera)
      <ulink url="&commit_baseurl;fb9ddd0fa">&sect;</ulink>
     </para>

     <para>
      These obsolete data types were removed
      in <productname>PostgreSQL</productname> version 12, so check to
      make sure they aren't present in an older database before claiming
      it can be upgraded.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [90ebcc32d] 2023-10-14 15:54:46 -0700
Branch: REL_16_STABLE [06ff06484] 2023-10-14 15:54:49 -0700
Branch: REL_15_STABLE [1102f4ece] 2023-10-14 15:54:49 -0700
Branch: REL_14_STABLE [0df88a686] 2023-10-14 15:54:49 -0700
Branch: REL_13_STABLE [3895e9153] 2023-10-14 15:54:50 -0700
Branch: REL_12_STABLE [73cda80a3] 2023-10-14 15:54:50 -0700
-->
     <para>
      Avoid false <quote>too many client connections</quote> errors
      in <application>pgbench</application> on Windows (Noah Misch)
      <ulink url="&commit_baseurl;06ff06484">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [fb56a1811] 2023-09-25 16:03:17 +0200
Branch: REL_16_STABLE [2143d96dc] 2023-09-25 16:03:17 +0200
-->
     <para>
      Fix <application>vacuumdb</application>'s handling of
      multiple <option>-N</option> switches (Nathan Bossart, Kuwamura
      Masaki)
      <ulink url="&commit_baseurl;2143d96dc">&sect;</ulink>
     </para>

     <para>
      Multiple <option>-N</option> switches should exclude tables
      in multiple schemas, but in fact excluded nothing due to faulty
      construction of a generated query.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [5cfba1ad6] 2023-09-21 17:47:20 +1200
Branch: REL_16_STABLE [f7dbdab05] 2023-09-21 17:39:30 +1200
-->
     <para>
      Fix <application>vacuumdb</application> to honor
      its <option>--buffer-usage-limit</option> option in analyze-only
      mode (Ryoga Yoshida, David Rowley)
      <ulink url="&commit_baseurl;f7dbdab05">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [6ec9e9975] 2023-10-30 14:46:05 -0700
Branch: REL_16_STABLE [3c6a05b80] 2023-10-30 14:46:08 -0700
Branch: REL_15_STABLE [6f81386a9] 2023-10-30 14:46:08 -0700
Branch: REL_14_STABLE [42496cba6] 2023-10-30 14:46:09 -0700
Branch: REL_13_STABLE [f31ccb575] 2023-10-30 14:46:09 -0700
Branch: REL_12_STABLE [3a205c916] 2023-10-30 14:46:09 -0700
Branch: REL_11_STABLE [e04509f32] 2023-10-30 14:46:09 -0700
-->
     <para>
      In <filename>contrib/amcheck</filename>, do not report interrupted
      page deletion as corruption (Noah Misch)
      <ulink url="&commit_baseurl;3c6a05b80">&sect;</ulink>
     </para>

     <para>
      This fix prevents false-positive reports of <quote>the first child
      of leftmost target page is not leftmost of its
      level</quote>, <quote>block NNNN is not leftmost</quote>
      or <quote>left link/right link pair in index XXXX not in
      agreement</quote>.  They appeared
      if <application>amcheck</application> ran after an unfinished btree
      index page deletion and before <command>VACUUM</command> had cleaned
      things up.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [849172ff4] 2023-10-29 11:14:37 +0000
Branch: REL_16_STABLE [ab73a37e9] 2023-10-29 11:14:36 +0000
Branch: REL_15_STABLE [5f0691839] 2023-10-29 11:14:35 +0000
Branch: REL_14_STABLE [162b38a06] 2023-10-29 11:14:34 +0000
Branch: REL_13_STABLE [35e6a5c20] 2023-10-29 11:14:34 +0000
Branch: REL_12_STABLE [f7cd7b265] 2023-10-29 11:14:33 +0000
Branch: REL_11_STABLE [c804ffb56] 2023-10-29 11:14:32 +0000
-->
     <para>
      Fix failure of <filename>contrib/btree_gin</filename> indexes
      on <type>interval</type> columns,
      when an indexscan using the <literal>&lt;</literal>
      or <literal>&lt;=</literal> operator is performed (Dean Rasheed)
      <ulink url="&commit_baseurl;ab73a37e9">&sect;</ulink>
     </para>

     <para>
      Such an indexscan failed to return all the entries it should.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [76200e5ee] 2023-10-19 05:13:23 +1300
Branch: REL_16_STABLE [774185056] 2023-10-19 05:14:07 +1300
Branch: REL_15_STABLE [b60e3ac76] 2023-10-19 05:15:38 +1300
Branch: REL_14_STABLE [0a8b7d5c1] 2023-10-19 05:16:00 +1300
Branch: REL_13_STABLE [53c4dabe1] 2023-10-19 05:16:24 +1300
Branch: REL_12_STABLE [7da915e33] 2023-10-19 05:17:27 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [37d5babb5] 2023-10-18 22:47:23 +1300
Branch: REL_16_STABLE [74d19ec09] 2023-10-18 22:53:56 +1300
Branch: REL_15_STABLE [eed1feb3f] 2023-10-18 22:59:46 +1300
Branch: REL_14_STABLE [82d9a782a] 2023-10-18 23:04:09 +1300
Branch: REL_13_STABLE [f28956b23] 2023-10-18 23:16:48 +1300
Branch: REL_12_STABLE [15ddc9725] 2023-10-18 23:18:16 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [f90b4a846] 2023-10-19 03:01:55 +1300
Branch: REL_16_STABLE [60596f148] 2023-10-19 03:07:18 +1300
Branch: REL_15_STABLE [b2e097788] 2023-10-19 03:03:27 +1300
Branch: REL_14_STABLE [ee3e4c41f] 2023-10-19 03:03:46 +1300
Branch: REL_13_STABLE [981292c19] 2023-10-19 03:04:00 +1300
Branch: REL_12_STABLE [d701f0d1f] 2023-10-19 03:04:09 +1300
Author: Thomas Munro <tmunro@postgresql.org>
Branch: REL_13_STABLE [7c070e224] 2023-10-24 11:23:08 +1300
Branch: REL_12_STABLE [9ad986276] 2023-10-24 11:23:21 +1300
-->
     <para>
      Add support for LLVM 16 and 17 (Thomas Munro, Dmitry Dolgov)
      <ulink url="&commit_baseurl;774185056">&sect;</ulink>
      <ulink url="&commit_baseurl;74d19ec09">&sect;</ulink>
      <ulink url="&commit_baseurl;60596f148">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [06843df4a] 2023-09-29 14:07:30 -0400
Branch: REL_16_STABLE [75c562653] 2023-09-29 14:07:30 -0400
Branch: REL_15_STABLE [be3398ea1] 2023-09-29 14:07:30 -0400
Branch: REL_14_STABLE [e9d1560d3] 2023-09-29 14:07:30 -0400
Branch: REL_13_STABLE [1b64e374c] 2023-09-29 14:07:30 -0400
Branch: REL_12_STABLE [d8ceb98e4] 2023-09-29 14:07:30 -0400
Branch: REL_11_STABLE [4d10fda52] 2023-09-29 14:07:30 -0400
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3aa021b29] 2023-09-26 21:06:21 -0400
Branch: REL_16_STABLE [e73d6a0df] 2023-09-26 21:06:21 -0400
Branch: REL_15_STABLE [78f17fb97] 2023-09-26 21:06:21 -0400
Branch: REL_14_STABLE [5d60e8ed3] 2023-09-26 21:06:21 -0400
Branch: REL_13_STABLE [53cc19bfa] 2023-09-26 21:06:21 -0400
Branch: REL_12_STABLE [abe423712] 2023-09-26 21:06:21 -0400
Branch: REL_11_STABLE [0e0de20c8] 2023-09-26 21:06:21 -0400
-->
     <para>
      Suppress assorted build-time warnings on
      recent <productname>macOS</productname> (Tom Lane)
      <ulink url="&commit_baseurl;75c562653">&sect;</ulink>
      <ulink url="&commit_baseurl;e73d6a0df">&sect;</ulink>
     </para>

     <para>
      <productname>Xcode 15</productname> (released
      with <productname>macOS Sonoma</productname>) changed the linker's
      behavior in a way that causes many duplicate-library warnings while
      building <productname>PostgreSQL</productname>.  These were
      harmless, but they're annoying so avoid citing the same libraries
      twice.  Also remove use of the <option>-multiply_defined
      suppress</option> linker switch, which apparently has been a no-op
      for a long time, and is now actively complained of.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6fc3a138b] 2023-09-27 14:40:23 +0900
Branch: REL_16_STABLE [641db601b] 2023-09-27 14:41:15 +0900
Branch: REL_15_STABLE [8a9e4e84e] 2023-09-27 14:41:21 +0900
Branch: REL_14_STABLE [e4d7ad30f] 2023-09-27 14:41:23 +0900
Branch: REL_13_STABLE [a64b8b035] 2023-09-27 14:41:26 +0900
-->
     <para>
      When building <filename>contrib/unaccent</filename>'s rules file,
      fall back to using <literal>python</literal>
      if <literal>--with-python</literal> was not given and make
      variable <literal>PYTHON</literal> was not set (Japin Li)
      <ulink url="&commit_baseurl;641db601b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5fd3e06f6] 2023-10-28 11:54:40 -0400
Branch: REL_16_STABLE [d1537afe3] 2023-10-28 11:54:51 -0400
Branch: REL_15_STABLE [85b98a70b] 2023-10-28 11:54:59 -0400
Branch: REL_14_STABLE [877e7b4b9] 2023-10-28 11:55:06 -0400
Branch: REL_13_STABLE [d94612873] 2023-10-28 11:55:14 -0400
Branch: REL_12_STABLE [7180bb827] 2023-10-28 11:55:22 -0400
Branch: REL_11_STABLE [64fc5e005] 2023-10-28 11:55:30 -0400
-->
     <para>
      Remove <literal>PHOT</literal> (Phoenix Islands Time) from the
      default timezone abbreviations list (Tom Lane)
      <ulink url="&commit_baseurl;d1537afe3">&sect;</ulink>
     </para>

     <para>
      Presence of this abbreviation in the default list can cause failures
      on recent Debian and Ubuntu releases, as they no longer install the
      underlying tzdb entry by default.  Since this is a made-up
      abbreviation for a zone with a total human population of about two
      dozen, it seems unlikely that anyone will miss it.  If someone does,
      they can put it back via a custom abbreviations file.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-16">
  <title>Release 16</title>

  <formalpara>
   <title>Release date:</title>
   <para>2023-09-14</para>
  </formalpara>

  <sect2 id="release-16-highlights">
   <title>Overview</title>

   <para>
    <productname>PostgreSQL</productname> 16 contains many new features
    and enhancements, including:
   </para>

   <itemizedlist>

    <listitem>
     <para>
      Allow parallelization of <literal>FULL</literal> and internal right <literal>OUTER</literal> hash joins
     </para>
    </listitem>

    <listitem>
     <para>
      Allow logical replication from standby servers
     </para>
    </listitem>

    <listitem>
     <para>
      Allow logical replication subscribers to apply large transactions in parallel
     </para>
    </listitem>

    <listitem>
     <para>
      Allow monitoring of <acronym>I/O</acronym> statistics using the new <structname>pg_stat_io</structname> view
     </para>
    </listitem>

    <listitem>
     <para>
      Add <acronym>SQL/JSON</acronym> constructors and identity functions
     </para>
    </listitem>

    <listitem>
     <para>
      Improve performance of vacuum freezing
     </para>
    </listitem>

    <listitem>
     <para>
      Add support for regular expression matching of user and database names in <filename>pg_hba.conf</filename>, and user names in <filename>pg_ident.conf</filename>
     </para>
    </listitem>

   </itemizedlist>

   <para>
    The above items and other new features of
    <productname>PostgreSQL</productname> 16 are explained in more detail
    in the sections below.
   </para>

  </sect2>

  <sect2  id="release-16-migration">

   <title>Migration to Version 16</title>

   <para>
    A dump/restore using <xref linkend="app-pg-dumpall"/> or use of
    <xref linkend="pgupgrade"/> or logical replication is required for
    those wishing to migrate data from any previous release.  See <xref
    linkend="upgrading"/> for general information on migrating to new
    major releases.
   </para>

   <para>
    Version 16 contains a number of changes that may affect compatibility
    with previous releases.  Observe the following incompatibilities:
   </para>

   <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-01 [d747dc85a] In plpgsql, don't preassign portal names to bound cursor
-->

    <listitem>
     <para>
      Change assignment rules for <link
      linkend="plpgsql-open-bound-cursor"><application>PL/pgSQL</application></link>
      bound cursor variables (Tom Lane)
      <ulink url="&commit_baseurl;d747dc85a">&sect;</ulink>
     </para>

     <para>
      Previously, the string value of such variables
      was set to match the variable name during cursor
      assignment;  now it will be assigned during <link
      linkend="plpgsql-cursor-opening"><command>OPEN</command></link>,
      and will not match the variable name.  To restore the previous
      behavior, assign the desired portal name to the cursor variable
      before <command>OPEN</command>.
     </para>
    </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-02-24 [d95952325] Disallow NULLS NOT DISTINCT indexes for primary keys
-->

    <listitem>
     <para>
      Disallow <link linkend="sql-createindex"><literal>NULLS NOT
      DISTINCT</literal></link> indexes for primary keys (Daniel
      Gustafsson)
      <ulink url="&commit_baseurl;d95952325">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-19 [2cbc3c17a] Rework logic and simplify syntax of REINDEX DATABASE/SYS
Author: Michael Paquier <michael@paquier.xyz>
2022-07-26 [0a5f06b84] Fix a few issues with REINDEX grammar
-->

    <listitem>
     <para>
      Change <link linkend="sql-reindex"><command>REINDEX
      DATABASE</command></link> and <link
      linkend="app-reindexdb"><application>reindexdb</application></link>
      to not process indexes on system catalogs (Simon Riggs)
      <ulink url="&commit_baseurl;2cbc3c17a">&sect;</ulink>
      <ulink url="&commit_baseurl;0a5f06b84">&sect;</ulink>
     </para>

     <para>
      Processing such indexes is still possible using <command>REINDEX
      SYSTEM</command> and <link linkend="app-reindexdb"><command>reindexdb
      --system</command></link>.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-11 [8bf6ec3ba] Improve handling of inherited GENERATED expressions.
-->

    <listitem>
     <para>
      Tighten <link
      linkend="ddl-generated-columns"><literal>GENERATED</literal></link>
      expression restrictions on inherited and partitioned tables (Amit
      Langote, Tom Lane)
      <ulink url="&commit_baseurl;8bf6ec3ba">&sect;</ulink>
     </para>

     <para>
      Columns of parent/partitioned and child/partition tables must all
      have the same generation status, though now the actual generation
      expressions can be different.
     </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [5c1b66280] Rework design of functions in pg_walinspect
-->

    <listitem>
     <para>
      Remove <link
      linkend="pgwalinspect"><application>pg_walinspect</application></link>
      functions
      <function>pg_get_wal_records_info_till_end_of_wal()</function>
      and <function>pg_get_wal_stats_till_end_of_wal()</function>
      (Bharath Rupireddy)
      <ulink url="&commit_baseurl;5c1b66280">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-02-15 [5352ca22e] Rename force_parallel_mode to debug_parallel_query
Author: David Rowley <drowley@postgresql.org>
2023-04-14 [0981846b9] Remove old GUC name mapping for "force_parallel_mode"
-->

    <listitem>
     <para>
      Rename server variable
      <varname>force_parallel_mode</varname> to <link
      linkend="guc-debug-parallel-query"><varname>debug_parallel_query</varname></link>
      (David Rowley)
      <ulink url="&commit_baseurl;5352ca22e">&sect;</ulink>
      <ulink url="&commit_baseurl;0981846b9">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-02 [b23cd185f] Remove logic for converting a table to a view.
-->

    <listitem>
     <para>
      Remove the ability to <link linkend="sql-createview">create
      views</link> manually with <literal>ON SELECT</literal> rules
      (Tom Lane)
      <ulink url="&commit_baseurl;b23cd185f">&sect;</ulink>
     </para>
    </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-24 [1118cd37e] Remove vacuum_defer_cleanup_age
-->

    <listitem>
     <para>
      Remove the server variable
      <varname>vacuum_defer_cleanup_age</varname> (Andres Freund)
      <ulink url="&commit_baseurl;1118cd37e">&sect;</ulink>
     </para>

     <para>
      This has been unnecessary since <link
      linkend="guc-hot-standby-feedback"><varname>hot_standby_feedback</varname></link>
      and <link linkend="streaming-replication-slots">replication
      slots</link> were added.
     </para>
    </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-11-29 [cd4329d93] Remove promote_trigger_file.
-->

    <listitem>
     <para>
      Remove server variable <varname>promote_trigger_file</varname>
      (Simon Riggs)
      <ulink url="&commit_baseurl;cd4329d93">&sect;</ulink>
     </para>

     <para>
      This was used to promote a standby to primary, but is now more easily
      accomplished with <link linkend="app-pg-ctl"><literal>pg_ctl
      promote</literal></link> or <link
      linkend="functions-recovery-control-table"><function>pg_promote()</function></link>.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-06-07 [b0f6c4371] Remove read-only server settings lc_collate and lc_ctype
-->

    <listitem>
     <para>
      Remove read-only server variables <varname>lc_collate</varname>
      and <varname>lc_ctype</varname> (Peter Eisentraut)
      <ulink url="&commit_baseurl;b0f6c4371">&sect;</ulink>
     </para>

     <para>
      Collations and locales can vary between databases so having them
      as read-only server variables was unhelpful.
     </para>
    </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-25 [e3ce2de09] Allow grant-level control of role inheritance behavior.
-->

    <listitem>
     <para>
      Role inheritance now controls the default
      inheritance status of member roles added during <link
      linkend="sql-grant"><command>GRANT</command></link> (Robert Haas)
      <ulink url="&commit_baseurl;e3ce2de09">&sect;</ulink>
     </para>

     <para>
      The role's default inheritance behavior can be overridden with the
      new <command>GRANT ... WITH INHERIT</command> clause.  This allows
      inheritance of some roles and not others because the members'
      inheritance status is set at <command>GRANT</command> time.
      Previously the inheritance status of member roles was controlled
      only by the role's inheritance status, and changes to a role's
      inheritance status affected all previous and future member roles.
     </para>
    </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-10 [cf5eb37c5] Restrict the privileges of CREATEROLE users.
Author: Robert Haas <rhaas@postgresql.org>
2023-01-24 [f1358ca52] Adjust interaction of CREATEROLE with role properties.
-->

    <listitem>
     <para>
      Restrict the privileges of <link
      linkend="sql-createrole"><literal>CREATEROLE</literal></link>
      and its ability to modify other roles (Robert Haas)
      <ulink url="&commit_baseurl;cf5eb37c5">&sect;</ulink>
      <ulink url="&commit_baseurl;f1358ca52">&sect;</ulink>
     </para>

     <para>
      Previously roles with <literal>CREATEROLE</literal> privileges could
      change many aspects of any non-superuser role.  Such changes,
      including adding members, now require the role requesting
      the change to have <literal>ADMIN OPTION</literal> permission.
      For example, they can now change the <literal>CREATEDB</literal>,
      <literal>REPLICATION</literal>, and <literal>BYPASSRLS</literal>
      properties only if they also have those permissions.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-01-26 [37e267335] Don't install postmaster symlink anymore
-->

    <listitem>
     <para>
      Remove symbolic links for the <application>postmaster</application>
      binary (Peter Eisentraut)
      <ulink url="&commit_baseurl;37e267335">&sect;</ulink>
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

  <sect2 id="release-16-changes">
   <title>Changes</title>

    <para>
     Below you will find a detailed account of the changes between
    <productname>PostgreSQL</productname> 16 and the previous major
    release.
    </para>

   <sect3 id="release-16-server">
    <title>Server</title>

    <sect4 id="release-16-optimizer">
     <title>Optimizer</title>

     <itemizedlist>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [b59242209] Relax overly strict rules in select_outer_pathkeys_for_m
Author: David Rowley <drowley@postgresql.org>
2023-01-11 [3c6fc5820] Have the planner consider Incremental Sort for DISTINCT
-->

      <listitem>
       <para>
        Allow incremental sorts in more cases, including
        <literal>DISTINCT</literal> (David Rowley)
        <ulink url="&commit_baseurl;b59242209">&sect;</ulink>
        <ulink url="&commit_baseurl;3c6fc5820">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [1349d2790] Improve performance of ORDER BY / DISTINCT aggregates
Author: David Rowley <drowley@postgresql.org>
2022-12-20 [3226f4728] Add enable_presorted_aggregate GUC
Author: David Rowley <drowley@postgresql.org>
2023-01-17 [da5800d5f] Don't presort ORDER BY/DISTINCT Aggrefs with volatile fu
-->

      <listitem>
       <para>
        Add the ability for aggregates having <literal>ORDER BY</literal>
        or <literal>DISTINCT</literal> to use pre-sorted data (David
        Rowley)
        <ulink url="&commit_baseurl;1349d2790">&sect;</ulink>
        <ulink url="&commit_baseurl;3226f4728">&sect;</ulink>
        <ulink url="&commit_baseurl;da5800d5f">&sect;</ulink>
       </para>

       <para>
        The new server variable <link
        linkend="guc-enable-presorted-aggregate"><varname>enable_presorted_aggregate</varname></link>
        can be used to disable this.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-16 [9bfd2822b] Enable use of Memoize atop an Append that came from UNIO
-->

      <listitem>
       <para>
        Allow memoize atop a <literal>UNION ALL</literal> (Richard Guo)
        <ulink url="&commit_baseurl;9bfd2822b">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-05 [16dc2703c] Support "Right Anti Join" plan shapes.
-->

      <listitem>
       <para>
        Allow anti-joins to be performed with the non-nullable input as
        the inner relation (Richard Guo)
        <ulink url="&commit_baseurl;16dc2703c">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-03-31 [11c2d6fdf] Parallel Hash Full Join.
-->

      <listitem>
       <para>
        Allow parallelization of <link
        linkend="queries-join"><literal>FULL</literal></link> and internal
        right <literal>OUTER</literal> hash joins (Melanie Plageman,
        Thomas Munro)
        <ulink url="&commit_baseurl;11c2d6fdf">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2023-01-08 [cd9479af2] Improve GIN cost estimation
-->

      <listitem>
       <para>
        Improve the accuracy of <link
        linkend="gin"><literal>GIN</literal></link> index access optimizer
        costs (Ronan Dunklau)
        <ulink url="&commit_baseurl;cd9479af2">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-performance">
     <title>General Performance</title>

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-06 [00d1e02be] hio: Use ExtendBufferedRelBy() to extend tables more eff
Author: Andres Freund <andres@anarazel.de>
2023-04-06 [26158b852] Use ExtendBufferedRelTo() in XLogReadBufferExtended()
-->

      <listitem>
       <para>
        Allow more efficient addition of heap and index pages (Andres
        Freund)
        <ulink url="&commit_baseurl;00d1e02be">&sect;</ulink>
        <ulink url="&commit_baseurl;26158b852">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2022-09-08 [d977ffd92] Instrument freezing in autovacuum log reports.
Author: Peter Geoghegan <pg@bowt.ie>
2022-11-15 [9e5405993] Deduplicate freeze plans in freeze WAL records.
Author: Peter Geoghegan <pg@bowt.ie>
2022-12-28 [1de58df4f] Add page-level freezing to VACUUM.
-->

      <listitem>
       <para>
        During non-freeze operations, perform page <link
        linkend="vacuum-for-wraparound">freezing</link> where appropriate
        (Peter Geoghegan)
        <ulink url="&commit_baseurl;d977ffd92">&sect;</ulink>
        <ulink url="&commit_baseurl;9e5405993">&sect;</ulink>
        <ulink url="&commit_baseurl;1de58df4f">&sect;</ulink>
       </para>

       <para>
        This makes full-table freeze vacuums less necessary.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-12-23 [ed1a88dda] Allow window functions to adjust their frameOptions
-->

      <listitem>
       <para>
        Allow window functions to use the faster <link
        linkend="syntax-window-functions"><literal>ROWS</literal></link>
        mode internally when <literal>RANGE</literal> mode is active but
        unnecessary (David Rowley)
        <ulink url="&commit_baseurl;ed1a88dda">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-01-27 [456fa635a] Teach planner about more monotonic window functions
-->

      <listitem>
       <para>
        Allow optimization of always-increasing window functions <link
        linkend="functions-window-table"><function>ntile()</function></link>,
        <function>cume_dist()</function> and
        <function>percent_rank()</function> (David Rowley)
        <ulink url="&commit_baseurl;456fa635a">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-01-23 [16fd03e95] Allow parallel aggregate on string_agg and array_agg
-->

      <listitem>
       <para>
        Allow aggregate functions <link
        linkend="functions-aggregate-table"><function>string_agg()</function></link>
        and <function>array_agg()</function> to be parallelized (David
        Rowley)
        <ulink url="&commit_baseurl;16fd03e95">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-02 [3592e0ff9] Have ExecFindPartition cache the last found partition
-->

      <listitem>
       <para>
        Improve performance by caching <link
        linkend="ddl-partitioning-overview"><literal>RANGE</literal></link>
        and <literal>LIST</literal> partition lookups (Amit Langote,
        Hou Zhijie, David Rowley)
        <ulink url="&commit_baseurl;3592e0ff9">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-04-07 [1cbbee033] Add VACUUM/ANALYZE BUFFER_USAGE_LIMIT option
Author: David Rowley <drowley@postgresql.org>
2023-04-07 [ae78cae3b] Add - -buffer-usage-limit option to vacuumdb
Author: Masahiko Sawada <msawada@postgresql.org>
2023-04-28 [b72f564d8] Add unit to vacuum_buffer_usage_limit value in postgresq
-->

      <listitem>
       <para>
        Allow control of the shared buffer usage by vacuum and analyze
        (Melanie Plageman)
        <ulink url="&commit_baseurl;1cbbee033">&sect;</ulink>
        <ulink url="&commit_baseurl;ae78cae3b">&sect;</ulink>
        <ulink url="&commit_baseurl;b72f564d8">&sect;</ulink>
       </para>

       <para>
        The <link
        linkend="sql-vacuum"><command>VACUUM</command></link>/<link
        linkend="sql-analyze"><command>ANALYZE</command></link>
        option is <literal>BUFFER_USAGE_LIMIT</literal>, and the <link
        linkend="app-vacuumdb"><application>vacuumdb</application></link>
        option is <option>--buffer-usage-limit</option>.
        The default value is set by server variable <link
        linkend="guc-vacuum-buffer-usage-limit"><varname>vacuum_buffer_usage_limit</varname></link>,
        which also controls autovacuum.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-20 [9430fb407] Add wal_sync_method=fdatasync for Windows.
-->

      <listitem>
       <para>
        Support <link
        linkend="guc-wal-sync-method"><literal>wal_sync_method=fdatasync</literal></link>
        on <systemitem class="osname">Windows</systemitem> (Thomas Munro)
        <ulink url="&commit_baseurl;9430fb407">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-03-20 [19d8e2308] Ignore BRIN indexes when checking for HOT updates
-->

      <listitem>
       <para>
        Allow <link linkend="storage-hot"><acronym>HOT</acronym></link>
        updates if only <literal>BRIN</literal>-indexed columns are updated
        (Matthias van de Meent, Josef Simanek, Tomas Vondra)
        <ulink url="&commit_baseurl;19d8e2308">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2023-02-20 [2cb82e2ac] Speedup and increase usability of set proc title functio
-->

      <listitem>
       <para>
        Improve the speed of updating the <link
        linkend="guc-update-process-title">process title</link> (David
        Rowley)
        <ulink url="&commit_baseurl;2cb82e2ac">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-11 [37a6e5df3] Optimize xid/subxid searches in XidInMVCCSnapshot().
Author: John Naylor <john.naylor@postgresql.org>
2022-08-26 [121d2d3d7] Use SSE2 in is_valid_ascii() where available.
Author: John Naylor <john.naylor@postgresql.org>
2022-08-10 [b6ef16756] Introduce optimized routine for linear searches of array
Author: John Naylor <john.naylor@postgresql.org>
2022-08-26 [e813e0e16] Add optimized functions for linear search within byte ar
-->

      <listitem>
       <para>
        Allow <type>xid</type>/<type>subxid</type> searches and
        <acronym>ASCII</acronym> string detection to use vector operations
        (Nathan Bossart, John Naylor)
        <ulink url="&commit_baseurl;37a6e5df3">&sect;</ulink>
        <ulink url="&commit_baseurl;121d2d3d7">&sect;</ulink>
        <ulink url="&commit_baseurl;b6ef16756">&sect;</ulink>
        <ulink url="&commit_baseurl;e813e0e16">&sect;</ulink>
       </para>

       <para>
        <acronym>ASCII</acronym> detection is particularly useful for
        <link linkend="sql-copy"><command>COPY FROM</command></link>.
        Vector operations are also used for some C array searches.
       </para>

      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-08-29 [c6e0fe1f2] Improve performance of and reduce overheads of memory ma
-->

      <listitem>
       <para>
        Reduce overhead of memory allocations (Andres Freund, David Rowley)
        <ulink url="&commit_baseurl;c6e0fe1f2">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-monitoring">
     <title>Monitoring</title>

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-02-11 [a9c70b46d] Add pg_stat_io view, providing more detailed IO statisti
Author: Andres Freund <andres@anarazel.de>
2023-03-30 [8aaa04b32] Track shared buffer hits in pg_stat_io
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [ac8d53dae] Track IO times in pg_stat_io
Author: Michael Paquier <michael@paquier.xyz>
2023-04-21 [0ecb87e1f] Remove io prefix from pg_stat_io columns
Author: Andres Freund <andres@anarazel.de>
2023-05-17 [093e5c57d] Add writeback to pg_stat_io
-->

      <listitem>
       <para>
        Add system view <link
        linkend="monitoring-pg-stat-io-view"><structname>pg_stat_io</structname></link>
        view to track <acronym>I/O</acronym> statistics (Melanie Plageman)
        <ulink url="&commit_baseurl;a9c70b46d">&sect;</ulink>
        <ulink url="&commit_baseurl;8aaa04b32">&sect;</ulink>
        <ulink url="&commit_baseurl;ac8d53dae">&sect;</ulink>
        <ulink url="&commit_baseurl;0ecb87e1f">&sect;</ulink>
        <ulink url="&commit_baseurl;093e5c57d">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-14 [c03747183] pgstat: Track time of the last scan of a relation
-->

      <listitem>
       <para>
        Record statistics on the last sequential and index scans on tables
        (Dave Page)
        <ulink url="&commit_baseurl;c03747183">&sect;</ulink>
       </para>

       <para>
        This information appears in <link
        linkend="pg-stat-all-tables-view"><structname>pg_stat_*_tables</structname></link>
        and <link
        linkend="monitoring-pg-stat-all-indexes-view"><structname>pg_stat_*_indexes</structname></link>.
       </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-23 [ae4fdde13] Count updates that move row to a new page.
-->

      <listitem>
       <para>
        Record statistics on the occurrence of updated rows moving to
        new pages (Corey Huinker)
        <ulink url="&commit_baseurl;ae4fdde13">&sect;</ulink>
       </para>

       <para>
        The <literal>pg_stat_*_tables</literal> column is <link
        linkend="monitoring-pg-stat-all-tables-view"><structfield>n_tup_newpage_upd</structfield></link>.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-01-10 [f74573969] Fix the display of lock information for specktoken.
-->

      <listitem>
       <para>
        Add speculative lock information to the <link
        linkend="view-pg-locks"><structname>pg_locks</structname></link>
        system view (Masahiko Sawada, Noriyoshi Shinoda)
        <ulink url="&commit_baseurl;f74573969">&sect;</ulink>
       </para>

       <para>
        The transaction id is displayed in the
        <structfield>transactionid</structfield> column and
        the speculative insertion token is displayed in the
        <structfield>objid</structfield> column.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-05 [84ad713cf] Add result_types column to pg_prepared_statements view
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-05 [6ffff0fd2] Fix pg_prepared_statements.result_types for DML statemen
-->

      <listitem>
       <para>
        Add the display of prepared statement result types to the <link
        linkend="view-pg-prepared-statements"><structname>pg_prepared_statements</structname></link>
        view (Dagfinn Ilmari Mannsåker)
        <ulink url="&commit_baseurl;84ad713cf">&sect;</ulink>
        <ulink url="&commit_baseurl;6ffff0fd2">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-06 [e0b014295] Create subscription stats entry at CREATE SUBSCRIPTION t
-->

      <listitem>
       <para>
        Create subscription statistics
        entries at subscription creation time so <link
        linkend="pg-stat-database-view"><structfield>stats_reset</structfield></link>
        is accurate (Andres Freund)
        <ulink url="&commit_baseurl;e0b014295">&sect;</ulink>
       </para>

       <para>
        Previously entries were created only when the first statistics
        were reported.
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [704261ecc] Improve IO accounting for temp relation writes
-->

      <listitem>
       <para>
        Correct the <acronym>I/O</acronym>
        accounting for temp relation writes shown in <link
        linkend="pg-stat-database-view"><structname>pg_stat_database</structname></link>
        (Melanie Plageman)
        <ulink url="&commit_baseurl;704261ecc">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-12-19 [10ea0f924] Expose some information about backend subxact status.
-->

      <listitem>
       <para>
        Add function <link
        linkend="monitoring-stats-backend-funcs-table"><function>pg_stat_get_backend_subxact()</function></link>
        to report on a session's subtransaction cache (Dilip Kumar)
        <ulink url="&commit_baseurl;10ea0f924">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-29 [d7e39d72c] Use actual backend IDs in pg_stat_get_backend_idset() an
-->

      <listitem>
       <para>
        Have <link
        linkend="monitoring-stats-backend-funcs-table"><function>pg_stat_get_backend_idset()</function></link>,
        <function>pg_stat_get_backend_activity()</function>, and related
        functions use the unchanging backend id (Nathan Bossart)
        <ulink url="&commit_baseurl;d7e39d72c">&sect;</ulink>
       </para>

       <para>
        Previously the index values might change during the lifetime of
        the session.
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-08-22 [0c679464a] Add BackendType for standalone backends
-->

      <listitem>
       <para>
        Report stand-alone backends with a special backend type (Melanie
        Plageman)
        <ulink url="&commit_baseurl;0c679464a">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-11-21 [92daeca45] Add wait event for pg_usleep() in perform_spin_delay()
-->

      <listitem>
       <para>
        Add wait event <link
        linkend="wait-event-timeout-table"><literal>SpinDelay</literal></link>
        to report spinlock sleep delays (Andres Freund)
        <ulink url="&commit_baseurl;92daeca45">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-14 [7bae3bbf6] Create a distinct wait event for POSIX DSM allocation.
-->

      <listitem>
       <para>
        Create new wait event <link
        linkend="wait-event-io-table"><literal>DSMAllocate</literal></link>
        to indicate waiting for dynamic shared memory allocation (Thomas
        Munro)
        <ulink url="&commit_baseurl;7bae3bbf6">&sect;</ulink>
       </para>

       <para>
        Previously this type of wait was reported as
        <literal>DSMFillZeroWrite</literal>, which was also used by
        <function>mmap()</function> allocations.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-24 [af205152e] Add the database name to the ps display of logical WAL s
-->

      <listitem>
       <para>
        Add the database name to the <link
        linkend="guc-update-process-title">process title</link> of logical
        <acronym>WAL</acronym> senders (Tatsuhiro Nakamori)
        <ulink url="&commit_baseurl;af205152e">&sect;</ulink>
       </para>

       <para>
        Physical <acronym>WAL</acronym> senders do not display a database
        name.
       </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-07 [62c46eee2] Add checkpoint and REDO LSN to log_checkpoints message.
-->

      <listitem>
       <para>
        Add checkpoint and <literal>REDO LSN</literal> information to <link
        linkend="guc-log-checkpoints"><varname>log_checkpoints</varname></link>
        messages (Bharath Rupireddy, Kyotaro Horiguchi)
        <ulink url="&commit_baseurl;62c46eee2">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-15 [3a0e38504] Log details for client certificate failures
-->

      <listitem>
       <para>
        Provide additional details during client certificate failures
        (Jacob Champion)
        <ulink url="&commit_baseurl;3a0e38504">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-privileges">
     <title>Privileges</title>

     <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-03-30 [c3afe8cf5] Add new predefined role pg_create_subscription.
-->

      <listitem>
       <para>
        Add predefined role <link
        linkend="predefined-roles"><literal>pg_create_subscription</literal></link>
        with permission to create subscriptions (Robert Haas)
        <ulink url="&commit_baseurl;c3afe8cf5">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-03-30 [c3afe8cf5] Add new predefined role pg_create_subscription.
Author: Amit Kapila <akapila@postgresql.org>
2023-04-20 [c1cc4e688] Restart the apply worker if the 'password_required' opti
Author: Amit Kapila <akapila@postgresql.org>
2023-04-24 [19e65dff3] Display 'password_required' option for \dRs+ command.
-->

      <listitem>
       <para>
        Allow subscriptions to not require passwords (Robert Haas)
        <ulink url="&commit_baseurl;c3afe8cf5">&sect;</ulink>
        <ulink url="&commit_baseurl;c1cc4e688">&sect;</ulink>
        <ulink url="&commit_baseurl;19e65dff3">&sect;</ulink>
       </para>

       <para>
        This is accomplished with the option <link
        linkend="sql-createsubscription"><literal>password_required=false</literal></link>.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-01-13 [c44f6334c] Simplify permissions for LOCK TABLE.
-->

      <listitem>
       <para>
        Simplify permissions for <link linkend="sql-lock"><command>LOCK
        TABLE</command></link> (Jeff Davis)
        <ulink url="&commit_baseurl;c44f6334c">&sect;</ulink>
       </para>

       <para>
        Previously a user's ability to perform <command>LOCK
        TABLE</command> at various lock levels was limited to the
        lock levels required by the commands they had permission
        to execute on the table.  For example, someone with <link
        linkend="sql-update"><command>UPDATE</command></link>
        permission could perform all lock levels except <literal>ACCESS
        SHARE</literal>, even though it was a lesser lock level.  Now users
        can issue lesser lock levels if they already have permission for
        greater lock levels.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->

      <listitem>
       <para>
        Allow <link linkend="sql-altergroup"><literal>ALTER GROUP group_name
        ADD USER user_name</literal></link> to be performed with <literal>ADMIN
        OPTION</literal> (Robert Haas)
        <ulink url="&commit_baseurl;ce6b672e4">&sect;</ulink>
       </para>

       <para>
        Previously <literal>CREATEROLE</literal> permission was required.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-25 [e3ce2de09] Allow grant-level control of role inheritance behavior.
-->

      <listitem>
       <para>
        Allow <link linkend="sql-grant"><command>GRANT</command></link>
        to use <literal>WITH ADMIN TRUE</literal>/<literal>FALSE</literal>
        syntax (Robert Haas)
        <ulink url="&commit_baseurl;e3ce2de09">&sect;</ulink>
       </para>

       <para>
        Previously only the <literal>WITH ADMIN OPTION</literal> syntax
        was supported.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-10 [e5b8a4c09] Add new GUC createrole_self_grant.
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-02-22 [e00bc6c92] doc: Add default value of createrole_self_grant
-->

      <listitem>
       <para>
        Allow roles that create other roles to automatically
        inherit the new role's rights or the ability to <link
        linkend="sql-set-role"><command>SET ROLE</command></link> to the
        new role (Robert Haas, Shi Yu)
        <ulink url="&commit_baseurl;e5b8a4c09">&sect;</ulink>
        <ulink url="&commit_baseurl;e00bc6c92">&sect;</ulink>
       </para>

       <para>
        This is controlled by server variable <link
        linkend="guc-createrole-self-grant"><varname>createrole_self_grant</varname></link>.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-09-19 [48a257d44] Make ALTER DEFAULT PRIVILEGES require privileges, not me
-->

      <listitem>
       <para>
        Prevent users from changing the default privileges of non-inherited
        roles (Robert Haas)
        <ulink url="&commit_baseurl;48a257d44">&sect;</ulink>
       </para>

       <para>
        This is now only allowed for inherited roles.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->

      <listitem>
       <para>
        When granting role membership, require the granted-by role to be
        a role that has appropriate permissions (Robert Haas)
        <ulink url="&commit_baseurl;ce6b672e4">&sect;</ulink>
       </para>

       <para>
        This is a requirement even when a non-bootstrap superuser is
        granting role membership.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->

      <listitem>
       <para>
        Allow non-superusers to grant permissions using a granted-by user
        that is not the current user (Robert Haas)
        <ulink url="&commit_baseurl;ce6b672e4">&sect;</ulink>
       </para>

       <para>
        The current user still must have sufficient permissions given by
        the specified granted-by user.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-11-18 [3d14e171e] Add a SET option to the GRANT command.
-->

      <listitem>
       <para>
        Add <link linkend="sql-grant"><command>GRANT</command></link> to
        control permission to use <link linkend="sql-set-role"><command>SET
        ROLE</command></link> (Robert Haas)
        <ulink url="&commit_baseurl;3d14e171e">&sect;</ulink>
       </para>

       <para>
        This is controlled by a new <literal>GRANT ... SET</literal>
        option.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
-->

      <listitem>
       <para>
        Add dependency tracking to roles which have granted privileges
        (Robert Haas)
        <ulink url="&commit_baseurl;ce6b672e4">&sect;</ulink>
       </para>

       <para>
        For example, removing <literal>ADMIN OPTION</literal> will fail if
        there are privileges using that option;  <literal>CASCADE</literal>
        must be used to revoke dependent permissions.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-18 [6566133c5] Ensure that pg_auth_members.grantor is always valid.
-->

      <listitem>
       <para>
        Add dependency tracking of grantors for <link
        linkend="sql-grant"><command>GRANT</command></link> records
        (Robert Haas)
        <ulink url="&commit_baseurl;6566133c5">&sect;</ulink>
       </para>

       <para>
        This guarantees that <link
        linkend="catalog-pg-auth-members"><structname>pg_auth_members</structname></link>.<structfield>grantor</structfield>
        values are always valid.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-08-22 [ce6b672e4] Make role grant system more consistent with other privil
Author: Robert Haas <rhaas@postgresql.org>
2022-08-31 [0101f770a] Fix a bug in roles_is_member_of.
-->

      <listitem>
       <para>
        Allow multiple role membership records (Robert Haas)
        <ulink url="&commit_baseurl;ce6b672e4">&sect;</ulink>
        <ulink url="&commit_baseurl;0101f770a">&sect;</ulink>
       </para>

       <para>
        Previously a new membership grant would remove a previous matching
        membership grant, even if other aspects of the grant did not match.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-07-26 [e530be2c5] Do not allow removal of superuser privileges from bootst
-->

      <listitem>
       <para>
        Prevent removal of superuser privileges for the bootstrap user
        (Robert Haas)
        <ulink url="&commit_baseurl;e530be2c5">&sect;</ulink>
       </para>

       <para>
        Restoring such users could lead to errors.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-03 [b762bbde3] Allow makeaclitem() to accept multiple privilege names.
-->

      <listitem>
       <para>
        Allow <link
        linkend="functions-aclitem-fn-table"><function>makeaclitem()</function></link>
        to accept multiple privilege names (Robins Tharakan)
        <ulink url="&commit_baseurl;b762bbde3">&sect;</ulink>
       </para>

       <para>
        Previously only a single privilege name, like <link
        linkend="sql-select"><command>SELECT</command></link>, was
        accepted.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-server-config">
     <title>Server Configuration</title>

     <itemizedlist>

<!--
Author: Stephen Frost <sfrost@snowman.net>
2023-04-13 [6633cfb21] De-Revert "Add support for Kerberos credential delegatio
Author: Bruce Momjian <bruce@momjian.us>
2023-05-20 [9c0a0e2ed] rename "gss_accept_deleg" to "gss_accept_delegation".
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-20 [f4001a553] Fix remaining references to gss_accept_deleg.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-05-21 [a2eb99a01] Expand some more uses of "deleg" to "delegation" or "del
-->

      <listitem>
       <para>
        Add support for <productname>Kerberos</productname> credential
        delegation (Stephen Frost)
        <ulink url="&commit_baseurl;6633cfb21">&sect;</ulink>
        <ulink url="&commit_baseurl;9c0a0e2ed">&sect;</ulink>
        <ulink url="&commit_baseurl;f4001a553">&sect;</ulink>
        <ulink url="&commit_baseurl;a2eb99a01">&sect;</ulink>
       </para>

       <para>
        This is enabled with server variable <link
        linkend="guc-gss-accept-delegation"><varname>gss_accept_delegation</varname></link>
        and <application>libpq</application> connection parameter <link
        linkend="libpq-connect-gssdelegation"><literal>gssdelegation</literal></link>.
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-03-27 [b57774300] Make SCRAM iteration count configurable
-->

      <listitem>
       <para>
        Allow the <acronym>SCRAM</acronym> iteration
        count to be set with server variable <link
        linkend="guc-scram-iterations"><varname>scram_iterations</varname></link>
        (Daniel Gustafsson)
        <ulink url="&commit_baseurl;b57774300">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-10-14 [3057465ac] Replace the sorted array of GUC variables with a hash ta
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-10-14 [f13b2088f] Add auxiliary lists to GUC data structures for better pe
-->

      <listitem>
       <para>
        Improve performance of server variable management (Tom Lane)
        <ulink url="&commit_baseurl;3057465ac">&sect;</ulink>
        <ulink url="&commit_baseurl;f13b2088f">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-27 [385366426] Introduce GUC_NO_RESET flag.
-->

      <listitem>
       <para>
        Tighten restrictions on which server variables can be reset
        (Masahiko Sawada)
        <ulink url="&commit_baseurl;385366426">&sect;</ulink>
       </para>

       <para>
        Previously, while certain variables, like <link
        linkend="guc-default-transaction-isolation"><varname>transaction_isolation</varname></link>,
        were not affected by <link linkend="sql-reset"><command>RESET
        ALL</command></link>, they could be individually reset in
        inappropriate situations.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-09 [0b039e3a8] Fix some inconsistencies with GUC categories
-->

      <listitem>
       <para>
        Move various <link
        linkend="config-setting-configuration-file"><filename>postgresql.conf</filename></link>
        items into new categories (Shinya Kato)
        <ulink url="&commit_baseurl;0b039e3a8">&sect;</ulink>
       </para>

       <para>
        This also affects the categories displayed in the <link
        linkend="view-pg-settings"><structname>pg_settings</structname></link>
        view.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-25 [d13b68411] Introduce variables for initial and max nesting depth on
-->

      <listitem>
       <para>
        Prevent configuration file recursion beyond 10 levels (Julien
        Rouhaud)
        <ulink url="&commit_baseurl;d13b68411">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-07 [7d71d3dd0] Refresh cost-based delay params more frequently in autov
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-20 [a9781ae11] Fix autovacuum cost debug logging
-->

      <listitem>
       <para>
        Allow <link linkend="autovacuum">autovacuum</link> to more
        frequently honor changes to delay settings (Melanie Plageman)
        <ulink url="&commit_baseurl;7d71d3dd0">&sect;</ulink>
        <ulink url="&commit_baseurl;a9781ae11">&sect;</ulink>
       </para>

       <para>
        Rather than honor changes only at the start of each relation,
        honor them at the start of each block.
       </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-26 [756e221db] Reduce overhead of renaming archive status files.
Author: Fujii Masao <fujii@postgresql.org>
2022-07-26 [3cabe45a8] doc: Add note about re-archiving of same WAL files in do
-->

      <listitem>
       <para>
        Remove restrictions that archive files be durably renamed
        (Nathan Bossart)
        <ulink url="&commit_baseurl;756e221db">&sect;</ulink>
        <ulink url="&commit_baseurl;3cabe45a8">&sect;</ulink>
       </para>

       <para>
        The <link
        linkend="guc-archive-command"><varname>archive_command</varname></link>
        command is now more likely to be called with already-archived
        files after a crash.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-15 [d627ce3b7] Disallow setting archive_library and archive_command at
-->

      <listitem>
       <para>
        Prevent <link
        linkend="guc-archive-library"><varname>archive_library</varname></link>
        and <link
        linkend="guc-archive-command"><varname>archive_command</varname></link>
        from being set at the same time (Nathan Bossart)
        <ulink url="&commit_baseurl;d627ce3b7">&sect;</ulink>
       </para>

       <para>
        Previously <varname>archive_library</varname> would override
        <varname>archive_command</varname>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-21 [51b5834cd] Provide options for postmaster to kill child processes w
-->

      <listitem>
       <para>
        Allow the postmaster to terminate children with an abort signal
        (Tom Lane)
        <ulink url="&commit_baseurl;51b5834cd">&sect;</ulink>
       </para>

       <para>
        This allows collection of a core dump for a
        stuck child process.  This is controlled by <link
        linkend="guc-send-abort-for-crash"><varname>send_abort_for_crash</varname></link>
        and <link
        linkend="guc-send-abort-for-kill"><varname>send_abort_for_kill</varname></link>.
        The postmaster's <option>-T</option> switch is now the same as
        setting <varname>send_abort_for_crash</varname>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-21 [51b5834cd] Provide options for postmaster to kill child processes w
-->

      <listitem>
       <para>
        Remove the non-functional postmaster <option>-n</option> option
        (Tom Lane)
        <ulink url="&commit_baseurl;51b5834cd">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-01-20 [6e2775e4d] Add new GUC reserved_connections.
-->

      <listitem>
       <para>
        Allow the server to reserve backend slots for roles with <link
        linkend="predefined-roles"><literal>pg_use_reserved_connections</literal></link>
        membership (Nathan Bossart)
        <ulink url="&commit_baseurl;6e2775e4d">&sect;</ulink>
       </para>

       <para>
        The number of reserved slots is set by server variable <link
        linkend="guc-reserved-connections"><varname>reserved_connections</varname></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-09-17 [fdd8937c0] Fix huge_pages on Windows
-->

      <listitem>
       <para>
        Allow <link linkend="guc-huge-pages">huge pages</link> to
        work on newer versions of <systemitem class="osname">Windows
        10</systemitem> (Thomas Munro)
        <ulink url="&commit_baseurl;fdd8937c0">&sect;</ulink>
       </para>

       <para>
        This adds the special handling required to enable huge pages
        on newer versions of <systemitem class="osname">Windows
        10</systemitem>.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2023-04-08 [d4e71df6d] Add io_direct setting (developer-only).
Author: Thomas Munro <tmunro@postgresql.org>
2023-05-15 [319bae9a8] Rename io_direct to debug_io_direct.
-->

      <listitem>
       <para>
        Add <link
        linkend="guc-debug-io-direct"><varname>debug_io_direct</varname></link>
        setting for developer usage (Thomas Munro, Andres Freund,
        Bharath Rupireddy)
        <ulink url="&commit_baseurl;d4e71df6d">&sect;</ulink>
        <ulink url="&commit_baseurl;319bae9a8">&sect;</ulink>
       </para>

       <para>
        While primarily for developers, <link
        linkend="guc-wal-sync-method"><literal>wal_sync_method=open_sync</literal></link>/<literal>open_datasync</literal>
        has been modified to not use direct <acronym>I/O</acronym> with
        <literal>wal_level=minimal</literal>;  this is now enabled with
        <literal>debug_io_direct=wal</literal>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-20 [cca186348] Add pg_dissect_walfile_name()
Author: Michael Paquier <michael@paquier.xyz>
2022-12-23 [13e0d7a60] Rename pg_dissect_walfile_name() to pg_split_walfile_nam
-->

      <listitem>
       <para>
        Add function <link
        linkend="functions-admin-backup-table"><function>pg_split_walfile_name()</function></link>
        to report the segment and timeline values of <acronym>WAL</acronym>
        file names (Bharath Rupireddy)
        <ulink url="&commit_baseurl;cca186348">&sect;</ulink>
        <ulink url="&commit_baseurl;13e0d7a60">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-pg-hba">
     <title><link linkend="auth-pg-hba-conf">pg_hba.conf</link></title>

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-10-24 [8fea86830] Add support for regexps on database and user entries in
-->

      <listitem>
       <para>
        Add support for regular expression matching on database and role
        entries in <filename>pg_hba.conf</filename> (Bertrand Drouvot)
        <ulink url="&commit_baseurl;8fea86830">&sect;</ulink>
       </para>

       <para>
        Regular expression patterns are prefixed with a slash.  Database
        and role names that begin with slashes need to be double-quoted
        if referenced in <filename>pg_hba.conf</filename>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-20 [efb6f4a4f] Support the same patterns for pg-user in pg_ident.conf a
-->

      <listitem>
       <para>
        Improve user-column handling of <link
        linkend="runtime-config-file-locations"><filename>pg_ident.conf</filename></link>
        to match <filename>pg_hba.conf</filename> (Jelte Fennema)
        <ulink url="&commit_baseurl;efb6f4a4f">&sect;</ulink>
       </para>

       <para>
        Specifically, add support for <literal>all</literal>, role
        membership with <literal>+</literal>, and regular expressions
        with a leading slash.  Any user name that matches these patterns
        must be double-quoted.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-24 [a54b658ce] Add support for file inclusions in HBA and ident configu
-->

      <listitem>
       <para>
        Allow include files in <filename>pg_hba.conf</filename> and
        <filename>pg_ident.conf</filename> (Julien Rouhaud)
        <ulink url="&commit_baseurl;a54b658ce">&sect;</ulink>
       </para>

       <para>
        These are controlled by <literal>include</literal>,
        <literal>include_if_exists</literal>, and
        <literal>include_dir</literal>.  System views <link
        linkend="view-pg-hba-file-rules"><structname>pg_hba_file_rules</structname></link>
        and <link
        linkend="view-pg-ident-file-mappings"><structname>pg_ident_file_mappings</structname></link>
        now display the file name.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-27 [de3f0e3fe] Eliminate fixed token-length limit in hba.c.
-->

      <listitem>
       <para>
        Allow <filename>pg_hba.conf</filename> tokens to be of unlimited
        length (Tom Lane)
        <ulink url="&commit_baseurl;de3f0e3fe">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-10-26 [c591300a8] Add rule_number to pg_hba_file_rules and map_number to p
-->

      <listitem>
       <para>
        Add rule and map numbers to the system view <link
        linkend="view-pg-hba-file-rules"><structname>pg_hba_file_rules</structname></link>
        (Julien Rouhaud)
        <ulink url="&commit_baseurl;c591300a8">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-localization">
     <title><link linkend="charset">Localization</link></title>

     <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-03-10 [c45dc7ffb] initdb: derive encoding from locale for ICU; similar to
-->

      <listitem>
       <para>
        Determine the default encoding from the locale when using
        <acronym>ICU</acronym> (Jeff Davis)
        <ulink url="&commit_baseurl;c45dc7ffb">&sect;</ulink>
       </para>

       <para>
        Previously the default was always <literal>UTF-8</literal>.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
      Date:   Fri Jun 16 10:27:32 2023 -0700
-->

      <listitem>
       <para>
        Have <link linkend="sql-createdatabase"><command>CREATE
        DATABASE</command></link> and <link
        linkend="sql-createcollation"><command>CREATE
        COLLATION</command></link>'s <literal>LOCALE</literal> options, and
        <link linkend="app-initdb"><application>initdb</application></link>
        and <link
        linkend="app-createdb"><application>createdb</application></link>
        <option>--locale</option> options, control
        non-<application>libc</application> collation providers (Jeff
        Davis)
       </para>

       <para>
        Previously they only controlled <application>libc</application>
        providers.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-10 [0d21d4b9b] Add standard collation UNICODE
-->

      <listitem>
       <para>
        Add predefined collations <literal>unicode</literal> and
        <literal>ucs_basic</literal> (Peter Eisentraut)
        <ulink url="&commit_baseurl;0d21d4b9b">&sect;</ulink>
       </para>

       <para>
        This only works if <acronym>ICU</acronym> support is enabled.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-08 [30a53b792] Allow tailoring of ICU locales with custom rules
-->

      <listitem>
       <para>
        Allow custom <acronym>ICU</acronym> collation rules to be created
        (Peter Eisentraut)
        <ulink url="&commit_baseurl;30a53b792">&sect;</ulink>
       </para>

       <para>
        This is done using <link
        linkend="sql-createcollation"><command>CREATE
        COLLATION</command></link>'s new <literal>RULES</literal>
        clause, as well as new options for <link
        linkend="sql-createdatabase"><command>CREATE
        DATABASE</command></link>, <link
        linkend="app-createdb"><application>createdb</application></link>,
        and <link
        linkend="app-initdb"><application>initdb</application></link>.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-01-03 [bf03cfd16] Windows support in pg_import_system_collations
-->

      <listitem>
       <para>
        Allow <systemitem class="osname">Windows</systemitem> to import
        system locales automatically (Juan José Santamaría Flecha)
        <ulink url="&commit_baseurl;bf03cfd16">&sect;</ulink>
       </para>

       <para>
        Previously, only <acronym>ICU</acronym> locales could be imported
        on <systemitem class="osname">Windows</systemitem>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-16-logical">
    <title><link linkend="logical-replication">Logical Replication</link></title>

    <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-04-08 [0fdab27ad] Allow logical decoding on standbys
Author: Andres Freund <andres@anarazel.de>
2023-04-07 [be87200ef] Support invalidating replication slots due to horizon an
Author: Andres Freund <andres@anarazel.de>
2023-04-08 [26669757b] Handle logical slot conflicts on standby
-->

     <listitem>
      <para>
       Allow <link linkend="logicaldecoding">logical decoding</link>
       on standbys (Bertrand Drouvot, Andres Freund, Amit Khandekar)
       <ulink url="&commit_baseurl;0fdab27ad">&sect;</ulink>
       <ulink url="&commit_baseurl;be87200ef">&sect;</ulink>
       <ulink url="&commit_baseurl;26669757b">&sect;</ulink>
      </para>

      <para>
       Snapshot <acronym>WAL</acronym> records are
       required for logical slot creation but cannot be
       created on standbys.  To avoid delays, the new function <link
       linkend="functions-snapshot-synchronization-table"><function>pg_log_standby_snapshot()</function></link>
       allows creation of such records.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-12-26 [5de94a041] Add 'logical_decoding_mode' GUC.
Author: Amit Kapila <akapila@postgresql.org>
2023-01-30 [1e8b61735] Rename GUC logical_decoding_mode to logical_replication_
Author: Amit Kapila <akapila@postgresql.org>
2023-02-02 [9f2213a7c] Allow the logical_replication_mode to be used on the sub
-->

     <listitem>
      <para>
       Add server variable to control how logical decoding publishers
       transfer changes and how subscribers apply them (Shi Yu)
       <ulink url="&commit_baseurl;5de94a041">&sect;</ulink>
       <ulink url="&commit_baseurl;1e8b61735">&sect;</ulink>
       <ulink url="&commit_baseurl;9f2213a7c">&sect;</ulink>
      </para>

      <para>
       The variable is <link
       linkend="guc-debug-logical-replication-streaming"><varname>debug_logical_replication_streaming</varname></link>.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-03-23 [ecb696527] Allow logical replication to copy tables in binary forma
-->

     <listitem>
      <para>
       Allow logical replication initial table synchronization to copy
       rows in binary format (Melih Mutlu)
       <ulink url="&commit_baseurl;ecb696527">&sect;</ulink>
      </para>

      <para>
       This is only possible for subscriptions marked as binary.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-01-09 [216a78482] Perform apply of large transactions by parallel workers.
Author: Amit Kapila <akapila@postgresql.org>
2023-01-10 [cd06ccd78] Document the newly added wait events added by commit 216
Author: Amit Kapila <akapila@postgresql.org>
2023-02-16 [fce003cfd] Add a new wait state and use it when sending data in the
-->

     <listitem>
      <para>
       Allow parallel application of logical replication (Hou Zhijie,
       Wang Wei, Amit Kapila)
       <ulink url="&commit_baseurl;216a78482">&sect;</ulink>
       <ulink url="&commit_baseurl;cd06ccd78">&sect;</ulink>
       <ulink url="&commit_baseurl;fce003cfd">&sect;</ulink>
      </para>

      <para>
       The <link linkend="sql-createsubscription"><command>CREATE
       SUBSCRIPTION</command></link> <option>STREAMING</option>
       option now supports <literal>parallel</literal> to enable
       application of large transactions by parallel workers.  The number
       of parallel workers is controlled by the new server variable <link
       linkend="guc-max-parallel-apply-workers-per-subscription"><varname>max_parallel_apply_workers_per_subscription</varname></link>.
       Wait events <link
       linkend="wait-event-activity-table"><literal>LogicalParallelApplyMain</literal></link>,
       <literal>LogicalParallelApplyStateChange</literal>, and
       <literal>LogicalApplySendData</literal> were also added.  Column
       <structfield>leader_pid</structfield> was added to system view <link
       linkend="monitoring-pg-stat-subscription"><structname>pg_stat_subscription</structname></link>
       to track parallel activity.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2023-03-15 [89e46da5e] Allow the use of indexes other than PK and REPLICA IDENT
-->

     <listitem>
      <para>
       Improve performance for <link
       linkend="logical-replication-architecture">logical replication
       apply</link> without a primary key (Onder Kalaci, Amit Kapila)
       <ulink url="&commit_baseurl;89e46da5e">&sect;</ulink>
      </para>

      <para>
       Specifically, <literal>REPLICA IDENTITY FULL</literal> can now
       use btree indexes rather than sequentially scanning the table to
       find matches.
      </para>
     </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-07-21 [366283961] Allow users to skip logical replication of data having o
Author: Amit Kapila <akapila@postgresql.org>
2022-09-08 [875693019] Raise a warning if there is a possibility of data from m
-->

     <listitem>
      <para>
       Allow logical replication subscribers to process only changes that
       have no origin (Vignesh C, Amit Kapila)
       <ulink url="&commit_baseurl;366283961">&sect;</ulink>
       <ulink url="&commit_baseurl;875693019">&sect;</ulink>
      </para>

      <para>
       This can be used to avoid replication loops.  This is controlled
       by the new <literal>CREATE SUBSCRIPTION ... ORIGIN</literal> option.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-04-04 [1e10d49b6] Perform logical replication actions as the table owner.
Author: Robert Haas <rhaas@postgresql.org>
2023-04-04 [482675987] Add a run_as_owner option to subscriptions.
-->

     <listitem>
      <para>
       Perform logical replication <link
       linkend="sql-select"><command>SELECT</command></link> and
       <acronym>DML</acronym> actions as the table owner (Robert Haas)
       <ulink url="&commit_baseurl;1e10d49b6">&sect;</ulink>
       <ulink url="&commit_baseurl;482675987">&sect;</ulink>
      </para>

      <para>
       This improves security and now requires subscription
       owners to be either superusers or to have <link
       linkend="sql-set-role"><command>SET ROLE</command></link>
       permission on all roles owning tables in the replication set.
       The previous behavior of performing all operations as the
       subscription owner can be enabled with the subscription <link
       linkend="sql-createsubscription"><option>run_as_owner</option></link>
       option.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-22 [5a3a95385] Track logrep apply workers' last start times to avoid us
-->

     <listitem>
      <para>
       Have <link
       linkend="guc-wal-retrieve-retry-interval"><varname>wal_retrieve_retry_interval</varname></link>
       operate on a per-subscription basis (Nathan Bossart)
       <ulink url="&commit_baseurl;5a3a95385">&sect;</ulink>
      </para>

      <para>
       Previously the retry time was applied
       globally.  This also adds wait events <link
       linkend="wait-event-lwlock-table">><literal>LogicalRepLauncherDSA</literal></link>
       and <literal>LogicalRepLauncherHash</literal>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-utility">
    <title>Utility Commands</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-24 [3c05284d8] Invent GENERIC_PLAN option for EXPLAIN.
-->

     <listitem>
      <para>
       Add <link linkend="sql-explain"><command>EXPLAIN</command></link>
       option <literal>GENERIC_PLAN</literal> to display the generic plan
       for a parameterized query (Laurenz Albe)
       <ulink url="&commit_baseurl;3c05284d8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-03-13 [9f8377f7a] Add a DEFAULT option to COPY  FROM
-->

     <listitem>
      <para>
       Allow a <link linkend="sql-copy"><command>COPY FROM</command></link>
       value to map to a column's <literal>DEFAULT</literal> (Israel
       Barth Rubio)
       <ulink url="&commit_baseurl;9f8377f7a">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2022-10-13 [97da48246] Allow batch insertion during COPY into a foreign table.
-->

     <listitem>
      <para>
       Allow <link linkend="sql-copy"><command>COPY</command></link>
       into foreign tables to add rows in batches (Andrey Lepikhov,
       Etsuro Fujita)
       <ulink url="&commit_baseurl;97da48246">&sect;</ulink>
      </para>

      <para>
       This is controlled by the <link
       linkend="postgres-fdw"><application>postgres_fdw</application></link>
       option <link
       linkend="postgres-fdw-options-cost-estimation"><option>batch_size</option></link>.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-07-13 [784cedda0] Allow specifying STORAGE attribute for a new table
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-10 [b9424d014] Support writing "CREATE/ALTER TABLE ... SET STORAGE DEFA
-->

     <listitem>
      <para>
       Allow the <literal>STORAGE</literal> type to be specified by <link
       linkend="sql-createtable"><command>CREATE TABLE</command></link>
       (Teodor Sigaev, Aleksander Alekseev)
       <ulink url="&commit_baseurl;784cedda0">&sect;</ulink>
       <ulink url="&commit_baseurl;b9424d014">&sect;</ulink>
      </para>

      <para>
       Previously only <link linkend="sql-altertable"><command>ALTER
       TABLE</command></link> could control this.
      </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-07-12 [3b00a944a] Support TRUNCATE triggers on foreign tables.
-->

     <listitem>
      <para>
       Allow <link linkend="sql-createtrigger">truncate triggers</link>
       on foreign tables (Yugo Nagata)
       <ulink url="&commit_baseurl;3b00a944a">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-06 [4211fbd84] Add PROCESS_MAIN to VACUUM
-->

     <listitem>
      <para>
       Allow <link
       linkend="sql-vacuum"><command>VACUUM</command></link> and <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       to only process <link
       linkend="storage-toast"><literal>TOAST</literal></link> tables
       (Nathan Bossart)
       <ulink url="&commit_baseurl;4211fbd84">&sect;</ulink>
      </para>

      <para>
       This is accomplished by having <link
       linkend="sql-vacuum"><command>VACUUM</command></link>
       turn off <literal>PROCESS_MAIN</literal> or by <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       using the <option>--no-process-main</option> option.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-06 [a46a7011b] Add options to control whether VACUUM runs vac_update_da
-->

     <listitem>
      <para>
       Add <link linkend="sql-vacuum"><command>VACUUM</command></link>
       options to skip or update all <link
       linkend="vacuum-for-wraparound">frozen</link> statistics (Tom Lane,
       Nathan Bossart)
       <ulink url="&commit_baseurl;a46a7011b">&sect;</ulink>
      </para>

      <para>
       The options are <literal>SKIP_DATABASE_STATS</literal> and
       <literal>ONLY_DATABASE_STATS</literal>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-19 [2cbc3c17a] Rework logic and simplify syntax of REINDEX DATABASE/SYS
Author: Michael Paquier <michael@paquier.xyz>
2022-07-26 [0a5f06b84] Fix a few issues with REINDEX grammar
-->

     <listitem>
      <para>
       Change <link linkend="sql-reindex"><command>REINDEX
       DATABASE</command></link> and <link
       linkend="sql-reindex"><command>REINDEX SYSTEM</command></link>
       to no longer require an argument (Simon Riggs)
       <ulink url="&commit_baseurl;2cbc3c17a">&sect;</ulink>
       <ulink url="&commit_baseurl;0a5f06b84">&sect;</ulink>
      </para>

      <para>
       Previously the database name had to be specified.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-07-21 [624aa2a13] Make the name optional in CREATE STATISTICS.
-->

     <listitem>
      <para>
       Allow <link linkend="sql-createstatistics"><command>CREATE
       STATISTICS</command></link> to generate a statistics name if none
       is specified (Simon Riggs)
       <ulink url="&commit_baseurl;624aa2a13">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-datatypes">
    <title>Data Types</title>

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-12-14 [6fcda9aba] Non-decimal integer literals
-->

     <listitem>
      <para>
       Allow non-decimal <link linkend="sql-syntax-bit-strings">integer
       literals</link> (Peter Eisentraut)
       <ulink url="&commit_baseurl;6fcda9aba">&sect;</ulink>
      </para>

      <para>
       For example, <literal>0x42F</literal>, <literal>0o273</literal>,
       and <literal>0b100101</literal>.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-23 [6dfacbf72] Add non-decimal integer support to type numeric.
-->

     <listitem>
      <para>
       Allow <link linkend="datatype-numeric"><type>NUMERIC</type></link>
       to process hexadecimal, octal, and binary integers of any size
       (Dean Rasheed)
       <ulink url="&commit_baseurl;6dfacbf72">&sect;</ulink>
      </para>

      <para>
       Previously only unquoted eight-byte integers were supported with
       these non-decimal bases.
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-02-04 [faff8f8e4] Allow underscores in integer and numeric constants.
-->

     <listitem>
      <para>
       Allow underscores in integer and numeric <link
       linkend="sql-syntax-bit-strings">constants</link> (Peter Eisentraut,
       Dean Rasheed)
       <ulink url="&commit_baseurl;faff8f8e4">&sect;</ulink>
      </para>

      <para>
       This can improve readability for long strings of digits.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-01 [2ceea5adb] Accept "+infinity" in date and timestamp[tz] input.
-->

     <listitem>
      <para>
       Accept the spelling <literal>+infinity</literal> in datetime input
       (Vik Fearing)
       <ulink url="&commit_baseurl;2ceea5adb">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-09 [bcc704b52] Reject combining "epoch" and "infinity" with other datet
-->

     <listitem>
      <para>
       Prevent the specification of <literal>epoch</literal> and
       <literal>infinity</literal> together with other fields in datetime
       strings (Joseph Koshakow)
       <ulink url="&commit_baseurl;bcc704b52">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-16 [5b3c59535] Tighten error checks in datetime input, and remove bogus
-->

     <listitem>
      <para>
       Remove undocumented support for date input in the form
       <literal>Y<replaceable>year</replaceable>M<replaceable>month</replaceable>D<replaceable>day</replaceable></literal>
       (Joseph Koshakow)
       <ulink url="&commit_baseurl;5b3c59535">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-09 [1939d2628] Add test scaffolding for soft error reporting from input
Author: Michael Paquier <michael@paquier.xyz>
2023-02-28 [b8da37b3a] Rework pg_input_error_message(), now renamed pg_input_er
-->

     <listitem>
      <para>
       Add functions <link
       linkend="functions-info-validity-table"><function>pg_input_is_valid()</function></link>
       and <function>pg_input_error_info()</function> to check for type
       conversion errors (Tom Lane)
       <ulink url="&commit_baseurl;1939d2628">&sect;</ulink>
       <ulink url="&commit_baseurl;b8da37b3a">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-general">
    <title>General Queries</title>

    <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-07-20 [bcedd8f5f] Make subquery aliases optional in the FROM clause.
-->

     <listitem>
      <para>
       Allow subqueries in the <literal>FROM</literal> clause to omit
       aliases (Dean Rasheed)
       <ulink url="&commit_baseurl;bcedd8f5f">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-05 [102a5c164] SQL JSON path enhanced numeric literals
-->

     <listitem>
      <para>
       Add support for enhanced numeric literals in
       <acronym>SQL/JSON</acronym> paths (Peter Eisentraut)
       <ulink url="&commit_baseurl;102a5c164">&sect;</ulink>
      </para>

      <para>
       For example, allow hexadecimal, octal, and binary integers and
       underscores between digits.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-functions">
    <title>Functions</title>

    <itemizedlist>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2023-03-29 [7081ac46a] SQL/JSON: add standard JSON constructor functions
-->

     <listitem>
      <para>
       Add <acronym>SQL/JSON</acronym> constructors (Nikita Glukhov,
       Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote)
       <ulink url="&commit_baseurl;7081ac46a">&sect;</ulink>
      </para>

      <para>
       The new functions <link
       linkend="functions-json-creation-table"><function>JSON_ARRAY()</function></link>,
       <link
       linkend="functions-aggregate-table"><function>JSON_ARRAYAGG()</function></link>,
       <function>JSON_OBJECT()</function>, and
       <function>JSON_OBJECTAGG()</function> are part of the
       <acronym>SQL</acronym> standard.
      </para>
     </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2023-03-31 [6ee30209a] SQL/JSON: support the IS JSON predicate
-->

     <listitem>
      <para>
       Add <acronym>SQL/JSON</acronym> object checks (Nikita Glukhov,
       Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote,
       Andrew Dunstan)
       <ulink url="&commit_baseurl;6ee30209a">&sect;</ulink>
      </para>

      <para>
       The <link linkend="functions-sqljson-misc"><literal>IS
       JSON</literal></link> checks include checks for values, arrays,
       objects, scalars, and unique keys.
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-02 [0a8de93a4] Speed up lexing of long JSON strings
-->

     <listitem>
      <para>
       Allow <acronym>JSON</acronym> string parsing to use vector
       operations (John Naylor)
       <ulink url="&commit_baseurl;0a8de93a4">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-19 [5a617d75d] Fix ts_headline() to handle ORs and phrase queries more
-->

     <listitem>
      <para>
       Improve the handling of full text highlighting function <link
       linkend="textsearch-functions-table"><function>ts_headline()</function></link>
       for <literal>OR</literal> and <literal>NOT</literal> expressions
       (Tom Lane)
       <ulink url="&commit_baseurl;5a617d75d">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-18 [75bd846b6] Add functions to do timestamptz arithmetic in a non-defa
-->

     <listitem>
      <para>
       Add functions to add, subtract, and generate
       <type>timestamptz</type> values in a specified time zone (Przemyslaw
       Sztoch, Gurjeet Singh)
       <ulink url="&commit_baseurl;75bd846b6">&sect;</ulink>
      </para>

      <para>
       The functions are <link
       linkend="functions-datetime-table"><function>date_add()</function></link>,
       <function>date_subtract()</function>, and <link
       linkend="functions-srf-series"><function>generate_series()</function></link>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-11-12 [533e02e92] Fix volatility marking of timestamptz_trunc_zone.
-->

     <listitem>
      <para>
       Change <link
       linkend="functions-datetime-table"><function>date_trunc(unit,
       timestamptz, time_zone)</function></link> to be an immutable
       function (Przemyslaw Sztoch)
       <ulink url="&commit_baseurl;533e02e92">&sect;</ulink>
      </para>

      <para>
       This allows the creation of expression indexes using this function.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-09-29 [0823d061b] Introduce SYSTEM_USER
-->

     <listitem>
      <para>
       Add server variable <link
       linkend="functions-info-session-table"><literal>SYSTEM_USER</literal></link>
       (Bertrand Drouvot)
       <ulink url="&commit_baseurl;0823d061b">&sect;</ulink>
      </para>

      <para>
       This reports the authentication method and its authenticated user.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [888f2ea0a] Add array_sample() and array_shuffle() functions.
-->

     <listitem>
      <para>
       Add functions <link
       linkend="array-functions-table"><function>array_sample()</function></link>
       and <function>array_shuffle()</function> (Martin Kalcher)
       <ulink url="&commit_baseurl;888f2ea0a">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-02-22 [2ddab010c] Implement ANY_VALUE aggregate
-->

     <listitem>
      <para>
       Add aggregate function <link
       linkend="functions-aggregate-table"><function>ANY_VALUE()</function></link>
       which returns any value from a set (Vik Fearing)
       <ulink url="&commit_baseurl;2ddab010c">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-09 [38d81760c] Invent random_normal() to provide normally-distributed r
-->

     <listitem>
      <para>
       Add function <link
       linkend="functions-math-random-table"><function>random_normal()</function></link>
       to supply normally-distributed random numbers (Paul Ramsey)
       <ulink url="&commit_baseurl;38d81760c">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-03-14 [d5d574146] Add support for the error functions erf() and erfc().
-->

     <listitem>
      <para>
       Add error function <link
       linkend="functions-math-func-table"><function>erf()</function></link>
       and its complement <function>erfc()</function> (Dean Rasheed)
       <ulink url="&commit_baseurl;d5d574146">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-10-20 [40c7fcbbe] Improve the accuracy of numeric power() for integer expo
-->

     <listitem>
      <para>
       Improve the accuracy of numeric <link
       linkend="functions-math-func-table"><function>power()</function></link>
       for integer exponents (Dean Rasheed)
       <ulink url="&commit_baseurl;40c7fcbbe">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-15 [483bdb2af] Support [NO] INDENT option in XMLSERIALIZE().
-->

     <listitem>
      <para>
       Add <link
       linkend="datatype-xml-creating"><function>XMLSERIALIZE()</function></link>
       option <literal>INDENT</literal> to pretty-print its output
       (Jim Jones)
       <ulink url="&commit_baseurl;483bdb2af">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-10-31 [10932ed5e] Enable pg_collation_actual_version() to work on the defa
-->

     <listitem>
      <para>
       Change <link
       linkend="functions-admin-collation"><function>pg_collation_actual_version()</function></link>
       to return a reasonable value for the default collation (Jeff Davis)
       <ulink url="&commit_baseurl;10932ed5e">&sect;</ulink>
      </para>

      <para>
       Previously it returned <literal>NULL</literal>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-29 [283129e32] Support pg_read_[binary_]file (filename, missing_ok).
-->

     <listitem>
      <para>
       Allow <link
       linkend="functions-admin-genfile-table"><function>pg_read_file()</function></link>
       and <function>pg_read_binary_file()</function> to ignore missing
       files (Kyotaro Horiguchi)
       <ulink url="&commit_baseurl;283129e32">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-07 [ce1215d9b] Add support for unit "B" to pg_size_bytes()
-->

     <listitem>
      <para>
       Add byte specification (<literal>B</literal>) to <link
       linkend="functions-admin-dbsize"><function>pg_size_bytes()</function></link>
       (Peter Eisentraut)
       <ulink url="&commit_baseurl;ce1215d9b">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-12-27 [3ea7329c9] Simplify the implementations of the to_reg* functions.
-->

     <listitem>
      <para>
       Allow <link
       linkend="functions-info-catalog-table"><function>to_reg</function></link>*
       functions to accept numeric <acronym>OID</acronym>s as input
       (Tom Lane)
       <ulink url="&commit_baseurl;3ea7329c9">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-plpgsql">
    <title><link linkend="plpgsql">PL/pgSQL</link></title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-04 [d3d53f955] Add a way to get the current function's OID in pl/pgsql.
-->

     <listitem>
      <para>
       Add the ability to get the current function's <acronym>OID</acronym>
       in <application>PL/pgSQL</application> (Pavel Stehule)
       <ulink url="&commit_baseurl;d3d53f955">&sect;</ulink>
      </para>

      <para>
       This is accomplished with <link
       linkend="plpgsql-statements-diagnostics"><command>GET DIAGNOSTICS
       variable = PG_ROUTINE_OID</command></link>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-libpq">
    <title><link linkend="libpq">libpq</link></title>

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [3a465cc67] libpq: Add support for require_auth to control authorize
-->

     <listitem>
      <para>
       Add <application>libpq</application> connection option <link
       linkend="libpq-connect-require-auth"><option>require_auth</option></link>
       to specify a list of acceptable authentication methods (Jacob
       Champion)
       <ulink url="&commit_baseurl;3a465cc67">&sect;</ulink>
      </para>

      <para>
       This can also be used to disallow certain authentication methods.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-03-29 [7f5b19817] Support connection load balancing in libpq
Author: Fujii Masao <fujii@postgresql.org>
2023-04-21 [0a16512d4] doc: Add documentation for PGLOADBALANCEHOSTS environmen
-->

     <listitem>
      <para>
       Allow multiple <application>libpq</application>-specified hosts
       to be randomly selected (Jelte Fennema)
       <ulink url="&commit_baseurl;7f5b19817">&sect;</ulink>
       <ulink url="&commit_baseurl;0a16512d4">&sect;</ulink>
      </para>

      <para>
       This is enabled with <link
       linkend="libpq-connect-load-balance-hosts"><literal>load_balance_hosts=random</literal></link>
       and can be used for load balancing.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-24 [36f40ce2d] libpq: Add sslcertmode option to control client certific
-->

     <listitem>
      <para>
       Add <application>libpq</application> option <link
       linkend="libpq-connect-sslcertmode"><option>sslcertmode</option></link>
       to control transmission of the client certificate (Jacob Champion)
       <ulink url="&commit_baseurl;36f40ce2d">&sect;</ulink>
      </para>

      <para>
       The option values are <literal>disable</literal>,
       <literal>allow</literal>, and <literal>require</literal>.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2023-04-05 [8eda73146] Allow to use system CA pool for certificate verification
-->

     <listitem>
      <para>
       Allow <application>libpq</application> to use the system certificate
       pool for certificate verification (Jacob Champion, Thomas Habets)
       <ulink url="&commit_baseurl;8eda73146">&sect;</ulink>
      </para>

      <para>
       This is enabled with <link
       linkend="libpq-connect-sslrootcert"><literal>sslrootcert=system</literal></link>,
       which also enables <link
       linkend="libpq-connect-sslmode"><literal>sslmode=verify-full</literal></link>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-client-apps">
    <title>Client Applications</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-12 [83f1c7b74] Fix ECPG's handling of type names that match SQL keyword
-->

     <listitem>
      <para>
       Allow <link linkend="ecpg"><command>ECPG</command></link>
       variable declarations to use typedef names that match unreserved
       <acronym>SQL</acronym> keywords (Tom Lane)
       <ulink url="&commit_baseurl;83f1c7b74">&sect;</ulink>
      </para>

      <para>
       This change does prevent keywords which match C typedef names from
       being processed as keywords in later <command>EXEC SQL</command>
       blocks.
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-16-psql">
     <title><xref linkend="app-psql"/></title>

     <itemizedlist>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-07-25 [a45388d6e] Add xheader_width pset option to psql
-->

      <listitem>
       <para>
        Allow <application>psql</application> to control the maximum
        width of header lines in expanded format (Platon Pronko)
        <ulink url="&commit_baseurl;a45388d6e">&sect;</ulink>
       </para>

       <para>
        This is controlled by <link
        linkend="app-psql-meta-command-pset-xheader-width"><option>xheader_width</option></link>.
       </para>
      </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-07 [d913928c9] psql: Add support for \dpS and \zS.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-19 [d65ddaca9] Add psql \drg command to display role
-->

      <listitem>
       <para>
        Add <application>psql</application> command <link
        linkend="app-psql-meta-command-drg"><command>\drg</command></link>
        to show role membership details (Pavel Luzanov)
        <ulink url="&commit_baseurl;d913928c9">&sect;</ulink>
        <ulink url="&commit_baseurl;d65ddaca9">&sect;</ulink>
       </para>

       <para>
        The <literal>Member of</literal> output column has been removed
        from <command>\du</command> and <command>\dg</command> because
        this new command displays this information in more detail.
       </para>
      </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-07 [d913928c9] psql: Add support for \dpS and \zS.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-07-19 [d65ddaca9] Add psql \drg command to display role
-->

      <listitem>
       <para>
        Allow <application>psql</application>'s access privilege commands
        to show system objects (Nathan Bossart)
        <ulink url="&commit_baseurl;d913928c9">&sect;</ulink>
        <ulink url="&commit_baseurl;d65ddaca9">&sect;</ulink>
       </para>

       <para>
        The options are <link
        linkend="app-psql-meta-command-dp-lc"><command>\dpS</command></link>
        and <link
        linkend="app-psql-meta-command-z"><command>\zS</command></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-08 [bd95816f7] psql: Add information in \d+ about foreign partitions an
-->

      <listitem>
       <para>
        Add <literal>FOREIGN</literal> designation
        to <application>psql</application> <link
        linkend="app-psql-meta-command-d"><command>\d+</command></link>
        for foreign table children and partitions (Ian Lawrence Barwick)
        <ulink url="&commit_baseurl;bd95816f7">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-02 [3dfae91f7] Show "internal name" not "source code" in psql's \df+ co
-->

      <listitem>
       <para>
        Prevent <link
        linkend="app-psql-meta-command-df-uc"><command>\df+</command></link>
        from showing function source code (Isaac Morland)
        <ulink url="&commit_baseurl;3dfae91f7">&sect;</ulink>
       </para>

       <para>
        Function bodies are more easily viewed with <link
        linkend="app-psql-meta-command-sf"><command>\sf</command></link>.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-15 [5b66de343] psql: Add command to use extended query protocol
-->

      <listitem>
       <para>
        Allow <application>psql</application> to submit queries using
        the extended query protocol (Peter Eisentraut)
        <ulink url="&commit_baseurl;5b66de343">&sect;</ulink>
       </para>

       <para>
        Passing arguments to such queries is done
        using the new <application>psql</application> <link
        linkend="app-psql-meta-command-bind"><command>\bind</command></link>
        command.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-06 [00beecfe8] psql: add an optional execution-count limit to \watch.
-->

      <listitem>
       <para>
        Allow <application>psql</application> <link
        linkend="app-psql-meta-command-watch"><command>\watch</command></link>
        to limit the number of executions (Andrey Borodin)
        <ulink url="&commit_baseurl;00beecfe8">&sect;</ulink>
       </para>

       <para>
        The <command>\watch</command> options can now be named when
        specified.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-16 [6f9ee74d4] Improve handling of psql \watch's interval argument
-->

      <listitem>
       <para>
        Detect invalid values for <application>psql</application> <link
        linkend="app-psql-meta-command-watch"><command>\watch</command></link>,
        and allow zero to specify no delay (Andrey Borodin)
        <ulink url="&commit_baseurl;6f9ee74d4">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-21 [b0d8f2d98] Add SHELL_ERROR and SHELL_EXIT_CODE magic variables to p
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-06 [31ae2aa9d] psql: set SHELL_ERROR and SHELL_EXIT_CODE in more places
-->

      <listitem>
       <para>
        Allow <application>psql</application> scripts to obtain the exit
        status of shell commands and queries
       (Corey Huinker, Tom Lane)
       <ulink url="&commit_baseurl;b0d8f2d98">&sect;</ulink>
       <ulink url="&commit_baseurl;31ae2aa9d">&sect;</ulink>
       </para>

       <para>
        The new <application>psql</application> control variables are <link
        linkend="app-psql-variables-shell-error"><literal>SHELL_ERROR</literal></link>
        and <link
        linkend="app-psql-variables-shell-exit-code"><literal>SHELL_EXIT_CODE</literal></link>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-15 [f6c750d31] Improve tab completion of ALTER TYPE in psql
Author: Michael Paquier <michael@paquier.xyz>
2022-09-06 [4cbe57974] Add psql tab compression for SET COMPRESSION with ALTER
Author: Michael Paquier <michael@paquier.xyz>
2022-09-10 [6afcab6ac] Add psql tab compression for ALTER TABLE .. { OF | NOT O
Author: Michael Paquier <michael@paquier.xyz>
2022-10-05 [9aa58d48f] Add a few new patterns to the tab completion of psql
Author: Michael Paquier <michael@paquier.xyz>
2022-10-24 [3cf2f7af7] Improve tab completion for ALTER STATISTICS &lt;name&gt; SET i
Author: Peter Eisentraut <peter@eisentraut.org>
2022-11-01 [2ea5de296] psql: Improve tab completion for ALTER TABLE on identity
Author: Michael Paquier <michael@paquier.xyz>
2022-11-18 [07f7237c2] psql: Improve tab completion for GRANT/REVOKE
Author: Michael Paquier <michael@paquier.xyz>
2022-12-12 [9d0cf5749] Add support for GRANT SET in psql tab completion
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2023-01-06 [a3bc631ea] Improve tab completion for ALTER FUNCTION/PROCEDURE/ROUT
Author: Michael Paquier <michael@paquier.xyz>
2023-01-12 [2ff5ca86e] Add support for tab completion after ALTER EXTENSION ADD
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-19 [9e1e9d656] Add missed case for tab completion of GRANT/REVOKE MAINT
Author: Amit Kapila <akapila@postgresql.org>
2023-04-07 [96c498d2f] Add tab-completion for newly added SUBSCRIPTION options.
-->

      <listitem>
       <para>
        Various <application>psql</application> tab completion improvements
        (Vignesh C, Aleksander Alekseev, Dagfinn Ilmari Mannsåker,
        Shi Yu, Michael Paquier, Ken Kato, Peter Smith)
        <ulink url="&commit_baseurl;f6c750d31">&sect;</ulink>
        <ulink url="&commit_baseurl;4cbe57974">&sect;</ulink>
        <ulink url="&commit_baseurl;6afcab6ac">&sect;</ulink>
        <ulink url="&commit_baseurl;9aa58d48f">&sect;</ulink>
        <ulink url="&commit_baseurl;3cf2f7af7">&sect;</ulink>
        <ulink url="&commit_baseurl;2ea5de296">&sect;</ulink>
        <ulink url="&commit_baseurl;07f7237c2">&sect;</ulink>
        <ulink url="&commit_baseurl;9d0cf5749">&sect;</ulink>
        <ulink url="&commit_baseurl;a3bc631ea">&sect;</ulink>
        <ulink url="&commit_baseurl;2ff5ca86e">&sect;</ulink>
        <ulink url="&commit_baseurl;9e1e9d656">&sect;</ulink>
        <ulink url="&commit_baseurl;96c498d2f">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-16-pgdump">
     <title><link linkend="app-pgdump"><application>pg_dump</application></link></title>

     <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-14 [a563c24c9] Allow pg_dump to include/exclude child tables automatica
-->

      <listitem>
       <para>
        Add <application>pg_dump</application> control of dumping child
        tables and partitions (Gilles Darold)
        <ulink url="&commit_baseurl;a563c24c9">&sect;</ulink>
       </para>

       <para>
        The new options are <option>--table-and-children</option>,
        <option>--exclude-table-and-children</option>, and
        <option>--exclude-table-data-and-children</option>.
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-02-23 [0da243fed] Add LZ4 compression to pg_dump
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-01 [0070b66fe] pg_dump: Use only LZ4 frame format for compression
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-05 [84adc8e20] pg_dump: Add support for zstd compression-->

      <listitem>
       <para>
        Add <application>LZ4</application> and
        <application>Zstandard</application> compression to
        <application>pg_dump</application> (Georgios Kokolatos, Justin
        Pryzby)
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2023-04-06 [2820adf77] Support long distance matching for zstd compression
-->

      <listitem>
       <para>
        Allow <application>pg_dump</application> and <link
        linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
        to use <literal>long</literal> mode for compression (Justin Pryzby)
        <ulink url="&commit_baseurl;0da243fed">&sect;</ulink>
        <ulink url="&commit_baseurl;0070b66fe">&sect;</ulink>
        <ulink url="&commit_baseurl;84adc8e20">&sect;</ulink>
        <ulink url="&commit_baseurl;2820adf77">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-02 [5e73a6048] Switch pg_dump to use compression specifications
-->

      <listitem>
       <para>
        Improve <application>pg_dump</application> to accept a more
        consistent compression syntax (Georgios Kokolatos)
        <ulink url="&commit_baseurl;5e73a6048">&sect;</ulink>
       </para>

       <para>
        Options like <option>--compress=gzip:5</option>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-16-server-apps">
    <title>Server Applications</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us> 2023-03-22
     [3e51b278d] Add "-c name=value" switch to initdb.
-->

     <listitem>
      <para>
       Add <link
       linkend="app-initdb"><application>initdb</application></link>
       option to set server variables for the duration of
       <application>initdb</application> and all future server starts
       (Tom Lane)
       <ulink url="&commit_baseurl;3e51b278d">&sect;</ulink>
      </para>

      <para>
       The option is <option>-c name=value</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-13 [08951a7c9] createuser: Add support for more clause types through ne
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-21 [2dcd1578c] Rename some createuser options.
-->

     <listitem>
      <para>
       Add options to <link
       linkend="app-createuser"><application>createuser</application></link>
       to control more user options (Shinya Kato)
       <ulink url="&commit_baseurl;08951a7c9">&sect;</ulink>
       <ulink url="&commit_baseurl;2dcd1578c">&sect;</ulink>
      </para>

      <para>
       Specifically, the new options control the valid-until date,
       bypassing of row-level security, and role membership.
      </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-21 [2dcd1578c] Rename some createuser options.
Author: Nathan Bossart <nathan@postgresql.org>
2023-05-23 [381d19b3e] Document deprecated createuser option.
-->

     <listitem>
      <para>
       Deprecate <link
       linkend="app-createuser"><application>createuser</application></link>
       option <option>--role</option> (Nathan Bossart)
       <ulink url="&commit_baseurl;2dcd1578c">&sect;</ulink>
       <ulink url="&commit_baseurl;381d19b3e">&sect;</ulink>
      </para>

      <para>
       This option could be easily confused with new
       <application>createuser</application> role membership options,
       so option <option>--member-of</option> has been added with the
       same functionality.  The <option>--role</option> option can still
       be used.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-07-31 [7781f4e3e] Add - -schema and - -exclude-schema options to vacuumdb.
-->

     <listitem>
      <para>
       Allow control of <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       schema processing (Gilles Darold)
       <ulink url="&commit_baseurl;7781f4e3e">&sect;</ulink>
      </para>

      <para>
       These are controlled by options <option>--schema</option> and
       <option>--exclude-schema</option>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-06 [a46a7011b] Add options to control whether VACUUM runs vac_update_da
-->

     <listitem>
      <para>
       Use new <link linkend="sql-vacuum"><command>VACUUM</command></link>
       options to improve the performance of <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       (Tom Lane, Nathan Bossart)
       <ulink url="&commit_baseurl;a46a7011b">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-03-09 [9637badd9] pg_upgrade: copy locale and encoding information to new
-->

     <listitem>
      <para>
       Have <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       set the new cluster's locale and encoding (Jeff Davis)
       <ulink url="&commit_baseurl;9637badd9">&sect;</ulink>
      </para>

      <para>
       This removes the requirement that the new cluster be created with
       the same locale and encoding settings.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-12-16 [746915c68] pg_upgrade: Add - -copy option
-->

     <listitem>
      <para>
       Add <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       option to specify the default transfer mode (Peter Eisentraut)
       <ulink url="&commit_baseurl;746915c68">&sect;</ulink>
      </para>

      <para>
       The option is <option>--copy</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-11-30 [d18655cc0] Refactor code parsing compression option values (-Z/- -co
-->

     <listitem>
      <para>
       Improve <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       to accept numeric compression options (Georgios Kokolatos,
       Michael Paquier)
       <ulink url="&commit_baseurl;d18655cc0">&sect;</ulink>
      </para>

      <para>
       Options like <option>--compress=server-5</option> are now supported.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2023-04-18 [363e8f911] Fix pg_basebackup with in-place tablespaces some more.
-->

     <listitem>
      <para>
       Fix <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       to handle tablespaces stored in the <envar>PGDATA</envar> directory
       (Robert Haas)
       <ulink url="&commit_baseurl;363e8f911">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-12-27 [d497093cb] pg_waldump: Add - -save-fullpage=PATH to save full page i
-->

     <listitem>
      <para>
       Add <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       option <option>--save-fullpage</option> to dump full page images
       (David Christensen)
       <ulink url="&commit_baseurl;d497093cb">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-21 [4c8044c04] pg_waldump: Allow hexadecimal values for -t/- -timeline o
-->

     <listitem>
      <para>
       Allow <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       options <option>-t</option>/<option>--timeline</option> to accept
       hexadecimal values (Peter Eisentraut)
       <ulink url="&commit_baseurl;4c8044c04">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-02-06 [d07c2948b] Add support for progress reporting to pg_verifybackup
-->

     <listitem>
      <para>
       Add support for progress reporting to <link
       linkend="app-pgverifybackup"><application>pg_verifybackup</application></link>
       (Masahiko Sawada)
       <ulink url="&commit_baseurl;d07c2948b">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2023-02-23 [009eeee74] pg_rewind: Fix determining TLI when server was just prom
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2023-02-27 [0a0500207] pg_rewind: Remove notice in docs about running CHECKPOIN
-->

     <listitem>
      <para>
       Allow <link
       linkend="app-pgrewind"><application>pg_rewind</application></link>
       to properly track timeline changes (Heikki Linnakangas)
       <ulink url="&commit_baseurl;009eeee74">&sect;</ulink>
       <ulink url="&commit_baseurl;0a0500207">&sect;</ulink>
      </para>

      <para>
       Previously if <application>pg_rewind</application> was run after
       a timeline switch but before a checkpoint was issued, it might
       incorrectly determine that a rewind was unnecessary.
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2022-09-14 [8b60db774] Handle SIGTERM in pg_receivewal and pg_recvlogical
-->

     <listitem>
      <para>
       Have <link
       linkend="app-pgreceivewal"><application>pg_receivewal</application></link>
       and <link
       linkend="app-pgrecvlogical"><application>pg_recvlogical</application></link>
       cleanly exit on <literal>SIGTERM</literal> (Christoph Berg)
       <ulink url="&commit_baseurl;8b60db774">&sect;</ulink>
      </para>

      <para>
       This signal is often used by <application>systemd</application>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-source-code">
    <title>Source Code</title>

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2023-04-18 [fcb21b3ac] Build ICU support by default.
-->

     <listitem>
      <para>
       Build <acronym>ICU</acronym> support by default (Jeff Davis)
       <ulink url="&commit_baseurl;fcb21b3ac">&sect;</ulink>
      </para>

      <para>
       This removes <link linkend="installation">build
       flag</link> <option>--with-icu</option> and adds flag
       <option>--without-icu</option>.
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-04 [56f2c7b58] Support SSE2 intrinsics where available
-->

     <listitem>
      <para>
       Add support for SSE2 (Streaming <acronym>SIMD</acronym> Extensions
       2) vector operations on x86-64 architectures (John Naylor)
       <ulink url="&commit_baseurl;56f2c7b58">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-08-29 [82739d4a8] Use ARM Advanced SIMD (NEON) intrinsics where available
-->

     <listitem>
      <para>
       Add support for Advanced <acronym>SIMD</acronym> (Single
       Instruction Multiple Data) (<acronym>NEON</acronym>) instructions
       on <acronym>ARM</acronym> architectures (Nathan Bossart)
       <ulink url="&commit_baseurl;82739d4a8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-08-28 [36389a060] Enable RandomizedBaseAddress (ASLR) on Windows with MSVC
-->

     <listitem>
      <para>
       Have <systemitem class="osname">Windows</systemitem>
       binaries built with <productname>MSVC</productname> use
       <literal>RandomizedBaseAddress</literal> (<acronym>ASLR</acronym>)
       (Michael Paquier)
       <ulink url="&commit_baseurl;36389a060">&sect;</ulink>
      </para>

      <para>
       This was already enabled on <productname>MinGW</productname> builds.
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-07-17 [089480c07] Default to hidden visibility for extension libraries whe
Author: Andres Freund <andres@anarazel.de>
2022-07-17 [8cf64d35e] Mark all symbols exported from extension libraries PGDLL
-->

     <listitem>
      <para>
       Prevent extension libraries from exporting their symbols by default
       (Andres Freund, Tom Lane)
       <ulink url="&commit_baseurl;089480c07">&sect;</ulink>
       <ulink url="&commit_baseurl;8cf64d35e">&sect;</ulink>
      </para>

      <para>
       Functions that need to be called from the core backend
       or other extensions must now be explicitly marked
       <literal>PGDLLEXPORT</literal>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-07 [495ed0ef2] Make Windows 10 the minimal runtime requirement for WIN3
-->

     <listitem>
      <para>
       Require <systemitem class="osname">Windows 10</systemitem> or
       newer versions (Michael Paquier, Juan José Santamaría Flecha)
       <ulink url="&commit_baseurl;495ed0ef2">&sect;</ulink>
      </para>

      <para>
       Previously <systemitem class="osname">Windows Vista</systemitem> and
       <systemitem class="osname">Windows XP</systemitem> were supported.
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-14 [4c1532763] Bump minimum Perl version to 5.14
-->

     <listitem>
      <para>
       Require <productname>Perl</productname> version 5.14 or later
       (John Naylor)
       <ulink url="&commit_baseurl;4c1532763">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-09 [b086a47a2] Bump minimum version of Bison to 2.3
-->

     <listitem>
      <para>
       Require <productname>Bison</productname> version 2.3 or later
       (John Naylor)
       <ulink url="&commit_baseurl;b086a47a2">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2022-09-09 [8b878bffa] Bump minimum version of Flex to 2.5.35
-->

     <listitem>
      <para>
       Require <productname>Flex</productname> version 2.5.35 or later
       (John Naylor)
       <ulink url="&commit_baseurl;8b878bffa">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Stephen Frost <sfrost@snowman.net>
2023-04-13 [f7431bca8] Explicitly require MIT Kerberos for GSSAPI
-->

     <listitem>
      <para>
       Require <acronym>MIT</acronym> Kerberos for
       <acronym>GSSAPI</acronym> support (Stephen Frost)
       <ulink url="&commit_baseurl;f7431bca8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-14 [6203583b7] Remove support for Visual Studio 2013
-->

     <listitem>
      <para>
       Remove support for <productname>Visual Studio 2013</productname>
       (Michael Paquier)
       <ulink url="&commit_baseurl;6203583b7">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-08 [9db300ce6] Remove HP-UX port.
-->

     <listitem>
      <para>
       Remove support for <systemitem class="osname">HP-UX</systemitem>
       (Thomas Munro)
       <ulink url="&commit_baseurl;9db300ce6">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-08 [0ad5b48e5] Remove HP/Intel Itanium support.
-->

     <listitem>
      <para>
       Remove support for <productname>HP/Intel Itanium</productname>
       (Thomas Munro)
       <ulink url="&commit_baseurl;0ad5b48e5">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-12 [718aa43a4] Further tidy-up for old CPU architectures.
Author: Thomas Munro <tmunro@postgresql.org>
2022-07-12 [14168d3c6] Doc: Acknowledge historically supported CPUs and OSes.
-->

     <listitem>
      <para>
       Remove support for <productname>M68K</productname>,
       <productname>M88K</productname>, <productname>M32R</productname>,
       and <productname>SuperH</productname> <acronym>CPU</acronym>
       architectures (Thomas Munro)
       <ulink url="&commit_baseurl;718aa43a4">&sect;</ulink>
       <ulink url="&commit_baseurl;14168d3c6">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-17 [98ae2c84a] libpq: Remove code for SCM credential authentication
-->

     <listitem>
      <para>
       Remove <link linkend="libpq"><application>libpq</application></link>
       support for <acronym>SCM</acronym> credential authentication
       (Michael Paquier)
       <ulink url="&commit_baseurl;98ae2c84a">&sect;</ulink>
      </para>

      <para>
       Backend support for this authentication method was removed in
       <productname>PostgresSQL</productname> 9.1.
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-09-21 [e6927270c] meson: Add initial version of meson based build system
-->

     <listitem>
      <para>
       Add <link
       linkend="install-meson"><application>meson</application></link>
       build system (Andres Freund, Nazir Bilal Yavuz, Peter Eisentraut)
       <ulink url="&commit_baseurl;e6927270c">&sect;</ulink>
      </para>

      <para>
       This eventually will replace the <productname>Autoconf</productname>
       and <systemitem class="osname">Windows</systemitem>-based
       <productname>MSVC</productname> build systems.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-10-20 [c8e4030d1] Make finding openssl program a configure or meson option
-->

     <listitem>
      <para>
       Allow control of the location of the
       <application>openssl</application> binary used by the build system
       (Peter Eisentraut)
       <ulink url="&commit_baseurl;c8e4030d1">&sect;</ulink>
      </para>

      <para>
       Make finding <application>openssl</application>
       program a <application>configure</application> or
       <application>meson</application> option
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-12-07 [d3b111e32] Add option to specify segment size in blocks
-->

     <listitem>
      <para>
       Add build option to allow testing of small table segment sizes
       (Andres Freund)
       <ulink url="&commit_baseurl;d3b111e32">&sect;</ulink>
      </para>

      <para>
       The build options are <link
       linkend="configure-option-with-segsize"><option>--with-segsize-blocks</option></link>
       and <option>-Dsegsize_blocks</option>.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-23 [b90f0b574] Add non-destructive modes to pgindent
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-23 [62e1e28bf] Fix pgindent - -show-diff option.
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-24 [124937163] Improve exclude pattern file processing in pgindent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-27 [a1c4cd6f2] Allow multiple - -excludes options in pgindent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-08 [068a243b7] pgindent: more ways to find files to indent
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-12 [dab07e8c6] pgindent: filter files for the - -commit option
Author: Andrew Dunstan <andrew@dunslane.net>
2023-02-13 [b16259b3c] Remove obsolete pgindent options - -code-base and - -build
-->

     <listitem>
      <para>
       Add <link
       linkend="source"><application>pgindent</application></link> options
       (Andrew Dunstan)
       <ulink url="&commit_baseurl;b90f0b574">&sect;</ulink>
       <ulink url="&commit_baseurl;62e1e28bf">&sect;</ulink>
       <ulink url="&commit_baseurl;124937163">&sect;</ulink>
       <ulink url="&commit_baseurl;a1c4cd6f2">&sect;</ulink>
       <ulink url="&commit_baseurl;068a243b7">&sect;</ulink>
       <ulink url="&commit_baseurl;dab07e8c6">&sect;</ulink>
       <ulink url="&commit_baseurl;b16259b3c">&sect;</ulink>
      </para>

      <para>
       The new options are <option>--show-diff</option>,
       <option>--silent-diff</option>, <option>--commit</option>,
       and <option>--help</option>, and allow multiple
       <option>--exclude</option> options.  Also require the typedef file
       to be explicitly specified.  Options <option>--code-base</option>
       and <option>--build</option> were also removed.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-02-12 [4e831f4ce] Import pg_bsd_indent sources.
-->

     <listitem>
      <para>
       Add <link
       linkend="source"><application>pg_bsd_indent</application></link>
       source code to the main tree (Tom Lane)
       <ulink url="&commit_baseurl;4e831f4ce">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2022-10-19 [d1e2a380c] Enhance make_ctags and make_etags.
-->

     <listitem>
      <para>
       Improve <application>make_ctags</application> and
       <application>make_etags</application> (Yugo Nagata)
       <ulink url="&commit_baseurl;d1e2a380c">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2023-03-28 [90189eefc] Save a few bytes in pg_attribute
-->

     <listitem>
      <para>
       Adjust <link
       linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>
       columns for efficiency (Peter Eisentraut)
       <ulink url="&commit_baseurl;90189eefc">&sect;</ulink>
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-16-modules">
    <title>Additional Modules</title>

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-09-02 [ff720a597] Fix planner to consider matches to boolean columns in ex
-->

     <listitem>
      <para>
       Improve use of extension-based indexes on boolean columns (Zongliang
       Quan, Tom Lane)
       <ulink url="&commit_baseurl;ff720a597">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [a290378a3] Add support for Daitch-Mokotoff Soundex in contrib/fuzzy
-->

     <listitem>
      <para>
       Add support for Daitch-Mokotoff Soundex to <link
       linkend="fuzzystrmatch"><application>fuzzystrmatch</application></link>
       (Dag Lem)
       <ulink url="&commit_baseurl;a290378a3">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-07-06 [d4bfe4128] autho_explain: Add GUC to log query parameters
-->

     <listitem>
      <para>
       Allow <link
       linkend="auto-explain"><application>auto_explain</application></link>
       to log values passed to parameterized statements (Dagfinn Ilmari
       Mannsåker)
       <ulink url="&commit_baseurl;d4bfe4128">&sect;</ulink>
      </para>

      <para>
       This affects queries using server-side <link
       linkend="sql-prepare"><command>PREPARE</command></link>/<link
       linkend="sql-execute"><command>EXECUTE</command></link>
       and client-side parse/bind.  Logging is controlled by <link
       linkend="auto-explain-configuration-parameters-log-parameter-max-length"><literal>auto_explain.log_parameter_max_length</literal></link>;
       by default query parameters will be logged with no length
       restriction.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-26 [9d2d9728b] Make auto_explain print the query identifier in verbose
-->

     <listitem>
      <para>
       Have <link
       linkend="auto-explain"><application>auto_explain</application></link>'s
       <option>log_verbose</option> mode honor the value of <link
       linkend="guc-compute-query-id"><varname>compute_query_id</varname></link>
       (Atsushi Torikoshi)
       <ulink url="&commit_baseurl;9d2d9728b">&sect;</ulink>
      </para>

      <para>
       Previously even if
       <varname>compute_query_id</varname> was enabled, <link
       linkend="auto-explain-configuration-parameters-log-verbose"><option>log_verbose</option></link>
       was not showing the query identifier.
      </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2023-01-06 [b1665bf01] Allow hyphens in ltree labels
-->

     <listitem>
      <para>
       Change the maximum length of <link
       linkend="ltree"><application>ltree</application></link> labels
       from 256 to 1000 and allow hyphens (Garen Torikian)
       <ulink url="&commit_baseurl;b1665bf01">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-08 [daa8365a9] Reflect normalization of query strings for utilities in
-->

     <listitem>
      <para>
       Have <link
       linkend="pgstatstatements"><structname>pg_stat_statements</structname></link>
       normalize constants used in utility commands (Michael Paquier)
       <ulink url="&commit_baseurl;daa8365a9">&sect;</ulink>
      </para>

      <para>
       Previously constants appeared instead of placeholders, e.g.,
       <literal>$1</literal>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-01-23 [c31cf1c03] pg_walinspect: Add pg_get_wal_fpi_info()
Author: Michael Paquier <michael@paquier.xyz>
2023-03-10 [9ecb134a9] pg_walinspect: pg_get_wal_fpi_info() -> pg_get_wal_block
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-30 [122376f02] Show record information in pg_get_wal_block_info.
Author: Peter Geoghegan <pg@bowt.ie>
2023-03-31 [df4f3ab51] Add show_data option to pg_get_wal_block_info.
-->

     <listitem>
      <para>
       Add <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       function <link
       linkend="pgwalinspect-funcs-pg-get-wal-block-info"><function>pg_get_wal_block_info()</function></link>
       to report <acronym>WAL</acronym> block information (Michael Paquier,
       Melanie Plageman, Bharath Rupireddy)
       <ulink url="&commit_baseurl;c31cf1c03">&sect;</ulink>
       <ulink url="&commit_baseurl;9ecb134a9">&sect;</ulink>
       <ulink url="&commit_baseurl;122376f02">&sect;</ulink>
       <ulink url="&commit_baseurl;df4f3ab51">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-03-14 [5c1b66280] Rework design of functions in pg_walinspect
-->

     <listitem>
      <para>
       Change how <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       functions <link
       linkend="pgwalinspect-funcs-pg-get-wal-records-info"><function>pg_get_wal_records_info()</function></link>
       and <link
       linkend="pgwalinspect-funcs-pg-get-wal-stats"><function>pg_get_wal_stats()</function></link>
       interpret ending <acronym>LSN</acronym>s (Bharath Rupireddy)
       <ulink url="&commit_baseurl;5c1b66280">&sect;</ulink>
      </para>

      <para>
       Previously ending <acronym>LSN</acronym>s which represent
       nonexistent <acronym>WAL</acronym> locations would generate
       an error, while they will now be interpreted as the end of the
       <acronym>WAL</acronym>.
      </para>
     </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-07 [7d8219a44] Show more detail in heapam rmgr descriptions.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-07 [1c453cfd8] Show more detail in nbtree rmgr descriptions.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-11 [96149a180] Fix Heap rmgr's desc output for infobits arrays.
Author: Peter Geoghegan <pg@bowt.ie>
2023-04-19 [50547a3fa] Fix wal_consistency_checking enhanced desc output.
-->

     <listitem>
      <para>
       Add detailed descriptions of <acronym>WAL</acronym> records in <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       and <link
       linkend="pgwaldump"><application>pg_waldump</application></link>
       (Melanie Plageman, Peter Geoghegan)
       <ulink url="&commit_baseurl;7d8219a44">&sect;</ulink>
       <ulink url="&commit_baseurl;1c453cfd8">&sect;</ulink>
       <ulink url="&commit_baseurl;96149a180">&sect;</ulink>
       <ulink url="&commit_baseurl;50547a3fa">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-02 [1fd3dd204] Add bt_multi_page_stats() function to contrib/pageinspec
-->

     <listitem>
      <para>
       Add <link
       linkend="pageinspect"><application>pageinspect</application></link>
       function <link
       linkend="pageinspect-b-tree-funcs"><function>bt_multi_page_stats()</function></link>
       to report statistics on multiple pages (Hamid Akhtar)
       <ulink url="&commit_baseurl;1fd3dd204">&sect;</ulink>
      </para>

      <para>
       This is similar to <function>bt_page_stats()</function> except it
       can report on a range of pages.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-01-02 [1fd3dd204] Add bt_multi_page_stats() function to contrib/pageinspec
-->

     <listitem>
      <para>
       Add empty range output column to <link
       linkend="pageinspect"><application>pageinspect</application></link>
       function <link
       linkend="pageinspect-brin-funcs"><function>brin_page_items()</function></link>
       (Tomas Vondra)
       <ulink url="&commit_baseurl;1fd3dd204">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-02-17 [35739b87d] Redesign archive modules
-->

     <listitem>
      <para>
       Redesign archive modules to be more flexible (Nathan Bossart)
       <ulink url="&commit_baseurl;35739b87d">&sect;</ulink>
      </para>

      <para>
       Initialization changes will require modules written for older
       versions of Postgres to be updated.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2023-04-06 [1d477a907] Fix row tracking in pg_stat_statements with extended que
-->

     <listitem>
      <para>
       Correct inaccurate <link
       linkend="pgstatstatements"><application>pg_stat_statements</application></link>
       row tracking extended query protocol statements (Sami Imseih)
       <ulink url="&commit_baseurl;1d477a907">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-04-07 [f3fa31327] Add pg_buffercache_usage_counts() to contrib/pg_bufferca
-->

     <listitem>
      <para>
       Add <link
       linkend="pgbuffercache"><application>pg_buffercache</application></link>
       function <function>pg_buffercache_usage_counts()</function> to
       report usage totals (Nathan Bossart)
       <ulink url="&commit_baseurl;f3fa31327">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-10-13 [2589434ae] pg_buffercache: Add pg_buffercache_summary()
-->

     <listitem>
      <para>
       Add <link
       linkend="pgbuffercache"><application>pg_buffercache</application></link>
       function <function>pg_buffercache_summary()</function> to report
       summarized buffer statistics (Melih Mutlu)
       <ulink url="&commit_baseurl;2589434ae">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-20 [72a5b1fc8] Add @extschema:name@ and no_relocate options to extensio
-->

     <listitem>
      <para>
       Allow the schemas of required extensions to be
       referenced in extension scripts using the new syntax
       <literal>@extschema:referenced_extension_name@</literal>
       (Regina Obe)
       <ulink url="&commit_baseurl;72a5b1fc8">&sect;</ulink>
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2023-03-20 [72a5b1fc8] Add @extschema:name@ and no_relocate options to extensio
-->

     <listitem>
      <para>
       Allow required extensions to
       be marked as non-relocatable using <link
       linkend="extend-extensions-files-no-relocate"><literal>no_relocate</literal></link>
       (Regina Obe)
       <ulink url="&commit_baseurl;72a5b1fc8">&sect;</ulink>
      </para>

      <para>
       This allows <literal>@extschema:referenced_extension_name@</literal>
       to be treated as a constant for the lifetime of the extension.
      </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-16-pgfdw">
     <title><link linkend="postgres-fdw"><application>postgres_fdw</application></link></title>

     <itemizedlist>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2023-04-06 [983ec2300] postgres_fdw: Add support for parallel abort.
-->

      <listitem>
       <para>
        Allow <application>postgres_fdw</application> to do aborts in
        parallel (Etsuro Fujita)
        <ulink url="&commit_baseurl;983ec2300">&sect;</ulink>
       </para>

       <para>
        This is enabled with
        <application>postgres_fdw</application> option <link
        linkend="postgres-fdw-options-transaction-management"><option>parallel_abort</option></link>.
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-12-30 [8ad51b5f4] Sample postgres_fdw tables remotely during ANALYZE
-->

      <listitem>
       <para>
        Make <link linkend="sql-analyze"><command>ANALYZE</command></link>
        on foreign <application>postgres_fdw</application> tables more
        efficient (Tomas Vondra)
        <ulink url="&commit_baseurl;8ad51b5f4">&sect;</ulink>
       </para>

       <para>
        The <application>postgres_fdw</application> option <link
        linkend="postgres-fdw-options-cost-estimation"><option>analyze_sampling</option></link>
        controls the sampling method.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-07-17 [31e5b5029] postgres_fdw: be more wary about shippability of reg* co
-->

      <listitem>
       <para>
        Restrict shipment of <link
        linkend="datatype-oid"><type>reg</type></link>* type constants
        in <application>postgres_fdw</application> to those referencing
        built-in objects or extensions marked as shippable (Tom Lane)
        <ulink url="&commit_baseurl;31e5b5029">&sect;</ulink>
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2023-01-23 [e4602483e] dblink, postgres_fdw: Handle interrupts during connectio
-->

      <listitem>
       <para>
        Have <application>postgres_fdw</application> and <link
        linkend="dblink"><application>dblink</application></link> handle
        interrupts during connection establishment (Andres Freund)
        <ulink url="&commit_baseurl;e4602483e">&sect;</ulink>
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-16-acknowledgements">
   <title>Acknowledgments</title>

   <para>
    The following individuals (in alphabetical order) have contributed
    to this release as patch authors, committers, reviewers, testers,
    or reporters of issues.
   </para>

   <simplelist>
    <member>Abhijit Menon-Sen</member>
    <member>Adam Mackler</member>
    <member>Adrian Klaver</member>
    <member>Ahsan Hadi</member>
    <member>Ajin Cherian</member>
    <member>Ajit Awekar</member>
    <member>Alan Hodgson</member>
    <member>Aleksander Alekseev</member>
    <member>Alex Denman</member>
    <member>Alex Kozhemyakin</member>
    <member>Alexander Korolev</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Pyhalov</member>
    <member>Alexey Borzov</member>
    <member>Alexey Ermakov</member>
    <member>Alexey Makhmutov</member>
    <member>Álvaro Herrera</member>
    <member>Amit Kapila</member>
    <member>Amit Khandekar</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Anastasia Lubennikova</member>
    <member>Anban Company</member>
    <member>Andreas Dijkman</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Scherbaum</member>
    <member>Andrei Zubkov</member>
    <member>Andres Freund</member>
    <member>Andrew Alsup</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Gierth</member>
    <member>Andrew Kesper</member>
    <member>Andrey Borodin</member>
    <member>Andrey Lepikhov</member>
    <member>Andrey Sokolov</member>
    <member>Ankit Kumar Pandey</member>
    <member>Ante Kresic</member>
    <member>Anton Melnikov</member>
    <member>Anton Sidyakin</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Arne Roland</member>
    <member>Artem Anisimov</member>
    <member>Arthur Zakirov</member>
    <member>Ashutosh Bapat</member>
    <member>Ashutosh Sharma</member>
    <member>Asim Praveen</member>
    <member>Atsushi Torikoshi</member>
    <member>Ayaki Tachikake</member>
    <member>Balazs Szilfai</member>
    <member>Benoit Lobréau</member>
    <member>Bernd Helmle</member>
    <member>Bertrand Drouvot</member>
    <member>Bharath Rupireddy</member>
    <member>Bilva Sanaba</member>
    <member>Bob Krier</member>
    <member>Boris Zentner</member>
    <member>Brad Nicholson</member>
    <member>Brar Piening</member>
    <member>Bruce Momjian</member>
    <member>Bruno da Silva</member>
    <member>Carl Sopchak</member>
    <member>Cary Huang</member>
    <member>Changhong Fei</member>
    <member>Chris Travers</member>
    <member>Christoph Berg</member>
    <member>Christophe Pettus</member>
    <member>Corey Huinker</member>
    <member>Craig Ringer</member>
    <member>Curt Kolovson</member>
    <member>Dag Lem</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Watzinger</member>
    <member>Daniel Westermann</member>
    <member>Daniele Varrazzo</member>
    <member>Daniil Anisimov</member>
    <member>Danny Shemesh</member>
    <member>Dave Page</member>
    <member>David Christensen</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Gilman</member>
    <member>David Kimura</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Turon</member>
    <member>David Zhang</member>
    <member>Davinder Singh</member>
    <member>Dean Rasheed</member>
    <member>Denis Laxalde</member>
    <member>Dilip Kumar</member>
    <member>Dimos Stamatakis</member>
    <member>Dmitriy Kuzmin</member>
    <member>Dmitry Astapov</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Koval</member>
    <member>Dong Wook Lee</member>
    <member>Dongming Liu</member>
    <member>Drew DeVault</member>
    <member>Duncan Sands</member>
    <member>Ed Maste</member>
    <member>Egor Chindyaskin</member>
    <member>Ekaterina Kiryanova</member>
    <member>Elena Indrupskaya</member>
    <member>Emmanuel Quincerot</member>
    <member>Eric Mutta</member>
    <member>Erik Rijkers</member>
    <member>Erki Eessaar</member>
    <member>Erwin Brandstetter</member>
    <member>Etsuro Fujita</member>
    <member>Eugeny Zhuzhnev</member>
    <member>Euler Taveira</member>
    <member>Evan Jones</member>
    <member>Evgeny Morozov</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Farias de Oliveira</member>
    <member>Florin Irion</member>
    <member>Franz-Josef Färber</member>
    <member>Garen Torikian</member>
    <member>Georgios Kokolatos</member>
    <member>Gilles Darold</member>
    <member>Greg Stark</member>
    <member>Guillaume Lelarge</member>
    <member>Gunnar Bluth</member>
    <member>Gunnar Morling</member>
    <member>Gurjeet Singh</member>
    <member>Haiyang Wang</member>
    <member>Haiying Tang</member>
    <member>Hamid Akhtar</member>
    <member>Hans Buschmann</member>
    <member>Hao Wu</member>
    <member>Hayato Kuroda</member>
    <member>Heath Lord</member>
    <member>Heikki Linnakangas</member>
    <member>Himanshu Upadhyaya</member>
    <member>Hisahiro Kauchi</member>
    <member>Hongyu Song</member>
    <member>Hubert Lubaczewski</member>
    <member>Hung Nguyen</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Ilya Gladyshev</member>
    <member>Ilya Nenashev</member>
    <member>Isaac Morland</member>
    <member>Israel Barth Rubio</member>
    <member>Jacob Champion</member>
    <member>Jacob Speidel</member>
    <member>Jaime Casanova</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Inform</member>
    <member>James Vanns</member>
    <member>Jan Wieck</member>
    <member>Japin Li</member>
    <member>Jeevan Ladhe</member>
    <member>Jeff Davis</member>
    <member>Jeff Janes</member>
    <member>Jehan-Guillaume de Rorthais</member>
    <member>Jelte Fennema</member>
    <member>Jian He</member>
    <member>Jim Jones</member>
    <member>Jinbao Chen</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Naylor</member>
    <member>Jonathan Katz</member>
    <member>Josef Simanek</member>
    <member>Joseph Koshakow</member>
    <member>Juan José Santamaría Flecha</member>
    <member>Julien Rouhaud</member>
    <member>Julien Roze</member>
    <member>Junwang Zhao</member>
    <member>Justin Pryzby</member>
    <member>Justin Zhang</member>
    <member>Karina Litskevich</member>
    <member>Karl O. Pinc</member>
    <member>Keisuke Kuroda</member>
    <member>Ken Kato</member>
    <member>Kevin McKibbin</member>
    <member>Kieran McCusker</member>
    <member>Kirk Wolak</member>
    <member>Konstantin Knizhnik</member>
    <member>Koshi Shibagaki</member>
    <member>Kotaro Kawamoto</member>
    <member>Kui Liu</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lakshmi Narayanan Sreethar</member>
    <member>Laurence Parry</member>
    <member>Laurenz Albe</member>
    <member>Luca Ferrari</member>
    <member>Lukas Fittl</member>
    <member>Maciek Sakrejda</member>
    <member>Magnus Hagander</member>
    <member>Maja Zaloznik</member>
    <member>Marcel Hofstetter</member>
    <member>Marina Polyakova</member>
    <member>Mark Dilger</member>
    <member>Marko Tiikkaja</member>
    <member>Markus Winand</member>
    <member>Martijn van Oosterhout</member>
    <member>Martin Jurca</member>
    <member>Martin Kalcher</member>
    <member>Mary Xu</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masao Fujii</member>
    <member>Mason Sharp</member>
    <member>Matheus Alcantara</member>
    <member>Mats Kindahl</member>
    <member>Matthias van de Meent</member>
    <member>Matthijs van der Vleuten</member>
    <member>Maxim Orlov</member>
    <member>Maxim Yablokov</member>
    <member>Mehmet Emin Karakas</member>
    <member>Melanie Plageman</member>
    <member>Melih Mutlu</member>
    <member>Micah Gates</member>
    <member>Michael Banck</member>
    <member>Michael Paquier</member>
    <member>Michail Nikolaev</member>
    <member>Michel Pelletier</member>
    <member>Mike Oh</member>
    <member>Mikhail Gribkov</member>
    <member>Mingli Zhang</member>
    <member>Miroslav Bendik</member>
    <member>Mitsuru Hinata</member>
    <member>Myo Wai Thant</member>
    <member>Naeem Akhter</member>
    <member>Naoki Okano</member>
    <member>Nathan Bossart</member>
    <member>Nazir Bilal Yavuz</member>
    <member>Neha Sharma</member>
    <member>Nick Babadzhanian</member>
    <member>Nicola Contu</member>
    <member>Nikhil Shetty</member>
    <member>Nikita Glukhov</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nishant Sharma</member>
    <member>Nitin Jadhav</member>
    <member>Noah Misch</member>
    <member>Noboru Saito</member>
    <member>Noriyoshi Shinoda</member>
    <member>Nuko Yokohama</member>
    <member>Oleg Bartunov</member>
    <member>Oleg Tselebrovskiy</member>
    <member>Olly Betts</member>
    <member>Onder Kalaci</member>
    <member>Onur Tirtir</member>
    <member>Pablo Federico</member>
    <member>Palle Girgensohn</member>
    <member>Paul Guo</member>
    <member>Paul Jungwirth</member>
    <member>Paul Ramsey</member>
    <member>Pavel Borisov</member>
    <member>Pavel Kulakov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Stehule</member>
    <member>Peifeng Qiu</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Smith</member>
    <member>Phil Florent</member>
    <member>Philippe Godfrin</member>
    <member>Platon Pronko</member>
    <member>Przemyslaw Sztoch</member>
    <member>Rachel Heaton</member>
    <member>Ranier Vilela</member>
    <member>Regina Obe</member>
    <member>Reid Thompson</member>
    <member>Reiner Peterke</member>
    <member>Richard Guo</member>
    <member>Riivo Kolka</member>
    <member>Rishu Bagga</member>
    <member>Robert Haas</member>
    <member>Robert Sjöblom</member>
    <member>Robert Treat</member>
    <member>Roberto Mello</member>
    <member>Robins Tharakan</member>
    <member>Roman Zharkov</member>
    <member>Ronan Dunklau</member>
    <member>Rushabh Lathia</member>
    <member>Ryo Matsumura</member>
    <member>Samay Sharma</member>
    <member>Sami Imseih</member>
    <member>Sandeep Thakkar</member>
    <member>Sandro Santilli</member>
    <member>Sebastien Flaesch</member>
    <member>Sébastien Lardière</member>
    <member>Sehrope Sarkuni</member>
    <member>Sergey Belyashov</member>
    <member>Sergey Pankov</member>
    <member>Sergey Shinderuk</member>
    <member>Shi Yu</member>
    <member>Shinya Kato</member>
    <member>Sho Kato</member>
    <member>Shruthi Gowda</member>
    <member>Shveta Mallik</member>
    <member>Simon Riggs</member>
    <member>Sindy Senorita</member>
    <member>Sirisha Chamarthi</member>
    <member>Sravan Kumar</member>
    <member>Stéphane Tachoires</member>
    <member>Stephen Frost</member>
    <member>Steve Chavez</member>
    <member>Stone Tickle</member>
    <member>Sven Klemm</member>
    <member>Takamichi Osumi</member>
    <member>Takeshi Ideriha</member>
    <member>Tatsuhiro Nakamori</member>
    <member>Tatsuo Ishii</member>
    <member>Teja Mupparti</member>
    <member>Tender Wang</member>
    <member>Teodor Sigaev</member>
    <member>Thiago Nunes</member>
    <member>Thom Brown</member>
    <member>Thomas Habets</member>
    <member>Thomas Mc Kay</member>
    <member>Thomas Munro</member>
    <member>Tim Carey-Smith</member>
    <member>Tim Field</member>
    <member>Timo Stolz</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tor Erik Linnerud</member>
    <member>Torsten Förtsch</member>
    <member>Tristan Partin</member>
    <member>Troy Frericks</member>
    <member>Tushar Ahuja</member>
    <member>Valerie Woolard</member>
    <member>Vibhor Kumar</member>
    <member>Victor Spirin</member>
    <member>Victoria Shepard</member>
    <member>Vignesh C</member>
    <member>Vik Fearing</member>
    <member>Vitaly Burovoy</member>
    <member>Vitaly Davydov</member>
    <member>Wang Wei</member>
    <member>Wenjing Zeng</member>
    <member>Whale Song</member>
    <member>Will Mortensen</member>
    <member>Wolfgang Walther</member>
    <member>Xin Wen</member>
    <member>Xing Guo</member>
    <member>Xingwang Xu</member>
    <member>XueJing Zhao</member>
    <member>Yanliang Lei</member>
    <member>Youmiu Mo</member>
    <member>Yugo Nagata</member>
    <member>Yura Sokolov</member>
    <member>Yuta Katsuragi</member>
    <member>Zhen Mingyang</member>
    <member>Zheng Li</member>
    <member>Zhihong Yu</member>
    <member>Zhijie Hou</member>
    <member>Zongliang Quan</member>
    <member>Zuming Jiang</member>
   </simplelist>
  </sect2>

 </sect1>
