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

 <sect1 id="release-14-1">
  <title>Release 14.1</title>

  <formalpara>
  <title>Release date:</title>
  <para>2021-11-11</para>
  </formalpara>

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

  <sect2>
   <title>Migration to Version 14.1</title>

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

   <para>
    However, note that installations using physical replication should
    update standby servers before the primary server, as explained in
    the third changelog entry below.
   </para>

   <para>
    Also, several bugs have been found that may have resulted in corrupted
    indexes, as explained in the next several changelog entries.  If any
    of those cases apply to you, it's recommended to reindex
    possibly-affected indexes after updating.
   </para>
  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [28e241255] 2021-11-08 11:01:43 -0500
Branch: REL_14_STABLE [9d5a76b8d] 2021-11-08 11:01:43 -0500
Branch: REL_13_STABLE [e92ed93e8] 2021-11-08 11:01:43 -0500
Branch: REL_12_STABLE [d1bd26740] 2021-11-08 11:01:43 -0500
Branch: REL_11_STABLE [9394fb828] 2021-11-08 11:01:43 -0500
Branch: REL_10_STABLE [9ae0f1112] 2021-11-08 11:01:43 -0500
Branch: REL9_6_STABLE [046c2c846] 2021-11-08 11:01:43 -0500
-->
     <para>
      Make the server reject extraneous data after an SSL or GSS
      encryption handshake (Tom Lane)
     </para>

     <para>
      A man-in-the-middle with the ability to inject data into the TCP
      connection could stuff some cleartext data into the start of a
      supposedly encryption-protected database session.
      This could be abused to send faked SQL commands to the server,
      although that would only work if the server did not demand any
      authentication data.  (However, a server relying on SSL certificate
      authentication might well not do so.)
     </para>

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [160c02588] 2021-11-08 11:14:56 -0500
Branch: REL_14_STABLE [30547d791] 2021-11-08 11:14:56 -0500
Branch: REL_13_STABLE [844b31692] 2021-11-08 11:14:56 -0500
Branch: REL_12_STABLE [36bb95ef2] 2021-11-08 11:14:56 -0500
Branch: REL_11_STABLE [a021a1d2a] 2021-11-08 11:14:56 -0500
Branch: REL_10_STABLE [e65d9c8cd] 2021-11-08 11:14:56 -0500
Branch: REL9_6_STABLE [d83cdfdca] 2021-11-08 11:14:57 -0500
-->
     <para>
      Make <application>libpq</application> reject extraneous data after
      an SSL or GSS encryption handshake (Tom Lane)
     </para>

     <para>
      A man-in-the-middle with the ability to inject data into the TCP
      connection could stuff some cleartext data into the start of a
      supposedly encryption-protected database session.
      This could probably be abused to inject faked responses to the
      client's first few queries, although other details of libpq's
      behavior make that harder than it sounds.  A different line of
      attack is to exfiltrate the client's password, or other sensitive
      data that might be sent early in the session.  That has been shown
      to be possible with a server vulnerable to CVE-2021-23214.
     </para>

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

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [ff9f111bc] 2021-09-29 11:21:51 -0300
Branch: REL_14_STABLE [64a8687a6] 2021-09-29 11:41:01 -0300
Branch: REL_13_STABLE [1d97d3d08] 2021-09-29 11:21:51 -0300
Branch: REL_12_STABLE [1df0a914d] 2021-09-29 11:21:51 -0300
Branch: REL_11_STABLE [cfedb279a] 2021-09-29 11:21:51 -0300
Branch: REL_10_STABLE [d9fe2cc7d] 2021-09-29 11:21:51 -0300
Branch: REL9_6_STABLE [148c6ee3b] 2021-09-29 11:21:51 -0300
Branch: master [d03bca4d7] 2021-09-30 10:01:03 -0300
Branch: REL_14_STABLE [e3731bac5] 2021-09-30 10:01:03 -0300
Branch: master [d186d233d] 2021-10-01 18:03:11 -0300
Branch: REL_14_STABLE [0ce67bce0] 2021-10-01 18:03:11 -0300
Branch: master [010e52337] 2021-10-13 18:49:27 -0300
Branch: REL_14_STABLE [79c7fe1af] 2021-10-13 18:49:27 -0300
Branch: REL_13_STABLE [2cdf97fd1] 2021-10-13 18:49:27 -0300
Branch: REL_12_STABLE [4b7abbe48] 2021-10-13 18:49:27 -0300
Branch: REL_11_STABLE [6287b8e19] 2021-10-13 18:49:27 -0300
Branch: REL_10_STABLE [41cce2326] 2021-10-13 18:49:27 -0300
Branch: REL9_6_STABLE [5ec87619b] 2021-10-13 18:49:27 -0300
Branch: REL_14_STABLE [494ec0037] 2021-11-01 13:07:23 -0300
Branch: REL_13_STABLE [17227825c] 2021-11-01 13:07:23 -0300
Branch: REL_12_STABLE [da782bc93] 2021-11-01 13:07:23 -0300
Branch: REL_11_STABLE [5ef210047] 2021-11-01 13:07:23 -0300
Branch: REL_10_STABLE [656312c2a] 2021-11-01 13:07:23 -0300
Branch: REL9_6_STABLE [99197701e] 2021-11-01 13:07:23 -0300
-->
     <para>
      Fix physical replication for cases where the primary crashes
      after shipping a WAL segment that ends with a partial WAL record
      (&Aacute;lvaro Herrera)
     </para>

     <para>
      If the primary did not survive long enough to finish writing the
      rest of the incomplete WAL record, then the previous crash-recovery
      logic had it back up and overwrite WAL starting from the beginning
      of the incomplete WAL record.  This is problematic since standby
      servers may already have copies of that WAL segment.  They will then
      see an inconsistent next segment, and will not be able to recover
      without manual intervention.  To fix, do not back up over a WAL
      segment boundary when restarting after a crash.  Instead write a new
      type of WAL record at the start of the next WAL segment, informing
      readers that the incomplete WAL record will never be finished and
      must be disregarded.
     </para>

     <para>
      When applying this update, it's best to update standby servers
      before the primary, so that they will be ready to handle this new
      WAL record type if the primary happens to crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [9bacec15b] 2021-11-02 12:06:17 -0700
Branch: REL_14_STABLE [61a86ed55] 2021-11-02 12:06:16 -0700
-->
     <para>
      Ensure that parallel <command>VACUUM</command> doesn't miss any
      indexes (Peter Geoghegan, Masahiko Sawada)
     </para>

     <para>
      A parallel <command>VACUUM</command> would fail to process indexes
      that are below the <varname>min_parallel_index_scan_size</varname>
      cutoff, if the table also has at least two indexes that are above
      that size.  This could result in those indexes becoming corrupt,
      since they'd still contain references to any heap entries removed by
      the <command>VACUUM</command>; subsequent queries using such indexes
      would be likely to return rows they shouldn't.
      This problem does not affect autovacuum, since it doesn't use
      parallel vacuuming.  However, it is advisable to reindex any
      manually-vacuumed tables that have the right mix of index sizes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [3cd9c3b92] 2021-10-23 18:36:38 -0700
Branch: REL_14_STABLE [a5b9a0000] 2021-10-23 18:36:42 -0700
Branch: REL_13_STABLE [a9d0a5409] 2021-10-23 18:36:42 -0700
Branch: REL_12_STABLE [fe5d44a1d] 2021-10-23 18:36:42 -0700
Branch: REL_11_STABLE [df6158139] 2021-10-23 18:36:43 -0700
Branch: REL_10_STABLE [560124a37] 2021-10-23 18:36:43 -0700
Branch: REL9_6_STABLE [518493243] 2021-10-23 18:36:43 -0700
-->
     <para>
      Fix <command>CREATE INDEX CONCURRENTLY</command> to wait for
      the latest prepared transactions (Andrey Borodin)
     </para>

     <para>
      Rows inserted by just-prepared transactions might be omitted from
      the new index, causing queries relying on the index to miss such
      rows.  The previous fix for this type of problem failed to account
      for <command>PREPARE TRANSACTION</command> commands that were still
      in progress when <command>CREATE INDEX CONCURRENTLY</command>
      checked for them.  As before, in installations that have enabled
      prepared transactions (<varname>max_prepared_transactions</varname>
      &gt; 0), it's recommended to reindex any concurrently-built indexes
      in case this problem occurred when they were built.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [fdd965d07] 2021-10-23 18:36:38 -0700
Branch: REL_14_STABLE [dde966efb] 2021-10-23 18:36:42 -0700
Branch: REL_13_STABLE [2e33b4359] 2021-10-23 18:36:42 -0700
Branch: REL_12_STABLE [0869e53d3] 2021-10-23 18:36:42 -0700
Branch: REL_11_STABLE [5141e471b] 2021-10-23 18:36:43 -0700
Branch: REL_10_STABLE [db86746fd] 2021-10-23 18:36:43 -0700
Branch: REL9_6_STABLE [e428699cb] 2021-10-23 18:36:43 -0700
-->
     <para>
      Avoid race condition that can cause backends to fail to add entries
      for new rows to an index being built concurrently (Noah Misch,
      Andrey Borodin)
     </para>

     <para>
      While it's apparently rare in the field, this case could potentially
      affect any index built or reindexed with
      the <literal>CONCURRENTLY</literal> option.  It is recommended to
      reindex any such indexes to make sure they are correct.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [add5cf28d] 2021-11-01 11:38:23 +0900
Branch: REL_14_STABLE [f255de9a4] 2021-11-01 11:40:22 +0900
Branch: REL_13_STABLE [77f7909a4] 2021-11-01 11:40:29 +0900
-->
     <para>
      Fix <command>REINDEX CONCURRENTLY</command> to preserve operator
      class parameters that were attached to the target index
      (Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [98ec35b0b] 2021-10-21 10:39:01 +0900
Branch: REL_14_STABLE [5040c9641] 2021-10-21 10:39:07 +0900
-->
     <para>
      Fix incorrect creation of shared dependencies when cloning a
      database that contains non-builtin objects (Aleksander Alekseev)
     </para>

     <para>
      The effects of this error are probably limited in practice.  In
      principle, it could allow a role to be dropped while it still owns
      objects; but most installations would never want to drop a role
      that had been used for objects they'd added
      to <literal>template1</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [d6f1e16c8] 2021-10-18 19:08:25 -0300
Branch: REL_14_STABLE [72d064217] 2021-10-18 19:08:25 -0300
Branch: REL_13_STABLE [fe35528a5] 2021-10-18 19:08:25 -0300
Branch: REL_12_STABLE [8b26be8a3] 2021-10-18 19:08:25 -0300
Branch: REL_11_STABLE [b703b7d31] 2021-10-18 19:08:25 -0300
Branch: REL_10_STABLE [d36bdc4e9] 2021-10-18 19:08:25 -0300
-->
     <para>
      Ensure that the relation cache is invalidated for a table being
      attached to or detached from a partitioned table (Amit Langote,
      &Aacute;lvaro Herrera)
     </para>

     <para>
      This oversight could allow misbehavior of subsequent inserts/updates
      addressed directly to the partition, but only in currently-existing
      sessions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5b0e7fe1d] 2021-10-13 16:38:07 +0900
Branch: REL_14_STABLE [922e15c47] 2021-10-13 16:38:15 +0900
-->
     <para>
      Fix corruption of parse tree while creating a range type (Alex
      Kozhemyakin, Sergey Shinderuk)
     </para>

     <para>
      <command>CREATE TYPE</command> incorrectly freed an element of the
      parse tree, which could cause problems for a later event trigger, or
      if the <command>CREATE TYPE</command> command was stored in the plan
      cache and used again later.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3e310d837] 2021-10-19 13:54:45 -0400
Branch: REL_14_STABLE [04dae19f4] 2021-10-19 13:54:45 -0400
Branch: REL_13_STABLE [30e61a8cd] 2021-10-19 13:54:46 -0400
Branch: REL_12_STABLE [ae7b1dd59] 2021-10-19 13:54:46 -0400
Branch: REL_11_STABLE [0d08c279b] 2021-10-19 13:54:46 -0400
-->
     <para>
      Fix updates of element fields in arrays of domain over composite
      (Tom Lane)
     </para>

     <para>
      A command such as <literal>UPDATE tab SET fld[1].subfld =
      val</literal> failed if the array's elements were domains rather
      than plain composites.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [c6bc655ee] 2021-10-01 18:29:18 -0300
Branch: REL_14_STABLE [20047609d] 2021-10-01 18:29:18 -0300
Branch: REL_13_STABLE [170206e45] 2021-10-01 18:29:18 -0300
-->
     <para>
      Disallow the combination of <literal>FETCH FIRST WITH TIES</literal>
      and <literal>FOR UPDATE SKIP LOCKED</literal> (David Christensen)
     </para>

     <para>
      <literal>FETCH FIRST WITH TIES</literal> necessarily fetches one
      more row than requested, since it cannot stop until it finds a row
      that is not a tie.  In our current implementation,
      if <literal>FOR UPDATE</literal> is used then that row will also get
      locked even though it is not returned.  That results in undesirable
      behavior if the <literal>SKIP LOCKED</literal> option is specified.
      It's difficult to change this without introducing a different set of
      undesirable behaviors, so for now, forbid the combination.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [fdd885714] 2021-10-19 11:03:52 +0900
Branch: REL_14_STABLE [b1b797ec7] 2021-10-19 11:04:00 +0900
Branch: REL_13_STABLE [85dc4292a] 2021-10-19 11:04:04 +0900
-->
     <para>
      Disallow <literal>ALTER INDEX index ALTER COLUMN col SET
      (options)</literal> (Nathan Bossart, Michael Paquier)
     </para>

     <para>
      While the parser accepted this, it's undocumented and doesn't
      actually work.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [e54a758d2] 2021-10-06 13:16:51 +0100
Branch: REL_14_STABLE [8e26b868d] 2021-10-06 13:19:25 +0100
Branch: REL_13_STABLE [9ab94ccb1] 2021-10-06 13:20:23 +0100
Branch: REL_12_STABLE [676218034] 2021-10-06 13:21:27 +0100
Branch: REL_11_STABLE [b2a0f1673] 2021-10-06 13:22:33 +0100
Branch: REL_10_STABLE [4853baaac] 2021-10-06 13:23:13 +0100
Branch: REL9_6_STABLE [0de8f9bc8] 2021-10-06 13:24:22 +0100
-->
     <para>
      Fix corner-case loss of precision in
      numeric <function>power()</function> (Dean Rasheed)
     </para>

     <para>
      The result could be inaccurate when the first argument is very close
      to 1.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [39a310567] 2021-11-08 14:40:33 +1300
Branch: REL_14_STABLE [1f194ed6c] 2021-11-08 14:41:13 +1300
-->
     <para>
      Avoid choosing the wrong hash equality operator for Memoize plans
      (David Rowley)
     </para>

     <para>
      This error could result in crashes or incorrect query results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4d5f651f1] 2021-10-14 12:43:55 -0400
Branch: REL_14_STABLE [fd059ac2e] 2021-10-14 12:43:43 -0400
Branch: REL_13_STABLE [fdd6a4d8d] 2021-10-14 12:43:43 -0400
-->
     <para>
      Fix planner error with pulling up subquery expressions into function
      rangetable entries (Tom Lane)
     </para>

     <para>
      If a function in <literal>FROM</literal> laterally references the
      output of some sub-<literal>SELECT</literal> earlier in
      the <literal>FROM</literal> clause, and we are able to flatten that
      sub-<literal>SELECT</literal> into the outer query, the
      expression(s) copied into the function expression were not fully
      processed.  This could lead to crashes at execution.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8c1144ba7] 2021-10-01 14:59:35 -0400
Branch: REL_14_STABLE [a54509bfd] 2021-10-01 14:59:35 -0400
Branch: REL_13_STABLE [7adbe186f] 2021-10-01 14:59:35 -0400
Branch: REL_12_STABLE [334fb8c3d] 2021-10-01 14:59:35 -0400
Branch: REL_11_STABLE [5863d348a] 2021-10-01 14:59:35 -0400
Branch: REL_10_STABLE [f951ea3a2] 2021-10-01 14:59:35 -0400
-->
     <para>
      Avoid using MCV-only statistics to estimate the range of a column
      (Tom Lane)
     </para>

     <para>
      There are corner cases in which <command>ANALYZE</command> will
      build a most-common-values (MCV) list but not a histogram, even
      though the MCV list does not account for all the observed values.
      In such cases, keep the planner from using the MCV list alone to
      estimate the range of column values.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7b5d4c29e] 2021-10-01 11:10:12 -0400
Branch: REL_14_STABLE [e6adaa179] 2021-10-01 11:10:12 -0400
Branch: REL_13_STABLE [04ef2021e] 2021-10-01 11:10:12 -0400
Branch: REL_12_STABLE [cded2c460] 2021-10-01 11:10:12 -0400
Branch: REL_11_STABLE [5abbda985] 2021-10-01 11:10:12 -0400
-->
     <para>
      Fix restoration of a Portal's snapshot inside a subtransaction
      (Bertrand Drouvot)
     </para>

     <para>
      If a procedure commits or rolls back a transaction, and then its
      next significant action is inside a new subtransaction, snapshot
      management went wrong, leading to a dangling pointer and probable
      crash.  A typical example in PL/pgSQL is a <literal>COMMIT</literal>
      immediately followed by a <literal>BEGIN ... EXCEPTION</literal>
      block that performs a query.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [409f9ca44] 2021-10-18 11:55:42 +0900
Branch: REL_14_STABLE [5b353aaff] 2021-10-18 11:56:48 +0900
Branch: REL_13_STABLE [8f4fe8d7f] 2021-10-18 11:56:52 +0900
Branch: REL_12_STABLE [a207b8521] 2021-10-18 11:56:54 +0900
Branch: REL_11_STABLE [506aa1f71] 2021-10-18 11:56:57 +0900
Branch: REL_10_STABLE [d1a6a08df] 2021-10-18 11:57:02 +0900
Branch: REL9_6_STABLE [f49bf8263] 2021-10-18 11:57:07 +0900
-->
     <para>
      Clean up correctly if a transaction fails after exporting its
      snapshot (Dilip Kumar)
     </para>

     <para>
      This oversight would only cause a problem if the same session
      attempted to export a snapshot again.  The most likely scenario for
      that is creation of a replication slot (followed by rollback)
      and then creation of another replication slot.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [05e6e78c1] 2021-11-06 19:13:58 +0300
