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

  <formalpara>
   <title>Release date:</title>
   <para>AS OF 2022-06-11</para>
  </formalpara>

  <sect2>
   <title>Overview</title>

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

   <itemizedlist>
    <listitem><para></para></listitem>
   </itemizedlist>

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

  </sect2>

  <sect2>

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

   <itemizedlist>

<!--
Author: Noah Misch <noah@leadboat.com>
2021-09-09 [b073c3ccd] Revoke PUBLIC CREATE from public schema, now owned by pg
-->

    <listitem>
     <para>
      Remove <literal>PUBLIC</literal> creation permission on the <link
      linkend="ddl-schemas-public"><literal>public</literal> schema</link>
      (Noah Misch)
     </para>

     <para>
      This is a change in the default for newly-created databases in
      existing clusters and for new clusters;  <literal>USAGE</literal>
      permissions on the <literal>public</literal> schema has not
      been changed.  Databases restored from previous Postgres releases
      will be restored with their current permissions.  Users wishing
      to have the old permissions on new objects will need to grant
      <literal>CREATE</literal> permission for <literal>PUBLIC</literal>
      on the <literal>public</literal> schema; this change can be made
      on <literal>template1</literal> to cause all new databases
      to have these permissions.  <literal>template1</literal>
      permissions for <application>pg_dumpall</application> and
      <application>pg_upgrade</application>?
     </para>
    </listitem>

<!--
Author: Noah Misch <noah@leadboat.com>
2021-09-09 [b073c3ccd] Revoke PUBLIC CREATE from public schema, now owned by pg
-->

    <listitem>
     <para>
      Change the owner of the <literal>public</literal> schema to
      <literal>pg_database_owner</literal> (Noah Misch)
     </para>

     <para>
      Previously it was the literal user name of the database owner.
      Databases restored from previous Postgres releases will be restored
      with their current owner specification.
     </para>
    </listitem>

<!--
Author: Stephen Frost <sfrost@snowman.net>
2022-04-06 [39969e2a1] Remove exclusive backup mode
-->

    <listitem>
     <para>
      Remove long-deprecated exclusive <link
      linkend="backup-base-backup">backup mode</link> (David Steele,
      Nathan Bossart)
     </para>

     <para>
      If the database server stops abruptly while in this mode, the
      server could fail to start.  The non-exclusive backup mode requires
      a continuous database connection during the backup.  Functions
      <function>pg_start_backup()</function>/<function>pg_stop_backup()</function>
      have been renamed to
      <function>pg_backup_start()</function>/<function>pg_backup_stop()</function>,
      and the functions <function>pg_backup_start_time()</function>
      and <function>pg_is_in_backup()</function> have been removed.
     </para>
    </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2022-02-16 [8f388f6f5] Increase hash_mem_multiplier default to 2.0.
-->

    <listitem>
     <para>
      Increase <link
      linkend="guc-hash-mem-multiplier"><varname>hash_mem_multiplier</varname></link>
      default to 2.0 (Peter Geoghegan)
     </para>

     <para>
      This allows query hash operations to use double the amount of
      <link linkend="guc-work-mem"><varname>work_mem</varname></link>
      memory as other operations.
     </para>
    </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-03-07 [76a29adee] plpython: Remove plpythonu, plpython2u and associated tr
-->

    <listitem>
     <para>
      Remove server-side language <link
      linkend="plpython"><literal>plpython2u</literal></link> and generic
      Python language <literal>plpythonu</literal> (Andres Freund)
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-19 [a3d6264bb] interval_out() must be marked STABLE, not IMMUTABLE.
-->

    <listitem>
     <para>
      Mark the <link
      linkend="datatype-datetime"><type>interval</type></link> output
      function as stable, not immutable, since it depends on <link
      linkend="guc-intervalstyle"><varname>IntervalStyle</varname></link>
      (Tom Lane)
     </para>

     <para>
      This will cause the creation of indexes relying on the text output
      of <type>interval</type> values to fail.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-06 [cbe25dcff] Disallow making an empty lexeme via array_to_tsvector().
-->

    <listitem>
     <para>
      Generate an error if <link
      linkend="textsearch-functions-table"><function>array_to_tsvector()</function></link>
      is passed an empty array element (Jean-Christophe Arnu)
     </para>

     <para>
      This is prohibited because lexemes should never be empty.  Users of
      previous Postgres releases should verify that no empty lexemes
      are stored because they can lead to dump/restore failures and
      inconsistent results.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-12-06 [e9e63b702] Fix inappropriate uses of PG_GETARG_UINT32()
-->

    <listitem>
     <para>
      Generate an error when <link
      linkend="functions-string-other"><function>chr()</function></link>
      is supplied with a negative argument (Peter Eisentraut)
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-01-12 [a18b6d2dc] ecpg: Catch zero-length Unicode identifiers correctly
-->

    <listitem>
     <para>
      Prevent Unicode zero-length <link
      linkend="sql-syntax-identifiers">identifiers</link>, e.g., U&amp;""
      (Peter Eisentraut)
     </para>

     <para>
      Non-Unicode zero-length identifiers were already prevented.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-15 [2a712066d] Remove pg_dump's - -no-synchronized-snapshots switch.
-->

    <listitem>
     <para>
      Remove <link
      linkend="sql-syntax-identifiers"><application>pg_dump</application></link>'s
      <option>--no-synchronized-snapshots</option> option since all
      supported server versions support synchronized snapshots (Tom Lane)
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-15 [2523928b2] Reject change of output-column collation in CREATE OR RE
-->

    <listitem>
     <para>
      Prevent <link linkend="sql-createview"><command>CREATE OR REPLACE
      VIEW</command></link> from changing the collation of an output column
      (Tom Lane)
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-02-16 [2549f0661] Reject trailing junk after numeric literals
-->

    <listitem>
     <para>
      Prevent <link linkend="sql-syntax-constants-numeric">numeric
      literals</link> from having non-numeric trailing characters (Peter
      Eisentraut)
     </para>

     <para>
      Previously literals like <literal>123abc</literal> would be
      interpreted as <literal>123</literal> and <literal>abc</literal>.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-03-28 [e26114c81] Make JSON path numeric literals more correct
-->

    <listitem>
     <para>
      Adjust <link linkend="datatype-json"><acronym>JSON</acronym></link>
      numeric literal processing to match the
      <acronym>SQL</acronym>/<acronym>JSON</acronym>-standard (Peter
      Eisentraut)
     </para>

     <para>
      This accepts numeric formats like <literal>.1</literal> and
      <literal>1.</literal>, and disallows trailing junk after numeric
      literals, like <literal>1.type()</literal>.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-03 [591e088dd] Fix portability issues in datetime parsing.
-->

    <listitem>
     <para>
      Improve consistency of <link
      linkend="datatype-datetime">interval</link> parsing with trailing
      periods (Tom Lane)
     </para>

     <para>
      Some platforms disallowed trailing periods.
     </para>
    </listitem>

<!--
Author: Bruce Momjian <bruce@momjian.us>
2021-08-03 [95ab1e0a9] interval:  round values when spilling to months
-->

    <listitem>
     <para>
      When specifying fractional interval values in units greater than
      months, round to the nearest month (Bruce Momjian)
     </para>

     <para>
      For example, report <literal>1.99 years</literal> as <literal>2
      years</literal>, not <literal>1 year 11 months</literal>.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-28 [54bd1e43c] Handle integer overflow in interval justification functi
-->

    <listitem>
     <para>
      Detect integer overflow in <link
      linkend="functions-datetime-table">interval justification
      functions</link> (Joe Koshakow)
     </para>

     <para>
      Specifically, functions <function>justify_interval()</function>,
      <function>justify_hours()</function>, and
      <function>justify_days()</function> are affected.
     </para>
    </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-03-28 [79de9842a] Remove the ability of a role to administer itself.
-->

    <listitem>
     <para>
      Remove the default <link linkend="sql-createrole"><literal>ADMIN
      OPTION</literal></link> privilege a login role has on its own role
      membership (Robert Haas)
     </para>

     <para>
      Previously, login roles could add/remove members of its own role,
      even without <literal>ADMIN OPTION</literal> privilege.
     </para>
    </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-01-07 [a2ab9c06e] Respect permissions within logical replication.
-->

    <listitem>
     <para>
      Allow <link linkend="logical-replication">logical replication</link>
      to run as the owner of the subscription (Mark Dilger)
     </para>

     <para>
      Because row-level security policies are not checked, only superusers,
      roles with <literal>bypassrls</literal>, and table owners can
      replicate into tables with row-level security policies.
     </para>
    </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-01-08 [96a6f11c0] More cleanup of a2ab9c06ea.
-->

    <listitem>
     <para>
      Prevent <command>UPDATE</command> and <command>DELETE</command>
      <link linkend="logical-replication">logical replication</link>
      operations on tables where the subscription owner does not have
      <command>SELECT</command> permission on the table (Jeff Davis)
     </para>

     <para>
      <command>UPDATE</command> and <command>DELETE</command> perform
      <command>SELECT</command>, so require the subscription owner to
      have table <command>SELECT</command> permission.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-27 [48c5c9068] Use the "pg_temp" schema alias in EXPLAIN and related ou
-->

    <listitem>
     <para>
      When <link linkend="sql-explain"><command>EXPLAIN</command></link>
      references the temporary object schema, refer to it as
      <literal>pg_temp</literal> (Amul Sul)
     </para>

     <para>
      Previously the actual schema name was used.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-28 [2e517818f] Fix SPI's handling of errors during transaction commit.
