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

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

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

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

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

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

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

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

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

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

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

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

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

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

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

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

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

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

  </sect2>

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

   <title>Migration to Version 17</title>

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

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

   <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   </itemizedlist>

  </sect2>

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

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

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

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

    </itemizedlist>

   </sect3>

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


    <itemizedlist>

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

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

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

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

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

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

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

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

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

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

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

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

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

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

   </sect3>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      </itemizedlist>

    </sect3>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </itemizedlist>

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

     <itemizedlist>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-17-acknowledgements">
   <title>Acknowledgments</title>

   <para>
    The following individuals (in alphabetical order) have contributed
    to this release as patch authors, committers, reviewers, testers,
    or reporters of issues.
   </para>

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

 </sect1>