Branch: REL_14_STABLE [b0f6bd48f] 2021-11-06 19:13:53 +0300
Branch: REL_13_STABLE [e1fee28a0] 2021-11-06 18:34:19 +0300
Branch: REL_12_STABLE [8f779a1a3] 2021-11-06 18:34:21 +0300
Branch: REL_11_STABLE [691c0df73] 2021-11-06 18:34:23 +0300
Branch: REL_10_STABLE [774d00573] 2021-11-06 18:34:26 +0300
Branch: REL9_6_STABLE [7381b79ad] 2021-11-06 18:34:31 +0300
-->
     <para>
      Prevent wraparound of overflowed-subtransaction tracking on standby
      servers (Kyotaro Horiguchi, Alexander Korotkov)
     </para>

     <para>
      This oversight could cause significant performance degradation
      (manifesting as excessive SubtransSLRU traffic) on standby servers.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8a4237908] 2021-10-04 14:05:20 +0900
Branch: REL_14_STABLE [828f7f000] 2021-10-04 14:05:48 +0900
Branch: REL_13_STABLE [194e535a0] 2021-10-04 14:05:52 +0900
Branch: REL_12_STABLE [3c3f118d5] 2021-10-04 14:05:55 +0900
Branch: REL_11_STABLE [0a561d4d0] 2021-10-04 14:05:59 +0900
Branch: REL_10_STABLE [8a6a1fe07] 2021-10-04 14:06:03 +0900
Branch: REL9_6_STABLE [e2b2a9e1c] 2021-10-04 14:06:09 +0900
-->
     <para>
      Ensure that prepared transactions are properly accounted for during
      promotion of a standby server (Michael Paquier, Andres Freund)
     </para>

     <para>
      There was a narrow window where a prepared transaction could be
      omitted from a snapshot taken by a concurrently-running session.
      If that session then used the snapshot to perform data updates,
      erroneous results or data corruption could occur.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [39ae0ef85] 2021-10-11 11:56:52 -0400
Branch: REL_14_STABLE [2c25db32e] 2021-10-11 11:56:52 -0400
-->
     <para>
      Fix <quote>could not find RecursiveUnion</quote> error
      when <command>EXPLAIN</command> tries to print a filter condition
      attached to a WorkTableScan node (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [c2c618ff1] 2021-10-19 19:08:45 -0300
Branch: REL_14_STABLE [3ce3fb2f7] 2021-10-19 19:08:45 -0300
Branch: REL_13_STABLE [842fe6123] 2021-10-19 19:08:45 -0300
Branch: REL_12_STABLE [6c8d1c197] 2021-10-19 19:08:45 -0300
Branch: master [cd124d205] 2021-10-20 13:05:42 -0300
Branch: REL_14_STABLE [718278855] 2021-10-20 13:05:42 -0300
Branch: REL_13_STABLE [a73a3671d] 2021-10-20 13:05:42 -0300
Branch: REL_12_STABLE [3c8c49945] 2021-10-20 13:05:42 -0300
-->
     <para>
      Ensure that the correct lock level is used when renaming a table
      (Nathan Bossart, &Aacute;lvaro Herrera)
     </para>

     <para>
      For historical reasons, <command>ALTER INDEX ... RENAME</command>
      can be applied to any sort of relation.  The lock level required to
      rename an index is lower than that required to rename a table or
      other kind of relation, but the code got this wrong and would use
      the weaker lock level whenever the command is spelled <command>ALTER
      INDEX</command>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [d74b54b3d] 2021-11-05 12:29:35 -0300
Branch: REL_14_STABLE [02e20bb2d] 2021-11-05 12:29:35 -0300
Branch: REL_13_STABLE [bf5cdcfd5] 2021-11-05 12:29:34 -0300
Branch: REL_12_STABLE [3eff168a2] 2021-11-05 12:29:34 -0300
Branch: REL_11_STABLE [92224e470] 2021-11-05 12:29:34 -0300
Branch: REL_10_STABLE [58b600f64] 2021-11-05 12:29:34 -0300
Branch: REL9_6_STABLE [e0eaeafd6] 2021-11-05 12:29:35 -0300
-->
     <para>
      Avoid null-pointer-dereference crash when dropping a role that owns
      objects being dropped concurrently (&Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [6b1b405eb] 2021-11-03 10:52:38 +0200
Branch: REL_14_STABLE [4ebd740cd] 2021-11-03 10:54:33 +0200
Branch: REL_13_STABLE [07070c008] 2021-11-03 10:54:36 +0200
Branch: REL_12_STABLE [11a399f9c] 2021-11-03 10:54:39 +0200
Branch: REL_11_STABLE [6bf00da11] 2021-11-03 10:54:42 +0200
Branch: REL_10_STABLE [7b55bb892] 2021-11-03 11:09:08 +0200
Branch: REL9_6_STABLE [8f32afee0] 2021-11-03 11:15:02 +0200
Branch: master [d5ab0681b] 2021-11-03 19:38:17 +0200
Branch: REL_14_STABLE [f4e3b6271] 2021-11-03 19:41:35 +0200
Branch: REL_13_STABLE [b7299b664] 2021-11-03 19:41:38 +0200
Branch: REL_12_STABLE [7dc9a310e] 2021-11-03 19:41:41 +0200
Branch: REL_11_STABLE [b110af5f7] 2021-11-03 19:41:44 +0200
Branch: REL_10_STABLE [245799d39] 2021-11-03 19:41:46 +0200
Branch: REL9_6_STABLE [71aeaf245] 2021-11-03 19:41:49 +0200
-->
     <para>
      Prevent <quote>snapshot reference leak</quote> warning
      when <function>lo_export()</function> or a related function fails
      (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [01fc65270] 2021-11-02 13:36:47 -0400
Branch: REL_14_STABLE [16a56774f] 2021-11-02 13:36:53 -0400
Branch: REL_13_STABLE [ada667b45] 2021-11-02 13:36:57 -0400
-->
     <para>
      Fix inefficient code generation for CoerceToDomain expression nodes
      (Ranier Vilela)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6301c3ada] 2021-10-31 15:31:29 -0400
Branch: REL_14_STABLE [8424dfced] 2021-10-31 15:31:38 -0400
Branch: REL_13_STABLE [df238aed1] 2021-10-31 15:31:44 -0400
Branch: master [e9d9ba2a4] 2021-11-01 16:24:39 -0400
Branch: REL_14_STABLE [ad87bf355] 2021-11-01 16:24:40 -0400
Branch: REL_13_STABLE [e477642a1] 2021-11-01 16:24:40 -0400
Branch: master [65c6cab13] 2021-11-02 11:31:54 -0400
Branch: REL_14_STABLE [08cfa5981] 2021-11-02 11:31:54 -0400
Branch: REL_13_STABLE [0151af40c] 2021-11-02 11:31:54 -0400
-->
     <para>
      Avoid O(N^2) behavior in some list-manipulation operations
      (Nathan Bossart, Tom Lane)
     </para>

     <para>
      These changes fix slow processing in several scenarios, including:
      when a standby replays a transaction that held many exclusive locks
      on the primary; when many files are due to be unlinked after a
      checkpoint; when hash aggregation involves many batches; and when
      <filename>pg_trgm</filename> extracts indexable conditions from a
      complex regular expression.  Only the first of these scenarios has
      actually been reported from the field, but they all seem like
      plausible consequences of inefficient list deletions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [a5213adf3] 2021-10-27 12:10:47 -0700
Branch: REL_14_STABLE [d078fe83d] 2021-10-27 12:10:45 -0700
Branch: REL_13_STABLE [f8cce4a3d] 2021-10-27 12:10:43 -0700
Branch: master [c2381b510] 2021-10-27 13:09:24 -0700
Branch: REL_14_STABLE [6cac34339] 2021-10-27 13:09:01 -0700
Branch: REL_13_STABLE [d5a2ffbce] 2021-10-27 13:09:00 -0700
-->
     <para>
      Add more defensive checks around B-tree posting list splits
      (Peter Geoghegan)
     </para>

     <para>
      This change should help detect index corruption involving duplicate
      table TIDs.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [d91353f4b] 2021-11-06 01:50:44 +0100
Branch: REL_14_STABLE [f7829feb7] 2021-11-06 01:53:36 +0100
-->
     <para>
      Avoid assertion failure when inserting NaN into a BRIN
      float8 or float4 minmax_multi_ops index (Tomas Vondra)
     </para>

     <para>
      In production builds, such cases would result in a somewhat
      inefficient, but not actually incorrect, index.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [e3e29cec1] 2021-10-12 09:50:17 +0900
Branch: REL_14_STABLE [62e821ad2] 2021-10-12 09:51:17 +0900
-->
     <para>
      Allow the autovacuum launcher process to respond
      to <function>pg_log_backend_memory_contexts()</function> requests
      more quickly (Koyu Tanigawa)
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [0ded7039f] 2021-10-01 22:47:05 +0200
Branch: REL_14_STABLE [a5e83ad79] 2021-10-01 22:47:05 +0200
-->
     <para>
      Fix memory leak in HMAC hash calculations (Sergey Shinderuk)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [8781b0ce2] 2021-10-26 12:54:55 +1300
Branch: REL_14_STABLE [181361a0c] 2021-10-26 13:09:00 +1300
Branch: REL_13_STABLE [24b7cf8a5] 2021-10-26 13:04:40 +1300
Branch: REL_12_STABLE [8fef901e3] 2021-10-26 13:01:52 +1300
-->
     <para>
      Disallow setting <varname>huge_pages</varname>
      to <literal>on</literal> when <varname>shared_memory_type</varname>
      is <literal>sysv</literal> (Thomas Munro)
     </para>

     <para>
      Previously, this setting was accepted, but it did nothing for lack
      of any implementation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a0558cfa3] 2021-10-03 13:21:20 -0400
Branch: REL_14_STABLE [e0eba586b] 2021-10-03 13:21:20 -0400
-->
     <para>
      Fix checking of query type in PL/pgSQL's <command>RETURN
      QUERY</command> statement (Tom Lane)
     </para>

     <para>
      <command>RETURN QUERY</command> should accept any query that can
      return tuples, e.g. <command>UPDATE RETURNING</command>.  v14
      accidentally disallowed anything but <command>SELECT</command>;
      moreover, the <command>RETURN QUERY EXECUTE</command> variant
      failed to apply any query-type check at all.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2acc84c6f] 2021-10-22 15:22:25 -0400
Branch: REL_14_STABLE [3ad2c2455] 2021-10-22 15:22:25 -0400
Branch: REL_13_STABLE [476006023] 2021-10-22 15:22:26 -0400
Branch: REL_12_STABLE [52b927a73] 2021-10-22 15:22:26 -0400
Branch: REL_11_STABLE [871dfe4b7] 2021-10-22 15:22:26 -0400
Branch: REL_10_STABLE [10f9faf6d] 2021-10-22 15:22:26 -0400
Branch: REL9_6_STABLE [b1df061f7] 2021-10-22 15:22:26 -0400
-->
     <para>
      Fix <application>pg_dump</application> to dump non-global default
      privileges correctly (Neil Chen, Masahiko Sawada)
     </para>

     <para>
      If a global (unrestricted) <command>ALTER DEFAULT
      PRIVILEGES</command> command revoked some present-by-default
      privilege, for example <literal>EXECUTE</literal> for functions, and
      then a restricted <command>ALTER DEFAULT PRIVILEGES</command>
      command granted that privilege again for a selected role or
      schema, <application>pg_dump</application> failed to dump the
      restricted privilege grant correctly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e2ff7d9a8] 2021-10-16 12:23:57 -0400
Branch: REL_14_STABLE [b5152e3ba] 2021-10-16 12:24:11 -0400
Branch: REL_13_STABLE [6a262ba8c] 2021-10-16 12:24:17 -0400
Branch: REL_12_STABLE [fd182a92a] 2021-10-16 12:24:24 -0400
Branch: REL_11_STABLE [ca7a4ce58] 2021-10-16 12:24:33 -0400
Branch: REL_10_STABLE [2e2a23283] 2021-10-16 12:24:40 -0400
-->
     <para>
      Make <application>pg_dump</application> acquire shared lock on
      partitioned tables that are to be dumped (Tom Lane)
     </para>

     <para>
      This oversight was usually pretty harmless, since
      once <application>pg_dump</application> has locked any of the leaf
      partitions, that would suffice to prevent significant DDL on the
      partitioned table itself.  However problems could ensue when dumping
      a childless partitioned table, since no relevant lock would be held.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [40dfac4fc] 2021-10-16 15:02:55 -0400
Branch: REL_14_STABLE [3e4c8db93] 2021-10-16 15:03:05 -0400
Branch: REL_13_STABLE [0b5f557b7] 2021-10-16 15:03:10 -0400
Branch: REL_12_STABLE [5b0b2983a] 2021-10-16 15:03:15 -0400
Branch: REL_11_STABLE [58955c84f] 2021-10-16 15:03:21 -0400
-->
     <para>
      Fix crash in <application>pg_dump</application> when attempting to
      dump trigger definitions from a pre-8.3 server (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
Branch: master [998d060f3] 2021-10-19 12:59:54 +0200
Branch: REL_14_STABLE [3e2f32b01] 2021-10-19 12:59:54 +0200
Branch: REL_13_STABLE [687fe8a9d] 2021-10-19 12:59:54 +0200
Branch: REL_12_STABLE [e788883de] 2021-10-19 12:59:54 +0200
Branch: REL_11_STABLE [038892c81] 2021-10-19 12:59:54 +0200
Branch: REL_10_STABLE [4fda03b67] 2021-10-19 12:59:54 +0200
Branch: REL9_6_STABLE [ef1f15819] 2021-10-19 12:59:54 +0200
-->
     <para>
      Fix incorrect filename in <application>pg_restore</application>'s
      error message about an invalid large object TOC file (Daniel
      Gustafsson)
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [d33674708] 2021-09-29 21:46:56 +0900
Branch: REL_14_STABLE [8021334d3] 2021-09-29 21:47:25 +0900
Branch: REL_13_STABLE [3cc85d7d5] 2021-09-29 21:47:31 +0900
Branch: master [2acb7cc6b] 2021-09-29 21:48:52 +0900
Branch: REL_14_STABLE [8231c500e] 2021-09-29 21:49:29 +0900
Branch: REL_13_STABLE [8cf4f7118] 2021-09-29 21:49:36 +0900
Branch: REL_12_STABLE [c5f7e702d] 2021-09-29 21:49:40 +0900
-->
     <para>
      Ensure that <application>pgbench</application> exits with non-zero
      status after a socket-level failure (Yugo Nagata, Fabien Coelho)
     </para>

     <para>
      The desired behavior is to finish out the run but then exit with
      status 2.  Also, fix the reporting of such errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [d2bf06db3] 2021-10-13 14:08:12 -0700
Branch: REL_14_STABLE [dd58194cf] 2021-10-13 14:08:11 -0700
Branch: master [cd3f429d9] 2021-10-14 14:50:26 -0700
Branch: REL_14_STABLE [5863115e4] 2021-10-14 14:50:25 -0700
-->
     <para>
      Prevent <application>pg_amcheck</application> from checking
      temporary relations, as well as indexes that are invalid or not
      ready (Mark Dilger)
     </para>

     <para>
      This avoids unhelpful checks of relations that will almost certainly
      appear inconsistent.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
Branch: master [292698f15] 2021-10-11 17:21:48 -0700
Branch: REL_14_STABLE [e7712155e] 2021-10-11 17:21:46 -0700
-->
     <para>
      Make <filename>contrib/amcheck</filename> skip unlogged tables
      when running on a standby server (Mark Dilger)
     </para>

     <para>
      It's appropriate to do this since such tables will be empty,
      and unlogged indexes were already handled similarly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a667b0668] 2021-10-31 19:13:48 -0400
Branch: REL_14_STABLE [7104e0b24] 2021-10-31 19:13:48 -0400
Branch: REL_13_STABLE [3a5b313ce] 2021-10-31 19:13:48 -0400
Branch: REL_12_STABLE [16d0da5c8] 2021-10-31 19:13:48 -0400
Branch: REL_11_STABLE [5dd067430] 2021-10-31 19:13:48 -0400
Branch: REL_10_STABLE [d87d5f8d8] 2021-10-31 19:13:48 -0400
Branch: REL9_6_STABLE [fdb60ca83] 2021-10-31 19:13:48 -0400
-->
     <para>
      Change <filename>contrib/pg_stat_statements</filename> to read
      its <quote>query texts</quote> file in units of at most 1GB
      (Tom Lane)
     </para>

     <para>
      Such large query text files are very unusual, but if they do occur,
      the previous coding would fail on Windows 64 (which rejects
      individual read requests of more than 2GB).
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3071bbfe4] 2021-10-06 15:50:24 -0400
Branch: REL_14_STABLE [12ff678e1] 2021-10-06 15:50:24 -0400
Branch: REL_13_STABLE [aee83f39a] 2021-10-06 15:50:24 -0400
Branch: REL_12_STABLE [228897374] 2021-10-06 15:50:24 -0400
Branch: REL_11_STABLE [88807757d] 2021-10-06 15:50:24 -0400
Branch: REL_10_STABLE [2e33fbda1] 2021-10-06 15:50:24 -0400
Branch: REL9_6_STABLE [36c9f7d96] 2021-10-06 15:50:24 -0400
-->
     <para>
      Fix null-pointer crash
      when <filename>contrib/postgres_fdw</filename> tries to report a
      data conversion error (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [7821a0bf2] 2021-10-14 12:24:00 -0700
Branch: REL_14_STABLE [0b90f1c4c] 2021-10-14 12:24:22 -0700
Branch: REL_13_STABLE [20f785732] 2021-10-14 12:24:47 -0700
Branch: REL_12_STABLE [ab11f6e46] 2021-10-14 12:25:07 -0700
Branch: REL_11_STABLE [3f5d481ef] 2021-10-14 12:25:30 -0700
Branch: REL_10_STABLE [9364f64a2] 2021-10-14 12:25:48 -0700
Branch: REL9_6_STABLE [ae6abeb88] 2021-10-14 12:26:26 -0700
-->
     <para>
      Ensure that <function>GetSharedSecurityLabel()</function> can be
      used in a newly-started session that has not yet built its critical
      relation cache entries (Jeff Davis)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [f4ce6c4d3] 2021-10-22 09:49:07 -0400
Branch: REL_14_STABLE [52c0c1136] 2021-10-22 09:50:16 -0400
-->
     <para>
      When running a TAP test, include the module's own directory
      in <envar>PATH</envar> (Andrew Dunstan)
     </para>

     <para>
      This allows tests to find built programs that are not installed,
      such as custom test drivers.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9b8d68cc6] 2021-10-02 16:05:42 -0400