-->

    <listitem>
     <para>
      Modify <link linkend="spi"><acronym>SPI</acronym></link>'s
      <function>SPI_commit()</function> and
      <function>SPI_commit_and_chain()</function> to automatically start
      a new transaction at completion (Peter Eisentraut, Tom Lane)
     </para>

     <para>
      BACKPATCHED?
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-03-24 [ce95c5437] Fix pg_statio_all_tables view for multiple TOAST indexes
-->

    <listitem>
     <para>
      Fix <link
      linkend="monitoring-pg-statio-all-tables-view"><structname>pg_statio_all_tables</structname></link>
      to sum values for the rare case of <acronym>TOAST</acronym> tables
      with multiple indexes (Andrei Zubkov)
     </para>

     <para>
      Previously such cases would have one row for each index.
     </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-12-01 [75d22069e] Warning on SET of nonexisting setting with a prefix rese
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-27 [2ed8a8cc5] Rethink handling of settings with a prefix reserved by a
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-21 [88103567c] Disallow setting bogus GUCs within an extension's reserv
-->

    <listitem>
     <para>
      Disallow setting of <link linkend="config-setting">server
      variables</link> matching the prefixes of installed extension
      (Florin Irion, Tom Lane)
     </para>

     <para>
      This also deletes any matching server variables during extension
      load.
     </para>
    </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-04-06 [6f0cf8787] pgstat: remove stats_temp_directory.
-->

    <listitem>
     <para>
      Remove unnecessary server variable
      <varname>stats_temp_directory</varname> (Andres Freund, Kyotaro
      Horiguchi)
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-28 [3804539e4] Replace random(), pg_erand48(), etc with a better PRNG A
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-12 [d4f109e4a] Doc: update description of random() function.
-->

    <listitem>
     <para>
      Improve the algorithm used to compute <link
      linkend="functions-math-random-table"><function>random()</function></link>
      (Fabien Coelho)
     </para>

     <para>
      This will cause <function>random()</function> to differ from what
      was emitted by prior versions for the same seed values.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-12 [f8abb0f5e] postgres_fdw: suppress casts on constants in limited cas
-->

    <listitem>
     <para>
      Reduce casting of constants in <link
      linkend="postgres-fdw">postgres_fdw</link> queries (Dian Fay)
     </para>

     <para>
      If column types were mismatched between local and remote databases,
      such casting could cause errors.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-14 [fd2abeb7c] Delete contrib/xml2's legacy implementation of xml_is_we
-->

    <listitem>
     <para>
      Remove <link linkend="xml2">xml2</link>'s function
      <function>xml_is_well_formed()</function> (Tom Lane)
     </para>

     <para>
      This function has been implemented in the core backend since
      Postgres 9.1.
     </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-06 [955b3e0f9] Allow CustomScan providers to say whether they support p
-->

    <listitem>
     <para>
      Allow <link linkend="custom-scan">custom scan provders</link>
      to indicate if they support projections (Sven Klemm)
     </para>

     <para>
      The default is now that custom scan providers can't support
      projections, so they need to be updated for this release.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

  <sect2>
   <title>Changes</title>

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

   <sect3>
    <title>Server</title>

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-02-14 [37851a8b8] Database-level collation version tracking
-->

     <listitem>
      <para>
       Record and check the collation of each <link
       linkend="sql-createdatabase">database</link> (Peter Eisentraut)
      </para>

      <para>
       This is designed to detect collation
       mismatches to avoid data corruption.  Function
       <function>pg_database_collation_actual_version()</function>
       reports the underlying operating system collation version, and
       <command>ALTER DATABASE ...  REFRESH</command> sets the database
       to match the operating system collation version.  DETAILS?
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-03-17 [f2553d430] Add option to use ICU as global locale provider
-->

     <listitem>
      <para>
       Allow <link linkend="locale"><acronym>ICU</acronym></link>
       collations to be set as the default for clusters and databases
       (Peter Eisentraut)
      </para>

      <para>
       Previously, <acronym>ICU</acronym> collations could only be
       specified in <link linkend="sql-createcollation"><command>CREATE
       COLLATION</command></link> and used with the
       <literal>COLLATE</literal> clause.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-03-29 [a2c84990b] Add system view pg_ident_file_mappings
-->

     <listitem>
      <para>
       Add system view <link
       linkend="view-pg-ident-file-mappings"><structname>pg_ident_file_mappings</structname></link>
       to report <filename>pg_ident.conf</filename> information (Julien
       Rouhaud)
      </para>
     </listitem>

       </itemizedlist>

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

     <itemizedlist>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-08-03 [475dbd0b7] Track a Bitmapset of non-pruned partitions in RelOptInfo
-->

      <listitem>
       <para>
        Improve planning time for queries referencing partitioned tables
        (David Rowley)
       </para>

       <para>
        Specifically this helps if only a small number of the many
        partitions are relevant.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-08-03 [db632fbca] Allow ordered partition scans in more cases
-->

      <listitem>
       <para>
        Allow ordered scans of partitions to avoid sorting in more cases
        (David Rowley)
       </para>

       <para>
        Previously, a partitioned table with a <literal>DEFAULT</literal>
        partition or a <literal>LIST</literal> partition containing
        multiple values could not be used for ordered partition scans.
        Now they can be used if these partitions are pruned.
       </para>
      </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2022-03-20 [ba9a7e392] Enforce foreign key correctly during cross-partition upd
-->

      <listitem>
       <para>
        Improve foreign key behavior of updates on partitioned tables
        that move rows between partitions (Amit Langote)
       </para>

       <para>
        Previously, such updates ran delete actions on the source
        partition and insert actions on the target partition.
        <productname>PostgreSQL</productname> will now run update actions
        on the referenced partition root.
       </para>
      </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2022-04-02 [cfdd03f45] Allow CLUSTER on partitioned tables
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2022-04-14 [3f19e176a] Have CLUSTER ignore partitions not owned by caller
-->

      <listitem>
       <para>
        Allow <link linkend="sql-cluster"><command>CLUSTER</command></link>
        on partitioned tables (Justin Pryzby)
       </para>
      </listitem>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-07-22 [80ba4bb38] Make ALTER TRIGGER RENAME consistent for partitioned tab
-->

      <listitem>
       <para>
        Fix <link linkend="sql-altertable"><command>ALTER TRIGGER
        RENAME</command></link> on partitioned tables to properly rename
        triggers an all partitions (Arne Roland, Álvaro Herrera)
       </para>

       <para>
        Also prohibit cloned triggers from being renamed.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Indexes</title>

     <itemizedlist>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2021-10-02 [2903f1404] Enable deduplication in system catalog indexes.
-->

      <listitem>
       <para>
        Enable system and <link
        linkend="storage-toast"><acronym>TOAST</acronym></link> btree
        indexes to efficiently store duplicates (Peter Geoghegan)
       </para>

       <para>
        Previously de-duplication was disabled for these types of indexes.
       </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2022-02-07 [f1ea98a79] Reduce non-leaf keys overlap in GiST indexes produced by
-->

      <listitem>
       <para>
        Improve lookup performance of <link
        linkend="gist"><acronym>GiST</acronym></link> indexes built using
        sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-11-30 [5753d4ee3] Ignore BRIN indexes when checking for HOT udpates
-->

      <listitem>
       <para>
        Prevent changes to columns only indexed by <link
        linkend="brin"><acronym>BRIN</acronym></link> indexes from
        disabling <acronym>HOT</acronym> updates (Josef Simanek)
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-02-03 [94aa7cc5f] Add UNIQUE null treatment option
-->

      <listitem>
       <para>
        Allow unique constraints and indexes to treat
        <literal>NULL</literal> values as not distinct (Peter Eisentraut)
       </para>

       <para>
        Previously <literal>NULL</literal> values were always indexed
        as distinct values, but this can now be changed by creating
        constraints and indexes using <literal>UNIQUE NULLS NOT
        DISTINCT</literal>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-17 [a148f8bc0] Add a planner support function for starts_with().
-->

      <listitem>
       <para>
        Allow <link
        linkend="functions-string-other"><literal>^@</literal></link>
        and <function>starts_with()</function> to use btree indexes if
        using a C collation (Tom Lane)
       </para>

       <para>
        Previously these could only use <link
        linkend="spgist"><acronym>SP-GiST</acronym></link> indexes.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Optimizer</title>

     <itemizedlist>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-01-16 [269b532ae] Add stxdinherit flag to pg_statistic_ext_data
-->

      <listitem>
       <para>
        Allow <link linkend="sql-createstatistics">extended
        statistics</link> to record statistics for a parent with all its
        children (Tomas Vondra, Justin Pryzby)
       </para>

       <para>
        Regular statistics already tracked parent and parent/all-children
        statistics separately.
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-03-31 [db0d67db2] Optimize order of GROUP BY keys
-->

      <listitem>
       <para>
        Allow <link linkend="queries-group"><literal>GROUP
        BY</literal></link> sorting to optimize column order (Dmitry
        Dolgov, Teodor Sigaev, Tomas Vondra)
       </para>

       <para>
        This optimization can be disabled using the server variable <link
        linkend="guc-enable-groupby-reordering"><varname>enable_group_by_reordering</varname></link>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-03-24 [0bd7af082] Invent recursive_worktable_factor GUC to replace hard-wi
-->

      <listitem>
       <para>
        Add server variable <link
        linkend="guc-recursive-worktable-factor"><varname>recursive_worktable_factor</varname></link>
        to allow the user to specify the expected recursive query worktable
        size (Simon Riggs)
       </para>

       <para>
        WHAT IS A WORKTABLE?  NOT DEFINED.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-07-07 [29f45e299] Use a hash table to speed up NOT IN(values)
-->

      <listitem>
       <para>
        Allow hash lookup for <link
        linkend="functions-subquery-notin"><literal>NOT IN</literal></link>
        clauses with many constants (David Rowley, James Coleman)
       </para>

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

<!--
Author: John Naylor <john.naylor@postgresql.org>
2021-12-20 [911588a3f] Add fast path for validating UTF-8 text
-->

      <listitem>
       <para>
        Improve validation of <acronym>UTF</acronym>-8 text (even if
        only <acronym>ASCII</acronym>) by processing 16 bytes at a time
        (John Naylor, Heikki Linnakangas)
       </para>

       <para>
        This will improve text-heavy operations like <link
        linkend="sql-copy"><command>COPY FROM</command></link>.
       </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-10-18 [65014000b] Replace polyphase merge algorithm with a simple balanced
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-10-25 [166f94377] Clarify the logic in a few places in the new balanced me
-->

      <listitem>
       <para>
        Improve performance for sorts that exceed <link
        linkend="guc-work-mem"><varname>work_mem</varname></link>
        (Heikki Linnakangas)
       </para>

       <para>
        Specifically, switch to a batch sorting algorithm that uses more
        output streams internally.
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-07-22 [91e9e89dc] Make nodeSort.c use Datum sorts for single column sorts
Author: David Rowley <drowley@postgresql.org>
2022-04-04 [40af10b57] Use Generation memory contexts to store tuples in sorts
Author: John Naylor <john.naylor@postgresql.org>
2022-04-02 [697492434] Specialize tuplesort routines for different kinds of abb
-->

      <listitem>
       <para>
        Improve performance and reduce memory consumption of in-memory
        sorts (Ronan Dunklau, David Rowley, Thomas Munro, John Naylor)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-06-29 [4035cd5d4] Add support for LZ4 with compression of full-page writes
Author: Michael Paquier <michael@paquier.xyz>
2022-03-11 [e9537321a] Add support for zstd with compression of full-page write
-->

      <listitem>
       <para>
        Allow <acronym>WAL</acronym> <link
        linkend="guc-full-page-writes">full page writes</link> to use
        LZ4 and Zstandard compression (Andrey Borodin, Justin Pryzby)
       </para>

       <para>
        This is controlled by the <link
        linkend="guc-wal-compression"><varname>wal_compression</varname></link>
        server setting.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-07-19 [2dbe89057] Support direct I/O on macOS.
-->

      <listitem>
       <para>
        Add <link linkend="guc-wal-sync-method">direct I/O</link> support
        to macOS (Thomas Munro)
       </para>

       <para>
        This only works if <literal>max_wal_senders=0</literal>
        and <literal>wal_level=minimal</literal>, and only for
        <acronym>WAL</acronym>.
       </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2022-04-03 [0b018faba] Set relfrozenxid to oldest extant XID seen by VACUUM.
-->

      <listitem>
       <para>
        Allow <link linkend="routine-vacuuming">vacuum</link> to be more
        aggressive in setting the oldest frozenxid (Peter Geoghegan)
       </para>
      </listitem>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2022-04-06 [c2bb02bc2] Allow asynchronous execution in more cases.
-->

      <listitem>
       <para>
        Allow a query referencing multiple <link
        linkend="ddl-foreign-data">foreign tables</link> to perform
        parallel foreign table scans in more cases (Andrey Lepikhov,
        Etsuro Fujita)
       </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2022-04-08 [9d9c02ccd] Teach planner and executor about monotonic window funcs
-->

      <listitem>
       <para>
        Improve the performance of <link linkend="functions-window">window
        functions</link> that use <function>row_number()</function>,
        <function>rank()</function>, and <function>count()</function>
        (David Rowley)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-06 [a82a5eee3] Use ISB as a spin-delay instruction on ARM64.
-->

      <listitem>
       <para>
        Improve the performance of spinlocks on high-core-count ARM64
        systems (Geoffrey Blake)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Monitoring</title>

     <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-12-13 [64da07c41] Default to log_checkpoints=on, log_autovacuum_min_durati
-->

      <listitem>
       <para>
        Enable default logging of checkpoints and slow autovacuum
        operations (Bharath Rupireddy)
       </para>

       <para>
        Specifically, this changes the default of <link
        linkend="guc-log-checkpoints"><varname>log_checkpoints</varname></link>
        to on and <link
        linkend="guc-log-autovacuum-min-duration"><varname>log_autovacuum_min_duration</varname></link>
        to 10 minutes.  This will cause idle servers to generate log
        output, which might cause problems on resource-constrained
        servers with insufficient log file removal.  The defaults should
        be changed in such cases.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-10-25 [9ce346eab] Report progress of startup operations that take a long t
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2021-11-05 [e543906e2] Document default and changeability of log_startup_progre
-->

      <listitem>
       <para>
        Generate periodic log message during slow server starts (Nitin
        Jadhav, Robert Haas)
       </para>

       <para>
        Messages report the cause of the delay.  The time interval for
        notification is controlled by the new server variable <link
        linkend="guc-log-startup-progress-interval"><varname>log_startup_progress_interval</varname></link>.
       </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-04-06 [5891c7a8e] pgstat: store statistics in shared memory.
Author: Andres Freund <andres@anarazel.de>
2022-04-07 [b3abca681] pgstat: Update docs to match the shared memory stats rea
-->

      <listitem>
       <para>
        Store <link linkend="monitoring-stats">server-level
        statistics</link> in shared memory (Kyotaro Horiguchi, Andres
        Freund, Melanie Plageman)
       </para>

       <para>
        Previously this was updated via <acronym>UDP</acronym> packets,
        stored in the file system, and read by sessions.  There is no
        longer a statistics collector process.
       </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2022-02-11 [872770fd6] Add VACUUM instrumentation for scanned pages, relfrozenx