Branch: REL_14_STABLE [fa8db4879] 2021-10-02 16:06:09 -0400
Branch: REL_13_STABLE [9c76689de] 2021-10-02 16:06:23 -0400
Branch: REL_12_STABLE [e5b25f19b] 2021-10-02 16:06:45 -0400
Branch: REL_11_STABLE [9cc919b51] 2021-10-02 16:06:55 -0400
Branch: REL_10_STABLE [e323630cd] 2021-10-02 16:07:16 -0400
Branch: REL9_6_STABLE [dbec5a2fe] 2021-10-02 16:07:37 -0400
Branch: master [ad740067a] 2021-10-02 16:05:10 -0400
Branch: REL_14_STABLE [81464999b] 2021-10-02 16:06:09 -0400
Branch: REL_13_STABLE [7ba8eb81f] 2021-10-02 16:06:23 -0400
Branch: REL_12_STABLE [4721e8aa6] 2021-10-02 16:06:45 -0400
Branch: REL_11_STABLE [bb6d42669] 2021-10-02 16:06:55 -0400
Branch: REL_10_STABLE [cb0799db0] 2021-10-02 16:07:16 -0400
Branch: REL9_6_STABLE [37cbe0f79] 2021-10-02 16:07:36 -0400
Branch: master [c1aa3b3c0] 2021-10-04 14:52:39 -0400
Branch: REL_14_STABLE [919c08d90] 2021-10-04 14:52:17 -0400
Branch: REL_13_STABLE [c53ff69e1] 2021-10-04 14:52:17 -0400
Branch: REL_12_STABLE [07873a5dc] 2021-10-04 14:52:17 -0400
Branch: REL_11_STABLE [d0b0b70dc] 2021-10-04 14:52:17 -0400
Branch: REL_10_STABLE [cd2479142] 2021-10-04 14:52:17 -0400
Branch: REL9_6_STABLE [b5f34ae08] 2021-10-04 14:52:17 -0400
-->
     <para>
      Use the CLDR project's data to map Windows time zone names to IANA
      time zones (Tom Lane)
     </para>

     <para>
      When running on Windows, <application>initdb</application> attempts
      to set the new cluster's <varname>timezone</varname> parameter to
      the IANA time zone matching the system's prevailing time zone.
      We were using a mapping table that we'd generated years ago and
      updated only fitfully; unsurprisingly, it contained a number of
      errors as well as omissions of recently-added zones.  It turns out
      that CLDR has been tracking the most appropriate mappings, so start
      using their data.  This change will not affect any existing
      installation, only newly-initialized clusters.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [937aafd6d] 2021-10-29 11:38:18 -0400
Branch: REL_14_STABLE [0c8a40b39] 2021-10-29 11:38:32 -0400
Branch: REL_13_STABLE [4cd72add0] 2021-10-29 11:38:38 -0400
Branch: REL_12_STABLE [14b8d25d6] 2021-10-29 11:38:47 -0400
Branch: REL_11_STABLE [91455f7c6] 2021-10-29 11:38:53 -0400
Branch: REL_10_STABLE [d0fe211ce] 2021-10-29 11:38:58 -0400
Branch: REL9_6_STABLE [22a498b9b] 2021-10-29 11:39:05 -0400
-->
     <para>
      Update time zone data files to <application>tzdata</application>
      release 2021e for DST law changes in Fiji, Jordan, Palestine, and
      Samoa, plus historical corrections for Barbados, Cook Islands,
      Guyana, Niue, Portugal, and Tonga.
     </para>

     <para>
      Also, the Pacific/Enderbury zone has been renamed to Pacific/Kanton.
      Also, the following zones have been merged into nearby, more-populous
      zones whose clocks have agreed with them since 1970: Africa/Accra,
      America/Atikokan, America/Blanc-Sablon, America/Creston,
      America/Curacao, America/Nassau, America/Port_of_Spain,
      Antarctica/DumontDUrville, and Antarctica/Syowa.
      In all these cases, the previous zone name remains as an alias.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
   <title>Release date:</title>
   <para>2021-09-30</para>
  </formalpara>

  <sect2>
   <title>Overview</title>

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

   <itemizedlist>
    <listitem>
     <para>
      Stored procedures can now return data via <literal>OUT</literal>
      parameters.
     </para>
    </listitem>

    <listitem>
     <para>
      The SQL-standard <literal>SEARCH</literal>
      and <literal>CYCLE</literal> options for common table expressions
      have been implemented.
     </para>
    </listitem>

    <listitem>
     <para>
      Subscripting can now be applied to any data type for which
      it is a useful notation, not only arrays.  In this release,
      the <type>jsonb</type> and <type>hstore</type> types have gained
      subscripting operators.
     </para>
    </listitem>

    <listitem>
     <para>
      Range types have been extended by adding multiranges, allowing
      representation of noncontiguous data ranges.
     </para>
    </listitem>

    <listitem>
     <para>
      Numerous performance improvements have been made for parallel
      queries, heavily-concurrent workloads, partitioned tables, logical
      replication, and vacuuming.
     </para>
    </listitem>

    <listitem>
     <para>
      B-tree index updates are managed more efficiently, reducing index
      bloat.
     </para>
    </listitem>

    <listitem>
     <para>
      <command>VACUUM</command> automatically becomes more aggressive, and
      skips inessential cleanup, if the database starts to approach a
      transaction ID wraparound condition.
     </para>
    </listitem>

    <listitem>
     <para>
      Extended statistics can now be collected on expressions, allowing
      better planning results for complex queries.
     </para>
    </listitem>

    <listitem>
     <para>
      <application>libpq</application> now has the ability to pipeline
      multiple queries, which can boost throughput over high-latency
      connections.
     </para>
    </listitem>
   </itemizedlist>

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

  </sect2>

  <sect2>

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

   <itemizedlist>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-04 [9e38c2bb5] Declare assorted array functions using anycompatible not
-->

     <para>
      User-defined objects that reference certain built-in array functions
      along with their argument types must be recreated (Tom Lane)
     </para>

     <para>
      Specifically, <link
      linkend="functions-array"><function>array_append()</function></link>,
      <function>array_prepend()</function>,
      <function>array_cat()</function>,
      <function>array_position()</function>,
      <function>array_positions()</function>,
      <function>array_remove()</function>,
      <function>array_replace()</function>, and <link
      linkend="functions-math"><function>width_bucket()</function></link>
      used to take <type>anyarray</type> arguments but now take
      <type>anycompatiblearray</type>.  Therefore, user-defined objects
      like aggregates and operators that reference those array function
      signatures must be dropped before upgrading, and recreated once the
      upgrade completes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-11-03 [2f70fdb06] Remove deprecated containment operators for built-in typ
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-05 [112d411fb] Remove deprecated containment operators for contrib type
-->

     <para>
      Remove deprecated containment operators <literal>@</literal>
      and <literal>~</literal> for built-in <link
      linkend="functions-geometry">geometric data types</link> and
      contrib modules <xref linkend="cube"/>, <xref linkend="hstore"/>,
      <xref linkend="intarray"/>, and <xref linkend="seg"/> (Justin Pryzby)
     </para>

     <para>
      The more consistently named <literal>&lt;@</literal>
      and <literal>@&gt;</literal> have been recommended for many years.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-01-31 [0c4f355c6] Fix parsing of complex morphs to tsquery