Author: Peter Geoghegan <pg@bowt.ie>
2022-03-13 [6e20f4600] VACUUM VERBOSE: tweak scanned_pages logic.
Author: Peter Geoghegan <pg@bowt.ie>
2022-04-15 [bdb71dbe8] VACUUM VERBOSE: Show dead items for an empty table.
-->

      <listitem>
       <para>
        Add additional information to <command>VACUUM VERBOSE</command>
        and autovacuum logging messages (Peter Geoghegan)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-04-08 [efb0ef909] Track I/O timing for temporary file blocks in EXPLAIN (B
-->

      <listitem>
       <para>
        Add <link linkend="sql-explain"><command>EXPLAIN
        (BUFFERS)</command></link> output for temporary file block I/O
        (Masahiko Sawada)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-01-17 [dc686681e] Introduce log_destination=jsonlog
-->

      <listitem>
       <para>
        Allow <link linkend="guc-log-destination">log output</link> in
        <acronym>JSON</acronym> format (Sehrope Sarkuni, Michael Paquier)
       </para>

       <para>
        The new setting is <literal>log_destination=jsonlog</literal>.
       </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-09-02 [e04267844] Enhance pg_stat_reset_single_table_counters function.
-->

      <listitem>
       <para>
        Allow <link
        linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</function></link>
        to reset the counters of relations shared across all databases
        (B Sadhu, Prasad Patro)
       </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-11-22 [1b06d7bac] Report wait events for local shell commands like archive
-->

      <listitem>
       <para>
        Add <link linkend="wait-event-table">wait events</link> for local
        shell commands (Fujii Masao)
       </para>

       <para>
        Specifically the new wait events are related to
        commands <varname>archive_command</varname>,
        <varname>archive_cleanup_command</varname>,
        <varname>restore_command</varname> and
        <varname>recovery_end_command</varname>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Privileges</title>

     <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2022-03-22 [7faa5fc84] Add support for security invoker views.
-->

      <listitem>
       <para>
        Allow <link linkend="sql-createview">view access</link> to be
        controlled by privileges of the view user (Christoph Heiss)
       </para>

       <para>
        Previously, view access could only be based on the view owner.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-28 [7f6772317] Adjust server-side backup to depend on pg_write_server_f
-->

      <listitem>
       <para>
        Allow members of the <link
        linkend="predefined-roles-table"><literal>pg_write_server_files</literal></link>
        predefined role to perform server-side base backups (Dagfinn
        Ilmari Mannsåker)
       </para>

       <para>
        Previously only the superusers could perform such backups.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-06 [a0ffa885e] Allow granting SET and ALTER SYSTEM privileges on GUC pa
-->

      <listitem>
       <para>
        Allow <link linkend="sql-grant"><command>GRANT</command></link>
        to assign permission to change server variables via
        <command>SET</command> and <command>ALTER SYSTEM</command>
        (Mark Dilger)
       </para>

       <para>
        New function <function>has_parameter_privilege()</function>
        reports on this privilege.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2021-11-09 [4168a4745] Add pg_checkpointer predefined role for CHECKPOINT comma
-->

      <listitem>
       <para>
        Add predefined role <link
        linkend="predefined-roles-table"><literal>pg_checkpointer</literal></link>
        that allows members to run <command>CHECKPOINT</command>
        (Jeff Davis)
       </para>

       <para>
        Previously checkpoints could only be run by superusers.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2021-10-27 [77ea4f943] Grant memory views to pg_read_all_stats.
-->

      <listitem>
       <para>
        Allow members of the <link
        linkend="predefined-roles-table"><literal>pg_read_all_stats</literal></link>
        predefined role to access the views <link
        linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>
        and <link
        linkend="view-pg-shmem-allocations"><structname>pg_shmem_allocations</structname></link>
        (Bharath Rupireddy)
       </para>

       <para>
        Previously these views could only be accessed by superusers.
       </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2021-10-26 [f0b051e32] Allow GRANT on pg_log_backend_memory_contexts().
-->

      <listitem>
       <para>
        Allow <link linkend="sql-grant"><command>GRANT</command></link>
        to assign permissions on <link
        linkend="view-pg-backend-memory-contexts"><function>pg_log_backend_memory_contexts()</function></link>
        (Jeff Davis)
       </para>

       <para>
        Previously this function could only be run by superusers.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-09-08 [bd1788051] Introduce GUC shared_memory_size
Author: Michael Paquier <michael@paquier.xyz>
2021-09-09 [3b231596c] Make shared_memory_size a preset option
-->

      <listitem>
       <para>
        Add server variable <link
        linkend="guc-shared-memory-size"><varname>shared_memory_size</varname></link>
        to report the size of allocated shared memory (Nathan Bossart)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-09-21 [43c1c4f65] Introduce GUC shared_memory_size_in_huge_pages
Author: Michael Paquier <michael@paquier.xyz>
2022-03-24 [bbd4951b7] doc: Improve postgres command for shared_memory_size_in_
-->

      <listitem>
       <para>
        Add server variable <link
        linkend="guc-shared-memory-size-in-huge-pages"><varname>shared_memory_size_in_huge_pages</varname></link>
        to report the number of huge memory pages required (Nathan Bossart)
       </para>

       <para>
        This is only supported on Linux.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-09-16 [0c39c2920] Support "postgres -C" with runtime-computed GUCs
-->

      <listitem>
       <para>
        Allow <link linkend="app-postgres"><command>postgres
        -C</command></link> to properly report runtime-computed values
        (Nathan Bossart)
       </para>

       <para>
        Previously runtime-computed values <link
        linkend="guc-data-checksums"><varname>data_checksums</varname></link>,
        <link
        linkend="guc-wal-segment-size"><varname>wal_segment_size</varname></link>,
        and <link
        linkend="guc-data-directory-mode"><varname>data_directory_mode</varname></link>
        would report values that would not be accurate on the running
        server.  However, this does not work on a running server.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-11 [dab298471] Add suport for server-side LZ4 base backup compression.
Author: Robert Haas <rhaas@postgresql.org>
2022-03-08 [7cf085f07] Add support for zstd base backup compression.
Author: Robert Haas <rhaas@postgresql.org>
2022-03-30 [51c0d186d] Allow parallel zstd compression when taking a base backu
-->

     <listitem>
      <para>
       Add support for LZ4 and Zstandard compression of server-side <link
       linkend="backup-base-backup">base backups</link> (Jeevan Ladhe,
       Robert Haas)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-08-02 [7ff23c6d2] Run checkpointer and bgwriter in crash recovery.
-->

     <listitem>
      <para>
       Run checkpointer and bgwriter during crash recovery (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-04-07 [5dc0418fa] Prefetch data referenced by the WAL, take II.
-->

     <listitem>
      <para>
       Allow <acronym>WAL</acronym> processing to pre-fetch needed file
       contents (Thomas Munro)
      </para>

      <para>
       This is controlled by the server variable <link
       linkend="guc-recovery-prefetch"><varname>recovery_prefetch</varname></link>.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-03 [5ef1eefd7] Allow archiving via loadable modules.
-->

     <listitem>
      <para>
       Add server variable <link
       linkend="guc-archive-library"><varname>archive_library</varname></link>
       to specify the library to be called for archiving (Nathan Bossart)
      </para>

      <para>
       Previously only shell commands could be called to perform archiving.
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2021-07-09 [8e7811e95] Eliminate replication protocol error related to IDENTIFY
-->

     <listitem>
      <para>
       No longer require <link
       linkend="protocol-replication"><literal>IDENTIFY_SYSTEM</literal></link>
       to be run before <literal>START_REPLICATION</literal> (Jeff Davis)
      </para>
     </listitem>

    </itemizedlist>

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

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-10-27 [5a2832465] Allow publishing the tables of schema.
Author: Amit Kapila <akapila@postgresql.org>
2021-12-08 [1a2aaeb0d] Fix changing the ownership of ALL TABLES IN SCHEMA publi
-->

      <listitem>
       <para>
        Allow publication of all tables in a schema (Vignesh C, Hou Zhijie,
        Amit Kapila)
       </para>

       <para>
        For example, this syntax is now supported:  <link
        linkend="sql-createpublication"><command>CREATE PUBLICATION pub1
        FOR ALL TABLES IN SCHEMA s1,s2;</command></link>  <command>ALTER
        PUBLICATION</command> supports a similar syntax.  Tables added
        to the listed schemas in the future will also be replicated.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-02-22 [52e4f0cd4] Allow specifying row filters for logical replication of
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-03-17 [5a0796622] Fix row filters with multiple publications
Author: Amit Kapila <akapila@postgresql.org>
2022-04-18 [676eeb6dd] Add additional documentation for row filters.
-->

      <listitem>
       <para>
        Allow publication content to be filtered using a
        <literal>WHERE</literal> clause (Hou Zhijie, Euler Taveira,
        Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila)
       </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-03-26 [923def9a5] Allow specifying column lists for logical replication
-->

      <listitem>
       <para>
        Allow <link linkend="sql-createpublication">publications</link> to
        be restricted to specific columns (Tomas Vondra, Álvaro Herrera,
        Rahila Syed)
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-03-22 [208c5d65b] Add ALTER SUBSCRIPTION ... SKIP.
-->

      <listitem>
       <para>
        Allow skipping of transactions on a subscriber using <link
        linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION
        ... SKIP</command></link> (Masahiko Sawada)
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-07-14 [a8fd13cab] Add support for prepared transactions to built-in logica
Author: Amit Kapila <akapila@postgresql.org>
2021-08-04 [63cf61cde] Add prepare API support for streaming transactions in lo
-->

      <listitem>
       <para>
        Add support for prepared transactions to built-in logical
        replication (Peter Smith, Ajin Cherian, Amit Kapila, Nikhil
        Sontakke, Stas Kelvich)
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-06-30 [cda03cfed] Allow enabling two-phase option via replication protocol
-->

      <listitem>
       <para>
        Add two-phase information to the logical replication stream
        (Ajin Cherian)
       </para>

       <para>
        The new <link
        linkend="protocol-replication"><literal>CREATE_REPLICATION_SLOT</literal></link>
        option is called <literal>TWO_PHASE</literal>.
        <application>pg_recvlogical</application> now supports a new
        <option>--two-phase</option> option during slot creation.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-03-30 [d5a9d86d8] Skip empty transactions for logical replication.
-->

      <listitem>
       <para>
        Prevent logical replication of empty transactions (Ajin Cherian,
        Hou Zhijie, Euler Taveira)
       </para>

       <para>
        Previously, write transactions would send empty transactions to
        subscribers if subscribed tables were not modified.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-11-23 [1922d7c6e] Add SQL functions to monitor the directory contents of r
-->

      <listitem>
       <para>
        Add <acronym>SQL</acronym> functions to monitor the directory
        contents of logical replication slots (Bharath Rupireddy)
       </para>

       <para>
        Specifically, the functions are <link
        linkend="functions-admin-genfile-table"><function>pg_ls_logicalsnapdir()</function></link>,
        <function>pg_ls_logicalmapdir()</function>, and
        <function>pg_ls_replslotdir()</function>.  They can be run by
        members of the predefined <literal>pg_monitor</literal> role.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2022-03-14 [705e20f85] Optionally disable subscriptions on error.
-->

      <listitem>
       <para>
        Allow subscribers to stop logical replication application on error
        (Osumi Takamichi, Mark Dilger)
       </para>

       <para>
        This is enabled with the subscriber option <link
        linkend="sql-createsubscription"><literal>disable_on_error</literal></link>
        and avoids possible infinite error loops during stream application.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-02 [f3d4019da] Ensure consistent logical replication of datetime and fl
-->

      <listitem>
       <para>
        Adjust subscriber server variables to match the publisher so
        datetime and float8 values are interpreted consistently (Japin Li)
       </para>

       <para>
        Some publishers might be relying on inconsistent behavior.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-11-30 [8d74fc96d] Add a view to show the stats of subscription workers.
Author: Amit Kapila <akapila@postgresql.org>
2022-03-01 [7a8507329] Reconsider pg_stat_subscription_workers view.
-->

      <listitem>
       <para>
        Add system view <link
        linkend="monitoring-pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link>
        to report on subscriber activity (Masahiko Sawada)
       </para>

       <para>
        New function <link
        linkend="monitoring-stats-functions"><function>pg_stat_reset_subscription_stats()</function></link>
        allows the resetting of subscriber statistics.
       </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2021-12-08 [a61bff2bf] De-duplicate the result of pg_publication_tables view.
-->

      <listitem>
       <para>
        Remove incorrect duplicate partitions in system view <link
        linkend="view-pg-publication-tables"><structname>pg_publication_tables</structname></link>
        (Hou Zhijie)
       </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>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-08-22 [22c4e88eb] Allow parallel DISTINCT
-->

     <listitem>
      <para>
       Allow <command>SELECT DISTINCT</command> to be parallelized
       (David Rowley)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2022-03-28 [7103ebb7a] Add support for MERGE SQL command
-->

     <listitem>
      <para>
       Add <acronym>SQL</acronym> <command>MERGE</command> command to
       adjust one table to match another (Simon Riggs, Pavan Deolasee,
       Álvaro Herrera, Amit Langote)
      </para>

      <para>
       This is similar to <command>INSERT ... ON CONFLICT</command>
       but more batch-oriented.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-01-28 [43f33dc01] Add HEADER support to COPY text format
Author: Peter Eisentraut <peter@eisentraut.org>
2022-03-30 [072132f04] Add header matching mode to COPY FROM
-->

     <listitem>
      <para>
       Add support for <literal>HEADER</literal> option in <link
       linkend="sql-copy"><command>COPY</command></link> text format
       (Rémi Lapeyre)
      </para>

      <para>
       The new option causes the column names to be output, and optionally
       verified on input.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-03-29 [9c08aea6a] Add new block-by-block strategy for CREATE DATABASE.
-->

     <listitem>
      <para>
       Add new default <acronym>WAL</acronym>-logged method for <link
       linkend="sql-createdatabase">database creation</link> (Dilip Kumar)
      </para>

      <para>
       This avoids the need for checkpoints during database creation;
       the old method is still available.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-24 [aa0105141] pg_upgrade: Preserve database OIDs.
-->

     <listitem>
      <para>
       Allow <link linkend="sql-createdatabase"><command>CREATE
       DATABASE</command></link> to set the database <acronym>OID</acronym>
       (Shruthi KC, Antonin Houska)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-02-12 [4eb217631] Fix DROP {DATABASE,TABLESPACE} on Windows.
-->

     <listitem>
      <para>
       Prevent <link linkend="sql-dropdatabase"><command>DROP
       DATABASE</command></link>, <link
       linkend="sql-droptablespace"><command>DROP
       TABLESPACE</command></link>, and <link
       linkend="sql-alterdatabase"><command>ALTER DATABASE SET
       TABLESPACE</command></link> from occasionally failing during
       concurrent use on Windows (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-12-08 [d6f96ed94] Allow specifying column list for foreign key ON DELETE S
-->

     <listitem>
      <para>
       Allow foreign key <link linkend="ddl-constraints-fk"><literal>ON
       DELETE SET</literal></link> actions to affect only specified columns
       (Paul Martinez)
      </para>

      <para>
       Previously, all of the columns in the foreign key were always
       affected.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-07-28 [b0483263d] Add support for SET ACCESS METHOD in ALTER TABLE
-->

     <listitem>
      <para>
       Allow <link linkend="sql-altertable"><command>ALTER
       TABLE</command></link> to modify a table's <literal>ACCESS
       METHOD</literal> (Justin Pryzby, Jeff Davis)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-08-10 [7b565843a] Add call to object access hook at the end of table rewri
-->

     <listitem>
      <para>
       Properly call object access hooks when <link
       linkend="sql-altertable"><command>ALTER TABLE</command></link>
       causes table rewrites (Michael Paquier)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2021-07-26 [085f931f5] Allow numeric scale to be negative or greater than preci
-->

     <listitem>
      <para>
       Allow <link linkend="datatype-numeric"><type>numeric</type></link>
       scale to be negative or greater than precision (Dean Rasheed,
       Tom Lane)
      </para>

      <para>
       This allows rounding of values to the left of the decimal point,
       e.g., <literal>'1234'::numeric(4, -2)</literal> returns 1200.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-02 [e39f99046] Fix overflow hazards in interval input and output conver
-->

     <listitem>
      <para>
       Improve overflow detection when casting values to <link
       linkend="datatype-datetime">interval</link> (Joe Koshakow)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-04-07 [344d62fb9] Unlogged sequences
-->

     <listitem>
      <para>
       Allow the creation of unlogged <link
       linkend="sql-createsequence">sequences</link> (Peter Eisentraut)
      </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2021-08-26 [bab982161] Update display widths as part of updating Unicode
Author: Peter Eisentraut <peter@eisentraut.org>
2021-09-15 [f7e56f1f5] Update Unicode data to Unicode 14.0.0
-->

     <listitem>
      <para>
       Update the display width information of modern Unicode characters,
       like emojis (Jacob Champion)
      </para>

      <para>
       Also update from Unicode 5.0 to 14.0.0.  There is now an automated
       way to keep Postgres updated with Unicode releases.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Functions</title>

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-03-30 [7ae1619bc] Add range_agg with multirange inputs
-->

     <listitem>
      <para>
       Add multirange input to <link
       linkend="functions-aggregate-table"><function>range_agg()</function></link>
       (Paul Jungwirth)
      </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2022-02-10 [400fc6b64] Add min() and max() aggregates for xid8.
-->

     <listitem>
      <para>
       Add <link linkend="tutorial-agg"><function>MIN()</function></link>
       and <function>MAX()</function> aggregates for the <link
       linkend="datatype-int"><type>xid8</type></link> data type (Ken Kato)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-08-03 [642433707] Add assorted new regexp_xxx SQL functions.
-->

     <listitem>
      <para>
       Add regular expression functions for compatibility with other
       relational systems (Gilles Darold, Tom Lane)
      </para>

      <para>
       Specifically, the new functions are <link
       linkend="functions-string-other"><function>regexp_count()</function></link>,
       <function>regexp_instr()</function>,
       <function>regexp_like()</function>, and
       <function>regexp_substr()</function>.  Some new optional arguments
       were also added to <function>regexp_replace()</function>.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-13 [c5c192d7b] Implement poly_distance().
-->

     <listitem>
      <para>
       Add the ability to compute the distance between <link
       linkend="datatype-polygon"><type>polygons</type></link> (Tom Lane)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-03-14 [9dde82899] Support "of", "tzh", and "tzm" format codes.
-->

     <listitem>
      <para>
       Add <link
       linkend="functions-formatting-table"><function>to_char()</function></link>
       format codes <literal>of</literal>, <literal>tzh</literal>, and
       <literal>tzm</literal> format codes (Nitin Jadhav)
      </para>

      <para>
       The upper-case versions of these were already supported.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-09-06 [388e71af8] Make timetz_zone() stable, and correct a bug for DYNTZ a
-->

     <listitem>
      <para>
       Improve the optimization of <function>timetz_zone()</function> by
       stabilizing its value at transaction start (Aleksander Alekseev,
       Tom Lane)
      </para>

      <para>
       HOW IS THIS USED?
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-11-06 [cbe25dcff] Disallow making an empty lexeme via array_to_tsvector().
-->

     <listitem>
      <para>
       Allow <function>tsvector_delete_arr()</function> and
       <function>tsvector_setweight_by_filter()</function> to accept
       empty array elements (Jean-Christophe Arnu)
      </para>

      <para>
       These lexemes are not stored so the acceptance of empty array
       elements is not a problem.  NOT DOCUMENTED, USER API?
      </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2021-07-09 [ca2e4472b] Teach pg_size_pretty and pg_size_bytes about petabytes
-->

     <listitem>
      <para>
       Add support for petabyte units to <link
       linkend="functions-admin-dbsize"><function>pg_size_pretty()</function></link>
       and <function>pg_size_bytes()</function> (David Christensen)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-27 [024515cac] In event triggers, use "pg_temp" only for our own temp s
-->

     <listitem>
      <para>
       Change <link
       linkend="pg-event-trigger-ddl-command-end-functions"><function>pg_event_trigger_ddl_commands()</function></link>
       to output references to non-local temporary schemas using the
       actual schema name (Tom Lane)
      </para>

      <para>
       Previously this function referred to temporary schemas as
       <literal>pg_temp</literal>.
      </para>
     </listitem>

    </itemizedlist>

    <sect4>
     <title><acronym>JSON</acronym></title>

     <itemizedlist>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-27 [f79b803dc] Common SQL/JSON clauses
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-27 [f4fb45d15] SQL/JSON constructors
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-30 [606948b05] SQL JSON functions
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-31 [49082c2cc] RETURNING clause for JSON() and JSON_SCALAR()
Author: Andrew Dunstan <andrew@dunslane.net>
2022-04-07 [a6baa4bad] Documentation for SQL/JSON features
-->

      <listitem>
       <para>
        Add <acronym>SQL</acronym>/<acronym>JSON</acronym>-standard
        <acronym>JSON</acronym> constructors (Nikita Glukhov)
       </para>

       <para>
        The construction functions are <link
        linkend="functions-sqljson-producing"><function>json()</function></link>,
        <function>json_scalar()</function>, and
        <function>json_serialize()</function>,
        <function>json_array()</function>,
        <function>json_arrayagg()</function>,
        <function>json_object()</function>, and
        <function>json_objectagg()</function>.  They have a few functional
        advantages over the existing JSON functions.
       </para>
      </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-29 [1a36bc9db] SQL/JSON query functions
-->

      <listitem>
       <para>
        Add <acronym>SQL</acronym>/<acronym>JSON</acronym>
        query functions <link
        linkend="functions-sqljson-querying"><function>json_exists()</function></link>,
        <function>json_query()</function>, and
        <function>json_value()</function> (Nikita Glukhov)
       </para>
      </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-03-28 [33a377608] IS JSON predicate
-->

      <listitem>
       <para>
        Add <acronym>JSON</acronym> predicates to test
        <type>JSON</type>/<type>JSONB</type> values (Nikita Glukhov)
       </para>

       <para>
        The clauses are <link linkend="functions-sqljson-misc"><literal>IS
        JSON</literal></link> [ <literal>VALUE</literal> |
        <literal>ARRAY</literal>
      | <literal>OBJECT</literal> | <literal>SCALAR</literal> |
        [<literal>WITH</literal> | <literal>WITHOUT</literal> ]
        <literal>UNIQUE KEYS</literal> ].
       </para>
      </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2022-04-04 [4e34747c8] JSON_TABLE
Author: Andrew Dunstan <andrew@dunslane.net>
2022-04-05 [fadb48b00] PLAN clauses for JSON_TABLE
-->

      <listitem>
       <para>
        Add function <link
        linkend="functions-sqljson-table"><function>JSON_TABLE()</function></link>
        to cause <acronym>JSON</acronym> data to be treated as a table
        (Nikita Glukhov)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-30 [ccd10a9bf] Tighten enforcement of variable CONSTANT markings in plp
-->

     <listitem>
      <para>
       Fix enforcement of PL/pgSQL variable <literal>CONSTANT</literal>
       markings (Tom Lane)
      </para>

      <para>
       Previously, a variable used as a <link
       linkend="plpgsql-statements-calling-procedure"><command>CALL</command></link>
       output parameter or refcursor <command>OPEN</command> variable
       would not enforce <literal>CONSTANT</literal>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="libpq">libpq</link></title>

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-04-01 [c1932e542] libpq: Allow IP address SANs in server certificates
-->

     <listitem>
      <para>
       Allow <acronym>IP</acronym> address matching against a server
       certificate's Subject Alternative Name (Jacob Champion)
      </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2022-03-29 [ebc8b7d44] Enable SSL library detection via PQsslAttribute()
-->

     <listitem>
      <para>
       Allow <function>PQsslAttribute()</function> to report the
       <acronym>SSL</acronym> library type without requiring a libpq
       connection (Jacob Champion)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-18 [5987feb70] Make PQcancel use the PGconn's tcp_user_timeout and keep
-->

     <listitem>
      <para>
       Change query cancellations sent by the client to use the same
       <acronym>TCP</acronym> settings as normal client connections
       (Jelte Fennema)
      </para>

      <para>
       This allows configured <acronym>TCP</acronym> timeouts to apply
       to query cancel connections.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-18 [ce1e7a2f7] Don't let libpq "event" procs break the state of PGresul
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-18 [2e372869a] Don't let libpq PGEVT_CONNRESET callbacks break a PGconn
-->

     <listitem>
      <para>
       Prevent libpq event callback failures from forcing an error result
       (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-09 [376ce3e40] Prefer $HOME when looking up the current user's home dir
-->

     <listitem>
      <para>
       On Unix platforms, have client applications like <link
       linkend="app-psql"><application>psql</application></link>
       check <envar>HOME</envar> environment variable for the user's
       home directory before checking the operating system definition
       (Anders Kaseorg)
      </para>
     </listitem>

    </itemizedlist>

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

      <itemizedlist>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-07-14 [eec57115e] In psql \copy from, send data to server in larger chunks
-->

       <listitem>
        <para>
        Improve performance of <application>psql</application>'s \copy
        command (Heikki Linnakangas)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-20 [33d3eeadb] Add a \getenv command to psql.
-->

      <listitem>
       <para>
        Add <application>psql</application> command \getenv
        to assign the value of an environment variable to a
        <application>psql</application> variable (Tom Lane)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-06 [328dfbdab] Extend psql's \lo_list/\dl to be able to print large obj
-->

      <listitem>
       <para>
        Add '+' option to <application>psql</application>'s
        <literal>\lo_list</literal>/<literal>\dl</literal> to show object
        privileges (Pavel Luzanov)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-07 [3e707fbb4] psql: add \dconfig command to show server's configuratio
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-11 [5e70d8b5d] Tweak the default behavior of psql's \dconfig.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-13 [139d46ee2] Further tweak the default behavior of psql's \dconfig.
-->

      <listitem>
       <para>
        Add <application>psql</application> \dconfig to report server
        variables (Mark Dilger, Tom Lane)
       </para>

       <para>
        This is similar to the server-side <command>SHOW</command>
        command but can process patterns.
       </para>
      </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2021-07-13 [7c09d2797] Add PSQL_WATCH_PAGER for psql's \watch command.
-->

      <listitem>
       <para>
        Add pager option for <application>psql</application>'s \watch
        command (Pavel Stehule, Thomas Munro)
       </para>

       <para>
        This is only supported on Unix, and is controlled by
        <envar>PSQL_WATCH_PAGER</envar>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-01 [83884682f] psql: include intra-query "- -" comments in what's sent t
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-01 [c2f654930] psql: treat "- -" comments between queries as separate hi
-->

      <listitem>
       <para>
        Have <application>psql</application> send intra-query double-hyphen
        comments to the server (Tom Lane, Greg Nancarrow)
       </para>

       <para>
        Previously such comments were removed from the query
        before being sent.  Double-hyphen comments that are before
        query text are not sent, and are not recorded as separate
        <application>psql</application> history entries.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-01 [3d858af07] psql: initialize comment-begin setting to a useful value
-->

      <listitem>
       <para>
        Adjust <application>psql</application>'s readline meta-# to insert
        a double-hyphen comment marker (Tom Lane)
       </para>

       <para>
        Previously an unhelpful pound marker was inserted.
       </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2022-04-04 [7844c9918] psql: Show all query results by default
-->

      <listitem>
       <para>
        Have <application>psql</application> output all results if multiple
        queries are passed to the server at once (Fabien Coelho)
       </para>

       <para>
        This can be disabled by setting <envar>SHOW_ALL_RESULTS</envar>.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-08-10 [e2ce88b58] Add tab completion for DECLARE .. ASENSITIVE in psql
Author: Michael Paquier <michael@paquier.xyz>
2021-08-25 [346511313] Add tab completion for EXPLAIN .. EXECUTE in psql
Author: Michael Paquier <michael@paquier.xyz>
2021-08-30 [d3fa87657] Add more tab completion support for ALTER TABLE ADD in p
Author: Michael Paquier <michael@paquier.xyz>
2021-08-31 [f2bbadce6] Add tab completion for data types after ALTER TABLE ADD
Author: Fujii Masao <fujii@postgresql.org>
2021-09-01 [b0c066297] Improve tab-completion for CREATE PUBLICATION.
Author: Fujii Masao <fujii@postgresql.org>
2021-10-05 [0b0d277c3] psql: Improve tab-completion for LOCK TABLE.
Author: Michael Paquier <michael@paquier.xyz>
2021-11-05 [a5b336b8b] Improve psql tab completion for COMMENT
Author: Michael Paquier <michael@paquier.xyz>
2021-11-19 [0cd6d3b3c] Improve psql tab completion for transforms, domains and
Author: Michael Paquier <michael@paquier.xyz>
2021-11-29 [f44ceb46e] Improve psql tab completion for views, FDWs, sequences a
Author: Michael Paquier <michael@paquier.xyz>
2021-12-01 [9270778f4] Improve psql tab completion for various DROP commands
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-03 [dfe67c0e8] Tab completion: don't offer valid constraints in VALIDAT
Author: Fujii Masao <fujii@postgresql.org>
2022-01-15 [74527c3e0] Add tab-completion for CREATE FOREIGN TABLE.
Author: Peter Eisentraut <peter@eisentraut.org>
2022-01-27 [fefce9ef9] psql: Add tab completion for ALTER COLLATION / REFRESH V
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2022-01-28 [95787e849] Tab-complete ALTER PUBLICATION ADD TABLE with list of ta
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-30 [02b8048ba] psql: improve tab-complete's handling of variant SQL nam
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-01 [020258fbd] Treat case of tab-completion keywords a bit more careful
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-02-09 [f0cd9097c] Further tweaks for psql's new tab-completion logic.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-03-20 [7fa3db367] psql: handle tab completion of timezone names after "SET
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2022-03-25 [2d2232933] Update tab-completion for CREATE PUBLICATION with sequen
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-04-13 [b5607b074] Fix case sensitivity in psql's tab completion for GUC na
-->

      <listitem>
       <para>
        Improve <application>psql</application>'s tab completion (Shinya
        Kato, Dagfinn Ilmari Mannsåker, Peter Smith, Koyu Tanigawa,
        Ken Kato, David Fetter, Haiying Tang, Peter Eisentraut, Álvaro
        Herrera, Tom Lane, Masahiko Sawada)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-16 [cf0cab868] Remove psql support for server versions preceding 9.2.
-->

      <listitem>
       <para>
        Limit support of <application>psql</application> to servers running
        <productname>PostgreSQL</productname> 9.2 and later (Tom Lane)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-20 [3500ccc39] Support base backup targets.
-->

     <listitem>
      <para>
       Add new <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       option <option>--target</option> to control the base backup location
       (Robert Haas)
      </para>

      <para>
       New output options are <literal>server</literal> to write the
       backup locally and <literal>blackhole</literal> to discard the
       backup (for testing).
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-11 [751b8d23b] pg_basebackup: Allow client-side LZ4 (de)compression.
Author: Robert Haas <rhaas@postgresql.org>
2022-03-08 [7cf085f07] Add support for zstd base backup compression.
-->

     <listitem>
      <para>
       Allow <application>pg_basebackup</application> to use LZ4 and
       Zstandard compression on server-side base backup files (Dipesh
       Pandit, Jeevan Ladhe)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-01-21 [5c649fe15] Extend the options of pg_basebackup to control compressi
Author: Robert Haas <rhaas@postgresql.org>
2022-01-24 [0ad803291] Server-side gzip compression.
Author: Robert Haas <rhaas@postgresql.org>
2022-01-25 [e1f860f13] Tidy up a few cosmetic issues related to pg_basebackup.
-->

     <listitem>
      <para>
       Allow <application>pg_basebackup</application>'s
       <option>--compress</option> option to control the compression
       method and options (Michael Paquier, Robert Haas)
      </para>

      <para>
       New options include <literal>server-gzip</literal> (gzip
       on the server), <literal>client-gzip</literal> (same as
       <literal>gzip</literal>).
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-28 [d45099425] Allow server-side compression to be used with -Fp.
-->

     <listitem>
      <para>
       Allow <application>pg_basebackup</application> to compress on
       the server side and decompress on the client side before storage
       (Dipesh Pandit)
      </para>

      <para>
       This is accomplished by specifying compression on the server side
       and plain output format.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-11-05 [babbbb595] Add support for LZ4 compression in pg_receivewal
Author: Michael Paquier <michael@paquier.xyz>
2022-04-13 [042a923ad] Rework compression options of pg_receivewal
-->

     <listitem>
      <para>
       Add the LZ4 compression method to <link
       linkend="app-pgreceivewal"><application>pg_receivewal</application></link>
       (Georgios Kokolatos)
      </para>

      <para>
       This is enabled via <literal>--compress=lz4</literal> and requires
       binaries to be built using <option>--with-lz4</option>.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-11-04 [d62bcc8b0] Rework compression options of pg_receivewal
-->

     <listitem>
      <para>
       Add additional capabilities to
       <application>pg_receivewal</application>'s
       <option>--compress</option> option (Georgios Kokolatos)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-10-26 [f61e1dd2c] Allow pg_receivewal to stream from a slot's restart LSN
-->

     <listitem>
      <para>
       Improve <application>pg_receivewal</application>'s ability to
       restart at the proper <acronym>WAL</acronym> location (Ronan
       Dunklau)
      </para>

      <para>
       Previously, <application>pg_receivewal</application> would start
       based on the <acronym>WAL</acronym> file stored in the local archive
       directory, or at the sending server's current <acronym>WAL</acronym>
       flush location.  With this change, if the sending server is running
       Postgres 15 or later, the local archive directory is empty, and
       a replication slot is specified, the replication slot's restart
       point will be used.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-04-07 [0d5c38757] Add option - -config-file to pg_rewind
-->

     <listitem>
      <para>
       Add <application>pg_rewind</application> option
       <option>--config-file</option> to simplify use when server
       configuration files are stored outside the data directory (Gunnar
       Bluth)
      </para>
     </listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2022-03-23 [4a39f87ac] Allow pgbench to retry in some cases.
-->

     <listitem>
      <para>
       Allow <link
       linkend="pgbench"><application>pgbench</application></link> to
       retry after serialization and deadlock failures (Yugo Nagata,
       Marina Polyakova)
      </para>
     </listitem>

    </itemizedlist>

    <sect4>
     <title><link linkend="app-pgdump"><application>pg_dump</application></link></title>

     <itemizedlist>

<!--
Author: Noah Misch <noah@leadboat.com>
2021-06-28 [a7a7be1f2] Dump public schema ownership and security labels.
Author: Noah Misch <noah@leadboat.com>
2021-06-28 [7ac10f692] Dump COMMENT ON SCHEMA public.
-->

      <listitem>
       <para>
        Have <application>pg_dump</application> dump
        <literal>public</literal> schema ownership changes and security
        labels (Noah Misch)
       </para>

       <para>
        It also dumps <literal>public</literal> schema comments.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-06 [989596152] Avoid per-object queries in performance-critical paths i
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-06 [be85727a3] Use PREPARE/EXECUTE for repetitive per-object queries in
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-31 [d5e8930f5] pg_dump: minor performance improvements from eliminating
-->

      <listitem>
       <para>
        Improve performance of dumping databases with many objects
        (Tom Lane)
       </para>

       <para>
        This will also improve the performance of <link
        linkend="pgupgrade"><application>pg_upgrade</application></link>.
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-06 [65aaed22a] Account for TOAST data while scheduling parallel dumps.
-->

      <listitem>
       <para>
        Improve the parallel <application>pg_dump</application> performance
        of <acronym>TOAST</acronym> tables (Tom Lane)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-01-17 [215862886] Add support for - -no-table-access-method in pg_{dump,dum
-->

      <listitem>
       <para>
        Add dump/restore option <option>--no-table-access-method</option>
        to force restore to only use the default table access method
        (Justin Pryzby)
       </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-14 [30e7c175b] Remove pg_dump/pg_dumpall support for dumping from pre-9
-->

      <listitem>
       <para>
        Limit support of <application>pg_dump</application> and <link
        linkend="app-pg-dumpall"><application>pg_dumpall</application></link>
        to servers running <productname>PostgreSQL</productname> 9.2 and
        later (Tom Lane)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title><link linkend="pgupgrade"><application>pg_upgrade</application></link></title>

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-02-21 [27b02e070] pg_upgrade: Don't print progress status when output is n
-->

      <listitem>
       <para>
        Disable default status reporting during
        <application>pg_upgrade</application> operation if the output is
        not a terminal (Andres Freund)
       </para>

       <para>
        The status reporting output can be enabled for non-tty usage by
        using <option>--verbose</option>.
       </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2022-03-24 [26ebb0e28] List offending databases in pg_upgrade datallowconn chec
-->

      <listitem>
       <para>
        Have <application>pg_upgrade</application> report all databases
        with invalid connection settings (Jeevan Ladhe)
       </para>

       <para>
        Previously only the first database with an invalid connection
        setting was reported.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-02-06 [38bfae365] pg_upgrade: Move all the files generated internally to a
Author: Michael Paquier <michael@paquier.xyz>
2022-02-15 [a00849630] Fix thinko with subdirectories generated by pg_upgrade f
-->

      <listitem>
       <para>
        Store <application>pg_upgrade</application>
        temporary files in a new cluster subdirectory called
        <filename>pg_upgrade_output.d</filename> (Justin Pryzby)
       </para>

       <para>
        Previously temporary files were stored in the current directory.
       </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-17 [9a974cbcb] pg_upgrade: Preserve relfilenodes and tablespace OIDs.
Author: Robert Haas <rhaas@postgresql.org>
2022-01-24 [aa0105141] pg_upgrade: Preserve database OIDs.
-->

      <listitem>
       <para>
        Have <application>pg_upgrade</application> preserve relfilenodes,
        tablespace, and database OIDs between old and new clusters
        (Shruthi KC, Antonin Houska)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-12-18 [3d5ffccb6] Add option -N/- -no-sync to pg_upgrade
-->

      <listitem>
       <para>
        Add a <option>--no-sync</option> option to
        <application>pg_upgrade</application> (Michael Paquier)
       </para>

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

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-14 [e469f0aaf] Remove pg_upgrade support for upgrading from pre-9.2 ser
-->

      <listitem>
       <para>
        Limit support of <application>pg_upgrade</application> to old
        servers running <productname>PostgreSQL</productname> 9.2 and later
        (Tom Lane)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title><link linkend="pgwaldump"><application>pg_waldump</application></link></title>

     <itemizedlist>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-03-24 [127aea2a6] Add additional filtering options to pg_waldump.
Author: Thomas Munro <tmunro@postgresql.org>
2022-03-25 [52b556843] Improve command line options for pg_waldump.
-->

      <listitem>
       <para>
        Allow <application>pg_waldump</application> to be filtered by
        relation file node, block number, fork number, and full page images
        (David Christensen, Thomas Munro)
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-12-02 [f2c52eeba] pg_waldump: Emit stats summary when interrupted by SIGIN
-->

      <listitem>
       <para>
        Have <application>pg_waldump</application> report statistics
        before an interrupted exit (Bharath Rupireddy)
       </para>

       <para>
        For example, issuing a control-C in a terminal running
        <command>pg_waldump --stats --follow</command> will report the
        current statistics before exiting.  This does not work on Windows.
       </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-12-13 [c8b733c4c] Improve description of some WAL records with transaction
-->

      <listitem>
       <para>
        Improve descriptions of some transaction <acronym>WAL</acronym>
        records reported by <application>pg_waldump</application>
        (Masahiko Sawada, Michael Paquier)
       </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2021-07-01 [c8bf5098c] Allow specifying pg_waldump - -rmgr option multiple times
-->

      <listitem>
       <para>
        Allow <application>pg_waldump</application> to dump information
        about multiple resource managers (Heikki Linnakangas)
       </para>

       <para>
        This is enabled by specifying the <option>--rmgr</option> option
        multiple times.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3>
    <title>Documentation</title>

    <itemizedlist>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-10-05 [f6b5d05ba] doc: Document pg_encoding_to_char() and pg_char_to_encod
-->

     <listitem>
      <para>
       Add documentation for <link
       linkend="functions-info-catalog-table"><function>pg_encoding_to_char()</function></link>
       and <function>pg_char_to_encoding()</function> (Ian Lawrence
       Barwick)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-10-09 [2ae5d72f0] Doc: improve documentation for ^@ starts-with operator.
-->

     <listitem>
      <para>
       Document the <link
       linkend="functions-string-other"><literal>^@</literal></link>
       starts-with operator (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2021-12-30 [93d973494] ci: Add continuous integration for github repositories v
-->

     <listitem>
      <para>
       Add support for continuous integration testing using cirrus-ci
       (Andres Freund, Thomas Munro, Melanie Plageman)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-18 [6c417bbcc] Add support for building with ZSTD.
-->

     <listitem>
      <para>
       Add configure option <link
       linkend="configure-options-features"><option>--with-zstd</option></link>
       to enable Zstandard builds (Jeevan Ladhe, Robert Haas, Michael
       Paquier)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-11-22 [d6d1dfcc9] Add ABI extra field to fmgr magic block
-->

     <listitem>
      <para>
       Add module field which can be customized for non-community
       <productname>PostgreSQL</productname> distributions (Peter
       Eisentraut)
      </para>

      <para>
       A module field mismatch would generate an error.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-12-11 [07eee5a0d] Create a new type category for "internal use" types.
-->

     <listitem>
      <para>
       Create a new <link
       linkend="catalog-pg-type"><structfield>pg_type.typcategory</structfield></link>
       value for <type>"char"</type> (Tom Lane)
      </para>

      <para>
       Some internal-use-only types have also been assigned this column.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-18 [cc333f323] Modify pg_basebackup to use a new COPY subprotocol for b
-->

     <listitem>
      <para>
       Add new protocol message <link
       linkend="protocol-replication-base-backup"><literal>TARGET</literal></link>
       to specify a new <command>COPY</command> method to be for base
       backups (Robert Haas)
      </para>

      <para>
       Modify <link
       linkend="app-pgbasebackup"><application>pg_basebackup</application></link>
       to use this method.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-01-24 [0ad803291] Server-side gzip compression.
Author: Robert Haas <rhaas@postgresql.org>
2022-03-23 [ffd53659c] Replace BASE_BACKUP COMPRESSION_LEVEL option with COMPRE
-->

     <listitem>
      <para>
       Add new protocol message <link
       linkend="protocol-replication-base-backup"><literal>COMPRESSION</literal></link>
       and <literal>COMPRESSION_DETAIL</literal> to specify the compression
       method and options (Robert Haas)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-10 [9cd28c2e5] Remove server support for old BASE_BACKUP command syntax
Author: Robert Haas <rhaas@postgresql.org>
2022-02-10 [0d4513b61] Remove server support for the previous base backup proto
-->

     <listitem>
      <para>
       Remove server support for old <literal>BASE_BACKUP</literal>
       command syntax and base backup protocol (Robert Haas)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-03-15 [e4ba69f3f] Allow extensions to add new backup targets.
-->

     <listitem>
      <para>
       Add support for extensions to set custom backup targets (Robert
       Haas)
      </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-04-06 [5c279a6d3] Custom WAL Resource Managers.
-->

     <listitem>
      <para>
       Allow extensions to define their own <acronym>WAL</acronym>
       resource managers (Jeff Davis)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-01-31 [d10e41d42] Introduce pg_settings_get_flags() to find flags associat
-->

     <listitem>
      <para>
       Add function <link
       linkend="functions-info-catalog-table"><function>pg_settings_get_flags()</function></link>
       to get the flags of server-side variables (Justin Pryzby)
      </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2022-01-15 [7170f2159] Allow "in place" tablespaces.
-->

     <listitem>
      <para>
       Add server variable <link
       linkend="guc-allow-in-place-tablespaces"><varname>allow_in_place_tablespaces</varname></link>
       for tablespace testing (Thomas Munro)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-04-08 [8ec569479] Apply PGDLLIMPORT markings broadly.
-->

     <listitem>
      <para>
       Export all server variables on Windows using
       <literal>PGDLLIMPORT</literal> (Robert Haas)
      </para>

      <para>
       Previously only specific variables where exported.
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-11-05 [db7d1a7b0] pgcrypto: Remove non-OpenSSL support
-->

     <listitem>
      <para>
       Require OpenSSL to build <link
       linkend="pgcrypto"><application>pgcrypto</application></link>
       binaries (Peter Eisentraut)
      </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2022-02-16 [19252e8ec] plpython: Reject Python 2 during build configuration.
-->

     <listitem>
      <para>
       Disallow building with <application>Python 2</application>
       (Andres Freund)
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-10-07 [92e6a98c3] Adjust configure to insist on Perl version &gt;= 5.8.3.
-->

     <listitem>
      <para>
       Adjust configure to require <application>Perl</application>
       version 5.8.3 or later (Dagfinn Ilmari Mannsåker)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2022-04-08 [2258e76f9] Add contrib/pg_walinspect.
-->

     <listitem>
      <para>
       Add new module <link
       linkend="pgwalinspect"><application>pg_walinspect</application></link>
       (Bharath Rupireddy)
      </para>

      <para>
       This gives <acronym>SQL</acronym>-level output similar to <link
       linkend="pgwaldump"><application>pg_waldump</application></link>.
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-02-03 [5ef1eefd7] Allow archiving via loadable modules.
-->

     <listitem>
      <para>
       Add module <link
       linkend="basic-archive"><application>basic_archive</application></link>
       to perform archiving via a library (Nathan Bossart)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2022-03-15 [c6306db24] Add 'basebackup_to_shell' contrib module.
Author: Robert Haas <rhaas@postgresql.org>
2022-03-30 [26a0c025e] Document basebackup_to_shell.required_role.
-->

     <listitem>
      <para>
       Add module <application><link
       linkend="basebackup-to-shell">basebackup_to_shell</link></application>
       as a custom backup target (Robert Haas) contrib module.
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2022-04-08 [76cbf7edb] pg_stat_statements: Track I/O timing for temporary file
-->

     <listitem>
      <para>
       Add <link
       linkend="pgstatstatements"><application>pg_stat_statements</application></link>
       output for temporary file block I/O (Masahiko Sawada)
      </para>
     </listitem>

<!--
Author: Magnus Hagander <magnus@hagander.net>
2022-04-08 [57d6aea00] Add JIT counters to pg_stat_statements
-->

     <listitem>
      <para>
       Add <acronym>JIT</acronym> counters to pg_stat_statements (Magnus
       Hagander)
      </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2021-09-28 [c3b011d99] Support amcheck of sequences
-->

     <listitem>
      <para>
       Allow <link
       linkend="amcheck"><application>amcheck</application></link> to
       check sequences (Mark Dilger)
      </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2021-11-05 [bd807be69] amcheck: Add additional TOAST pointer checks.
-->

     <listitem>
      <para>
       Improve <application>amcheck</application> sanity checks for
       <acronym>TOAST</acronym> tables (Mark Dilger)
      </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-11-06 [57e3c5160] Add bool GiST opclass to btree_gist
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-11-08 [e2fbb8837] Fix gist_bool_ops to use gbtreekey2
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2021-12-11 [4c6145b51] Add bool to btree_gist documentation
-->

     <listitem>
      <para>
       Allow <link
       linkend="btree-gist"><application>btree_gist</application></link>
       indexes on boolean columns (Emre Hasegeli)
      </para>

      <para>
       These can be used for exclusion constraints.
      </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2022-01-12 [134d97463] Include permissive/enforcing state in sepgsql log messag
-->

     <listitem>
      <para>
       Indicate the permissive/enforcing state in <link
       linkend="sepgsql"><application>sepgsql</application></link> log
       messages (Dave Page)
      </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2021-07-12 [127404fbe] pageinspect: Improve page_header() for pages of 32kB
-->

     <listitem>
      <para>
       Fix <link
       linkend="pageinspect"><application>pageinspect</application></link>'s
       <function>page_header()</function> to handle 32 kilobyte page sizes
       (Quan Zongliang)
      </para>

      <para>
       Previously improper negative values could be returned in certain
       cases.
      </para>
     </listitem>

    </itemizedlist>

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

     <itemizedlist>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2021-07-30 [5d44fff01] In postgres_fdw, allow CASE expressions to be pushed to
-->

      <listitem>
       <para>
        Allow postgres_fdw to push down <literal>CASE</literal> expressions
        (Alexander Pyhalov)
       </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2021-09-07 [449ab6350] postgres_fdw: Allow application_name of remote connectio
Author: Fujii Masao <fujii@postgresql.org>
2021-12-24 [6e0cb3dec] postgres_fdw: Allow postgres_fdw.application_name to inc
Author: Fujii Masao <fujii@postgresql.org>
2022-02-18 [94c49d534] postgres_fdw: Make postgres_fdw.application_name support
-->

      <listitem>
       <para>
        Add server variable
        <varname>postgres_fdw.application_name</varname> to control the
        application name of postgres_fdw connections (Hayato Kuroda)
       </para>

       <para>
        Previously the remote <link
        linkend="guc-application-name"><varname>application_name</varname></link>
        could only be set on the remote server or via
        <application>postgres_fdw</application> connection specification.
        <varname>postgres_fdw.application_name</varname> also supports
        escape sequences for customization.
       </para>
      </listitem>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2022-02-24 [04e706d42] postgres_fdw: Add support for parallel commit.
-->

      <listitem>
       <para>
        Allow parallel commit on <application>postgres_fdw</application>
        servers (Etsuro Fujita)
       </para>

       <para>
        This is enabled with the <literal>CREATE SERVER</literal> option
        <literal>parallel_commit</literal> when using postgres_fdw.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-15-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></member>
   </simplelist>
  </sect2>

 </sect1>