-->

     <para>
      Fix <link
      linkend="functions-textsearch"><function>to_tsquery()</function></link>
      and <function>websearch_to_tsquery()</function> to properly parse
      query text containing discarded tokens (Alexander Korotkov)
     </para>

     <para>
      Certain discarded tokens, like underscore, caused the output of
      these functions to produce incorrect tsquery output, e.g., both
      <literal>websearch_to_tsquery('"pg_class pg"')</literal> and <literal>to_tsquery('pg_class
      &lt;-&gt; pg')</literal> used to output <literal>( 'pg' &amp; 'class' ) &lt;-&gt; 'pg'</literal>,
      but now both output <literal>'pg' &lt;-&gt; 'class' &lt;-&gt; 'pg'</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-05-03 [eb086056f] Make websearch_to_tsquery() parse text in quotes as a si
-->

     <para>
      Fix <link
      linkend="functions-textsearch"><function>websearch_to_tsquery()</function></link>
      to properly parse multiple adjacent discarded tokens in quotes
      (Alexander Korotkov)
     </para>

     <para>
      Previously, quoted text that contained multiple adjacent discarded
      tokens was treated as multiple tokens, causing incorrect tsquery
      output, e.g., <literal>websearch_to_tsquery('"aaa: bbb"')</literal> used to output
      <literal>'aaa' &lt;2&gt; 'bbb'</literal>, but now outputs <literal>'aaa' &lt;-&gt; 'bbb'</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-04-06 [a2da77cdb] Change return type of EXTRACT to numeric
-->

     <para>
      Change <link
      linkend="functions-datetime"><function>EXTRACT()</function></link>
      to return type <type>numeric</type> instead of <type>float8</type>
      (Peter Eisentraut)
     </para>

     <para>
      This avoids loss-of-precision issues in some usages.  The old
      behavior can still be obtained by using the old underlying function
      <function>date_part()</function>.
     </para>

     <para>
      Also, <function>EXTRACT(date)</function> now throws an error for units
      that are not part of the <type>date</type> data type.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-06-13 [23cbeda50] Sync behavior of var_samp and stddev_samp for single NaN
-->

     <para>
      Change <link
      linkend="functions-aggregate"><function>var_samp()</function></link>
      and <function>stddev_samp()</function> with numeric parameters to
      return NULL when the input is a single NaN value (Tom Lane)
     </para>

     <para>
      Previously <literal>NaN</literal> was returned.
     </para>
    </listitem>

    <listitem>
<!--
Author: Joe Conway <mail@joeconway.com>
2021-03-31 [b12bd4869] Fix has_column_privilege function corner case
-->

     <para>
      Return false for <link
      linkend="functions-info"><function>has_column_privilege()</function></link>
      checks on non-existent or dropped columns when using attribute
      numbers (Joe Conway)
     </para>

     <para>
      Previously such attribute numbers returned an invalid-column error.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-20 [a4faef8f8] Fix some corner cases for window ranges with infinite of
-->

     <para>
      Fix handling of infinite <link
      linkend="syntax-window-functions">window function</link> ranges
      (Tom Lane)
     </para>

     <para>
      Previously window frame clauses like <literal>'inf' PRECEDING AND
      'inf' FOLLOWING</literal> returned incorrect results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-17 [76f412ab3] Remove factorial operators, leaving only the factorial()
-->

     <para>
      Remove factorial operators <literal>!</literal> and
      <literal>!!</literal>, as well as function
      <function>numeric_fac()</function> (Mark Dilger)
     </para>

     <para>
      The <link
      linkend="functions-math"><function>factorial()</function></link>
      function is still supported.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-18 [0a40563ea] Disallow factorial of negative numbers
-->

     <para>
      Disallow <function>factorial()</function> of negative numbers
      (Peter Eisentraut)
     </para>

     <para>
      Previously such cases returned 1.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-17 [1ed6b8956] Remove support for postfix (right-unary) operators.
-->

     <para>
      Remove support for <link linkend="sql-createoperator">postfix</link>
      (right-unary) operators (Mark Dilger)
     </para>

     <para>
      <application>pg_dump</application> and
      <application>pg_upgrade</application> will warn if postfix operators
      are being dumped.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-25 [7dc13a0f0] Change regex \D and \W shorthands to always match newlin
-->

     <para>
      Allow <literal>\D</literal> and <literal>\W</literal> shorthands to
      match newlines in <link linkend="functions-posix-regexp">regular
      expression</link> newline-sensitive mode (Tom Lane)
     </para>

     <para>
      Previously they did not match newlines in this
      mode, but that disagrees with the behavior of other common regular
      expression engines.  <literal>[^[:digit:]]</literal> or
      <literal>[^[:word:]]</literal> can be used to get the old behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-02 [4aea704a5] Fix semantics of regular expression back-references.
-->

     <para>
      Disregard constraints when matching regular expression <link
      linkend="posix-escape-sequences">back-references</link> (Tom Lane)
     </para>

     <para>
      For example, in <literal>(^\d+).*\1</literal>,
      the <literal>^</literal> constraint should be applied at the start
      of the string, but not when matching <literal>\1</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-25 [2a0af7fe4] Allow complemented character class escapes within regex
-->

     <para>
      Disallow <literal>\w</literal> as a range start or end in regular
      expression character classes (Tom Lane)
     </para>

     <para>
      This previously was allowed but produced unexpected results.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-07 [3db826bd5] Tighten up allowed names for custom GUC parameters.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-07 [3db826bd5] Tighten up allowed names for custom GUC parameters.
-->

     <para>
      Require <link linkend="runtime-config-custom">custom server
      parameter</link> names to use only characters that are valid in
      unquoted <acronym>SQL</acronym> identifiers (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-10 [c7eab0e97] Change default of password_encryption to scram-sha-256
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-10 [c7eab0e97] Change default of password_encryption to scram-sha-256
-->

     <para>
      Change the default of the <xref linkend="guc-password-encryption"/>
      server parameter to <literal>scram-sha-256</literal> (Peter
      Eisentraut)
     </para>

     <para>
      Previously it was <literal>md5</literal>.  All new passwords will
      be stored as SHA256 unless this server setting is changed or
      the password is specified in MD5 format.  Also, the legacy (and
      undocumented) Boolean-like values which were previously synonyms
      for <literal>md5</literal> are no longer accepted.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-03-10 [9f3665fbf] Don't consider newly inserted tuples in nbtree VACUUM.
Author: Peter Geoghegan <pg@bowt.ie>
2021-03-11 [effdd3f3b] Add back vacuum_cleanup_index_scale_factor parameter.
-->

     <para>
      Remove server parameter
      <varname>vacuum_cleanup_index_scale_factor</varname> (Peter Geoghegan)
     </para>

     <para>
      This setting was ignored starting in
      <productname>PostgreSQL</productname> version 13.3.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-12-08 [a676386b5] Remove operator_precedence_warning.
-->

     <para>
      Remove server parameter <varname>operator_precedence_warning</varname>
      (Tom Lane)
     </para>

     <para>
      This setting was used for warning applications about
      <productname>PostgreSQL</productname> 9.5 changes.
     </para>
    </listitem>

    <listitem>
<!--
Author: Bruce Momjian <bruce@momjian.us>
2020-10-05 [253f1025d] Overhaul pg_hba.conf clientcert's API
-->

     <para>
      Overhaul the specification of <literal>clientcert</literal> in <link
      linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>
      (Kyotaro Horiguchi)
     </para>

     <para>
      Values
      <literal>1</literal>/<literal>0</literal>/<literal>no-verify</literal>
      are no longer supported;  only the strings
      <literal>verify-ca</literal> and <literal>verify-full</literal>
      can be used.  Also, disallow <literal>verify-ca</literal> if cert
      authentication is enabled since cert requires
      <literal>verify-full</literal> checking.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-03-09 [f9264d152] Remove support for SSL compression
Author: Michael Paquier <michael@paquier.xyz>
2021-03-10 [0ba71107e] Revert changes for SSL compression in libpq
-->

     <para>
      Remove support for <link
      linkend="runtime-config-connection-ssl"><acronym>SSL</acronym></link>
      compression (Daniel Gustafsson, Michael Paquier)
     </para>

     <para>
      This was already disabled by default in previous
      <productname>PostgreSQL</productname> releases, and most modern
      OpenSSL and <acronym>TLS</acronym> versions no longer support it.
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-03-04 [3174d69fb] Remove server and libpq support for old FE/BE protocol v
-->

     <para>
      Remove server and <link linkend="libpq">libpq</link> support
      for the version 2 <link linkend="protocol">wire protocol</link>
      (Heikki Linnakangas)
     </para>

     <para>
      This was last used as the default in
      <productname>PostgreSQL</productname> 7.3 (released in 2002).
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-11 [5333e014a] Remove deprecated syntax from CREATE/DROP LANGUAGE
-->

     <para>
      Disallow single-quoting of the language name in the
      <link linkend="sql-createlanguage"><command>CREATE/DROP
      LANGUAGE</command></link> command (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-07 [f3faf35f3] Don't create pg_type entries for sequences or toast tabl
-->

     <para>
      Remove the <link linkend="xfunc-sql-composite-functions">composite
      types</link> that were formerly created for sequences and toast
      tables (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-10-22 [3dfb1942d] Avoid premature de-doubling of quote marks in ECPG strin
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-10-22 [c16a1bbcf] Add documentation and tests for quote marks in ECPG lite
-->

     <para>
      Process doubled quote marks in <link linkend="ecpg">ecpg</link>
      <acronym>SQL</acronym> command strings correctly (Tom Lane)
     </para>

     <para>
      Previously <literal>'abc''def'</literal> was passed to the server
      as <literal>'abc'def'</literal>, and <literal>"abc""def"</literal>
      was passed as <literal>"abc"def"</literal>, causing syntax errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-08-08 [20e7e1fe3] Remove &lt;@ from contrib/intarray's GiST operator classes.
-->

     <para>
      Prevent the containment operators (<literal>&lt;@</literal> and
      <literal>@&gt;</literal>) for <xref linkend="intarray"/> from using
      GiST indexes (Tom Lane)
     </para>

     <para>
      Previously a full GiST index scan was required, so just avoid
      that and scan the heap, which is faster.  Indexes created for this
      purpose should be removed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-01-29 [514b411a2] Retire pg_standby.
-->

     <para>
      Remove contrib program <application>pg_standby</application>
      (Justin Pryzby)
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-11-25 [f73999262] tablefunc: Reject negative number of tuples passed to no
-->

     <para>
      Prevent <xref linkend="tablefunc"/>'s function
      <function>normal_rand()</function> from accepting negative values
      (Ashutosh Bapat)
     </para>

     <para>
      Negative values produced undesirable results.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

  <sect2>
   <title>Changes</title>

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

   <sect3>
    <title>Server</title>

    <itemizedlist>

     <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2021-04-05 [6c3ffd697] Add pg_read_all_data and pg_write_all_data roles
-->

      <para>
       Add predefined roles <link
       linkend="predefined-roles"><literal>pg_read_all_data</literal></link>
       and <literal>pg_write_all_data</literal> (Stephen Frost)
      </para>

      <para>
       These non-login roles can be used to give read or write permission
       to all tables, views, and sequences.
      </para>
     </listitem>

     <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
2021-03-26 [a14a0118a] Add "pg_database_owner" default role.
-->

      <para>
       Add predefined role <link
       linkend="predefined-roles"><literal>pg_database_owner</literal></link>
       that contains only the current database's owner (Noah Misch)
      </para>

      <para>
       This is especially useful in template databases.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-03-18 [cd91de0d1] Remove temporary files after backend crash
-->

      <para>
       Remove temporary files after backend crashes (Euler Taveira)
      </para>

      <para>
       Previously, such files were retained for debugging purposes.  If
       necessary, deletion can be disabled with the new server parameter
       <xref linkend="guc-remove-temp-files-after-crash"/>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-04-03 [c30f54ad7] Detect POLLHUP/POLLRDHUP while running queries.
-->

      <para>
       Allow long-running queries to be canceled if the client disconnects
       (Sergey Cherkashin, Thomas Munro)
      </para>

      <para>
       The server parameter <xref
       linkend="guc-client-connection-check-interval"/> allows control
       over whether loss of connection is checked for intra-query.
       (This is supported on Linux and a few other operating systems.)
      </para>
     </listitem>

     <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2021-04-08 [aaf043257] Add functions to wait for backend termination
-->

      <para>
       Add an optional timeout parameter to <link
       linkend="functions-admin-signal"><function>pg_terminate_backend()</function></link>
       (Magnus Hagander)
      </para>
     </listitem>

     <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
2021-03-30 [0ff8bbdee] Accept slightly-filled pages for tuples larger than fill
-->

      <para>
       Allow wide tuples to be always added to almost-empty heap pages
       (John Naylor, Floris van Nee)
      </para>

      <para>
       Previously tuples whose insertion would have exceeded the page's
       <link linkend="sql-createtable">fill factor</link> were instead
       added to new pages.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-04-07 [5c55dc8b4] libpq: Set Server Name Indication (SNI) for SSL connecti
-->

      <para>
       Add Server Name Indication (<acronym>SNI</acronym>) in
       <acronym>SSL</acronym> connection packets (Peter Eisentraut)
      </para>

      <para>
       This can be disabled by turning off client connection option <link
       linkend="libpq-paramkeywords"><literal>sslsni</literal></link>.
      </para>
     </listitem>

    </itemizedlist>

    <sect4>
     <title><link linkend="routine-vacuuming">Vacuuming</link></title>

     <itemizedlist>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-04-07 [5100010ee] Teach VACUUM to bypass unnecessary index vacuuming.
Author: Peter Geoghegan <pg@bowt.ie>
2021-06-18 [3499df0de] Support disabling index bypassing by VACUUM.
-->

       <para>
        Allow vacuum to skip index vacuuming when the number of removable
        index entries is insignificant (Masahiko Sawada, Peter Geoghegan)
       </para>

       <para>
        The vacuum parameter <link
        linkend="sql-vacuum"><literal>INDEX_CLEANUP</literal></link> has a
        new default of <literal>auto</literal> that enables this optimization.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-03-21 [9dd963ae2] Recycle nbtree pages deleted during same VACUUM.
-->

       <para>
        Allow vacuum to more eagerly add deleted btree pages to the free
        space map (Peter Geoghegan)
       </para>

       <para>
        Previously vacuum could only add pages to the free space map
        that were marked as deleted by previous vacuums.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-04-07 [3c3b8a4b2] Truncate line pointer array during VACUUM.
-->

       <para>
        Allow vacuum to reclaim space used by unused trailing heap
        line pointers (Matthias van de Meent, Peter Geoghegan)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2020-11-25 [c98763bf5] Avoid spurious waits in concurrent indexing
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-01-15 [f9900df5f] Avoid spurious wait in concurrent reindex
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-02-23 [d9d076222] VACUUM: ignore indexing operations with CONCURRENTLY
-->

       <para>
        Allow vacuum to be more aggressive in removing dead rows during
        minimal-locking index operations (Álvaro Herrera)
       </para>

       <para>
        Specifically, <command>CREATE INDEX CONCURRENTLY</command> and
        <command>REINDEX CONCURRENTLY</command> no longer limit the dead
        row removal of other relations.
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-12-08 [e2ac3fed3] Speed up rechecking if relation needs to be vacuumed or
-->

       <para>
        Speed up vacuuming of databases with many relations (Tatsuhito
        Kasahara)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-01-27 [e19594c5c] Reduce the default value of vacuum_cost_page_miss.
-->

       <para>
        Reduce the default value of <xref
        linkend="guc-vacuum-cost-page-miss"/> to better reflect current
        hardware capabilities (Peter Geoghegan)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-02-09 [7cb3048f3] Add option PROCESS_TOAST to VACUUM
-->

       <para>
        Add ability to skip vacuuming of <acronym>TOAST</acronym> tables
        (Nathan Bossart)
       </para>

       <para>
        <link linkend="sql-vacuum"><command>VACUUM</command></link> now
        has a <literal>PROCESS_TOAST</literal> option which can be set to
        false to disable <acronym>TOAST</acronym> processing, and <link
        linkend="app-vacuumdb"><application>vacuumdb</application></link>
        has a <option>--no-process-toast</option> option.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-01-17 [7db0cd214] Set PD_ALL_VISIBLE and visibility map bits in COPY FREEZ
-->

       <para>
        Have <link linkend="sql-copy"><command>COPY FREEZE</command></link>
        appropriately update page visibility bits (Anastasia Lubennikova,
        Pavan Deolasee, Jeff Janes)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-04-07 [1e55e7d17] Add wraparound failsafe to VACUUM.
-->

       <para>
        Cause vacuum operations to be more aggressive if the table is near
        xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan)
       </para>

       <para>
        This is controlled by <xref linkend="guc-vacuum-failsafe-age"/>
        and <xref linkend="guc-vacuum-multixact-failsafe-age"/>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
2020-08-01 [cd5e82256] Change XID and mxact limits to warn at 40M and stop at 3
-->

       <para>
        Increase warning time and hard limit before transaction id and
        multi-transaction wraparound (Noah Misch)
       </para>

       <para>
        This should reduce the possibility of failures that occur without
        having issued warnings about wraparound.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-03-23 [5aed6a1fc] Add per-index stats information in verbose logs of autov
-->

       <para>
        Add per-index information to <link
        linkend="guc-log-autovacuum-min-duration">autovacuum logging
        output</link> (Masahiko Sawada)
       </para>
      </listitem>

     </itemizedlist>
    </sect4>

    <sect4>
     <title><link linkend="ddl-partitioning">Partitioning</link></title>

     <itemizedlist>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-31 [86dc90056] Rework planning and execution of UPDATE and DELETE.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-06 [a1115fa07] Postpone some more stuff out of ExecInitModifyTable.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-06 [c5b7ba4e6] Postpone some stuff out of ExecInitModifyTable.
-->

       <para>
        Improve the performance of updates and deletes on partitioned tables
        with many partitions (Amit Langote, Tom Lane)
       </para>

       <para>
        This change greatly reduces the planner's overhead for such cases,
        and also allows updates/deletes on partitioned tables to use
        execution-time partition pruning.
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-03-25 [71f4c8c6f] ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY
-->

       <para>
        Allow partitions to be <link
        linkend="sql-altertable">detached</link> in a non-blocking manner
        (Álvaro Herrera)
       </para>

       <para>
        The syntax is <command>ALTER TABLE ... DETACH PARTITION
        ... CONCURRENTLY</command>, and <command>FINALIZE</command>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-28 [2dfa3fea8] Remove complaints about COLLATE clauses in partition bou
-->

       <para>
        Ignore <literal>COLLATE</literal> clauses in partition boundary
        values (Tom Lane)
       </para>

       <para>
        Previously any such clause had to match the collation of the
        partition key; but it's more consistent to consider that it's
        automatically coerced to the collation of the partition key.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Indexes</title>

     <itemizedlist>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-01-13 [9dc718bdf] Pass down "logically unchanged index" hint.
Author: Peter Geoghegan <pg@bowt.ie>
2021-01-13 [d168b6668] Enhance nbtree index tuple deletion.
-->

       <para>
        Allow btree index additions to <link
        linkend="btree-deletion">remove expired index entries</link>
        to prevent page splits (Peter Geoghegan)
       </para>

       <para>
        This is particularly helpful for reducing index bloat on tables
        whose indexed columns are frequently updated.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-03-26 [ab596105b] BRIN minmax-multi indexes
-->

       <para>
        Allow <link linkend="brin"><acronym>BRIN</acronym></link> indexes
        to record multiple min/max values per range (Tomas Vondra)
       </para>

       <para>
        This is useful if there are groups of values in each page range.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-03-26 [77b88cd1b] BRIN bloom indexes
-->

       <para>
        Allow <acronym>BRIN</acronym> indexes to use bloom filters
        (Tomas Vondra)
       </para>

       <para>
        This allows <acronym>BRIN</acronym> indexes to be used effectively
        with data that is not well-localized in the heap.
       </para>
      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2020-09-17 [16fa9b2b3] Add support for building GiST index by sorting.
-->

       <para>
        Allow some <link linkend="gist">GiST</link> indexes to be built
        by presorting the data (Andrey Borodin)
       </para>

       <para>
        Presorting happens automatically and allows for faster index
        creation and smaller indexes.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-05 [09c1c6ab4] Support INCLUDE'd columns in SP-GiST.
-->

       <para>
        Allow <link linkend="spgist">SP-GiST</link> indexes to contain
        <literal>INCLUDE</literal>'d columns (Pavel Borisov)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Optimizer</title>

     <itemizedlist>

      <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2021-04-08 [50e17ad28] Speedup ScalarArrayOpExpr evaluation
-->

       <para>
        Allow hash lookup for <literal>IN</literal> clauses with many
        constants (James Coleman, David Rowley)
       </para>

       <para>
        Previously the code always sequentially scanned the list
        of values.
       </para>
      </listitem>

      <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2020-12-03 [25a9e54d2] Improve estimation of OR clauses using extended statisti
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2020-12-08 [88b0898fe] Improve estimation of OR clauses using multiple extended
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2020-12-08 [4f5760d4a] Improve estimation of ANDs under ORs using extended stat
-->

       <para>
        Increase the number of places <link
        linkend="planner-stats-extended">extended statistics</link> can
        be used for <literal>OR</literal> clause estimation (Tomas Vondra,
        Dean Rasheed)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-03-27 [a4d75c86b] Extended statistics on expressions
-->

       <para>
        Allow extended statistics on expressions (Tomas Vondra)
       </para>

       <para>
        This allows statistics on a group of expressions and columns,
        rather than only columns like previously.  System view <link
        linkend="view-pg-stats-ext-exprs"><structname>pg_stats_ext_exprs</structname></link>
        reports such statistics.
       </para>
      </listitem>

      <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2021-02-27 [bb437f995] Add TID Range Scans to support efficient scanning ranges
-->

       <para>
        Allow efficient heap scanning of a range of <link
        linkend="datatype-oid-table"><type>TIDs</type></link> (Edmund
        Horner, David Rowley)
       </para>

       <para>
        Previously a sequential scan was required for non-equality
        <type>TID</type> specifications.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-12-30 [e665769e6] Sanitize IF NOT EXISTS in EXPLAIN for CTAS and matviews
-->

       <para>
        Fix <link linkend="sql-explain"><command>EXPLAIN CREATE TABLE
        AS</command></link> and <command>EXPLAIN CREATE MATERIALIZED
        VIEW</command> to honor <literal>IF NOT EXISTS</literal>
        (Bharath Rupireddy)
       </para>

       <para>
        Previously, if the object already existed,
        <command>EXPLAIN</command> would fail.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>General Performance</title>

     <itemizedlist>

      <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2020-08-12 [dc7420c2c] snapshot scalability: Don't compute global horizons whil
Author: Andres Freund <andres@anarazel.de>
2020-08-13 [1f51c17c6] snapshot scalability: Move PGXACT->xmin back to PGPROC.
Author: Andres Freund <andres@anarazel.de>
2020-08-14 [941697c3c] snapshot scalability: Introduce dense array of in-progre
Author: Andres Freund <andres@anarazel.de>
2020-08-14 [5788e258b] snapshot scalability: Move PGXACT->vacuumFlags to ProcGl
Author: Andres Freund <andres@anarazel.de>
2020-08-14 [73487a60f] snapshot scalability: Move subxact info to ProcGlobal, r
Author: Andres Freund <andres@anarazel.de>
2020-08-17 [623a9ba79] snapshot scalability: cache snapshots using a xact compl
-->

       <para>
        Improve the speed of computing <acronym>MVCC</acronym> <link
        linkend="mvcc">visibility snapshots</link> on systems with many
        CPUs and high session counts (Andres Freund)
       </para>

       <para>
        This also improves performance when there are many idle sessions.
       </para>
      </listitem>

      <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2021-04-02 [9eacee2e6] Add Result Cache executor node (take 2)
-->

       <para>
        Add executor method to memoize results from the inner side of a
        nested-loop join (David Rowley)
       </para>

       <para>
        This is useful if only a small percentage of rows is checked on
        the inner side.  It can be disabled via server parameter <xref
        linkend="guc-enable-memoize"/>.
       </para>
      </listitem>

      <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2020-09-15 [62e221e1c] Allow incremental sorts for windowing functions
-->

       <para>
        Allow <link linkend="functions-window">window functions</link>
        to perform incremental sorts (David Rowley)
       </para>
      </listitem>

      <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
2020-07-26 [56788d215] Allocate consecutive blocks during parallel seqscans
-->

       <para>
        Improve the I/O performance of parallel sequential scans (Thomas
        Munro, David Rowley)
       </para>

       <para>
        This was done by allocating blocks in groups to <link
        linkend="guc-max-parallel-workers">parallel workers</link>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2021-03-31 [27e1f1456] Add support for asynchronous execution.
-->

       <para>
        Allow a query referencing multiple <link
        linkend="sql-createforeigntable">foreign tables</link> to perform
        foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi,
        Thomas Munro, Etsuro Fujita)
       </para>

       <para>
        <link
        linkend="postgres-fdw"><application>postgres_fdw</application></link>
        supports this type of scan if <literal>async_capable</literal>
        is set.
       </para>
      </listitem>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2021-03-16 [c6fc50cb4] Use pre-fetching for ANALYZE
-->

       <para>
        Allow <link linkend="vacuum-for-statistics">analyze</link> to do
        page prefetching (Stephen Frost)
       </para>

       <para>
        This is controlled by <xref
        linkend="guc-maintenance-io-concurrency"/>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-20 [08c0d6ad6] Invent "rainbow" arcs within the regex engine.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-20 [824bf7190] Recognize "match-all" NFAs within the regex engine.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-20 [cebc1d34e] Fix regex engine to suppress useless concatenation sub-R
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-20 [581043089] Convert regex engine's subre tree from binary to N-ary s
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-20 [ea1268f63] Avoid generating extra subre tree nodes for capturing pa
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-21 [190c79884] Simplify memory management for regex DFAs a little.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-26 [0fc1af174] Improve memory management in regex compiler.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-02 [0c3405cf1] Improve performance of regular expression back-reference
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-02 [4604f83fd] Suppress unnecessary regex subre nodes in a couple more
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-08 [6c20bdb2a] Further tweak memory management for regex DFAs.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-05-03 [f68970e33] Fix performance issue in new regex match-all detection c
-->

       <para>
        Improve performance of <link
        linkend="functions-posix-regexp">regular expression</link>
        searches (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-10-11 [80f8eb79e] Use perfect hash for NFC and NFKC Unicode Normalization
Author: Michael Paquier <michael@paquier.xyz>
2020-10-23 [783f0cc64] Improve performance of Unicode {de,re}composition in the
-->

       <para>
        Dramatically improve Unicode normalization performance (John Naylor)
       </para>

       <para>
        This speeds <link
        linkend="functions-string"><function>normalize()</function></link>
        and <literal>IS NORMALIZED</literal>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-03-19 [bbe0a81db] Allow configurable LZ4 TOAST compression.
-->

       <para>
        Add ability to use <link linkend="sql-createtable">LZ4
        compression</link> on <acronym>TOAST</acronym> data (Dilip Kumar)
       </para>

       <para>
        This can be set at the column level, or set as a default via server
        parameter <xref linkend="guc-default-toast-compression"/>.
        The server must be compiled with <link
        linkend="configure-options-features"><option>--with-lz4</option></link>
        to support this feature.  The default setting is still pglz.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Monitoring</title>

     <itemizedlist>

      <listitem>
<!--
Author: Bruce Momjian <bruce@momjian.us>
2021-04-07 [4f0b0966c] Make use of in-core query id added by commit 5fd9dfa5f5
Author: Bruce Momjian <bruce@momjian.us>
2021-04-07 [f57a2f5e0] Add csvlog output for the new query_id value
Author: Bruce Momjian <bruce@momjian.us>
2021-04-20 [9660834dd] adjust query id feature to use pg_stat_activity.query_id
Author: Bruce Momjian <bruce@momjian.us>
2021-05-03 [f7a97b6ec] Update query_id computation
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-05-15 [cafde58b3] Allow compute_query_id to be set to 'auto' and make it d
-->

       <para>
        If server parameter <xref linkend="guc-compute-query-id"/>
        is enabled, display the query id in <link
        linkend="monitoring-pg-stat-activity-view"><structname>pg_stat_activity</structname></link>,
        <link linkend="sql-explain"><command>EXPLAIN
        VERBOSE</command></link>, <link
        linkend="runtime-config-logging">csvlog</link>, and optionally in
        <xref linkend="guc-log-line-prefix"/> (Julien Rouhaud)
       </para>

       <para>
        A query id computed by an extension will also be displayed.
       </para>
      </listitem>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2021-03-16 [94d13d474] Improve logging of auto-vacuum and auto-analyze
-->

       <para>
        Improve logging of <link linkend="autovacuum">auto-vacuum</link>
        and auto-analyze (Stephen Frost, Jakub Wartak)
       </para>

       <para>
        This reports I/O timings for auto-vacuum and auto-analyze if <xref
        linkend="guc-track-io-timing"/> is enabled.  Also, report buffer
        read and dirty rates for auto-analyze.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-04-07 [9afffcb83] Add some information about authenticated identity via lo
-->

       <para>
        Add information about the original user name supplied by the
        client to the output of <xref linkend="guc-log-connections"/>
        (Jacob Champion)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>System Views</title>

     <itemizedlist>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-01-06 [8a4f618e7] Report progress of COPY commands
Author: Michael Paquier <michael@paquier.xyz>
2021-03-09 [9d2d45700] Add support for more progress reporting in COPY
-->

       <para>
        Add system view <link
        linkend="copy-progress-reporting"><structname>pg_stat_progress_copy</structname></link>
        to report <command>COPY</command> progress (Josef Šimánek,
        Matthias van de Meent)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-10-02 [8d9a93596] Add pg_stat_wal statistics view.
Author: Fujii Masao <fujii@postgresql.org>
2020-12-02 [01469241b] Track total number of WAL records, FPIs and bytes genera
Author: Fujii Masao <fujii@postgresql.org>
2021-03-09 [ff99918c6] Track total amounts of times spent writing and syncing W
-->

       <para>
        Add system view <link
        linkend="monitoring-pg-stat-wal-view"><structname>pg_stat_wal</structname></link>
        to report <acronym>WAL</acronym> activity (Masahiro Ikeda)
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-10-08 [986816750] Track statistics for spilling of changes from ReorderBuf
Author: Amit Kapila <akapila@postgresql.org>
2020-10-20 [03d51b776] Change the attribute name in pg_stat_replication_slots v
Author: Amit Kapila <akapila@postgresql.org>
2020-10-29 [8e90ec558] Track statistics for streaming of changes from ReorderBu
Author: Amit Kapila <akapila@postgresql.org>
2021-04-16 [f5fc2f5b2] Add information of total data processed to replication s
-->

       <para>
        Add system view <link
        linkend="monitoring-pg-stat-replication-slots-view"><structname>pg_stat_replication_slots</structname></link>
        to report replication slot activity (Masahiko Sawada, Amit Kapila,
        Vignesh C)
       </para>

       <para>
        The function <link
        linkend="monitoring-stats-functions"><function>pg_stat_reset_replication_slot()</function></link>
        resets slot statistics.
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-08-19 [3e98c0baf] Add pg_backend_memory_contexts system view.
Author: Fujii Masao <fujii@postgresql.org>
2020-08-26 [29dd6d8bc] Prevent non-superusers from reading pg_backend_memory_co
-->

       <para>
        Add system view <link
        linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>
        to report session memory usage (Atsushi Torikoshi, Fujii Masao)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-04-06 [43620e328] Add function to log the memory contexts of specified bac
-->

       <para>
        Add function <link
        linkend="functions-admin-signal"><function>pg_log_backend_memory_contexts()</function></link>
        to output the memory contexts of arbitrary backends (Atsushi
        Torikoshi)
       </para>
      </listitem>

      <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2021-01-17 [960869da0] Add pg_stat_database counters for sessions and session t
-->

       <para>
        Add session statistics to the <link
        linkend="monitoring-pg-stat-database-view"><structname>pg_stat_database</structname></link>
        system view (Laurenz Albe)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-07-20 [d05b172a7] Add generic_plans and custom_plans fields into pg_prepar
-->

       <para>
        Add columns to <link
        linkend="view-pg-prepared-statements"><structname>pg_prepared_statements</structname></link>
        to report generic and custom plan counts (Atsushi Torikoshi,
        Kyotaro Horiguchi)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-02-15 [46d6e5f56] Display the time when the process started waiting for th
-->

       <para>
        Add lock wait start time to <link
        linkend="view-pg-locks"><structname>pg_locks</structname></link>
        (Atsushi Torikoshi)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-03-15 [d75288fb2] Make archiver process an auxiliary process.
-->

       <para>
        Make the archiver process visible in
        <structname>pg_stat_activity</structname> (Kyotaro Horiguchi)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-03-24 [84007043f] Rename wait event WalrcvExit to WalReceiverExit.
-->

       <para>
        Add wait event <link
        linkend="monitoring-pg-stat-activity-view"><literal>WalReceiverExit</literal></link>
        to report <acronym>WAL</acronym> receiver exit wait time (Fujii
        Masao)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-02-17 [f40c6969d] Routine usage information schema tables
-->

       <para>
        Implement information schema view <link
        linkend="infoschema-routine-column-usage"><structname>routine_column_usage</structname></link>
        to track columns referenced by function and procedure default
        expressions (Peter Eisentraut)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Authentication</title>

     <itemizedlist>

      <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2021-03-29 [6d7a6feac] Allow matching the DN of a client certificate for authen
-->

       <para>
        Allow an SSL certificate's distinguished name (<acronym>DN</acronym>)
        to be matched for client certificate authentication (Andrew
        Dunstan)
       </para>

       <para>
        The new <link
        linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>
        option <literal>clientname=DN</literal> allows comparison with
        certificate attributes beyond the <literal>CN</literal> and can
        be combined with ident maps.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-03 [8f8154a50] Allow records to span multiple lines in pg_hba.conf and
-->

       <para>
        Allow <filename>pg_hba.conf</filename> and <link
        linkend="auth-username-maps"><filename>pg_ident.conf</filename></link>
        records to span multiple lines (Fabien Coelho)
       </para>

       <para>
        A backslash at the end of a line allows record contents to be
        continued on the next line.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-02-18 [f5465fade] Allow specifying CRL directory
-->

       <para>
        Allow the specification of a certificate revocation list
        (<acronym>CRL</acronym>) directory (Kyotaro Horiguchi)
       </para>

       <para>
        This is controlled by server parameter <xref
        linkend="guc-ssl-crl-dir"/> and libpq connection option
        <xref linkend='libpq-connect-sslcrldir'/>.  Previously only
        single <acronym>CRL</acronym> files could be specified.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-03 [67a472d71] Remove arbitrary restrictions on password length.
-->

       <para>
        Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Server Configuration</title>

     <itemizedlist>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-06 [9877374be] Add idle_session_timeout.
-->

       <para>
        Add server parameter <xref linkend="guc-idle-session-timeout"/>
        to close idle sessions (Li Japin)
       </para>

       <para>
        This is similar to <xref
        linkend="guc-idle-in-transaction-session-timeout"/>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2021-03-24 [bbcc4eb2e] Change checkpoint_completion_target default to 0.9
-->

       <para>
        Change <xref linkend="guc-checkpoint-completion-target"/> default
        to 0.9 (Stephen Frost)
       </para>

       <para>
        The previous default was 0.5.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-08-03 [b8fdee7d0] Add %P to log_line_prefix for parallel group leader
-->

       <para>
        Allow <literal>%P</literal>
        in <xref linkend="guc-log-line-prefix"/> to report the
        parallel group leader's PID for a parallel worker (Justin Pryzby)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-11-07 [a05dbf477] Add GUC_LIST_INPUT and GUC_LIST_QUOTE to unix_socket_dir
-->

       <para>
        Allow <xref linkend="guc-unix-socket-directories"/> to specify
        paths as individual, comma-separated quoted strings (Ian Lawrence
        Barwick)
       </para>

       <para>
        Previously all the paths had to be in a single quoted string.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2020-07-31 [84b1c63ad] Preallocate some DSM space at startup.
-->

       <para>
        Allow startup allocation of dynamic shared memory (Thomas Munro)
       </para>

       <para>
        This is controlled by <xref
        linkend="guc-min-dynamic-shared-memory"/>.   This allows more
        use of huge pages.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2020-07-17 [d2bddc250] Add huge_page_size setting for use on Linux.
-->

       <para>
        Add server parameter <xref linkend="guc-huge-page-size"/> to
        control the size of huge pages used on Linux (Odin Ugedal)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3>
    <title>Streaming Replication and Recovery</title>

    <itemizedlist>

     <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2020-11-12 [9c4f5192f] Allow pg_rewind to use a standby server as the source sy
-->

      <para>
       Allow standby servers to be rewound via <link
       linkend="app-pgrewind"><application>pg_rewind</application></link>
       (Heikki Linnakangas)
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-12-02 [942305a36] Allow restore_command parameter to be changed with reloa
-->

      <para>
       Allow the <xref linkend="guc-restore-command"/> setting to be changed
       during a server reload (Sergei Kornilov)
      </para>

      <para>
       You can also set <varname>restore_command</varname> to an empty
       string and reload to force recovery to only read from the <link
       linkend="storage-file-layout"><filename>pg_wal</filename></link>
       directory.
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-01-08 [0650ff230] Add GUC to log long wait times on recovery conflicts.
Author: Fujii Masao <fujii@postgresql.org>
2021-01-13 [39b03690b] Log long wait time on recovery conflict when it's resolv
-->

      <para>
       Add server parameter <xref
       linkend="guc-log-recovery-conflict-waits"/> to report long recovery
       conflict wait times (Bertrand Drouvot, Masahiko Sawada)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-01-18 [15251c0a6] Pause recovery for insufficient parameter settings
-->

      <para>
       Pause recovery on a hot standby server if the primary changes its
       parameters in a way that prevents replay on the standby (Peter
       Eisentraut)
      </para>

      <para>
       Previously the standby would shut down immediately.
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-03-11 [32fd2b57d] Be clear about whether a recovery pause has taken effect
-->

      <para>
       Add function <link
       linkend="functions-recovery-control"><function>pg_get_wal_replay_pause_state()</function></link>
       to report the recovery state (Dilip Kumar)
      </para>

      <para>
       It gives more detailed information than <link
       linkend="functions-recovery-control"><function>pg_is_wal_replay_paused()</function></link>,
       which still exists.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-05 [bf8a662c9] Introduce a new GUC_REPORT setting "in_hot_standby".
-->

      <para>
       Add new read-only server parameter <xref linkend="guc-in-hot-standby"/>
       (Haribabu Kommi, Greg Nancarrow, Tom Lane)
      </para>

      <para>
       This allows clients to easily detect whether they are connected to
       a hot standby server.
      </para>
     </listitem>

     <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-01-12 [d6ad34f34] Optimize DropRelFileNodeBuffers() for recovery.
-->

      <para>
       Speed truncation of small tables during recovery on clusters with
       a large number of shared buffers (Kirk Jamison)
      </para>
     </listitem>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-03-20 [61752afb2] Provide recovery_init_sync_method=syncfs.
-->

      <para>
       Allow file system sync at the start of crash recovery on Linux
       (Thomas Munro)
      </para>

      <para>
       By default, <productname>PostgreSQL</productname>
       opens and fsyncs each data file in the database cluster at the
       start of crash recovery.  A new setting, <xref
       linkend="guc-recovery-init-sync-method"/><literal>=syncfs</literal>,
       instead syncs each filesystem used by the cluster.
       This allows for faster recovery on systems with many database files.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-07-12 [b1e48bbe6] Include replication origins in SQL functions for commit
-->

      <para>
       Add function <link
       linkend="functions-info"><function>pg_xact_commit_timestamp_origin()</function></link>
       to return the commit timestamp and replication origin of the
       specified transaction (Movead Li)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-07-12 [b1e48bbe6] Include replication origins in SQL functions for commit
-->

      <para>
       Add the replication origin to the record returned by <link
       linkend="functions-info"><function>pg_last_committed_xact()</function></link>
       (Movead Li)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-06-14 [cc072641d] Replace superuser check by ACLs for replication origin f
-->

      <para>
       Allow replication <link linkend="functions-replication">origin
       functions</link> to be controlled using standard function permission
       controls (Martín Marqués)
      </para>

      <para>
       Previously these functions could only be executed by superusers,
       and this is still the default.
      </para>
     </listitem>

    </itemizedlist>

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

     <itemizedlist>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-09-03 [464824323] Add support for streaming to built-in logical replicatio
Author: Amit Kapila <akapila@postgresql.org>
2020-12-30 [0aa8a01d0] Extend the output plugin API to allow decoding of prepar
Author: Amit Kapila <akapila@postgresql.org>
2021-01-04 [a271a1b50] Allow decoding at prepare time in ReorderBuffer.
Author: Amit Kapila <akapila@postgresql.org>
2020-08-08 [7259736a6] Implement streaming mode in ReorderBuffer.
-->

       <para>
        Allow logical replication to stream long in-progress transactions
        to subscribers (Dilip Kumar, Amit Kapila, Ajin
        Cherian, Tomas Vondra, Nikhil Sontakke, Stas Kelvich)
       </para>

       <para>
        Previously transactions that exceeded <xref
        linkend="guc-logical-decoding-work-mem"/> were written to disk
        until the transaction completed.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-07-28 [45fdc9738] Extend the logical decoding output plugin API with strea
-->

       <para>
        Enhance the logical replication <acronym>API</acronym> to allow
        streaming large in-progress transactions (Tomas Vondra, Dilip
        Kumar, Amit Kapila)
       </para>

       <para>
        The output functions begin with <link
        linkend="logicaldecoding-output-plugin-stream-start"><literal>stream</literal></link>.
        <application>test_decoding</application> also supports these.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-02-12 [ce0fdbfe9] Allow multiple xacts during table sync in logical replic
-->

       <para>
        Allow multiple transactions during table sync in logical
        replication (Peter Smith, Amit Kapila, Takamichi Osumi)
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-07-20 [0bead9af4] Immediately WAL-log subtransaction and top-level XID ass
-->

       <para>
        Immediately <acronym>WAL</acronym>-log subtransaction and top-level
        <type>XID</type> association (Tomas Vondra, Dilip Kumar, Amit
        Kapila)
       </para>

       <para>
        This is useful for logical decoding.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-12-30 [0aa8a01d0] Extend the output plugin API to allow decoding of prepar
Author: Amit Kapila <akapila@postgresql.org>
2021-01-04 [a271a1b50] Allow decoding at prepare time in ReorderBuffer.
Author: Amit Kapila <akapila@postgresql.org>
2021-03-03 [19890a064] Add option to enable two_phase commits via pg_create_log
-->

       <para>
        Enhance logical decoding APIs to handle two-phase commits (Ajin
        Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)
       </para>

       <para>
        This is controlled via <link
        linkend="functions-replication"><function>pg_create_logical_replication_slot()</function></link>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-07-23 [c55040ccd] WAL Log invalidations at command end with wal_level=logi
-->

       <para>
        Add cache invalidation messages to the <acronym>WAL</acronym>
        during command completion when using logical replication (Dilip
        Kumar, Tomas Vondra, Amit Kapila)
       </para>

       <para>
        This allows logical streaming of in-progress transactions.
        When logical replication is disabled, invalidation messages are
        generated only at transaction completion.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2020-10-15 [d7eb52d71] Execute invalidation messages for each XLOG_XACT_INVALID
-->

       <para>
        Allow logical decoding to more efficiently process cache
        invalidation messages (Dilip Kumar)
       </para>

       <para>
        This allows <link linkend="logicaldecoding">logical decoding</link>
        to work efficiently in presence of a large amount of
        <acronym>DDL</acronym>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-04-06 [ac4645c01] Allow pgoutput to send logical decoding messages.
-->

       <para>
        Allow control over whether logical decoding messages are sent to
        the replication stream (David Pirotte, Euler Taveira)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-18 [9de77b545] Allow logical replication to transfer data in binary for
-->

       <para>
        Allow logical replication subscriptions to use binary transfer mode
        (Dave Cramer)
       </para>

       <para>
        This is faster than text mode, but slightly less robust.
       </para>
      </listitem>

      <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-03-30 [f64ea6dc5] Add a xid argument to the filter_prepare callback for ou
-->

       <para>
        Allow logical decoding to be filtered by xid (Markus Wanner)
       </para>
      </listitem>

     </itemizedlist>
    </sect4>

   </sect3>

   <sect3>
    <title><link linkend="sql-select"><command>SELECT</command></link>, <link linkend="sql-insert"><command>INSERT</command></link></title>

    <itemizedlist>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-18 [06a7c3154] Allow most keywords to be used as column labels without
-->

      <para>
       Reduce the number of keywords that can't be used as column labels
       without <literal>AS</literal> (Mark Dilger)
      </para>

      <para>
       There are now 90% fewer restricted keywords.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-03-31 [055fee7eb] Allow an alias to be attached to a <literal>JOIN ... USING</literal>
-->

      <para>
       Allow an alias to be specified for <literal>JOIN</literal>'s
       <literal>USING</literal> clause (Peter Eisentraut)
      </para>

      <para>
       The alias is created by writing <literal>AS</literal> after the
       <literal>USING</literal> clause.  It can be used as a table
       qualification for the merged <literal>USING</literal> columns.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-03-18 [be45be9c3] Implement GROUP BY DISTINCT
-->

      <para>
       Allow <literal>DISTINCT</literal> to be added to <literal>GROUP
       BY</literal> to remove duplicate <literal>GROUPING SET</literal>
       combinations (Vik Fearing)
      </para>

      <para>
       For example, <literal>GROUP BY CUBE (a,b), CUBE (b,c)</literal>
       will generate duplicate grouping combinations without
       <literal>DISTINCT</literal>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-22 [17958972f] Allow a multi-row <command>INSERT</command> to specify DEFAULTs for a gener
-->

      <para>
       Properly handle <literal>DEFAULT</literal> entries in multi-row
       <literal>VALUES</literal> lists in <command>INSERT</command>
       (Dean Rasheed)
      </para>

      <para>
       Such cases used to throw an error.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-02-01 [3696a600e] SEARCH and CYCLE clauses
Author: Peter Eisentraut <peter@eisentraut.org>
2021-02-27 [f4adc41c4] Enhanced cycle mark values
-->

      <para>
       Add <acronym>SQL</acronym>-standard <literal>SEARCH</literal>
       and <literal>CYCLE</literal> clauses for <link
       linkend="queries-with">common table expressions</link> (Peter
       Eisentraut)
      </para>

      <para>
       The same results could be accomplished using existing syntax, but
       much less conveniently.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-13 [6c0373ab7] Allow table-qualified variable names in ON CONFLICT ...
-->

      <para>
       Allow column names in the <literal>WHERE</literal> clause
       of <literal>ON CONFLICT</literal> to be table-qualified (Tom Lane)
      </para>

      <para>
       Only the target table can be referenced, however.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Utility Commands</title>

    <itemizedlist>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-03-17 [9e7ccd9ef] Enable parallelism in REFRESH MATERIALIZED VIEW.
-->

      <para>
       Allow <link linkend="sql-refreshmaterializedview"><command>REFRESH
       MATERIALIZED VIEW</command></link> to use parallelism (Bharath
       Rupireddy)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-02-04 [c5b286047] Add TABLESPACE option to REINDEX
Author: Michael Paquier <michael@paquier.xyz>
2021-03-03 [57e6db706] Add - -tablespace option to reindexdb
-->

      <para>
       Allow <link linkend="sql-reindex"><command>REINDEX</command></link>
       to change the tablespace of the new index (Alexey Kondratov,
       Michael Paquier, Justin Pryzby)
      </para>

      <para>
       This is done by specifying a <literal>TABLESPACE</literal> clause.
       A <option>--tablespace</option> option was also added to <link
       linkend="app-reindexdb"><application>reindexdb</application></link>
       to control this.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-09-08 [a6642b3ae] Add support for partitioned tables and indexes in REINDE
-->

      <para>
       Allow <command>REINDEX</command> to process all child tables or
       indexes of a partitioned relation (Justin Pryzby, Michael Paquier)
      </para>
     </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2020-11-25 [c98763bf5] Avoid spurious waits in concurrent indexing
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-01-15 [f9900df5f] Avoid spurious wait in concurrent reindex
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-02-23 [d9d076222] VACUUM: ignore indexing operations with CONCURRENTLY
-->

       <para>
        Allow index commands using <command>CONCURRENTLY</command> to
        avoid waiting for the completion of other operations using
        <command>CONCURRENTLY</command> (Álvaro Herrera)
       </para>
      </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-25 [0a0727ccf] Improve performance of binary COPY FROM through better b
-->

      <para>
       Improve the performance of <link linkend="sql-copy"><command>COPY
       FROM</command></link> in binary mode (Bharath Rupireddy, Amit
       Langote)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-04 [40c24bfef] Improve our ability to regurgitate SQL-syntax function c
-->

      <para>
       Preserve <acronym>SQL</acronym> standard syntax for SQL-defined
       functions in <link linkend="sql-createview">view definitions</link>
       (Tom Lane)
      </para>

      <para>
       Previously, calls to SQL-standard functions such as <link
       linkend="functions-datetime-extract"><function>EXTRACT()</function></link>
       were shown in plain function-call syntax.  The original syntax
       is now preserved when displaying a view or rule.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-01-30 [6aaaa76bb] Allow GRANTED BY clause in normal GRANT and REVOKE state
-->

      <para>
       Add the <acronym>SQL</acronym>-standard
       clause <literal>GRANTED BY</literal> to <link
       linkend="sql-grant"><command>GRANT</command></link> and <link
       linkend="sql-revoke"><command>REVOKE</command></link> (Peter
       Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-14 [92bf7e2d0] Provide the OR REPLACE option for CREATE TRIGGER.
-->

      <para>
       Add <literal>OR REPLACE</literal> option for <link
       linkend="sql-createtrigger"><command>CREATE TRIGGER</command></link>
       (Takamichi Osumi)
      </para>

      <para>
       This allows pre-existing triggers to be conditionally replaced.
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-04-08 [8ff1c9464] Allow TRUNCATE command to truncate foreign tables.
-->

      <para>
       Allow <link
       linkend="sql-truncate"><command>TRUNCATE</command></link> to
       operate on foreign tables (Kazutaka Onishi, Kohei KaiGai)
      </para>

      <para>
       The <link
       linkend="postgres-fdw"><application>postgres_fdw</application></link>
       module also now supports this.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-04-06 [82ed7748b] ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
-->

      <para>
       Allow publications to be more easily added to and removed from a
       subscription (Japin Li)
      </para>

      <para>
       The new syntax is <link
       linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION
       ... ADD/DROP PUBLICATION</command></link>.  This avoids having to
       specify all publications to add/remove entries.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-01-30 [dfb75e478] Add primary keys and unique constraints to system catalo
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-02 [62f34097c] Build in some knowledge about foreign-key relationships
-->

      <para>
       Add primary keys, unique constraints, and foreign keys to <link
       linkend="catalogs">system catalogs</link> (Peter Eisentraut)
      </para>

      <para>
       These changes help <acronym>GUI</acronym> tools analyze the system
       catalogs.  The existing unique indexes of catalogs now have
       associated <literal>UNIQUE</literal> or <literal>PRIMARY
       KEY</literal> constraints.  Foreign key relationships are not
       actually stored or implemented as constraints, but can be obtained
       for display from the
       function <link linkend="functions-info-catalog-table">pg_get_catalog_foreign_keys()</link>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-09-17 [45b980570] Allow CURRENT_ROLE where CURRENT_USER is accepted
-->

      <para>
       Allow <link
       linkend="functions-info"><literal>CURRENT_ROLE</literal></link>
       every place <literal>CURRENT_USER</literal> is accepted (Peter
       Eisentraut)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Data Types</title>

    <itemizedlist>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-12-09 [c7aba7c14] Support subscripting of arbitrary types, not only arrays
-->

      <para>
       Allow extensions and built-in data types to implement <link
       linkend="sql-altertype">subscripting</link> (Dmitry Dolgov)
      </para>

      <para>
       Previously subscript handling was hard-coded into the server, so
       that subscripting could only be applied to array types.  This change
       allows subscript notation to be used to extract or assign portions
       of a value of any type for which the concept makes sense.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-01-31 [676887a3b] Implementation of subscripting for jsonb
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-01-31 [81fcc72e6] Filling array gaps during jsonb subscripting
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-01-31 [aa6e46daf] Throw error when assigning jsonb scalar instead of a com
-->

      <para>
       Allow subscripting of <link
       linkend="datatype-json"><type>JSONB</type></link> (Dmitry Dolgov)
      </para>

      <para>
       <type>JSONB</type> subscripting can be used to extract and assign
       to portions of <type>JSONB</type> documents.
      </para>
     </listitem>

     <listitem>
<!--
Author: Author: Alexander Korotkov <akorotkov@postgresql.org>
2020-12-20 [6df7a9698] Multirange datatypes
Author: Alexander Korotkov <akorotkov@postgresql.org>
2020-12-29 [db6335b5b] Add support of multirange matching to the existing range
Author: Alexander Korotkov <akorotkov@postgresql.org>
2020-12-30 [62097a4cc] Fix selectivity estimation @&gt; (anymultirange, anyrange)
Author: Alexander Korotkov <akorotkov@postgresql.org>
2021-07-18 [244ad5415] Support for unnest(multirange)
-->

      <para>
       Add support for <link linkend="rangetypes">multirange data
       types</link> (Paul Jungwirth, Alexander Korotkov)
      </para>

      <para>
       These are like range data types, but they allow the specification
       of multiple, ordered, non-overlapping ranges.  An associated
       multirange type is automatically created for every range type.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-08 [cbcc8726b] Update snowball
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-08 [c2e71cb35] Update documentation for snowball update
Author: Peter Eisentraut <peter@eisentraut.org>
2021-02-19 [678d0e239] Update snowball
-->

      <para>
       Add support for the <link
       linkend="textsearch-snowball-dictionary">stemming</link> of
       languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish
       (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-23 [83b61319a] Improve behavior of tsearch_readline(), and remove t_rea
-->

      <para>
       Allow <link linkend="textsearch-intro-configurations">tsearch data
       files</link> to have unlimited line lengths (Tom Lane)
      </para>

      <para>
       The previous limit was 4K bytes.  Also remove function
       <function>t_readline()</function>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-22 [a57d312a7] Support infinity and -infinity in the numeric data type.
-->

      <para>
       Add support for <literal>Infinity</literal> and
       <literal>-Infinity</literal> values in the <link
       linkend="datatype-numeric">numeric data type</link> (Tom Lane)
      </para>

      <para>
       Floating-point data types already supported these.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-23 [0cc993278] Rename the "point is strictly above/below point" compari
-->

      <para>
       Add <link linkend="functions-geometry">point operators</link>
       <literal>&lt;&lt;|</literal> and <literal>|&gt;&gt;</literal>
       representing strictly above/below tests (Emre Hasegeli)
      </para>

      <para>
       Previously these were called <literal>&gt;^</literal>
       and <literal>&lt;^</literal>, but that naming is inconsistent with
       other geometric data types.  The old names remain available,
       but may someday be removed.
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-06-30 [9bae7e4cd] Add +(pg_lsn,numeric) and -(pg_lsn,numeric) operators.
-->

      <para>
       Add operators to add and subtract <link
       linkend="datatype-pg-lsn"><type>LSN</type></link> and numeric
       (byte) values (Fujii Masao)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-21 [670c0a1d4] Weaken type-OID-matching checks in array_recv and record
-->

      <para>
       Allow <link linkend="protocol-format-codes">binary data
       transfer</link> to be more forgiving of array and record
       <type>OID</type> mismatches (Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-06 [f7f70d5e2] Create composite array types for initdb-created relation
-->

      <para>
       Create composite array types for system catalogs (Wenjing Zeng)
      </para>

      <para>
       User-defined relations have long had composite types associated
       with them, and also array types over those composite types.
       System catalogs now do as well.  This change also fixes an
       inconsistency that creating a user-defined table in single-user
       mode would fail to create a composite array type.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Functions</title>

    <itemizedlist>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-04-07 [e717a9a18] SQL-standard function body
-->

      <para>
       Allow <acronym>SQL</acronym>-language <link
       linkend="sql-createfunction">functions</link> and <link
       linkend="sql-createprocedure">procedures</link> to use
       <acronym>SQL</acronym>-standard function bodies (Peter Eisentraut)
      </para>

      <para>
       Previously only string-literal function bodies were supported.
       When writing a function or procedure in SQL-standard syntax,
       the body is parsed immediately and stored as a parse tree.
       This allows better tracking of function dependencies, and can have
       security benefits.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-10-05 [2453ea142] Support for OUT parameters in procedures
Author: Peter Eisentraut <peter@eisentraut.org>
2020-10-27 [9213462c5] Make procedure OUT parameters work with JDBC
-->

      <para>
       Allow <link linkend="sql-createprocedure">procedures</link> to have
       <literal>OUT</literal> parameters (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-04 [9e38c2bb5] Declare assorted array functions using anycompatible not
-->

      <para>
       Allow some array functions to operate on a mix of compatible data
       types (Tom Lane)
      </para>

      <para>
       The functions <link
       linkend="functions-array"><function>array_append()</function></link>,
       <function>array_prepend()</function>,
       <function>array_cat()</function>,
       <function>array_position()</function>,
       <function>array_positions()</function>,
       <function>array_remove()</function>,
       <function>array_replace()</function>, and <link
       linkend="functions-math"><function>width_bucket()</function></link>
       now take <type>anycompatiblearray</type> instead
       of <type>anyarray</type> arguments.  This makes them less fussy
       about exact matches of argument types.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-03 [0a687c8f1] Add trim_array() function.
-->

      <para>
       Add <acronym>SQL</acronym>-standard <link
       linkend="functions-array"><function>trim_array()</function></link>
       function (Vik Fearing)
      </para>

      <para>
       This could already be done with array slices, but less easily.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-18 [a6cf3df4e] Add bytea equivalents of ltrim() and rtrim().
-->

      <para>
       Add <type>bytea</type> equivalents of <link
       linkend="functions-binarystring"><function>ltrim()</function></link>
       and <function>rtrim()</function> (Joel Jacobson)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-13 [ec0294fb2] Support negative indexes in split_part().
-->

      <para>
       Support negative indexes in <link
       linkend="functions-string"><function>split_part()</function></link>
       (Nikhil Benesch)
      </para>

      <para>
       Negative values start from the last field and count backward.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-02 [66f163068] Add string_to_table() function.
-->

      <para>
       Add <link
       linkend="functions-string"><function>string_to_table()</function></link>
       function to split a string on delimiters (Pavel Stehule)
      </para>

      <para>
       This is similar to the <link
       linkend="functions-string"><function>regexp_split_to_table()</function></link>
       function.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-03-29 [f37fec837] Add unistr function
-->

      <para>
       Add <link
       linkend="functions-string"><function>unistr()</function></link>
       function to allow Unicode characters to be specified as
       backslash-hex escapes in strings (Pavel Stehule)
      </para>

      <para>
       This is similar to how Unicode can be specified in literal strings.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-03-06 [f9a0392e1] Add bit_xor aggregate function
-->

      <para>
       Add <link
       linkend="functions-aggregate"><function>bit_xor()</function></link>
       XOR aggregate function (Alexey Bashtanov)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-03-23 [a6715af1e] Add bit_count SQL function
-->

      <para>
       Add function <link
       linkend="functions-binarystring"><function>bit_count()</function></link>
       to return the number of bits set in a bit or byte string (David
       Fetter)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-03-24 [49ab61f0b] Add date_bin function
Author: Peter Eisentraut <peter@eisentraut.org>
2021-04-10 [496e58bb0] Improve behavior of date_bin with origin in the future
-->

      <para>
       Add <link
       linkend="functions-datetime-bin"><function>date_bin()</function></link>
       function (John Naylor)
      </para>

      <para>
       This function <quote>bins</quote> input timestamps, grouping them
       into intervals of a uniform length aligned with a specified origin.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-29 [a094c8ff5] Fix make_timestamp[tz] to accept negative years as meani
-->

      <para>
       Allow <link
       linkend="functions-datetime"><function>make_timestamp()</function></link>/<function>make_timestamptz()</function>
       to accept negative years (Peter Eisentraut)
      </para>

      <para>
       Negative values are interpreted as <literal>BC</literal> years.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-29 [78c887679] Add current substring regular expression syntax
-->

      <para>
       Add newer regular expression <link
       linkend="functions-string"><function>substring()</function></link>
       syntax (Peter Eisentraut)
      </para>

      <para>
       The new SQL-standard syntax is <literal>SUBSTRING(text SIMILAR
       pattern ESCAPE escapechar)</literal>.  The previous standard syntax was
       <literal>SUBSTRING(text FROM pattern FOR escapechar)</literal>,
       which is still accepted by <productname>PostgreSQL</productname>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-25 [2a0af7fe4] Allow complemented character class escapes within regex
-->

      <para>
       Allow complemented character class escapes <link
       linkend="posix-escape-sequences">\D</link>, <literal>\S</literal>,
       and <literal>\W</literal> within regular expression brackets (Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-02-25 [2a0af7fe4] Allow complemented character class escapes within regex
-->

      <para>
       Add <link
       linkend="posix-bracket-expressions"><literal>[[:word:]]</literal></link>
       as a regular expression character class, equivalent
       to <literal>\w</literal> (Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-04 [5c292e6b9] Declare lead() and lag() using anycompatible not anyelem
-->

      <para>
       Allow more flexible data types for default values of <link
       linkend="functions-window"><function>lead()</function></link>
       and <function>lag()</function> window functions (Vik Fearing)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-04 [fac83dbd6] Remove underflow error in float division with infinite d
-->

      <para>
       Make non-zero <link linkend="datatype-float">floating-point values</link>
       divided by infinity return zero (Kyotaro Horiguchi)
      </para>

      <para>
       Previously such operations produced underflow errors.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-20 [4fb6aeb4f] Make floating-point "NaN / 0" return NaN instead of rais
-->

      <para>
       Make floating-point division of NaN by zero return NaN
       (Tom Lane)
      </para>

      <para>
       Previously this returned an error.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-06-14 [decbe2bfb] Fix behavior of exp() and power() for infinity inputs.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-06-15 [e532b1d57] Fix power() for infinity inputs some more.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-06-15 [5674eb987] Fix power() for large inputs yet more.
-->

      <para>
       Cause <link
       linkend="functions-math"><function>exp()</function></link> and
       <function>power()</function> for negative-infinity exponents to
       return zero (Tom Lane)
      </para>

      <para>
       Previously they often returned underflow errors.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-11-21 [8597a48d0] Fix FPeq() and friends to get the right answers for infi
-->

      <para>
       Improve the accuracy of geometric computations involving
       infinity (Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-07-25 [8a37951ee] Mark built-in coercion functions as leakproof where poss
-->

      <para>
       Mark built-in type coercion functions as leakproof where possible
       (Tom Lane)
      </para>

      <para>
       This allows more use of functions that require type conversion in
       security-sensitive situations.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-07-15 [2a10fdc43] Eliminate cache lookup errors in SQL functions for objec
-->

      <para>
       Change <link
       linkend="functions-info"><function>pg_describe_object()</function></link>,
       <function>pg_identify_object()</function>, and
       <function>pg_identify_object_as_address()</function> to always report
       helpful error messages for non-existent objects (Michael Paquier)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="plpgsql">PL/pgSQL</link></title>

    <itemizedlist>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-04 [c9d529848] Re-implement pl/pgsql's expression and assignment parsin
-->

      <para>
       Improve PL/pgSQL's <link
       linkend="plpgsql-expressions">expression</link> and <link
       linkend="plpgsql-statements-assignment">assignment</link> parsing
       (Tom Lane)
      </para>

      <para>
       This change allows assignment to array slices and nested record
       fields.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-06-12 [2f48ede08] Avoid using a cursor in plpgsql's RETURN QUERY statement
-->

      <para>
       Allow plpgsql's <link
       linkend="plpgsql-control-structures"><literal>RETURN
       QUERY</literal></link> to execute its query using parallelism
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-25 [ee895a655] Improve performance of repeated CALLs within plpgsql pro
-->

      <para>
       Improve performance of repeated <link
       linkend="plpgsql-transactions">CALL</link>s within plpgsql
       procedures (Pavel Stehule, Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Client Interfaces</title>

    <itemizedlist>

     <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-03-15 [acb7e4eb6] Implement pipeline mode in libpq
-->

      <para>
       Add <link linkend="libpq-pipeline-sending">pipeline</link> mode
       to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera)
      </para>

      <para>
       This allows multiple queries to be sent, only waiting for completion
       when a specific synchronization message is sent.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-02 [d16f8c8e4] Mark default_transaction_read_only as GUC_REPORT.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-02 [ee28cacf6] Extend the abilities of libpq's target_session_attrs par
-->

      <para>
       Enhance libpq's <link
       linkend="libpq-paramkeywords"><option>target_session_attrs</option></link>
       parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C,
       Tom Lane)
      </para>

      <para>
       The new options are <literal>read-only</literal>,
       <literal>primary</literal>, <literal>standby</literal>, and
       <literal>prefer-standby</literal>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-03-30 [198b3716d] Improve PQtrace() output format
-->

      <para>
       Improve the output format of libpq's <link
       linkend="libpq-control"><function>PQtrace()</function></link>
       (Aya Iwata, Álvaro Herrera)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Meskes <meskes@postgresql.org>
2021-03-24 [ad8305a43] Add DECLARE STATEMENT command to ECPG
-->

      <para>
       Allow an ECPG SQL identifier to be linked to
       a specific connection (Hayato Kuroda)
      </para>

      <para>
       This is done via <link
       linkend="ecpg-sql-declare-statement"><literal>DECLARE
       ... STATEMENT</literal></link>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Client Applications</title>

    <itemizedlist>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-06-22 [9550ea302] Add - -no-index-cleanup and - -no-truncate to vacuumdb.
-->

      <para>
       Allow <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       to skip index cleanup and truncation (Nathan Bossart)
      </para>

      <para>
       The options are <option>--no-index-cleanup</option> and
       <option>--no-truncate</option>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-03-31 [6568cef26] Add support for - -extension in pg_dump
-->

      <para>
       Allow <link
       linkend="app-pgdump"><application>pg_dump</application></link>
       to dump only certain extensions (Guillaume Lelarge)
      </para>

      <para>
       This is controlled by option <option>--extension</option>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2021-04-06 [6b258e3d6] pgbench: Function to generate random permutations.
-->

      <para>
       Add <link
       linkend="pgbench"><application>pgbench</application></link>
       <function>permute()</function> function to randomly shuffle values
       (Fabien Coelho, Hironobu Suzuki, Dean Rasheed)
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-09-01 [d760d942c] pgbench: Fix bug in measurement of disconnection delays.
-->

      <para>
       Include disconnection times in the reconnection overhead measured
       by <application>pgbench</application> with <option>-C</option>
       (Yugo Nagata)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-09-17 [99175141c] Improve common/logging.c's support for multiple verbosit
-->

      <para>
       Allow multiple verbose option specifications (<option>-v</option>)
       to increase the logging verbosity (Tom Lane)
      </para>

      <para>
       This behavior is supported by <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>.
      </para>
     </listitem>

    </itemizedlist>

    <sect4>
    <title><xref linkend="app-psql"/></title>

     <itemizedlist>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-07 [a3027e1e7] Allow psql's \df and \do commands to specify argument ty
-->

       <para>
        Allow <application>psql</application>'s <literal>\df</literal>
        and <literal>\do</literal> commands to specify function and
        operator argument types (Greg Sabino Mullane, Tom Lane)
       </para>

       <para>
        This helps reduce the number of matches printed for overloaded names.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-09-02 [07f386ede] Add access method names to \d[i|m|t]+ in psql
-->

       <para>
        Add an access method column to <application>psql</application>'s
        <literal>\d[i|m|t]+</literal> output (Georgios Kokolatos)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-05 [7d80441d2] Allow psql's \dt and \di to show TOAST tables and their
-->

       <para>
        Allow <application>psql</application>'s <literal>\dt</literal>
        and <literal>\di</literal> to show <acronym>TOAST</acronym>
        tables and their indexes (Justin Pryzby)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-01-20 [ad600bba0] psql \dX: list extended statistics objects
-->

       <para>
        Add <application>psql</application> command <literal>\dX</literal>
        to list extended statistics objects (Tatsuro Yamada)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-07 [a3027e1e7] Allow psql's \df and \do commands to specify argument ty
-->

       <para>
        Fix <application>psql</application>'s <literal>\dT</literal> to
        understand array syntax and backend grammar aliases,
        like <literal>int</literal> for <literal>integer</literal>
        (Greg Sabino Mullane, Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-03 [55873a00e] Improve psql's behavior when the editor is exited withou
-->

       <para>
        When editing the previous query or a file with
        <application>psql</application>'s <literal>\e</literal>, or using
        <literal>\ef</literal> and <literal>\ev</literal>, ignore the
        results if the editor exits without saving (Laurenz Albe)
       </para>

       <para>
        Previously, such edits would load the previous query into
        the query buffer, and typically execute it immediately.  This was
        deemed to be probably not what the user wants.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-07-21 [c273d9d8c] Rework tab completion of COPY and \copy in psql
Author: Michael Paquier <michael@paquier.xyz>
2020-07-30 [f1af75c5f] Include partitioned tables for tab completion of VACUUM
Author: Michael Paquier <michael@paquier.xyz>
2020-08-11 [1f75b4541] Improve tab completion of REINDEX in psql
Author: Michael Paquier <michael@paquier.xyz>
2020-09-17 [7307df16a] Improve tab completion of IMPORT FOREIGN SCHEMA in psql
Author: Fujii Masao <fujii@postgresql.org>
2020-09-28 [0baf82fa0] Improve tab-completion for DEALLOCATE.
Author: Michael Paquier <michael@paquier.xyz>
2020-10-24 [0b46e82c0] Add tab completion for ALTER TABLE .. FORCE ROW LEVEL SE
Author: Michael Paquier <michael@paquier.xyz>
2020-11-18 [bf0aa7c4b] Add tab completion for CREATE [OR REPLACE] TRIGGER in ps
Author: Fujii Masao <fujii@postgresql.org>
2021-01-14 [3f238b882] Improve tab-completion for CLOSE, DECLARE, FETCH and MOV
Author: Thomas Munro <tmunro@postgresql.org>
2021-02-05 [e1c02d92a] Tab-complete CREATE DATABASE ... LOCALE.
Author: Michael Paquier <michael@paquier.xyz>
2021-02-17 [e6b8e83b9] Add psql completion for [ NO ] DEPENDS ON EXTENSION
Author: Thomas Munro <tmunro@postgresql.org>
2021-02-23 [5bc09a747] Tab-complete CREATE COLLATION.
Author: Fujii Masao <fujii@postgresql.org>
2021-02-25 [6b40d9bdb] Improve tab-completion for TRUNCATE.
Author: Michael Paquier <michael@paquier.xyz>
2021-03-19 [5b2266e33] Improve tab completion of IMPORT FOREIGN SCHEMA with \h
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-04-08 [d1fcbde57] Add support for tab-completion of type arguments in \df,
Author: Fujii Masao <fujii@postgresql.org>
2021-04-12 [81e094bdf] Support tab-complete for TRUNCATE on foreign tables.
Author: Michael Paquier <michael@paquier.xyz>
2021-04-21 [22b2dec31] Add CURRENT_ROLE to list of roles for tab completion of
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-04-26 [6dd1042ed] psql: tab-complete ALTER ... DETACH CONCURRENTLY / FINAL
Author: Michael Paquier <michael@paquier.xyz>
2021-05-13 [1906cc07d] Make saner the tab completion of INSERT and DELETE in ps
-->

       <para>
        Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby,
        Georgios Kokolatos, Julien Rouhaud)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3>
    <title>Server Applications</title>

    <itemizedlist>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-03-12 [970609283] Add pg_amcheck, a CLI for contrib/amcheck.
-->

      <para>
       Add command-line utility <link
       linkend="app-pgamcheck"><application>pg_amcheck</application></link>
       to simplify running <filename>contrib/amcheck</filename>
       tests on many relations
       (Mark Dilger)
      </para>
     </listitem>

     <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2021-01-17 [e09155bd6] Add - -no-instructions parameter to initdb
-->

      <para>
       Add <option>--no-instructions</option> option to <link
       linkend="app-initdb"><application>initdb</application></link>
       (Magnus Hagander)
      </para>

      <para>
       This suppresses the server startup instructions that are normally
       printed.
      </para>
     </listitem>

     <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2020-11-09 [8f113698b] Remove analyze_new_cluster script from pg_upgrade
-->

      <para>
       Stop <link
       linkend="pgupgrade"><application>pg_upgrade</application></link>
       from creating <filename>analyze_new_cluster</filename> script
       (Magnus Hagander)
      </para>

      <para>
       Instead, give comparable <link
       linkend="app-vacuumdb"><application>vacuumdb</application></link>
       instructions.
      </para>
     </listitem>

     <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2020-11-10 [d2e4bf688] Remove -o option to postmaster
-->

      <para>
       Remove support for the <link
       linkend="app-postgres"><application>postmaster</application></link>
       <option>-o</option> option (Magnus Hagander)
      </para>

      <para>
       This option was unnecessary since all passed options could already
       be specified directly.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Documentation</title>

    <itemizedlist>

     <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2021-04-01 [c9c41c7a3] Rename Default Roles to Predefined Roles
-->

      <para>
       Rename "Default Roles" to <link
       linkend="predefined-roles">"Predefined Roles"</link> (Bruce Momjian,
       Stephen Frost)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-16 [4c5cf5431] doc: Document factorial function
-->

      <para>
       Add documentation for the <link
       linkend="function-factorial"><function>factorial()</function></link>
       function (Peter Eisentraut)
      </para>

      <para>
       With the removal of the ! operator in this release,
       <function>factorial()</function> is the only built-in way to compute
       a factorial.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
   <title>Source Code</title>

   <itemizedlist>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-02-01 [fe61df7f8] Introduce - -with-ssl={openssl} as a configure option
-->

       <para>
        Add configure option <link
        linkend="configure-options-features"><literal>--with-ssl={openssl}</literal></link>
        to allow future choice of the SSL library to use (Daniel Gustafsson,
        Michael Paquier)
       </para>

       <para>
        The spelling <option>--with-openssl</option> is kept for
        compatibility.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-11-25 [c9f0624bc] Add support for abstract Unix-domain sockets
-->

       <para>
        Add support for <link linkend="guc-unix-socket-directories">abstract
        Unix-domain sockets</link> (Peter Eisentraut)
       </para>

       <para>
        This is currently supported on <productname>Linux</productname>
        and <productname>Windows</productname>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-10-09 [bed90759f] Fix our Windows stat() emulation to handle file sizes >
-->

       <para>
        Allow Windows to properly handle files larger than four gigabytes
        (Juan José Santamaría Flecha)
       </para>

       <para>
        For example this allows <link
        linkend="sql-copy"><command>COPY,</command></link> <link
        linkend="configure-options-misc"><acronym>WAL</acronym></link>
        files, and relation segment files to be larger than four gigabytes.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-01-06 [4656e3d66] Replace CLOBBER_CACHE_ALWAYS with run-time GUC
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-01 [d04770801] Add - -clobber-cache option to initdb, for CCA testing.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-13 [6201fa3c1] Rename debug_invalidate_system_caches_always to debug_di
-->

       <para>
        Add server parameter <xref linkend="guc-debug-discard-caches"/>
        to control cache flushing for test purposes (Craig Ringer)
       </para>

       <para>
        Previously this behavior could only be set at compile time.
        To invoke it during <application>initdb</application>, use the new
        option <option>--discard-caches</option>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2020-07-17 [1e0dfd166] Add Valgrind buffer access instrumentation.
Author: Peter Geoghegan <pg@bowt.ie>
2020-07-19 [46ef520b9] Mark buffers as defined to Valgrind consistently.
Author: Peter Geoghegan <pg@bowt.ie>
2020-07-19 [a766d6ca2] Avoid harmless Valgrind no-buffer-pin errors.
-->

       <para>
        Various improvements in <productname>valgrind</productname>
        error detection ability (Álvaro Herrera, Peter Geoghegan)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-01-06 [ca8217c10] Add a test module for the regular expression package.
-->

       <para>
        Add a test module for the regular expression package (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2020-11-09 [6c57f2ed1] jit: Add support for LLVM 12.
-->

       <para>
        Add support for <productname>LLVM</productname> version 12
        (Andres Freund)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2020-12-04 [4f48a6fbe] Change SHA2 implementation based on OpenSSL to use EVP d
Author: Michael Paquier <michael@paquier.xyz>
2020-12-10 [b67b57a96] Refactor MD5 implementations according to new cryptohash
Author: Michael Paquier <michael@paquier.xyz>
2021-01-23 [a8ed6bb8f] Introduce SHA1 implementations in the cryptohash infrast
Author: Michael Paquier <michael@paquier.xyz>
2021-04-03 [e6bdfd970] Refactor HMAC implementations
-->

       <para>
        Change SHA1, SHA2, and MD5 hash computations to use the
        <productname>OpenSSL</productname> <acronym>EVP API</acronym>
        (Michael Paquier)
       </para>

       <para>
        This is more modern and supports <acronym>FIPS</acronym> mode.
       </para>
      </listitem>

      <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2020-11-20 [16f96c74d] Remove ability to independently select random number gen
-->

       <para>
        Remove separate build-time control over the choice of random number
        generator (Daniel Gustafsson)
       </para>

       <para>
        This is now always determined by the choice of SSL library.
       </para>
      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-01-28 [6c5576075] Add direct conversion routines between EUC_TW and Big5.
-->

       <para>
        Add direct conversion routines between EUC_TW and Big5 encodings
        (Heikki Linnakangas)
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2020-11-20 [ca051d8b1] Add collation versions for FreeBSD.
-->

       <para>
        Add collation version support for <productname>FreeBSD</productname>
        (Thomas Munro)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-08-01 [9f9682783] Invent "amadjustmembers" AM method for validating opclas
-->

       <para>
        Add <link
        linkend="index-api"><structfield>amadjustmembers</structfield></link>
        to the index access method <acronym>API</acronym> (Tom Lane)
       </para>

       <para>
        This allows an index access method to provide validity checking
        during creation of a new operator class or family.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-06-19 [6991e774e] Provide feature-test macros for libpq features added in
-->

       <para>
        Provide feature-test macros in <filename>libpq-fe.h</filename>
        for recently-added <application>libpq</application> features
        (Tom Lane, Álvaro Herrera)
       </para>

       <para>
        Historically, applications have usually used compile-time checks
        of <literal>PG_VERSION_NUM</literal> to test whether a feature is
        available.  But that's normally the server version, which might
        not be a good guide to <application>libpq</application>'s
        version.  <filename>libpq-fe.h</filename> now
        offers <literal>#define</literal> symbols denoting
        application-visible features added in v14; the intent is to keep
        adding symbols for such features in future versions.
       </para>
      </listitem>

     </itemizedlist>

   </sect3>

   <sect3>
    <title>Additional Modules</title>

    <itemizedlist>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2020-12-11 [0ec5f7e78] Allow subscripting of hstore values.
-->

      <para>
       Allow subscripting of <link
       linkend="hstore"><application>hstore</application></link> values
       (Tom Lane, Dmitry Dolgov)
      </para>
     </listitem>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2020-11-15 [935f66665] Handle equality operator in contrib/pg_trgm
-->

      <para>
       Allow GiST/GIN <link
       linkend="pgtrgm"><application>pg_trgm</application></link> indexes
       to do equality lookups (Julien Rouhaud)
      </para>

      <para>
       This is similar to <literal>LIKE</literal> except no wildcards
       are honored.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-03-06 [1265a9c8f] Add binary I/O capability for cube datatype.
-->

      <para>
       Allow the <link
       linkend="cube"><application>cube</application></link> data type
       to be transferred in binary mode (KaiGai Kohei)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2020-06-30 [ee0202d55] pgstattuple: Have pgstattuple_approx accept TOAST tables
-->

      <para>
       Allow <link
       linkend="pgstattuple"><function>pgstattuple_approx()</function></link>
       to report on <acronym>TOAST</acronym> tables (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2020-09-10 [34a947ca1] New contrib module, pg_surgery, with heap surgery functi
-->

      <para>
       Add contrib module <link
       linkend="pgsurgery"><application>pg_surgery</application></link>
       which allows changes to row visibility (Ashutosh Sharma)
      </para>

      <para>
       This is useful for correcting database corruption.
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2020-09-24 [aecf5ee2b] Add new 'old_snapshot' contrib module.
-->

      <para>
       Add contrib module <link
       linkend="oldsnapshot"><application>old_snapshot</application></link>
       to report the <type>XID</type>/time mapping used by an active
       <xref linkend="guc-old-snapshot-threshold"/> (Robert Haas)
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2020-10-22 [866e24d47] Extend amcheck to check heap pages.
-->

      <para>
       Allow <link
       linkend="amcheck"><application>amcheck</application></link> to
       also check heap pages (Mark Dilger)
      </para>

      <para>
       Previously it only checked B-Tree index pages.
      </para>
     </listitem>

     <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-01-13 [756ab2912] Add functions to 'pageinspect' to inspect GiST indexes.
Author: Peter Geoghegan <pg@bowt.ie>
2021-02-14 [9e596b65f] Add "LP_DEAD item?" column to GiST pageinspect functions
-->

      <para>
       Allow <link
       linkend="pageinspect"><application>pageinspect</application></link>
       to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-01-19 [f18aa1b20] pageinspect: Change block number arguments to bigint
-->

      <para>
       Change <application>pageinspect</application> block numbers
       to be <link linkend="datatype-int"><type>bigints</type></link>
       (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2020-07-20 [d98c08cdc] Update btree_gist extension for parallel query
-->

      <para>
       Mark <link
       linkend="btree-gist"><application>btree_gist</application></link>
       functions as parallel safe (Steven Winfield)
      </para>
     </listitem>

     </itemizedlist>

     <sect4>
      <title><link linkend="pgstatstatements">pg_stat_statements</link></title>

      <itemizedlist>

     <listitem>
<!--
Author: Bruce Momjian <bruce@momjian.us>
2021-04-07 [5fd9dfa5f] Move pg_stat_statements query jumbling to core.
-->

      <para>
       Move query hash computation from
       <application>pg_stat_statements</application> to the core server
       (Julien Rouhaud)
      </para>

      <para>
       The new server parameter <xref linkend="guc-compute-query-id"/>'s
       default of <literal>auto</literal> will automatically enable query
       id computation when this extension is loaded.
      </para>
     </listitem>

     <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2021-04-08 [6b4d23fee] Track identical top vs nested queries independently in p
-->

      <para>
       Cause <application>pg_stat_statements</application> to track top
       and nested statements separately (Julien Rohaud)
      </para>

      <para>
       Previously, when tracking all statements, identical top and nested
       statements were tracked as a single entry; but it seems more useful
       to separate such usages.
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-07-29 [6023b7ea7] pg_stat_statements: track number of rows processed by so
Author: Fujii Masao <fujii@postgresql.org>
2020-11-12 [b62e6056a] pg_stat_statements: track number of rows processed by RE
-->

      <para>
       Add row counts for utility commands to
       <application>pg_stat_statements</application> (Fujii Masao, Katsuragi
       Yuta, Seino Yuki)
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-11-26 [9fbc3f318] pg_stat_statements: Track number of times pgss entries w
Author: Fujii Masao <fujii@postgresql.org>
2020-12-18 [2e0fedf03] pg_stat_statements: Track time at which all statistics w
-->

      <para>
       Add <structname>pg_stat_statements_info</structname> system view
       to show <application>pg_stat_statements</application> activity
       (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi)
      </para>
     </listitem>

    </itemizedlist>

    </sect4>

    <sect4>
     <title><link linkend="postgres-fdw"><application>postgres_fdw</application></link></title>

     <itemizedlist>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-01-20 [b663a4136] Implement support for bulk inserts in postgres_fdw
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-02-18 [927f453a9] Fix tuple routing to initialize batching only for insert
-->

       <para>
        Allow <application>postgres_fdw</application> to
        <command>INSERT</command> rows in bulk (Takayuki Tsunakawa, Tomas
        Vondra, Amit Langote)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-04-07 [a3740c48e] postgres_fdw: Allow partitions specified in LIMIT TO to
-->

       <para>
        Allow <application>postgres_fdw</application>
        to import table partitions if specified by <link
        linkend="sql-importforeignschema"><command>IMPORT FOREIGN SCHEMA
        ... LIMIT TO</command></link> (Matthias van de Meent)
       </para>

       <para>
        By default, only the root of a partitioned table is imported.
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-01-18 [708d165dd] postgres_fdw: Add function to list cached connections to
-->

       <para>
        Add <application>postgres_fdw</application> function
        <function>postgres_fdw_get_connections()</function> to report open
        foreign server connections (Bharath Rupireddy)
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-04-02 [b1be3074a] postgres_fdw: Add option to control whether to keep conn
-->

       <para>
        Allow control over whether foreign servers keep connections open
        after transaction completion (Bharath Rupireddy)
       </para>

       <para>
        This is controlled by <varname>keep_connections</varname> and
        defaults to on.
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2020-10-06 [32a9c0bdf] postgres_fdw: reestablish new connection if cached one i
Author: Fujii Masao <fujii@postgresql.org>
2020-10-16 [7fc1a81e4] postgres_fdw: Restructure connection retry logic.
-->

       <para>
        Allow <application>postgres_fdw</application> to reestablish
        foreign server connections if necessary (Bharath Rupireddy)
       </para>

       <para>
        Previously foreign server restarts could cause foreign table
        access errors.
       </para>
      </listitem>

      <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-01-26 [411ae6499] postgres_fdw: Add functions to discard cached connection
-->

       <para>
        Add <application>postgres_fdw</application> functions to discard
        cached connections (Bharath Rupireddy)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-14-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>Ádám Balogh</member>
    <member>Adrian Ho</member>
    <member>Ahsan Hadi</member>
    <member>Ajin Cherian</member>
    <member>Aleksander Alekseev</member>
    <member>Alessandro Gherardi</member>
    <member>Alex Kozhemyakin</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Nawratil</member>
    <member>Alexander Pyhalov</member>
    <member>Alexandra Wang</member>
    <member>Alexey Bashtanov</member>
    <member>Alexey Bulgakov</member>
    <member>Alexey Kondratov</member>
    <member>Álvaro Herrera</member>
    <member>Amit Kapila</member>
    <member>Amit Khandekar</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Anastasia Lubennikova</member>
    <member>Andreas Grob</member>
    <member>Andreas Kretschmer</member>
    <member>Andreas Seltenreich</member>
    <member>Andreas Wicht</member>
    <member>Andres Freund</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Gierth</member>
    <member>Andrey Borodin</member>
    <member>Andrey Lepikhov</member>
    <member>Andy Fan</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Arne Roland</member>
    <member>Arseny Sher</member>
    <member>Arthur Nascimento</member>
    <member>Arthur Zakirov</member>
    <member>Ashutosh Bapat</member>
    <member>Ashutosh Sharma</member>
    <member>Ashwin Agrawal</member>
    <member>Asif Rehman</member>
    <member>Asim Praveen</member>
    <member>Atsushi Torikoshi</member>
    <member>Aya Iwata</member>
    <member>Barry Pederson</member>
    <member>Bas Poot</member>
    <member>Bauyrzhan Sakhariyev</member>
    <member>Beena Emerson</member>
    <member>Benoît Lobréau</member>
    <member>Bernd Helmle</member>
    <member>Bernhard M. Wiedemann</member>
    <member>Bertrand Drouvot</member>
    <member>Bharath Rupireddy</member>
    <member>Boris Kolpackov</member>
    <member>Brar Piening</member>
    <member>Brian Ye</member>
    <member>Bruce Momjian</member>
    <member>Bryn Llewellyn</member>
    <member>Cameron Daniel</member>
    <member>Chapman Flack</member>
    <member>Charles Samborski</member>
    <member>Charlie Hornsby</member>
    <member>Chen Jiaoqian</member>
    <member>Chris Wilson</member>
    <member>Christian Quest</member>
    <member>Christoph Berg</member>
    <member>Christophe Courtois</member>
    <member>Corey Huinker</member>
    <member>Craig Ringer</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Dana Burd</member>
    <member>Daniel Cherniy</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Westermann</member>
    <member>Daniele Varrazzo</member>
    <member>Dar Alathar-Yemen</member>
    <member>Darafei Praliaskouski</member>
    <member>Dave Cramer</member>
    <member>David Christensen</member>
    <member>David Fetter</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Gilman</member>
    <member>David Pirotte</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Turon</member>
    <member>David Zhang</member>
    <member>Dean Rasheed</member>
    <member>Denis Patron</member>
    <member>Dian Fay</member>
    <member>Dilip Kumar</member>
    <member>Dimitri Nüscheler</member>
    <member>Dmitriy Kuzmin</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Marakasov</member>
    <member>Domagoj Smoljanovic</member>
    <member>Dong Wook</member>
    <member>Douglas Doole</member>
    <member>Duncan Sands</member>
    <member>Edmund Horner</member>
    <member>Edson Richter</member>
    <member>Egor Rogov</member>
    <member>Ekaterina Kiryanova</member>
    <member>Elena Indrupskaya</member>
    <member>Emil Iggland</member>
    <member>Emre Hasegeli</member>
    <member>Eric Thinnes</member>
    <member>Erik Rijkers</member>
    <member>Erwin Brandstetter</member>
    <member>Etienne Stalmans</member>
    <member>Etsuro Fujita</member>
    <member>Eugen Konkov</member>
    <member>Euler Taveira</member>
    <member>Fabien Coelho</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Federico Caselli</member>
    <member>Felix Lechner</member>
    <member>Filip Gospodinov</member>
    <member>Floris Van Nee</member>
    <member>Frank Gagnepain</member>
    <member>Frits Jalvingh</member>
    <member>Georgios Kokolatos</member>
    <member>Greg Nancarrow</member>
    <member>Greg Rychlewski</member>
    <member>Greg Sabino Mullane</member>
    <member>Gregory Smith</member>
    <member>Grigory Smolkin</member>
    <member>Guillaume Lelarge</member>
    <member>Guy Burgess</member>
    <member>Guyren Howe</member>
    <member>Haiying Tang</member>
    <member>Hamid Akhtar</member>
    <member>Hans Buschmann</member>
    <member>Hao Wu</member>
    <member>Haribabu Kommi</member>
    <member>Harisai Hari</member>
    <member>Hayato Kuroda</member>
    <member>Heath Lord</member>
    <member>Heikki Linnakangas</member>
    <member>Henry Hinze</member>
    <member>Herwig Goemans</member>
    <member>Himanshu Upadhyaya</member>
    <member>Hironobu Suzuki</member>
    <member>Hiroshi Inoue</member>
    <member>Hisanori Kobayashi</member>
    <member>Honza Horak</member>
    <member>Hou Zhijie</member>
    <member>Hubert Lubaczewski</member>
    <member>Hubert Zhang</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Ildus Kurbangaliev</member>
    <member>Isaac Morland</member>
    <member>Israel Barth</member>
    <member>Itamar Gafni</member>
    <member>Jacob Champion</member>
    <member>Jaime Casanova</member>
    <member>Jaime Soler</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Hilliard</member>
    <member>James Hunter</member>
    <member>James Inform</member>
    <member>Jan Mussler</member>
    <member>Japin Li</member>
    <member>Jasen Betts</member>
    <member>Jason Harvey</member>
    <member>Jason Kim</member>
    <member>Jeevan Ladhe</member>
    <member>Jeff Davis</member>
    <member>Jeff Janes</member>
    <member>Jelte Fennema</member>
    <member>Jeremy Evans</member>
    <member>Jeremy Finzel</member>
    <member>Jeremy Smith</member>
    <member>Jesse Kinkead</member>
    <member>Jesse Zhang</member>
    <member>Jie Zhang</member>
    <member>Jim Doty</member>
    <member>Jim Nasby</member>
    <member>Jimmy Angelakos</member>
    <member>Jimmy Yih</member>
    <member>Jiri Fejfar</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Naylor</member>
    <member>John Thompson</member>
    <member>Jonathan Katz</member>
    <member>Josef Šimánek</member>
    <member>Joseph Nahmias</member>
    <member>Josh Berkus</member>
    <member>Juan José Santamaría Flecha</member>
    <member>Julien Rouhaud</member>
    <member>Junfeng Yang</member>
    <member>Jürgen Purtz</member>
    <member>Justin Pryzby</member>
    <member>Kazutaka Onishi</member>
    <member>Keisuke Kuroda</member>
    <member>Kelly Min</member>
    <member>Kensuke Okamura</member>
    <member>Kevin Sweet</member>
    <member>Kevin Yeap</member>
    <member>Kirk Jamison</member>
    <member>Kohei KaiGai</member>
    <member>Konstantin Knizhnik</member>
    <member>Kota Miyake</member>
    <member>Krzysztof Gradek</member>
    <member>Kuntal Ghosh</member>
    <member>Kyle Kingsbury</member>
    <member>Kyotaro Horiguchi</member>
    <member>Laurent Hasson</member>
    <member>Laurenz Albe</member>
    <member>Lee Dong Wook</member>
    <member>Li Japin</member>
    <member>Liu Huailing</member>
    <member>Luc Vlaming</member>
    <member>Ludovic Kuty</member>
    <member>Luis Roberto</member>
    <member>Lukas Eder</member>
    <member>Ma Liangzhu</member>
    <member>Maciek Sakrejda</member>
    <member>Madan Kumar</member>
    <member>Magnus Hagander</member>
    <member>Mahendra Singh Thalor</member>
    <member>Maksim Milyutin</member>
    <member>Marc Boeren</member>
    <member>Marcin Krupowicz</member>
    <member>Marco Atzeri</member>
    <member>Marek Szuba</member>
    <member>Marina Polyakova</member>
    <member>Mario Emmenlauer</member>
    <member>Mark Dilger</member>
    <member>Mark Wong</member>
    <member>Mark Zhao</member>
    <member>Markus Wanner</member>
    <member>Martín Marqués</member>
    <member>Martin Visser</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masao Fujii</member>
    <member>Mathis Rudolf</member>
    <member>Matthias van de Meent</member>
    <member>Matthieu Garrigues</member>
    <member>Matthijs van der Vleuten</member>
    <member>Maxim Orlov</member>
    <member>Melanie Plageman</member>
    <member>Merlin Moncure</member>
    <member>Michael Banck</member>
    <member>Michael Brown</member>
    <member>Michael Meskes</member>
    <member>Michael Paquier</member>
    <member>Michael Paul Killian</member>
    <member>Michael Powers</member>
    <member>Michael Vastola</member>
    <member>Michail Nikolaev</member>
    <member>Michal Albrycht</member>
    <member>Mikael Gustavsson</member>
    <member>Movead Li</member>
    <member>Muhammad Usama</member>
    <member>Nagaraj Raj</member>
    <member>Naoki Nakamichi</member>
    <member>Nathan Bossart</member>
    <member>Nathan Long</member>
    <member>Nazli Ugur Koyluoglu</member>
    <member>Neha Sharma</member>
    <member>Neil Chen</member>
    <member>Nick Cleaton</member>
    <member>Nico Williams</member>
    <member>Nikhil Benesch</member>
    <member>Nikhil Sontakke</member>
    <member>Nikita Glukhov</member>
    <member>Nikita Konev</member>
    <member>Nikolai Berkoff</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nitin Jadhav</member>
    <member>Noah Misch</member>
    <member>Noriyoshi Shinoda</member>
    <member>Odin Ugedal</member>
    <member>Oleg Bartunov</member>
    <member>Oleg Samoilov</member>
    <member>Önder Kalaci</member>
    <member>Pascal Legrand</member>
    <member>Paul Förster</member>
    <member>Paul Guo</member>
    <member>Paul Jungwirth</member>
    <member>Paul Martinez</member>
    <member>Paul Sivash</member>
    <member>Pavan Deolasee</member>
    <member>Pavel Boev</member>
    <member>Pavel Borisov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Stehule</member>
    <member>Pengcheng Liu</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Smith</member>
    <member>Peter Vandivier</member>
    <member>Petr Fedorov</member>
    <member>Petr Jelínek</member>
    <member>Phil Krylov</member>
    <member>Philipp Gramzow</member>
    <member>Philippe Beaudoin</member>
    <member>Phillip Menke</member>
    <member>Pierre Giraud</member>
    <member>Prabhat Sahu</member>
    <member>Quan Zongliang</member>
    <member>Rafi Shamim</member>
    <member>Rahila Syed</member>
    <member>Rajkumar Raghuwanshi</member>
    <member>Ranier Vilela</member>
    <member>Regina Obe</member>
    <member>Rémi Lapeyre</member>
    <member>Robert Foggia</member>
    <member>Robert Grange</member>
    <member>Robert Haas</member>
    <member>Robert Kahlert</member>
    <member>Robert Sosinski</member>
    <member>Robert Treat</member>
    <member>Robin Abbi</member>
    <member>Robins Tharakan</member>
    <member>Roger Mason</member>
    <member>Rohit Bhogate</member>
    <member>Roman Zharkov</member>
    <member>Ron L. Johnson</member>
    <member>Ronan Dunklau</member>
    <member>Ryan Lambert</member>
    <member>Ryo Matsumura</member>
    <member>Saeed Hubaishan</member>
    <member>Sait Talha Nisanci</member>
    <member>Sandro Mani</member>
    <member>Santosh Udupi</member>
    <member>Scott Ribe</member>
    <member>Sehrope Sarkuni</member>
    <member>Sergei Kornilov</member>
    <member>Sergey Bernikov</member>
    <member>Sergey Cherkashin</member>
    <member>Sergey Koposov</member>
    <member>Sergey Shinderuk</member>
    <member>Sergey Zubkovsky</member>
    <member>Shawn Wang</member>
    <member>Shay Rojansky</member>
    <member>Shi Yu</member>
    <member>Shinya Kato</member>
    <member>Shinya Okano</member>
    <member>Sigrid Ehrenreich</member>
    <member>Simon Norris</member>
    <member>Simon Riggs</member>
    <member>Sofoklis Papasofokli</member>
    <member>Soumyadeep Chakraborty</member>
    <member>Stas Kelvich</member>
    <member>Stephan Springl</member>
    <member>Stéphane Lorek</member>
    <member>Stephen Frost</member>
    <member>Steven Winfield</member>
    <member>Surafel Temesgen</member>
    <member>Suraj Kharage</member>
    <member>Sven Klemm</member>
    <member>Takamichi Osumi</member>
    <member>Takashi Menjo</member>
    <member>Takayuki Tsunakawa</member>
    <member>Tang Haiying</member>
    <member>Tatsuhito Kasahara</member>
    <member>Tatsuo Ishii</member>
    <member>Tatsuro Yamada</member>
    <member>Theodor Arsenij Larionov-Trichkin</member>
    <member>Thomas Kellerer</member>
    <member>Thomas Munro</member>
    <member>Thomas Trenz</member>
    <member>Tijs van Dam</member>
    <member>Tom Ellis</member>
    <member>Tom Gottfried</member>
    <member>Tom Lane</member>
    <member>Tom Vijlbrief</member>
    <member>Tomas Barton</member>
    <member>Tomas Vondra</member>
    <member>Tomohiro Hiramitsu</member>
    <member>Tony Reix</member>
    <member>Vaishnavi Prabakaran</member>
    <member>Valentin Gatien-Baron</member>
    <member>Victor Wagner</member>
    <member>Victor Yegorov</member>
    <member>Vignesh C</member>
    <member>Vik Fearing</member>
    <member>Vitaly Ustinov</member>
    <member>Vladimir Sitnikov</member>
    <member>Vyacheslav Shablistyy</member>
    <member>Wang Shenhao</member>
    <member>Wei Wang</member>
    <member>Wells Oliver</member>
    <member>Wenjing Zeng</member>
    <member>Wolfgang Walther</member>
    <member>Yang Lin</member>
    <member>Yanliang Lei</member>
    <member>Yaoguang Chen</member>
    <member>Yaroslav Pashinsky</member>
    <member>Yaroslav Schekin</member>
    <member>Yasushi Yamashita</member>
    <member>Yoran Heling</member>
    <member>YoungHwan Joo</member>
    <member>Yugo Nagata</member>
    <member>Yuki Seino</member>
    <member>Yukun Wang</member>
    <member>Yulin Pei</member>
    <member>Yura Sokolov</member>
    <member>Yuta Katsuragi</member>
    <member>Yuta Kondo</member>
    <member>Yuzuko Hosoya</member>
    <member>Zhihong Yu</member>
    <member>Zhiyong Wu</member>
    <member>Zsolt Ero</member>
   </simplelist>
  </sect2>

 </sect1>
