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

 <sect1 id="release-12-2">
  <title>Release 12.2</title>

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

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

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

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

   <para>
    However, if you have any foreign key constraints referencing
    partitioned tables, see the two entries below about bugs in that
    feature.
   </para>
  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [b048f558d] 2020-02-10 11:47:09 -0300
Branch: REL_12_STABLE [2ad125322] 2020-02-10 11:47:09 -0300
Branch: REL_11_STABLE [bdd19e48a] 2020-02-10 11:47:09 -0300
Branch: REL_10_STABLE [ac1a998ed] 2020-02-10 11:47:09 -0300
Branch: REL9_6_STABLE [e8b8eb937] 2020-02-10 12:06:25 -0300
-->
     <para>
      Add missing permissions checks for <command>ALTER ... DEPENDS ON
      EXTENSION</command> (&Aacute;lvaro Herrera)
     </para>

     <para>
      Marking an object as dependent on an extension did not have any
      privilege check whatsoever.  This oversight allowed any user to mark
      routines, triggers, materialized views, or indexes as droppable by
      anyone able to drop an extension.  Require that the calling user own
      the specified object (and hence have privilege to drop it).
      (CVE-2020-1720)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [9710d3d4a] 2020-02-07 17:09:36 -0300
Branch: REL_12_STABLE [ce054a8cd] 2020-02-07 17:09:36 -0300
-->
     <para>
      Fix <command>TRUNCATE ... CASCADE</command> to ensure all relevant
      partitions are truncated (Jehan-Guillaume de Rorthais)
     </para>

     <para>
      If a partition of a partitioned table is truncated with
      the <literal>CASCADE</literal> option, and the partitioned table has
      a foreign-key reference from another table, that table must also be
      truncated.  The need to check this was missed if the referencing
      table was itself partitioned, possibly allowing rows to survive that
      violate the foreign-key constraint.
     </para>

     <para>
      Hence, if you have foreign key constraints between partitioned
      tables, and you have done any
      partition-level <command>TRUNCATE</command> on the referenced table,
      you should check to see if any foreign key violations exist.  The
      simplest way is to add a new instance of the foreign key constraint
      (and, once that succeeds, drop it or the original constraint).
      That may be prohibitive from a locking standpoint, however, in which
      case you might prefer to manually query for unmatched rows.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [55173d2e6] 2020-02-07 18:27:18 -0300
Branch: REL_12_STABLE [2c80a656c] 2020-02-07 18:27:18 -0300
-->
     <para>
      Fix failure to attach foreign key constraints to sub-partitions
      (Jehan-Guillaume de Rorthais)
     </para>

     <para>
      When adding a partition to a level below the first level of a
      multi-level partitioned table, foreign key constraints referencing
      the top partitioned table were not cloned to the new partition,
      leading to possible constraint violations later.  Detaching and
      re-attaching the new partition is the cheapest way to fix this.
      However, if there are many partitions to be fixed, adding a new
      instance of the foreign key constraint might be preferable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [01d9676a5] 2020-01-28 17:26:37 -0500
Branch: REL_12_STABLE [87fed2a19] 2020-01-28 17:26:37 -0500
-->
     <para>
      Fix possible crash during concurrent update on a partitioned table
      or inheritance tree (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1fa846f1c] 2020-01-02 17:04:24 -0300
Branch: REL_12_STABLE [d73214839] 2020-01-02 17:04:24 -0300
Branch: REL_11_STABLE [adc9cb6f2] 2020-01-02 17:04:24 -0300
-->
     <para>
      Ensure that row triggers on partitioned tables are correctly
      cloned to sub-partitions when appropriate
      (&Aacute;lvaro Herrera)
     </para>

     <para>
      User-defined triggers (but not triggers for foreign key or deferred
      unique constraints) might be missed when creating or attaching a
      partition.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [b9c130a1f] 2020-01-06 08:40:00 +0100
Branch: REL_12_STABLE [8c2bfd9f9] 2020-01-06 10:43:55 +0100
Branch: REL_11_STABLE [7474393e0] 2020-01-06 11:38:24 +0100
Branch: REL_10_STABLE [66fd0adc7] 2020-01-06 11:38:33 +0100
-->
     <para>
      Fix logical replication subscriber code to execute
      per-column <literal>UPDATE</literal> triggers when appropriate
      (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [d20703805] 2020-01-02 11:41:04 +0530
Branch: REL_12_STABLE [f8a6d8e71] 2020-01-02 11:53:53 +0530
Branch: REL_11_STABLE [3e3a79735] 2020-01-02 12:04:13 +0530
Branch: REL_10_STABLE [27b5f48c7] 2020-01-02 12:11:55 +0530
Branch: REL9_6_STABLE [ba5b4e506] 2020-01-02 11:29:50 +0530
Branch: REL9_5_STABLE [a6f4f407a] 2020-01-02 12:28:02 +0530
Branch: REL9_4_STABLE [1ad47e875] 2020-01-02 12:38:29 +0530
Branch: master [ed7bb5c31] 2020-01-14 07:53:50 +0530
Branch: REL_12_STABLE [fa1eaebfa] 2020-01-14 08:05:05 +0530
Branch: REL_11_STABLE [17869eca7] 2020-01-14 08:12:12 +0530
Branch: REL_10_STABLE [f9e95252a] 2020-01-14 08:20:11 +0530
-->
     <para>
      Avoid failure in logical decoding when a large transaction must be
      spilled into many separate temporary files (Amit Khandekar)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4d9ceb001] 2019-11-22 11:31:19 -0500
Branch: REL_12_STABLE [a2aa224e0] 2019-11-22 11:31:19 -0500
Branch: REL_11_STABLE [b72a44c51] 2019-11-22 11:31:19 -0500
Branch: REL_10_STABLE [5d3fcb53a] 2019-11-22 11:31:19 -0500
-->
     <para>
      Fix possible crash or data corruption when a logical replication
      subscriber processes a row update (Tom Lane, Tomas Vondra)
     </para>

     <para>
      This bug caused visible problems only if the subscriber's table
      contained columns that were not being copied from the publisher and
      had pass-by-reference data types.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [04c8a69c0] 2019-12-18 07:49:18 +0530
Branch: REL_12_STABLE [c74111d8b] 2019-12-18 07:57:01 +0530
Branch: REL_11_STABLE [046830164] 2019-12-18 08:16:31 +0530
Branch: REL_10_STABLE [d6eca4958] 2019-12-18 08:27:41 +0530
-->
     <para>
      Fix crash in logical replication subscriber after DDL changes on a
      subscribed relation (Jehan-Guillaume de Rorthais, Vignesh C)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [15cac3a52] 2020-01-17 18:00:39 -0300
Branch: REL_12_STABLE [bc2140627] 2020-01-17 18:00:39 -0300
Branch: REL_11_STABLE [fe955ebee] 2020-01-17 18:00:39 -0300
Branch: REL_10_STABLE [e3154aae3] 2020-01-17 18:00:39 -0300
Branch: REL9_6_STABLE [cdb14154b] 2020-01-17 18:00:39 -0300
Branch: REL9_5_STABLE [58997ace5] 2020-01-17 18:00:39 -0300
Branch: REL9_4_STABLE [20a1dc1e3] 2020-01-17 18:00:39 -0300
-->
     <para>
      Fix failure in logical replication publisher after a database crash
      and restart (Vignesh C)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [b0afdcad2] 2020-01-30 11:14:02 +0900
Branch: REL_12_STABLE [3228512b7] 2020-01-30 11:15:28 +0900
Branch: REL_11_STABLE [374464c3e] 2020-01-30 11:15:35 +0900
Branch: master [7ca8c9706] 2020-01-31 13:57:56 +0900
Branch: REL_12_STABLE [706ad6a4d] 2020-01-31 13:58:05 +0900
Branch: REL_11_STABLE [8b29c75f6] 2020-01-31 13:58:11 +0900
-->
     <para>
      Ensure that the effect
      of <function>pg_replication_slot_advance()</function> on a physical
      replication slot will persist across restarts (Alexey Kondratov,
      Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1c7a0b387] 2020-02-03 18:59:12 -0300
Branch: REL_12_STABLE [42e3187a8] 2020-02-03 18:59:12 -0300
Branch: REL_11_STABLE [beefab654] 2020-02-03 18:59:12 -0300
Branch: REL_10_STABLE [380bc8829] 2020-02-03 18:59:12 -0300
-->
     <para>
      Improve efficiency of logical replication with <literal>REPLICA
      IDENTITY FULL</literal> (Konstantin Knizhnik)
     </para>

     <para>
      When searching for an existing tuple during an update or delete
      operation, return the first matching tuple not the last one.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [259bbe177] 2020-01-13 13:41:12 +0100
Branch: REL_12_STABLE [bf65f3c88] 2020-01-13 13:41:09 +0100
-->
     <para>
      Fix base backup to handle database OIDs larger
      than <literal>INT32_MAX</literal> (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [76cbfcdf3] 2019-11-16 10:11:30 +1300
Branch: REL_12_STABLE [24897e1a1] 2019-11-16 10:18:45 +1300
Branch: REL_11_STABLE [bc049d0d4] 2019-11-16 10:19:16 +1300
-->
     <para>
      Ensure parallel plans are always shut down at the correct time
      (Kyotaro Horiguchi)
     </para>

     <para>
      This oversight is known to result in <quote>temporary file
      leak</quote> warnings from multi-batch parallel hash joins.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [080313f82] 2019-11-26 08:30:24 +0530
Branch: REL_12_STABLE [1cc3a90c7] 2019-11-26 08:55:06 +0530
Branch: REL_11_STABLE [d0ccfa9d6] 2019-11-26 09:07:35 +0530
Branch: REL_10_STABLE [f7ae68aac] 2019-11-26 09:23:45 +0530
Branch: REL9_6_STABLE [1ad0df67c] 2019-11-26 09:41:41 +0530
-->
     <para>
      Prevent premature shutdown of a Gather or GatherMerge plan node that
      is underneath a Limit node (Amit Kapila)
     </para>

     <para>
      This avoids failure if such a plan node needs to be scanned more
      than once, as for instance if it is on the inside of a nestloop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [3e4818e9d] 2020-01-27 15:07:03 +1300
Branch: REL_12_STABLE [f9d0be241] 2020-01-27 14:11:24 +1300
Branch: REL_11_STABLE [6a9fc75d0] 2020-01-27 14:12:18 +1300
-->
     <para>
      Improve efficiency of parallel hash join on CPUs with many cores
      (Gang Deng, Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [74618e77b] 2020-01-31 10:25:34 +1300
Branch: REL_12_STABLE [1fcf62e0b] 2020-01-31 10:27:53 +1300
Branch: REL_11_STABLE [2c56b3ac4] 2020-01-31 11:12:21 +1300
Branch: master [d9fe702a2] 2020-02-05 12:27:00 +1300
Branch: REL_12_STABLE [2e2351bd6] 2020-02-05 12:28:33 +1300
Branch: REL_11_STABLE [c4a2041a4] 2020-02-05 12:30:06 +1300
-->
     <para>
      Avoid crash in parallel <command>CREATE INDEX</command> when there
      are no free dynamic shared memory slots (Thomas Munro)
     </para>

     <para>
      Fall back to a non-parallel index build, instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [93745f1e0] 2020-02-01 14:29:13 +1300
Branch: REL_12_STABLE [24dd34af1] 2020-02-01 14:49:57 +1300
Branch: REL_11_STABLE [600387f5d] 2020-02-01 22:57:46 +1300
Branch: REL_10_STABLE [aab30cd4e] 2020-02-01 14:54:48 +1300
Branch: REL9_6_STABLE [93be45245] 2020-02-01 14:57:40 +1300
Branch: REL9_5_STABLE [a5f45c3dd] 2020-02-01 14:59:58 +1300
Branch: REL9_4_STABLE [95936c795] 2020-02-01 15:10:20 +1300
-->
     <para>
      Avoid memory leak when there are no free dynamic shared memory slots
      (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [a904abe2e] 2020-01-22 09:49:18 +0900
Branch: REL_12_STABLE [817a1b88a] 2020-01-22 09:49:24 +0900
Branch: REL_11_STABLE [5b4b07fa9] 2020-01-22 09:49:28 +0900
Branch: REL_10_STABLE [9055344b4] 2020-01-22 09:49:33 +0900
Branch: REL9_6_STABLE [ef33edeb5] 2020-01-22 09:49:39 +0900
Branch: REL9_5_STABLE [c39f45598] 2020-01-22 09:49:44 +0900
Branch: REL9_4_STABLE [d76652edc] 2020-01-22 09:49:48 +0900
-->
     <para>
      Ignore the <literal>CONCURRENTLY</literal> option when performing an
      index creation, drop, or rebuild on a temporary table (Michael
      Paquier, Heikki Linnakangas, Andres Freund)
     </para>

     <para>
      This avoids strange failures if the temporary table has
      an <literal>ON COMMIT</literal> action.  There is no benefit in
      using <literal>CONCURRENTLY</literal> for a temporary table anyway,
      since other sessions cannot access the table, making the extra
      processing pointless.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c35b714ca] 2019-12-01 13:09:26 -0500
Branch: REL_12_STABLE [b154d70f7] 2019-12-01 13:09:26 -0500
Branch: REL_11_STABLE [768a401e2] 2019-12-01 13:09:26 -0500
Branch: REL_10_STABLE [25c7183c0] 2019-12-01 13:09:27 -0500
Branch: REL9_6_STABLE [283f095d0] 2019-12-01 13:09:27 -0500
Branch: REL9_5_STABLE [cfffa8a6b] 2019-12-01 13:09:27 -0500
Branch: REL9_4_STABLE [0c84e992c] 2019-12-01 13:09:27 -0500
-->
     <para>
      Fix possible failure when resetting expression indexes on temporary
      tables that are marked <literal>ON COMMIT DELETE ROWS</literal>
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [4c8701098] 2020-01-20 10:36:35 +0200
Branch: REL_12_STABLE [fd436bba0] 2020-01-20 10:36:45 +0200
Branch: REL_11_STABLE [da7abcf0f] 2020-01-20 10:36:47 +0200
Branch: REL_10_STABLE [ff0c567cb] 2020-01-20 10:36:50 +0200
Branch: REL9_6_STABLE [e96f30d89] 2020-01-20 10:36:52 +0200
Branch: REL9_5_STABLE [98f0d2837] 2020-01-20 10:36:55 +0200
-->
     <para>
      Fix possible crash in BRIN index operations
      with <type>box</type>, <type>range</type> and <type>inet</type> data
      types (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Branch: master [a7ee7c851] 2019-12-13 23:58:10 +0200
Branch: REL_12_STABLE [70c4f500e] 2019-12-13 23:59:00 +0200
Branch: master [741b88435] 2019-12-16 13:57:41 +0200
Branch: REL_12_STABLE [42d1acd2e] 2019-12-16 13:58:07 +0200
-->
     <para>
      Fix crash during recursive page split in GiST index build (Heikki
      Linnakangas)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
Branch: master [b10714080] 2019-11-20 00:12:33 +0300
Branch: REL_12_STABLE [a64e7e05a] 2019-11-20 00:17:58 +0300
Branch: REL_11_STABLE [7d467dee0] 2019-11-20 00:18:02 +0300
Branch: master [e14641197] 2019-11-20 00:04:09 +0300
Branch: REL_12_STABLE [051c50c01] 2019-11-20 00:04:53 +0300
Branch: REL_11_STABLE [9f2927989] 2019-11-20 00:05:12 +0300
Branch: REL_10_STABLE [21ad61ab3] 2019-11-20 00:05:35 +0300
Branch: master [d5ad7a09a] 2019-11-20 00:04:22 +0300
Branch: REL_12_STABLE [ee437ca74] 2019-11-20 00:05:01 +0300
Branch: REL_11_STABLE [c0bf35421] 2019-11-20 00:05:21 +0300
Branch: REL_10_STABLE [ab64b474d] 2019-11-20 00:05:42 +0300
Branch: REL9_6_STABLE [99f5888d3] 2019-11-19 23:47:29 +0300
Branch: REL9_5_STABLE [4fc485684] 2019-11-20 00:01:55 +0300
Branch: REL9_4_STABLE [1414821e1] 2019-11-20 00:03:04 +0300
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4093ff573] 2020-02-09 12:02:57 -0500
Branch: REL_12_STABLE [baf487123] 2020-02-09 12:02:57 -0500
Branch: REL_11_STABLE [f91706b00] 2020-02-09 12:02:57 -0500
-->
     <para>
      Fix handling of deleted pages in GIN indexes (Alexander Korotkov)
     </para>

     <para>
      Avoid possible deadlocks, incorrect updates of a deleted page's
      state, and failure to traverse through a recently-deleted page.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [41c6f9db2] 2020-01-17 16:17:31 -0500
Branch: REL_12_STABLE [2e2646060] 2020-01-17 16:17:32 -0500
Branch: REL_11_STABLE [d8e877b86] 2020-01-17 16:17:33 -0500
Branch: REL_10_STABLE [167fd022f] 2020-01-17 16:17:35 -0500
Branch: REL9_6_STABLE [45f03cfa5] 2020-01-17 16:17:36 -0500
Branch: REL9_5_STABLE [396472278] 2020-01-17 16:17:37 -0500
Branch: REL9_4_STABLE [eb9d1f050] 2020-01-17 16:17:39 -0500
-->
     <para>
      Fix possible crash with a SubPlan (sub-<literal>SELECT</literal>)
      within a multi-row <literal>VALUES</literal> list (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4ac8aaa36] 2020-01-08 09:42:53 -0500
Branch: REL_12_STABLE [c24f3b70e] 2020-01-08 09:42:53 -0500
-->
     <para>
      Fix failure in <command>ALTER TABLE</command> when a column
      referenced in a <literal>GENERATED</literal> expression has been
      added or changed in type earlier in the
      same <command>ALTER</command> command (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Gierth <rhodiumtoad@postgresql.org>
Branch: master [bf6cc19e3] 2020-02-05 20:21:20 +0000
Branch: REL_12_STABLE [0e37489ed] 2020-02-05 20:08:11 +0000
Branch: REL_11_STABLE [d8f1c03a4] 2020-02-05 20:15:13 +0000
-->
     <para>
      Fix failure to insert default values for <quote>missing</quote>
      attributes during tuple conversion (Vik Fearing, Andrew Gierth)
     </para>

     <para>
      This could result in values incorrectly reading as NULL, when
      they come from columns that had been added by <literal>ALTER
      TABLE ADD COLUMN</literal> with a constant default.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [7bb3102ce] 2019-12-14 16:32:03 +1300
Branch: REL_12_STABLE [c3dc0cdd6] 2019-12-14 16:34:21 +1300
Branch: master [7c85be08a] 2019-12-14 18:35:58 +1300
Branch: REL_12_STABLE [fd005e1a8] 2019-12-14 19:03:44 +1300
-->
     <para>
      Fix unlikely panic in the checkpointer process, caused by opening
      relation segments that might already have been removed (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [38fc05607] 2020-01-10 18:31:22 -0800
Branch: REL_12_STABLE [93078e63f] 2020-01-10 18:31:25 -0800
Branch: REL_11_STABLE [2e86e154d] 2020-01-10 18:31:26 -0800
Branch: REL_10_STABLE [cb9774245] 2020-01-10 18:31:26 -0800
-->
     <para>
      Fix crash after FileClose() failure (Noah Misch)
     </para>

     <para>
      This issue could only be observed
      with <varname>data_sync_retry</varname> enabled, since otherwise
      FileClose() failure would be reported as a PANIC.
     </para>
    </listitem>

    <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
Branch: master [5a20b0219] 2019-12-10 18:00:30 +0900
Branch: REL_12_STABLE [547e454cb] 2019-12-10 18:00:31 +0900
-->
     <para>
      Fix handling of multiple <literal>AFTER ROW</literal> triggers on a
      foreign table (Etsuro Fujita)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [affdde2e1] 2020-01-20 23:26:51 -0800
Branch: REL_12_STABLE [21fdfd0e8] 2020-01-20 23:29:35 -0800
Branch: REL_11_STABLE [c8e0e560e] 2020-01-20 23:29:38 -0800
Branch: REL_10_STABLE [8bb006a41] 2020-01-20 23:30:47 -0800
Branch: REL9_6_STABLE [d4c339924] 2020-01-20 23:31:48 -0800
Branch: REL9_5_STABLE [f651976d9] 2020-01-20 23:31:52 -0800
Branch: REL9_4_STABLE [ba1dfbe22] 2020-01-20 23:32:21 -0800
-->
     <para>
      Fix unlikely crash with pass-by-reference aggregate transition
      states (Andres Freund, Teodor Sigaev)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4c70098ff] 2020-01-23 13:42:09 -0500
Branch: REL_12_STABLE [be13f227f] 2020-01-23 13:42:10 -0500
Branch: REL_11_STABLE [fb12aefaa] 2020-01-23 13:42:10 -0500
Branch: REL_10_STABLE [212b870d6] 2020-01-23 13:42:10 -0500
Branch: REL9_6_STABLE [9e24575f6] 2020-01-23 13:42:10 -0500
Branch: REL9_5_STABLE [a576f2a8f] 2020-01-23 13:42:10 -0500
Branch: REL9_4_STABLE [600b953d7] 2020-01-23 13:42:10 -0500
Branch: master [9a3a75cb8] 2020-01-23 16:15:32 -0500
Branch: REL_12_STABLE [f309c812e] 2020-01-23 16:15:32 -0500
Branch: REL_11_STABLE [7a9fef299] 2020-01-23 16:15:32 -0500
Branch: REL_10_STABLE [d6a9548b2] 2020-01-23 16:15:32 -0500
Branch: REL9_6_STABLE [451f50813] 2020-01-23 16:15:32 -0500
Branch: REL9_5_STABLE [0e63d9641] 2020-01-23 16:15:32 -0500
Branch: REL9_4_STABLE [8fc33e6cc] 2020-01-23 16:15:32 -0500
-->
     <para>
      Improve error reporting in <function>to_date()</function>
      and <function>to_timestamp()</function>
      (Tom Lane, &Aacute;lvaro Herrera)
     </para>

     <para>
      Reports about incorrect month or day names in input strings could
      truncate the input in the middle of a multi-byte character, leading
      to an improperly encoded error message that could cause follow-on
      failures.  Truncate at the next whitespace instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [1a3efa1eb] 2019-12-12 12:30:43 -0500
Branch: REL_12_STABLE [07c4b6ac7] 2019-12-12 12:30:44 -0500
Branch: REL_11_STABLE [332584da9] 2019-12-12 12:30:44 -0500
Branch: REL_10_STABLE [c965c42a5] 2019-12-12 12:30:44 -0500
Branch: REL9_6_STABLE [6e2ac8d66] 2019-12-12 12:30:44 -0500
Branch: REL9_5_STABLE [323c47925] 2019-12-12 12:30:44 -0500
Branch: REL9_4_STABLE [6aa126311] 2019-12-12 12:30:44 -0500
-->
     <para>
      Fix off-by-one result for <literal>EXTRACT(ISOYEAR
      FROM <replaceable>timestamp</replaceable>)</literal> for BC dates
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d57d61533] 2019-11-13 15:53:53 -0500
Branch: REL_12_STABLE [5a6eea092] 2019-11-13 15:53:53 -0500
-->
     <para>
      Ensure that the <literal>&lt;&gt;</literal> operator for
      type <type>char</type> reports indeterminate-collation errors as
      such, rather than as <quote>cache lookup failed for collation
      0</quote> (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [cb5b28613] 2020-02-07 22:06:31 +0900
Branch: REL_12_STABLE [598b466e8] 2020-02-07 22:07:44 +0900
Branch: REL_12_STABLE [4faea7fdf] 2020-02-08 12:29:38 +0900
-->
     <para>
      Avoid treating TID scans as sequential scans (Tatsuhito Kasahara)
     </para>

     <para>
      A refactoring oversight caused TID scans (selection by CTID) to be
      counted as sequential scans in the statistics views, and to take
      whole-table predicate locks as sequential scans do.  The latter
      behavior could cause unnecessary serialization errors in
      serializable transaction mode.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4a0aab14d] 2019-11-21 16:21:43 -0500
Branch: REL_12_STABLE [5186f7625] 2019-11-21 16:21:43 -0500
Branch: REL_11_STABLE [669138ebd] 2019-11-21 16:21:44 -0500
Branch: REL_10_STABLE [b9f3d7a53] 2019-11-21 16:21:44 -0500
Branch: REL9_6_STABLE [52434ba73] 2019-11-21 16:21:44 -0500
Branch: REL9_5_STABLE [bcd541897] 2019-11-21 16:21:44 -0500
Branch: REL9_4_STABLE [f09829017] 2019-11-21 16:21:44 -0500
-->
     <para>
      Avoid stack overflow in <literal>information_schema</literal> views
      when a self-referential view exists in the system catalogs
      (Tom Lane)
     </para>

     <para>
      A self-referential view can't work; it will always result in
      infinite recursion.  We handled that situation correctly when
      trying to execute the view, but not when inquiring whether it is
      automatically updatable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [b175bd59f] 2020-01-07 17:38:48 -0300
Branch: REL_12_STABLE [fce9ba819] 2020-01-07 17:38:48 -0300
Branch: REL_11_STABLE [896db774e] 2020-01-07 17:38:48 -0300
Branch: REL_10_STABLE [8de3b68fa] 2020-01-07 17:55:21 -0300
Branch: master [f5d28710c] 2020-01-08 14:33:49 -0300
Branch: REL_12_STABLE [20c4df8c8] 2020-01-08 14:33:49 -0300
Branch: REL_11_STABLE [af43581e8] 2020-01-08 14:33:49 -0300
Branch: REL_10_STABLE [da42b9f3f] 2020-01-08 14:33:49 -0300
-->
     <para>
      Ensure that walsender processes always show NULL for transaction
      start time in <structname>pg_stat_activity</structname>
      (&Aacute;lvaro Herrera)
     </para>

     <para>
      Previously, the <structfield>xact_start</structfield> column would
      sometimes show the process start time.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [e69d64454] 2019-12-24 13:05:43 +1300
Branch: REL_12_STABLE [8052aaf52] 2019-12-24 13:07:54 +1300
Branch: REL_11_STABLE [9e551a14c] 2019-12-24 13:09:56 +1300
Branch: REL_10_STABLE [8e89bc6df] 2019-12-24 13:11:13 +1300
Branch: REL9_6_STABLE [15861deb6] 2019-12-24 13:12:50 +1300
Branch: REL9_5_STABLE [893eaf0be] 2019-12-24 13:13:13 +1300
Branch: REL9_4_STABLE [5c0a132cf] 2019-12-24 13:13:30 +1300
-->
     <para>
      Improve performance of hash joins with very large inner relations
      (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e369f3708] 2020-01-06 16:42:20 -0500
Branch: REL_12_STABLE [b89845267] 2020-01-06 16:42:20 -0500
-->
     <para>
      Reduce spinlock contention when there are many active walsender
      processes (Pierre Ducroquet)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7d91b604d] 2020-02-04 13:07:13 -0500
Branch: REL_12_STABLE [9a85860e1] 2020-02-04 13:07:13 -0500
Branch: REL_11_STABLE [842a23efa] 2020-02-04 13:07:13 -0500
-->
     <para>
      Fix placement of <quote>Subplans Removed</quote> field
      in <command>EXPLAIN</command> output (Daniel Gustafsson, Tom Lane)
     </para>

     <para>
      In non-text output formats, this field was emitted inside
      the <quote>Plans</quote> sub-group, resulting in syntactically
      invalid output.  Attach it to the parent Append or MergeAppend plan
      node as intended.  This causes the field to change position in text
      output format too: if there are any InitPlans attached to the same
      plan node, <quote>Subplans Removed</quote> will now appear before
      those.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3ec20c709] 2020-01-26 16:32:19 -0500
Branch: REL_12_STABLE [bad494380] 2020-01-26 16:31:48 -0500
-->
     <para>
      Fix <command>EXPLAIN</command>'s <literal>SETTINGS</literal> option
      to print as empty in non-text output formats (Tom Lane)
     </para>

     <para>
      In the non-text output formats, fields are supposed to appear when
      requested, even if they have empty or zero values.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [553d2ec27] 2019-11-26 14:41:48 -0500
Branch: REL_12_STABLE [21a4edd12] 2019-11-26 14:41:48 -0500
Branch: REL_11_STABLE [1d9056f56] 2019-11-26 14:41:48 -0500
-->
     <para>
      Allow the planner to apply potentially-leaky tests to child-table
      statistics, if the user can read the corresponding column of the
      table that's actually named in the query (Dilip Kumar, Amit Langote)
     </para>

     <para>
      This change fixes a performance problem for partitioned tables that
      was created by the fix for CVE-2017-7484.  That security fix
      disallowed applying leaky operators to statistics for columns that
      the current user doesn't have permission to read directly.  However,
      it's somewhat common to grant permissions only on the parent
      partitioned table and not bother to do so on individual partitions.
      In such cases, the user can read the column via the parent, so
      there's no point in this security restriction; it only results in
      poorer planner estimates than necessary.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6ea364e7e] 2019-12-14 13:49:15 -0500
Branch: REL_12_STABLE [d04e2553d] 2019-12-14 13:49:15 -0500
-->
     <para>
      Fix planner errors induced by overly-aggressive collapsing of joins
      to single-row subqueries (Tom Lane)
     </para>

     <para>
      This mistake led to errors such as <quote>failed to construct the
      join relation</quote>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [b3c265d7b] 2019-11-19 17:03:34 -0500
Branch: REL_12_STABLE [bffe18e3e] 2019-11-19 17:03:35 -0500
-->
     <para>
      Fix <quote>no = operator for
      opfamily <replaceable>NNNN</replaceable></quote> planner error when
      trying to match a <literal>LIKE</literal> or regex pattern-match
      operator to a binary-compatible index opclass (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [652686a33] 2020-01-12 14:36:59 -0500
Branch: REL_12_STABLE [70c17a812] 2020-01-12 14:37:00 -0500
Branch: REL_11_STABLE [5832be6ca] 2020-01-12 14:37:00 -0500
Branch: REL_10_STABLE [8c8b456b5] 2020-01-12 14:37:00 -0500
Branch: REL9_6_STABLE [2dd10477c] 2020-01-12 14:37:00 -0500
Branch: REL9_5_STABLE [784c58da1] 2020-01-12 14:37:00 -0500
Branch: REL9_4_STABLE [6bd567b65] 2020-01-12 14:37:00 -0500
-->
     <para>
      Fix edge-case crashes and misestimations in selectivity calculations
      for the <literal>&lt;@</literal> and <literal>@&gt;</literal> range
      operators (Michael Paquier, Andrey Borodin, Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [c676e659b] 2019-11-28 22:20:45 +0100
Branch: REL_12_STABLE [ef3fed2ce] 2019-11-28 22:26:25 +0100
Branch: master [6d61c3f1c] 2019-11-28 23:25:14 +0100
Branch: REL_12_STABLE [79d6e6afa] 2019-11-28 23:28:53 +0100
-->
     <para>
      Fix incorrect estimation for <literal>OR</literal> clauses when
      using most-common-value extended statistics (Tomas Vondra)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [d482f7f86] 2019-11-16 01:17:15 +0100
Branch: REL_12_STABLE [28555a53c] 2019-11-16 01:25:14 +0100
Branch: REL_11_STABLE [25a9ff6ca] 2019-11-16 01:58:38 +0100
Branch: REL_10_STABLE [0b0f281cc] 2019-11-16 01:42:20 +0100
-->
     <para>
      Ignore system columns when applying most-common-value
      extended statistics (Tomas Vondra)
     </para>

     <para>
      This prevents <quote>negative bitmapset member not allowed</quote>
      planner errors for affected queries.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [168d20640] 2019-11-21 10:23:28 +0900
Branch: REL_12_STABLE [c644407f7] 2019-11-21 10:23:38 +0900
Branch: REL_11_STABLE [62074a343] 2019-11-21 10:23:43 +0900
Branch: REL_10_STABLE [f4095026c] 2019-11-21 10:23:49 +0900
-->
     <para>
      Fix BRIN index logic to support hypothetical BRIN indexes
      (Julien Rouhaud, Heikki Linnakangas)
     </para>

     <para>
      Previously, if an <quote>index adviser</quote> extension tried to
      get the planner to produce a plan involving a hypothetical BRIN
      index, that would fail, because the BRIN cost estimation code would
      always try to physically access the index's metapage.  Now it checks
      to see if the index is only hypothetical, and uses default
      assumptions about the index parameters if so.
     </para>
    </listitem>

    <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Branch: master [d751ba523] 2020-01-14 09:52:21 +0000
Branch: REL_12_STABLE [fd5476b79] 2020-01-14 09:51:28 +0000
Branch: REL_11_STABLE [9bdb1f0e3] 2020-01-14 09:50:51 +0000
Branch: REL_10_STABLE [353cd826f] 2020-01-14 09:50:13 +0000
Branch: REL9_6_STABLE [fd87262de] 2020-01-14 09:49:23 +0000
Branch: REL9_5_STABLE [bb09a9414] 2020-01-14 09:48:44 +0000
Branch: REL9_4_STABLE [9be6fcb3e] 2020-01-14 09:47:44 +0000
-->
     <para>
      Improve error reporting for attempts to use automatic updating of
      views with conditional <literal>INSTEAD</literal> rules (Dean Rasheed)
     </para>

     <para>
      This has never been supported, but previously the error was thrown
      only at execution time, so that it could be masked by planner errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [fc7695891] 2019-12-23 12:08:23 -0500
Branch: REL_12_STABLE [976cb11f6] 2019-12-23 12:08:23 -0500
Branch: REL_11_STABLE [31dfa40a8] 2019-12-23 12:08:24 -0500
Branch: REL_10_STABLE [4af2531d0] 2019-12-23 12:08:24 -0500
Branch: REL9_6_STABLE [354d913f9] 2019-12-23 12:08:24 -0500
Branch: REL9_5_STABLE [6609c3ad9] 2019-12-23 12:08:24 -0500
Branch: REL9_4_STABLE [0d245d13c] 2019-12-23 12:08:24 -0500
Branch: master [74b35eb46] 2020-01-31 17:03:55 -0500
Branch: REL_12_STABLE [65aa15513] 2020-01-31 17:03:55 -0500
Branch: REL_11_STABLE [25dc267a1] 2020-01-31 17:03:55 -0500
Branch: REL_10_STABLE [de3d2df75] 2020-01-31 17:03:55 -0500
Branch: REL9_6_STABLE [742c646c1] 2020-01-31 17:03:55 -0500
Branch: REL9_5_STABLE [59047b6d0] 2020-01-31 17:03:55 -0500
Branch: REL9_4_STABLE [f521ef0ae] 2020-01-31 17:03:55 -0500
-->
     <para>
      Prevent a composite type from being included in itself indirectly
      via a range type (Tom Lane, Julien Rouhaud)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [39ebb943d] 2019-12-23 12:53:12 -0500
Branch: REL_12_STABLE [7fbb39a96] 2019-12-23 12:53:13 -0500
Branch: REL_11_STABLE [281dd22ac] 2019-12-23 12:53:13 -0500
Branch: REL_10_STABLE [ea1205a02] 2019-12-23 12:53:13 -0500
-->
     <para>
      Disallow partition key expressions that return pseudo-types, such
      as <type>record</type> (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2acab054b] 2019-12-17 17:44:27 -0500
Branch: REL_12_STABLE [97ba30fab] 2019-12-17 17:44:28 -0500
Branch: REL_11_STABLE [fc449abc3] 2019-12-17 17:44:28 -0500
Branch: REL_10_STABLE [5c5a268c6] 2019-12-17 17:44:28 -0500
Branch: REL9_6_STABLE [275a8ac4f] 2019-12-17 17:44:28 -0500
Branch: REL9_5_STABLE [da5dd4218] 2019-12-17 17:44:28 -0500
Branch: REL9_4_STABLE [298d056d9] 2019-12-17 17:44:28 -0500
-->
     <para>
      Fix error reporting for index expressions of prohibited types
      (Amit Langote)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [bf2efc55d] 2019-11-16 20:00:19 -0500
Branch: REL_12_STABLE [fcaf29d87] 2019-11-16 20:00:19 -0500
Branch: REL_11_STABLE [d898edf4f] 2019-11-16 20:00:19 -0500
Branch: REL_10_STABLE [a1b2cf095] 2019-11-16 20:00:19 -0500
Branch: REL9_6_STABLE [e4865bbdc] 2019-11-16 20:00:19 -0500
Branch: REL9_5_STABLE [ecb533af6] 2019-11-16 20:00:20 -0500
Branch: REL9_4_STABLE [65da6dd1d] 2019-11-16 20:00:20 -0500
-->
     <para>
      Fix dumping of views that contain only a <literal>VALUES</literal>
      list to handle cases where a view output column has been renamed
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2c7b5dad6] 2019-11-13 12:11:49 -0500
Branch: REL_12_STABLE [eec569fac] 2019-11-13 12:11:49 -0500
Branch: REL_11_STABLE [94a9cb43f] 2019-11-13 12:11:49 -0500
Branch: REL_10_STABLE [e25c4b3b2] 2019-11-13 12:11:50 -0500
-->
     <para>
      Ensure that data types and collations used
      in <literal>XMLTABLE</literal> constructs are accounted for when
      computing dependencies of a view or rule (Tom Lane)
     </para>

     <para>
      Previously it was possible to break a view
      using <literal>XMLTABLE</literal> by dropping a type, if the type
      was not otherwise referenced in the view.  This fix does not
      correct the dependencies already recorded for existing views, only
      for newly-created ones.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7618eaf5f] 2019-11-13 13:41:04 -0500
Branch: REL_12_STABLE [d9802590a] 2019-11-13 13:41:04 -0500
Branch: REL_11_STABLE [d66e68207] 2019-11-13 13:41:04 -0500
Branch: REL_10_STABLE [4be69e2ea] 2019-11-13 13:41:04 -0500
-->
     <para>
      Prevent unwanted downcasing and truncation of RADIUS authentication
      parameters (Marcos David)
     </para>

     <para>
      The <filename>pg_hba.conf</filename> parser mistakenly treated these
      fields as SQL identifiers, which in general they aren't.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [790026972] 2019-11-24 14:42:59 -0500
Branch: REL_12_STABLE [c47f498c9] 2019-11-24 14:42:59 -0500
Branch: REL_11_STABLE [377d1b95b] 2019-11-24 14:42:59 -0500
Branch: REL_10_STABLE [dbe15524b] 2019-11-24 14:42:59 -0500
Branch: REL9_6_STABLE [111298aa6] 2019-11-24 14:42:59 -0500
-->
     <para>
      Transmit incoming <command>NOTIFY</command> messages to the client
      before sending <literal>ReadyForQuery</literal>, rather than after
      (Tom Lane)
     </para>

     <para>
      This change ensures that, with libpq and other client libraries that
      act similarly to it, any notifications received during a transaction
      will be available by the time the client thinks the transaction is
      complete.  This probably makes no difference in practical
      applications (which would need to cope with asynchronous
      notifications in any case); but it makes it easier to build test
      cases with reproducible behavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2c0cdc818] 2020-01-11 17:14:08 -0500
Branch: REL_12_STABLE [fde155424] 2020-01-11 17:14:08 -0500
-->
     <para>
      Fix bugs in handling of non-blocking I/O when using GSSAPI
      encryption (Tom Lane)
     </para>

     <para>
      These errors could result in dropping data (usually leading to
      subsequent wire-protocol-violation errors) or in
      a <quote>livelock</quote> situation where a sending process goes to
      sleep although not all its data has been sent.
      Moreover, <application>libpq</application> failed to keep separate
      encryption state for each connection, creating the possibility for
      failures in applications using multiple encrypted database
      connections.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [e60b480d3] 2019-12-20 15:34:07 -0500
Branch: REL_12_STABLE [e8f60e6fe] 2019-12-20 15:34:07 -0500
Branch: REL_11_STABLE [1a77ea02d] 2019-12-20 15:34:08 -0500
Branch: REL_10_STABLE [d09cfa3e2] 2019-12-20 15:34:08 -0500
Branch: REL9_6_STABLE [c11bd6c10] 2019-12-20 15:34:08 -0500
Branch: REL9_5_STABLE [5e22a1111] 2019-12-20 15:34:08 -0500
Branch: REL9_4_STABLE [875c7d70d] 2019-12-20 15:34:08 -0500
-->
     <para>
      Allow <application>libpq</application> to parse all GSS-related
      connection parameters even when the GSSAPI code hasn't been compiled
      in (Tom Lane)
     </para>

     <para>
      This makes the behavior similar to our SSL support, where it was
      long ago deemed to be a good idea to always accept all the related
      parameters, even if some are ignored or restricted due to lack of
      the feature in a particular build.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [3ff660bbe] 2019-11-30 14:51:27 +0100
Branch: REL_12_STABLE [0dafed6fe] 2019-11-30 15:04:02 +0100
Branch: REL_11_STABLE [9668bf5d5] 2019-11-30 15:05:31 +0100
Branch: REL_10_STABLE [f71b22f53] 2019-11-30 15:07:47 +0100
Branch: REL9_6_STABLE [c59414da7] 2019-11-30 15:10:14 +0100
Branch: REL9_5_STABLE [a17602de1] 2019-11-30 15:14:12 +0100
Branch: REL9_4_STABLE [d9b974e99] 2019-11-30 15:16:58 +0100
-->
     <para>
      Fix incorrect handling of <literal>%b</literal>
      and <literal>%B</literal> format codes
      in <application>ecpg</application>'s
      <function>PGTYPEStimestamp_fmt_asc()</function> function
      (Tomas Vondra)
     </para>

     <para>
      Due to an off-by-one error, these codes would print the wrong month
      name, or possibly crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [44f1fc8df] 2020-01-19 19:15:15 -0500
Branch: REL_12_STABLE [c7c2cc670] 2020-01-19 19:15:15 -0500
-->
     <para>
      Avoid crash after an out-of-memory failure
      in <application>ecpglib</application> (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [2425f8f71] 2020-01-31 14:41:49 -0500
Branch: REL_12_STABLE [0c84199f7] 2020-01-31 14:41:49 -0500
Branch: REL_11_STABLE [63634883f] 2020-01-31 14:41:49 -0500
Branch: REL_10_STABLE [8b1d447a7] 2020-01-31 14:41:49 -0500
Branch: REL9_6_STABLE [cb4c04a4e] 2020-01-31 14:41:49 -0500
Branch: REL9_5_STABLE [1b78759a6] 2020-01-31 14:41:49 -0500
Branch: REL9_4_STABLE [5d60df830] 2020-01-31 14:41:49 -0500
-->
     <para>
      Fix
      parallel <application>pg_dump</application>/<application>pg_restore</application>
      to more gracefully handle failure to create worker processes
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [cd23a2019] 2020-01-20 12:57:17 -0500
Branch: REL_12_STABLE [71b121f42] 2020-01-20 12:57:17 -0500
Branch: REL_11_STABLE [4ea5cf403] 2020-01-20 12:57:17 -0500
Branch: REL_10_STABLE [6f6daa1be] 2020-01-20 12:57:17 -0500
Branch: REL9_6_STABLE [208e262f9] 2020-01-20 12:57:17 -0500
Branch: REL9_5_STABLE [b1392a950] 2020-01-20 12:57:17 -0500
Branch: REL9_4_STABLE [42e538fe6] 2020-01-20 12:57:18 -0500
-->
     <para>
      Prevent possible crash or lockup when attempting to terminate a
      parallel <application>pg_dump</application>/<application>pg_restore</application>
      run via a signal (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [29aeda6e4] 2019-11-13 11:35:37 -0500
Branch: REL_12_STABLE [1cd57b05e] 2019-11-13 11:35:37 -0500
Branch: REL_11_STABLE [8e4ef3287] 2019-11-13 11:35:37 -0500
Branch: REL_10_STABLE [c443e3c43] 2019-11-13 11:35:37 -0500
Branch: REL9_6_STABLE [f378d4dac] 2019-11-13 11:35:37 -0500
Branch: REL9_5_STABLE [fb26754af] 2019-11-13 11:35:37 -0500
Branch: REL9_4_STABLE [56c06999d] 2019-11-13 11:35:37 -0500
-->
     <para>
      In <application>pg_upgrade</application>, look inside arrays and
      ranges while searching for non-upgradable data types in tables
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [8fa8e0115] 2020-02-10 12:14:58 -0300
Branch: REL_12_STABLE [87d014da9] 2020-02-10 12:14:58 -0300
Branch: REL_11_STABLE [ca902add6] 2020-02-10 12:14:58 -0300
Branch: REL_10_STABLE [163161723] 2020-02-10 12:14:58 -0300
Branch: REL9_6_STABLE [5575fc208] 2020-02-10 12:14:58 -0300
Branch: REL9_5_STABLE [1b2ae4bcd] 2020-02-10 12:16:40 -0300
Branch: REL9_4_STABLE [6f1e443a6] 2020-02-10 12:14:58 -0300
-->
     <para>
      Apply more thorough syntax checking
      to <application>createuser</application>'s
      <option>--connection-limit</option> option (&Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [4ba4bfaf2] 2019-12-26 15:19:39 -0500
Branch: REL_12_STABLE [883c27a1c] 2019-12-26 15:19:39 -0500
Branch: REL_11_STABLE [ee206cb83] 2019-12-26 15:19:39 -0500
-->
     <para>
      Cope with changes of the specific type referenced by a PL/pgSQL
      composite-type variable in more cases (Ashutosh Sharma, Tom Lane)
     </para>

     <para>
      Dropping and re-creating the composite type referenced by a PL/pgSQL
      variable could lead to <quote>could not open relation with
      OID <replaceable>NNNN</replaceable></quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [215824f91] 2020-01-26 14:31:08 -0500
Branch: REL_12_STABLE [7294f99a0] 2020-01-26 14:31:08 -0500
Branch: REL_11_STABLE [5220ced0d] 2020-01-26 14:31:08 -0500
Branch: REL_10_STABLE [603e03b4c] 2020-01-26 14:31:08 -0500
Branch: REL9_6_STABLE [43a648f57] 2020-01-26 14:31:08 -0500
-->
     <para>
      Avoid crash in <filename>postgres_fdw</filename> when trying to
      send a command like <literal>UPDATE remote_tab SET (x,y) = (SELECT
      ...)</literal> to the remote server (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [b52739436] 2019-12-03 18:40:07 +0100
Branch: REL_12_STABLE [a8a8c6b29] 2019-12-03 18:40:48 +0100
Branch: REL_11_STABLE [267eb954c] 2019-12-03 18:41:29 +0100
Branch: REL_10_STABLE [46ce37b67] 2019-12-03 18:41:50 +0100
Branch: REL9_6_STABLE [fabdad822] 2019-12-03 18:42:25 +0100
Branch: REL9_5_STABLE [a2fdeb786] 2019-12-03 18:42:54 +0100
Branch: REL9_4_STABLE [44381b1af] 2019-12-03 18:43:15 +0100
-->
     <para>
      In <filename>contrib/dict_int</filename>,
      reject <varname>maxlen</varname> settings less than one
      (Tomas Vondra)
     </para>

     <para>
      This prevents a possible crash with silly settings for that parameter.
     </para>
    </listitem>

    <listitem>
<!--
Author: Joe Conway <mail@joeconway.com>
Branch: master [d5b9c2baf] 2019-12-23 13:33:25 -0500
Branch: REL_12_STABLE [b5e7569dd] 2019-12-23 13:33:34 -0500
Branch: REL_11_STABLE [f49e5efbc] 2019-12-23 13:33:42 -0500
Branch: REL_10_STABLE [81be0c57e] 2019-12-23 13:33:50 -0500
Branch: REL9_6_STABLE [3757c1640] 2019-12-23 13:33:57 -0500
Branch: REL9_5_STABLE [70fc6c4ef] 2019-12-23 13:34:05 -0500
Branch: REL9_4_STABLE [4a3cdb531] 2019-12-23 13:34:12 -0500
-->
     <para>
      Disallow NULL category values
      in <filename>contrib/tablefunc</filename>'s
      <function>crosstab()</function> function (Joe Conway)
     </para>

     <para>
      This case never worked usefully, and it would crash on some
      platforms.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [7d0bcb047] 2019-12-06 15:13:55 +0900
Branch: REL_12_STABLE [902276ff1] 2019-12-06 15:14:26 +0900
Branch: REL_11_STABLE [7ad544fd8] 2019-12-06 15:14:31 +0900
-->
     <para>
      Fix <application>configure</application>'s probe for
      OpenSSL's <function>SSL_clear_options()</function> function so that
      it works with OpenSSL versions before 1.1.0 (Michael Paquier, Daniel
      Gustafsson)
     </para>

     <para>
      This problem could lead to failure to set the SSL compression option
      as desired, when <productname>PostgreSQL</productname> is built against
      an old version of OpenSSL.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [62c9b5223] 2020-01-21 13:46:39 +0900
Branch: REL_12_STABLE [ef8e6b2c2] 2020-01-21 13:46:55 +0900
Branch: REL_11_STABLE [7c7026bb7] 2020-01-21 13:47:01 +0900
Branch: REL_10_STABLE [1ef7332b7] 2020-01-21 13:47:05 +0900
Branch: REL9_6_STABLE [9740cdbe5] 2020-01-21 13:47:10 +0900
Branch: REL9_5_STABLE [4a49149b9] 2020-01-21 13:47:13 +0900
Branch: REL9_4_STABLE [dbe405b78] 2020-01-21 13:47:17 +0900
-->
     <para>
      Mark some timeout and statistics-tracking GUC variables
      as <literal>PGDLLIMPORT</literal>, to allow extensions to access
      them on Windows (Pascal Legrand)
     </para>

     <para>
      This applies to
      <literal>idle_in_transaction_session_timeout</literal>,
      <literal>lock_timeout</literal>,
      <literal>statement_timeout</literal>,
      <literal>track_activities</literal>,
      <literal>track_counts</literal>, and
      <literal>track_functions</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [543852fd8] 2020-01-17 15:29:11 +0100
Branch: REL_12_STABLE [162c951df] 2020-01-17 15:30:51 +0100
Branch: REL_11_STABLE [8c37e4469] 2020-01-17 15:31:33 +0100
Branch: REL_10_STABLE [a801452c9] 2020-01-17 15:32:03 +0100
-->
     <para>
      Avoid memory leak in sanity checks for <quote>slab</quote> memory
      contexts (Tomas Vondra)
     </para>

     <para>
      This isn't an issue for production builds, since they wouldn't
      ordinarily have memory context checking enabled; but the leak could
      be quite severe in a debug build.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [3ccc66dac] 2020-02-06 14:43:21 +0900
Branch: REL_12_STABLE [3d214a8e5] 2020-02-06 14:44:22 +0900
Branch: REL_11_STABLE [ac25e1044] 2020-02-06 14:44:40 +0900
Branch: REL_10_STABLE [c17abac60] 2020-02-06 14:44:59 +0900
-->
     <para>
      Fix multiple statistics entries reported by the LWLock statistics
      mechanism (Fujii Masao)
     </para>

     <para>
      The LWLock statistics code (which is not built by default; it
      requires compiling with <option>-DLWLOCK_STATS</option>)
      could report multiple entries for the same LWLock and backend
      process, as a result of faulty hashtable key creation.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [28e6a2fd6] 2019-12-09 15:03:51 -0500
Branch: REL_12_STABLE [001362cfd] 2019-12-09 15:03:51 -0500
Branch: REL_11_STABLE [2ed302ab9] 2019-12-09 15:03:51 -0500
Branch: REL_10_STABLE [096ea540e] 2019-12-09 15:03:52 -0500
Branch: REL9_6_STABLE [df44e411c] 2019-12-09 15:03:52 -0500
Branch: REL9_5_STABLE [1a0c65120] 2019-12-09 15:03:52 -0500
Branch: REL9_4_STABLE [7309e75fa] 2019-12-09 15:03:52 -0500
-->
     <para>
      Fix race condition that led to delayed delivery of interprocess
      signals on Windows (Amit Kapila)
     </para>

     <para>
      This caused visible timing oddities in <command>NOTIFY</command>,
      and perhaps other misbehavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [6969deeb8] 2019-11-20 18:29:37 +1300
Branch: REL_12_STABLE [2189f49c4] 2019-11-20 18:30:56 +1300
-->
     <para>
      Fix handling of a corner-case error result from
      Windows' <function>ReadFile()</function> function
      (Thomas Munro, Juan Jos&eacute; Santamar&iacute;a Flecha)
     </para>

     <para>
      So far as is known, this oversight just resulted in noisy log
      messages, not any actual query misbehavior.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [6d7547c21] 2019-12-16 15:10:55 -0500
Branch: REL_12_STABLE [95f43fee9] 2019-12-16 15:10:55 -0500
Branch: REL_11_STABLE [2cf51809b] 2019-12-16 15:10:55 -0500
Branch: REL_10_STABLE [81b052c31] 2019-12-16 15:10:55 -0500
Branch: REL9_6_STABLE [65cb25e4f] 2019-12-16 15:10:55 -0500
Branch: REL9_5_STABLE [cd0380351] 2019-12-16 15:10:55 -0500
Branch: REL9_4_STABLE [cfb2a4cce] 2019-12-16 15:10:56 -0500
Branch: master [5406513e9] 2019-12-21 17:39:36 -0500
Branch: REL_12_STABLE [90281a3a2] 2019-12-21 17:39:36 -0500
Branch: REL_11_STABLE [b3c4e2418] 2019-12-21 17:39:36 -0500
Branch: REL_10_STABLE [a69f5697a] 2019-12-21 17:39:36 -0500
Branch: REL9_6_STABLE [739201b0e] 2019-12-21 17:39:36 -0500
Branch: REL9_5_STABLE [35b28d983] 2019-12-21 17:39:37 -0500
Branch: REL9_4_STABLE [f1a4020ef] 2019-12-21 17:39:37 -0500
-->
     <para>
      On Windows, retry a few times after
      an <literal>ERROR_ACCESS_DENIED</literal> file access failure
      (Alexander Lakhin, Tom Lane)
     </para>

     <para>
      This helps cope with cases where a file open attempt fails because
      the targeted file is flagged for deletion but not yet actually gone.
      <application>pg_ctl</application>, for example, frequently failed
      with such an error when probing to see if the postmaster had shut
      down yet.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [0da33c762] 2019-12-10 13:17:08 -0500
Branch: REL_12_STABLE [be9d4b928] 2019-12-10 13:17:08 -0500
-->
     <para>
      On Windows, work around sharing violations for the postmaster's log
      file when <application>pg_ctl</application> is used to start the
      postmaster very shortly after it's been stopped, for example by
      <literal>pg_ctl restart</literal> (Alexander Lakhin)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-12-1">
  <title>Release 12.1</title>

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

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

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

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

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [93765bd95] 2019-10-09 22:00:50 -0700
Branch: REL_12_STABLE [f224c7c11] 2019-10-09 22:13:48 -0700
Branch: master [ae5cae54c] 2019-10-16 02:37:34 -0700
Branch: REL_12_STABLE [3b25de620] 2019-10-16 02:38:13 -0700
-->
     <para>
      Fix crash when <command>ALTER TABLE</command> adds a column without
      a default value along with making other changes that require a table
      rewrite (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5d3500da7] 2019-10-23 15:04:48 +0900
Branch: REL_12_STABLE [7668d4847] 2019-10-23 15:05:09 +0900
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [8270a0d9a] 2019-10-25 10:20:08 +0900
Branch: REL_12_STABLE [7f84b0ef0] 2019-10-25 10:20:16 +0900
-->
     <para>
      Fix lock handling in <command>REINDEX CONCURRENTLY</command>
      (Michael Paquier)
     </para>

     <para>
      <command>REINDEX CONCURRENTLY</command> neglected to take a
      session-level lock on the new index version, potentially allowing
      other sessions to manipulate it too soon.
      Also, a query-cancel or session-termination interrupt arriving at the
      wrong time could result in failure to release the session-level
      locks that <command>REINDEX CONCURRENTLY</command> does hold.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [0d21f919e] 2019-10-16 14:51:34 +0200
Branch: REL_12_STABLE [1cd5bc3cc] 2019-10-16 14:51:23 +0200
-->
     <para>
      Avoid crash due to race condition when reporting the progress of
      a <command>CREATE INDEX CONCURRENTLY</command> or <command>REINDEX
      CONCURRENTLY</command> command (&Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [68ac9cf24] 2019-10-28 11:57:31 +0900
Branch: REL_12_STABLE [5e5f32284] 2019-10-28 11:58:29 +0900
-->
     <para>
      Avoid creating duplicate dependency entries during <command>REINDEX
      CONCURRENTLY</command> (Michael Paquier)
     </para>

     <para>
      This bug resulted in bloat in <structname>pg_depend</structname>,
      but no worse consequences than that.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [6bda2af03] 2019-10-17 09:59:21 +1300
Branch: REL_12_STABLE [486a8f152] 2019-10-17 11:08:49 +1300
Branch: REL_11_STABLE [6f1e336de] 2019-10-17 11:01:35 +1300
Branch: REL_10_STABLE [583d86f92] 2019-10-17 10:55:26 +1300
Branch: REL9_6_STABLE [0640f032a] 2019-10-17 11:57:33 +1300
Branch: REL9_5_STABLE [c1443eebe] 2019-10-17 10:28:28 +1300
Branch: REL9_4_STABLE [080cf32d2] 2019-10-17 10:14:51 +1300
-->
     <para>
      Prevent <command>VACUUM</command> from trying to freeze
      an old multixact ID involving a still-running transaction
      (Nathan Bossart, Jeremy Schneider)
     </para>

     <para>
      This case would lead to <command>VACUUM</command> failing until the
      old transaction terminates.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [cef82eda1] 2019-10-15 10:40:13 -0700
Branch: REL_12_STABLE [6d3fe6b6b] 2019-10-15 10:40:51 -0700
-->
     <para>
      Fix <quote>wrong type of slot</quote> error when trying
      to <command>CLUSTER</command> on an expression index (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [b4bcc6bfd] 2019-11-07 13:59:24 -0300
Branch: REL_12_STABLE [b75ccddcd] 2019-11-07 13:59:24 -0300
Branch: REL_11_STABLE [e4baecf1e] 2019-11-07 14:26:10 -0300
-->
     <para>
      <command>SET CONSTRAINTS ... DEFERRED</command> failed on
      partitioned tables, incorrectly complaining about lack of triggers
      (&Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [dc816e581] 2019-11-02 14:16:04 +0900
Branch: REL_12_STABLE [7963c4c4b] 2019-11-02 14:16:11 +0900
Branch: REL_11_STABLE [f10815c5b] 2019-11-02 14:17:12 +0900
-->
     <para>
      Fix failure when creating indexes for a partition, if the parent
      partitioned table contains any dropped columns (Michael Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [1df5875d3] 2019-10-13 17:51:55 +0900
Branch: REL_12_STABLE [3a58c5f14] 2019-10-13 17:53:08 +0900
Branch: master [14ac4237c] 2019-10-14 08:58:38 +0900
Branch: REL_12_STABLE [9fd9af97f] 2019-10-14 08:58:47 +0900
-->
     <para>
      Fix dropping of indexed columns in partitioned tables
      (Amit Langote, Michael Paquier)
     </para>

     <para>
      Previously this might fail with an error message complaining about
      the dependencies of the indexes.  It should automatically drop the
      indexes, instead.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d80be6f2f] 2019-10-29 11:08:09 +0900
Branch: REL_12_STABLE [eae1ba65f] 2019-10-29 11:08:16 +0900
-->
     <para>
      Ensure that a partition index can be dropped after a failure to
      reindex it concurrently (Michael Paquier)
     </para>

     <para>
      The
      index's <structname>pg_class</structname>.<structfield>relispartition</structfield>
      flag was left in the wrong state in such a case,
      causing <command>DROP INDEX</command> to fail.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [529ebb20a] 2019-11-05 11:42:24 -0500
Branch: REL_12_STABLE [a9db37a18] 2019-11-05 11:42:25 -0500
-->
     <para>
      Fix handling of equivalence class members for partition-wise joins
      (Amit Langote)
     </para>

     <para>
      This oversight could lead either to failure to use a feasible
      partition-wise join plan, or to a <quote>could not find pathkey item
      to sort</quote> planner failure.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Gierth <rhodiumtoad@postgresql.org>
Branch: master [b7a1c5539] 2019-10-03 10:54:52 +0100
Branch: REL_12_STABLE [0b11dc019] 2019-10-03 11:12:39 +0100
Branch: REL_11_STABLE [0a445f279] 2019-10-03 11:14:30 +0100
Branch: REL_10_STABLE [ede0ab6cc] 2019-10-03 11:15:38 +0100
Branch: REL9_6_STABLE [6db0d7f35] 2019-10-03 11:17:38 +0100
Branch: REL9_5_STABLE [d2427f11b] 2019-10-03 11:18:15 +0100
Branch: REL9_4_STABLE [3473f81dd] 2019-10-03 11:18:20 +0100
-->
     <para>
      Ensure that offset expressions in <literal>WINDOW</literal> clauses
      are processed when a query's expressions are manipulated (Andrew Gierth)
     </para>

     <para>
      This oversight could result in assorted failures when the offsets
      are nontrivial expressions.  One example is that a function
      parameter reference in such an expression would fail if the function
      was inlined.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3887e9455] 2019-10-07 12:39:09 -0400
Branch: REL_12_STABLE [7e8d0eb63] 2019-10-07 12:39:09 -0400
Branch: REL_11_STABLE [021065aac] 2019-10-07 12:39:09 -0400
Branch: REL_10_STABLE [1b5c2ddcd] 2019-10-07 12:39:09 -0400
Branch: REL9_6_STABLE [c69e982a6] 2019-10-07 12:39:09 -0400
Branch: REL9_5_STABLE [8c2910ce5] 2019-10-07 12:39:10 -0400
-->
     <para>
      Avoid postmaster failure if a parallel query requests a background
      worker when no postmaster child process array slots remain free
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [d986d4e87] 2019-10-04 13:50:49 -0700
Branch: REL_12_STABLE [60e97d63e] 2019-10-04 13:57:37 -0700
-->
     <para>
      Fix crash triggered by an EvalPlanQual recheck on a table with
      a <literal>BEFORE UPDATE</literal> trigger (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a30531c5c] 2019-11-05 13:40:37 -0500
Branch: REL_12_STABLE [791864193] 2019-11-05 13:40:37 -0500
Branch: REL_11_STABLE [2bfe015b5] 2019-11-05 13:40:37 -0500
-->
     <para>
      Fix <quote>unexpected relkind</quote> error when a query tries to
      access a TOAST table (John Hsu, Michael Paquier, Tom Lane)
     </para>

     <para>
      The error should say that permission is denied, but this case got
      broken during code refactoring.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [3c8c55dd5] 2019-10-17 13:47:01 +1300
Branch: REL_12_STABLE [3af7c64fe] 2019-10-17 14:00:15 +1300
Branch: REL_11_STABLE [6737111a7] 2019-10-17 13:58:58 +1300
Branch: REL_10_STABLE [89a3cdb32] 2019-10-17 13:57:23 +1300
Branch: REL9_6_STABLE [fd5ffa425] 2019-10-17 13:52:59 +1300
Branch: REL9_5_STABLE [cdbb39213] 2019-10-17 13:50:59 +1300
-->
     <para>
      Provide a relevant error context line when an error occurs while
      setting GUC parameters during parallel worker startup (Thomas Munro)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [a586cc4b6] 2019-10-04 13:34:28 -0700
Branch: REL_12_STABLE [c025165da] 2019-10-04 13:34:39 -0700
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [b8e19b932] 2019-10-09 13:30:43 +0900
Branch: REL_12_STABLE [07c314968] 2019-10-09 13:31:13 +0900
Branch: REL_11_STABLE [e34358c43] 2019-10-09 13:31:17 +0900
Branch: REL_10_STABLE [fbfc835b4] 2019-10-09 13:31:22 +0900
Branch: REL9_6_STABLE [4e7a8874a] 2019-10-09 13:31:27 +0900
Branch: REL9_5_STABLE [c50f95272] 2019-10-09 13:31:33 +0900
Branch: REL9_4_STABLE [59800f7ce] 2019-10-09 13:31:38 +0900
-->
     <para>
      Ensure that <function>fsync()</function> is applied only to files
      that are opened read/write (Andres Freund, Michael Paquier)
     </para>

     <para>
      Some code paths tried to do this after opening a file read-only,
      but on some platforms that causes <quote>bad file descriptor</quote>
      or similar errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8e10405c7] 2019-10-03 17:34:25 -0400
Branch: REL_12_STABLE [8381242df] 2019-10-03 17:34:25 -0400
Branch: REL_11_STABLE [e5ff97571] 2019-10-03 17:34:25 -0400
Branch: REL_10_STABLE [226551e7c] 2019-10-03 17:34:26 -0400
Branch: REL9_6_STABLE [677989cc0] 2019-10-03 17:34:26 -0400
Branch: REL9_5_STABLE [54d641da0] 2019-10-03 17:34:26 -0400
Branch: REL9_4_STABLE [6899be289] 2019-10-03 17:34:26 -0400
-->
     <para>
      Allow encoding conversion to succeed on longer strings than before
      (&Aacute;lvaro Herrera, Tom Lane)
     </para>

     <para>
      Previously, there was a hard limit of 0.25GB on the input string,
      but now it will work as long as the converted output is not over 1GB.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Gierth <rhodiumtoad@postgresql.org>
Branch: master [a9056cc63] 2019-11-06 04:13:30 +0000
Branch: REL_12_STABLE [f57c63107] 2019-11-06 04:33:35 +0000
Branch: REL_11_STABLE [be99485b9] 2019-11-06 04:33:42 +0000
Branch: REL_10_STABLE [6da5310e8] 2019-11-06 04:33:49 +0000
Branch: REL9_6_STABLE [747aac88f] 2019-11-06 04:33:55 +0000
-->
     <para>
      Avoid creating unnecessarily-bulky tuple stores for window functions
      (Andrew Gierth)
     </para>

     <para>
      In some cases the tuple storage would include all columns of the
      source table(s), not just the ones that are needed by the query.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c477f3e44] 2019-10-03 13:56:26 -0400
Branch: REL_12_STABLE [9a407209a] 2019-10-03 13:56:26 -0400
Branch: REL_11_STABLE [82d0a46ea] 2019-10-03 13:56:26 -0400
Branch: REL_10_STABLE [9ad1b572d] 2019-10-03 13:56:26 -0400
Branch: REL9_6_STABLE [e5e4f12a5] 2019-10-03 13:56:26 -0400
Branch: REL9_5_STABLE [1534531fe] 2019-10-03 13:56:26 -0400
Branch: REL9_4_STABLE [4829576ba] 2019-10-03 13:56:27 -0400
-->
     <para>
      Allow <function>repalloc()</function> to give back space when a
      large chunk is reduced in size (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [df86e52ca] 2019-10-02 15:53:07 +0900
Branch: REL_12_STABLE [2a724cdbf] 2019-10-02 15:53:51 +0900
Branch: REL_11_STABLE [b978de0eb] 2019-10-02 15:53:56 +0900
Branch: REL_10_STABLE [7ca35472c] 2019-10-02 15:54:01 +0900
Branch: REL9_6_STABLE [ac1efdd08] 2019-10-02 15:54:11 +0900
Branch: REL9_5_STABLE [ae205dfe6] 2019-10-02 15:54:16 +0900
-->
     <para>
      Ensure that temporary WAL and history files are removed at the end
      of archive recovery (Sawada Masahiko)
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [ec1259e88] 2019-10-18 22:32:18 +0900
Branch: REL_12_STABLE [9dfbf9a04] 2019-10-18 22:34:05 +0900
Branch: REL_11_STABLE [f7b70700b] 2019-10-18 22:35:07 +0900
Branch: REL_10_STABLE [c455ee88c] 2019-10-18 22:35:19 +0900
Branch: REL9_6_STABLE [579996bc2] 2019-10-18 22:35:30 +0900
Branch: REL9_5_STABLE [1b2ba8874] 2019-10-18 22:35:41 +0900
Branch: REL9_4_STABLE [14c59185b] 2019-10-18 22:35:52 +0900
-->
     <para>
      Avoid failure in archive recovery
      if <varname>recovery_min_apply_delay</varname> is enabled
      (Fujii Masao)
     </para>

     <para>
      <varname>recovery_min_apply_delay</varname> is not typically used in
      this configuration, but it should work.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [20961ceaf] 2019-10-11 15:47:59 +0900
Branch: REL_12_STABLE [fcf7f8d92] 2019-10-11 15:49:32 +0900
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [9b95a36be] 2019-10-18 22:24:18 +0900
Branch: REL_12_STABLE [03666dfa1] 2019-10-18 22:25:42 +0900
-->
     <para>
      Ignore <varname>restore_command</varname>,
      <varname>recovery_end_command</varname>,
      and <varname>recovery_min_apply_delay</varname> settings during
      crash recovery (Fujii Masao)
     </para>

     <para>
      Now that these settings can be specified
      in <filename>postgresql.conf</filename>, they could be turned on
      during crash recovery, but honoring them then is undesirable.
      Ignore these settings until crash recovery is complete.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [1c60e40ad] 2019-11-09 08:35:44 +0100
Branch: REL_12_STABLE [d891d2c89] 2019-11-09 08:35:51 +0100
Branch: REL_11_STABLE [7961da188] 2019-11-09 08:36:11 +0100
Branch: REL_10_STABLE [2e00d5976] 2019-11-09 09:15:35 +0100
Branch: master [ef8fcbff5] 2019-11-09 13:19:27 +0100
Branch: REL_12_STABLE [f96756304] 2019-11-09 16:00:34 +0100
Branch: REL_11_STABLE [aa9884578] 2019-11-09 16:01:23 +0100
Branch: REL_10_STABLE [806f9dc02] 2019-11-09 16:03:00 +0100
-->
     <para>
      Fix logical replication failure when publisher and subscriber have
      different ideas about a table's replica identity columns
      (Jehan-Guillaume de Rorthais, Peter Eisentraut)
     </para>

     <para>
      Declaring a column as part of the replica identity on the
      subscriber, when it does not exist at all on the publisher, led
      to <quote>negative bitmapset member not allowed</quote> errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [38ddeab13] 2019-10-17 15:06:06 +0200
Branch: REL_12_STABLE [1391c13ce] 2019-10-17 15:06:06 +0200
Branch: REL_11_STABLE [45e4067c0] 2019-10-17 15:06:05 +0200
Branch: REL_10_STABLE [0d9fcbada] 2019-10-17 15:06:05 +0200
Branch: REL9_6_STABLE [5f038991e] 2019-10-17 15:06:05 +0200
Branch: REL9_5_STABLE [b2ab06e02] 2019-10-17 15:06:05 +0200
Branch: REL9_4_STABLE [abd5071d2] 2019-10-17 15:06:05 +0200
-->
     <para>
      Avoid unwanted delay during shutdown of a logical replication
      walsender (Craig Ringer, &Aacute;lvaro Herrera)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [3f60f690f] 2019-10-18 14:26:29 +0900
Branch: REL_12_STABLE [04510dbe3] 2019-10-18 14:26:53 +0900
Branch: REL_11_STABLE [feed5ee47] 2019-10-18 14:27:00 +0900
Branch: REL_10_STABLE [47698b4b6] 2019-10-18 14:27:04 +0900
-->
     <para>
      Fix timeout handling in logical replication walreceiver processes
      (Julien Rouhaud)
     </para>

     <para>
      Erroneous logic prevented <varname>wal_receiver_timeout</varname>
      from working in logical replication deployments.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [5f6b1eb0c] 2019-11-06 16:12:21 +0900
Branch: REL_12_STABLE [9ae4bdadf] 2019-11-06 16:12:28 +0900
Branch: REL_11_STABLE [cb6d7f985] 2019-11-06 16:12:34 +0900
Branch: REL_10_STABLE [f7b0d0704] 2019-11-06 16:12:40 +0900
Branch: REL9_6_STABLE [16b43e091] 2019-11-06 16:12:47 +0900
Branch: REL9_5_STABLE [404d25f3c] 2019-11-06 16:12:51 +0900
Branch: REL9_4_STABLE [15d90a02a] 2019-11-06 16:12:56 +0900
-->
     <para>
      Correctly time-stamp replication messages for logical
      decoding (Jeff Janes)
     </para>

     <para>
      This oversight resulted, for example,
      in <structname>pg_stat_subscription</structname>.<structfield>last_msg_send_time</structfield>
      usually reading as NULL.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [20345197f] 2019-11-01 22:38:32 +0900
Branch: REL_12_STABLE [7b8c2de64] 2019-11-01 22:38:45 +0900
Branch: REL_11_STABLE [61f238392] 2019-11-01 22:38:51 +0900
Branch: REL_10_STABLE [b99bfc3c9] 2019-11-01 22:38:55 +0900
Branch: REL9_6_STABLE [52684bc7d] 2019-11-01 22:39:01 +0900
Branch: REL9_5_STABLE [0927d0c25] 2019-11-01 22:39:05 +0900
Branch: REL9_4_STABLE [f88f7206e] 2019-11-01 22:39:09 +0900
-->
     <para>
      Fix race condition during backend exit, when the backend process has
      previously waited for synchronous replication to occur (Dongming Liu)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [3affe76ef] 2019-11-05 14:27:37 -0500
Branch: REL_12_STABLE [f9bd3b6d9] 2019-11-05 14:27:37 -0500
Branch: REL_11_STABLE [97ddc47b9] 2019-11-05 14:27:37 -0500
Branch: REL_10_STABLE [0238a5028] 2019-11-05 14:27:37 -0500
Branch: REL9_6_STABLE [383602f9a] 2019-11-05 14:27:37 -0500
Branch: REL9_5_STABLE [970372037] 2019-11-05 14:27:37 -0500
Branch: REL9_4_STABLE [762b25653] 2019-11-05 14:27:38 -0500
-->
     <para>
      Avoid logging complaints about abandoned connections when using PAM
      authentication (Tom Lane)
     </para>

     <para>
      libpq-based clients will typically make two connection attempts when
      a password is required, since they don't prompt their user for a
      password until their first connection attempt fails.  Therefore the
      server is coded not to generate useless log spam when a client
      closes the connection upon being asked for a password.  However,
      the PAM authentication code hadn't gotten that memo, and would
      generate several messages about a phantom authentication failure.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5ac0d9360] 2019-09-22 17:45:59 -0400
Branch: REL_12_STABLE Release: REL_12_0 [860216efa] 2019-09-22 17:46:00 -0400
Branch: REL_11_STABLE [7e7abed05] 2019-09-22 17:46:00 -0400
Branch: REL_10_STABLE [096d34c3b] 2019-09-22 17:46:00 -0400
Branch: REL9_6_STABLE [6ddd164aa] 2019-09-22 17:46:00 -0400
Branch: REL9_5_STABLE [35eb13270] 2019-09-22 17:46:00 -0400
Branch: REL9_4_STABLE [8a17afe84] 2019-09-22 17:46:00 -0400
Branch: master [61aa9f544] 2019-10-04 10:34:40 -0400
Branch: REL_12_STABLE [6c3b6406d] 2019-10-04 10:34:21 -0400
Branch: REL_11_STABLE [b8ddf0bdf] 2019-10-04 10:34:21 -0400
Branch: REL_10_STABLE [9faa9794f] 2019-10-04 10:34:21 -0400
Branch: REL9_6_STABLE [30e5b3bbe] 2019-10-04 10:34:21 -0400
Branch: REL9_5_STABLE [8b77f783b] 2019-10-04 10:34:21 -0400
Branch: REL9_4_STABLE [b6a6c129f] 2019-10-04 10:34:21 -0400
-->
     <para>
      Fix misbehavior of <function>bitshiftright()</function> (Tom Lane)
     </para>

     <para>
      The bitstring right shift operator failed to zero out padding space
      that exists in the last byte of the result when the bitstring length
      is not a multiple of 8.  While invisible to most operations, any
      nonzero bits there would result in unexpected comparison behavior,
      since bitstring comparisons don't bother to ignore the extra bits,
      expecting them to always be zero.
     </para>

     <para>
      If you have inconsistent data as a result of saving the output
      of <function>bitshiftright()</function> in a table, it's possible to
      fix it with something like
<programlisting>
UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
</programlisting>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [bd1ef5799] 2019-10-28 12:21:13 -0400
Branch: REL_12_STABLE [43e43771b] 2019-10-28 12:21:13 -0400
-->
     <para>
      Fix result of text <function>position()</function> function (also
      known as <function>strpos()</function>) for an empty search string
      (Tom Lane)
     </para>

     <para>
      Historically, and per the SQL standard, the result should be one in
      such cases, but 12.0 returned zero.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [a7145f6bc] 2019-11-07 11:22:58 -0500
Branch: REL_12_STABLE [f6e72dc9c] 2019-11-07 11:22:59 -0500
Branch: REL_11_STABLE [b49b7f944] 2019-11-07 11:23:00 -0500
Branch: REL_10_STABLE [5f794f757] 2019-11-07 11:23:02 -0500
Branch: REL9_6_STABLE [15783d057] 2019-11-07 11:23:03 -0500
Branch: REL9_5_STABLE [84780d468] 2019-11-07 11:23:04 -0500
Branch: REL9_4_STABLE [8d380864a] 2019-11-07 11:23:06 -0500
Branch: REL9_6_STABLE [a55018760] 2019-11-09 15:50:16 -0500
Branch: REL9_5_STABLE [30f6998ff] 2019-11-09 15:50:16 -0500
Branch: REL9_4_STABLE [18622caa3] 2019-11-09 15:50:16 -0500
-->
     <para>
      Fix detection of edge-case integer overflow in interval
      multiplication (Yuya Watari)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [8af1624e3] 2019-11-02 16:45:32 -0400
Branch: REL_12_STABLE [43753c2cf] 2019-11-02 16:45:32 -0400
Branch: REL_11_STABLE [65cdf8bc1] 2019-11-02 16:45:32 -0400
Branch: REL_10_STABLE [680aabd2f] 2019-11-02 16:45:32 -0400
Branch: REL9_6_STABLE [51b9ac558] 2019-11-02 16:45:32 -0400
Branch: master [db27b60f0] 2019-11-03 16:10:23 -0500
Branch: REL_12_STABLE [6dd92138d] 2019-11-03 16:10:38 -0500
Branch: REL_11_STABLE [88d03d73c] 2019-11-03 16:10:45 -0500
Branch: REL_10_STABLE [4077e9ae1] 2019-11-03 16:10:56 -0500
Branch: REL9_6_STABLE [d43bd9dce] 2019-11-03 16:11:05 -0500
-->
     <para>
      Avoid crashes if <literal>ispell</literal> text search dictionaries
      contain wrong affix data (Arthur Zakirov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [70a6c37d5] 2019-10-21 08:57:32 +0530
Branch: REL_12_STABLE [62f4dd379] 2019-10-21 09:04:35 +0530
-->
     <para>
      Avoid memory leak while vacuuming a GiST index (Dilip Kumar)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [db477b691] 2019-10-21 14:18:01 -0400
Branch: REL_12_STABLE [4f2ad5226] 2019-10-21 14:18:16 -0400
Branch: REL_11_STABLE [a05a04d0e] 2019-10-21 14:18:31 -0400
Branch: REL_10_STABLE [aebe3ef0e] 2019-10-21 14:18:38 -0400
Branch: REL9_6_STABLE [185253ab8] 2019-10-21 14:18:47 -0400
Branch: REL9_5_STABLE [e3267407e] 2019-10-21 14:18:55 -0400
Branch: REL9_4_STABLE [fedcab352] 2019-10-21 14:19:03 -0400
-->
     <para>
      On Windows, recognize additional spellings of the <quote>Norwegian
      (Bokm&aring;l)</quote> locale name (Tom Lane)
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [4f4061b2d] 2019-10-21 11:17:13 +0900
Branch: REL_12_STABLE [2b0f959b5] 2019-10-21 11:17:43 +0900
Branch: master [57379cd5a] 2019-10-23 11:34:18 +0900
Branch: REL_12_STABLE [a6a95d4f3] 2019-10-23 11:34:42 +0900
-->
     <para>
      Fix <application>libpq</application> to allow trailing whitespace in
      the string values of integer parameters (Michael Paquier)
     </para>

     <para>
      Version 12 tightened <application>libpq</application>'s validation
      of integer parameters, but disallowing trailing whitespace seems
      undesirable.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [ba19a6b73] 2019-10-21 11:39:15 +0900
Branch: REL_12_STABLE [ed5109a61] 2019-10-21 11:39:28 +0900
-->
     <para>
      In <application>libpq</application>, correctly
      report <literal>CONNECTION_BAD</literal> connection status after a
      failure caused by a syntactically
      invalid <option>connect_timeout</option> parameter value (Lars Kanis)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [c8cb98ec4] 2019-11-07 14:21:52 -0500
Branch: REL_12_STABLE [101654987] 2019-11-07 14:21:52 -0500
Branch: REL_11_STABLE [89f56fc22] 2019-11-07 14:21:52 -0500
Branch: REL_10_STABLE [831ca9513] 2019-11-07 14:21:52 -0500
Branch: REL9_6_STABLE [baa483984] 2019-11-07 14:21:52 -0500
Branch: REL9_5_STABLE [b705d6391] 2019-11-07 14:21:52 -0500
Branch: REL9_4_STABLE [b20233aac] 2019-11-07 14:21:52 -0500
-->
     <para>
      Avoid compile failure if an ECPG client
      includes <filename>ecpglib.h</filename> while
      having <literal>ENABLE_NLS</literal> defined (Tom Lane)
     </para>

     <para>
      This risk was created by a misplaced
      declaration: <function>ecpg_gettext()</function> should not be
      visible to client code.
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Branch: master [1752e3516] 2019-10-17 09:58:01 +0200
Branch: REL_12_STABLE [b304b2b65] 2019-10-17 09:58:01 +0200
-->
     <para>
      Fix scheduling of parallel restore of a foreign key constraint on a
      partitioned table (&Aacute;lvaro Herrera)
     </para>

     <para>
      <application>pg_dump</application> failed to emit full dependency
      information for partitioned tables' foreign keys.  This could allow
      parallel <application>pg_restore</application> to try to recreate a
      foreign key constraint too soon.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [5102f3944] 2019-11-04 16:25:05 -0500
Branch: REL_12_STABLE [ca27a84c9] 2019-11-04 16:25:05 -0500
Branch: REL_11_STABLE [078f5bc8e] 2019-11-04 16:25:05 -0500
Branch: REL_10_STABLE [ee8b95f26] 2019-11-04 16:25:05 -0500
Branch: REL9_6_STABLE [648f17879] 2019-11-04 16:25:05 -0500
Branch: REL9_5_STABLE [74d32ee70] 2019-11-04 16:25:05 -0500
Branch: REL9_4_STABLE [da5cd7a68] 2019-11-04 16:25:05 -0500
-->
     <para>
      In <application>pg_dump</application>, ensure stable output order
      for similarly-named triggers and row-level-security policy objects
      (Benjie Gillam)
     </para>

     <para>
      Previously, if two triggers on different tables had the same names,
      they would be sorted in OID-based order, which is less desirable
      than sorting them by table name.  Likewise for RLS policies.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [0ccfc2822] 2019-10-14 22:31:56 +0200
Branch: REL_12_STABLE [eaf900e84] 2019-10-14 23:40:58 +0200
Branch: master [3a0e85739] 2019-10-15 00:25:04 +0200
Branch: REL_12_STABLE [702fd3b71] 2019-10-15 00:35:51 +0200
-->
     <para>
      In <application>pg_upgrade</application>, reject tables with
      columns of type <type>sql_identifier</type>, as that has changed
      representation in version 12 (Tomas Vondra)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [8d48e6a72] 2019-10-16 13:23:14 +0200
Branch: REL_12_STABLE [ebb4caa91] 2019-10-16 13:25:25 +0200
Branch: REL_11_STABLE [a970b6cde] 2019-10-16 13:26:22 +0200
Branch: REL_10_STABLE [2218fdca4] 2019-10-16 13:26:53 +0200
Branch: REL9_6_STABLE [0a643de08] 2019-10-16 13:27:24 +0200
Branch: REL9_5_STABLE [f57b01dd7] 2019-10-16 13:27:51 +0200
Branch: REL9_4_STABLE [235a52ca0] 2019-10-16 13:31:00 +0200
Branch: REL9_6_STABLE [e09ab32a2] 2019-10-16 16:20:07 +0200
Branch: REL9_5_STABLE [984aa0ede] 2019-10-16 16:23:09 +0200
Branch: REL9_4_STABLE [bc3a94dc0] 2019-10-16 16:28:48 +0200
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [a524f50d0] 2019-10-16 13:23:18 +0200
Branch: REL_12_STABLE [a8e49ae0c] 2019-10-16 13:25:37 +0200
Branch: REL_11_STABLE [d071a2539] 2019-10-16 13:26:26 +0200
Branch: REL_10_STABLE [e86ece221] 2019-10-16 13:26:56 +0200
-->
     <para>
      Improve <application>pg_upgrade</application>'s checks for the use
      of a data type that has changed representation, such
      as <type>line</type> (Tomas Vondra)
     </para>

     <para>
      The previous coding could be fooled by cases where the data type of
      interest underlies a stored column of a domain or composite type.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [6f3823b03] 2019-10-04 09:14:51 +0900
Branch: REL_12_STABLE [c2e3b311d] 2019-10-04 09:16:03 +0900
-->
     <para>
      In <application>pg_rewind</application>
      with the <option>--dry-run</option> option, avoid
      updating <filename>pg_control</filename>
      (Alexey Kondratov)
     </para>

     <para>
      This could lead to failures in
      subsequent <application>pg_rewind</application> attempts.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [a0c96856e] 2019-11-07 16:31:36 +0900
Branch: REL_12_STABLE [e5cfb8cbb] 2019-11-07 16:32:37 +0900
Branch: REL_11_STABLE [fb53c4c07] 2019-11-07 16:32:58 +0900
Branch: REL_10_STABLE [127ad57f5] 2019-11-07 16:33:06 +0900
Branch: REL9_6_STABLE [aa7cd6a8e] 2019-11-07 16:33:23 +0900
Branch: REL9_5_STABLE [b1bebc2ce] 2019-11-07 16:33:47 +0900
Branch: REL9_4_STABLE [1accf9974] 2019-11-07 16:33:58 +0900
-->
     <para>
      Fix failure in <application>pg_waldump</application> with
      the <option>-s</option> option, when a continuation WAL record ends
      exactly at a page boundary (Andrey Lepikhov)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [e4d92126f] 2019-10-29 22:53:05 -0700
Branch: REL_12_STABLE [d4b5206b2] 2019-10-29 22:53:30 -0700
Branch: REL_11_STABLE [3b24cf732] 2019-10-29 22:53:33 -0700
Branch: REL_10_STABLE [82200115e] 2019-10-29 22:53:37 -0700
Branch: REL9_6_STABLE [bc4f56c18] 2019-10-29 22:54:36 -0700
Branch: REL9_5_STABLE [39ff656a4] 2019-10-29 22:55:19 -0700
-->
     <para>
      In <application>pg_waldump</application> with
      the <option>--bkp-details</option> option, avoid emitting extra
      newlines for WAL records involving full-page writes (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
Branch: master [e0f76f204] 2019-10-29 19:18:07 -0700
Branch: REL_12_STABLE [4ab353c47] 2019-10-29 19:28:34 -0700
Branch: REL_11_STABLE [af67aee69] 2019-10-29 19:28:34 -0700
Branch: REL_10_STABLE [e3ff8c360] 2019-10-29 19:28:34 -0700
Branch: REL9_6_STABLE [95f2efd50] 2019-10-29 19:28:34 -0700
Branch: REL9_5_STABLE [c3882f8b8] 2019-10-29 19:28:34 -0700
-->
     <para>
      Fix small memory leak in <application>pg_waldump</application>
      (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [06a367c38] 2019-10-10 14:24:56 -0400
Branch: REL_12_STABLE [7ed1bcaed] 2019-10-10 14:24:57 -0400
-->
     <para>
      Put back <function>pqsignal()</function> as an
      exported <application>libpq</application> symbol (Tom Lane)
     </para>

     <para>
      This function was removed on the grounds that no clients should be
      using it, but that turns out to break usage of
      current <application>libpq</application> with very old versions
      of <application>psql</application>, and perhaps other applications.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [d995fd667] 2019-10-21 13:52:25 -0400
Branch: REL_12_STABLE [ca658c91a] 2019-10-21 13:52:25 -0400
Branch: REL_11_STABLE [4e19bd41d] 2019-10-21 13:52:25 -0400
Branch: REL_10_STABLE [328b81348] 2019-10-21 13:52:25 -0400
Branch: REL9_6_STABLE [34621cb12] 2019-10-21 13:52:25 -0400
Branch: REL9_5_STABLE [8835e0bd4] 2019-10-21 13:52:26 -0400
Branch: REL9_4_STABLE [6d2b18d07] 2019-10-21 13:52:26 -0400
Branch: master [44273ce4f] 2019-10-21 12:32:35 -0400
Branch: REL_12_STABLE [aa5bb828a] 2019-10-21 12:32:35 -0400
Branch: REL_11_STABLE [99c51d5ed] 2019-10-21 12:32:36 -0400
Branch: REL_10_STABLE [e167b1ae3] 2019-10-21 12:32:36 -0400
Branch: REL9_6_STABLE [62ca50ad7] 2019-10-21 12:32:36 -0400
Branch: REL9_5_STABLE [11330c311] 2019-10-21 12:32:36 -0400
Branch: REL9_4_STABLE [727c2ccfe] 2019-10-21 12:32:36 -0400
-->
     <para>
      Fix <application>configure</application>'s test for presence of
      libperl so that it works on recent Red Hat releases (Tom Lane)
     </para>

     <para>
      Previously, it could fail if the user sets <literal>CFLAGS</literal>
      to <literal>-O0</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [89b4d7744] 2019-10-18 20:20:28 -0700
Branch: REL_12_STABLE [ef13f914e] 2019-10-18 20:20:31 -0700
Branch: REL_11_STABLE [af4477b00] 2019-10-18 20:20:32 -0700
Branch: REL_10_STABLE [083929372] 2019-10-18 20:20:32 -0700
Branch: REL9_6_STABLE [09d74aef3] 2019-10-18 20:20:32 -0700
Branch: REL9_5_STABLE [62e881946] 2019-10-18 20:20:32 -0700
Branch: REL9_4_STABLE [930787c7f] 2019-10-18 20:20:33 -0700
-->
     <para>
      Ensure correct code generation for spinlocks on PowerPC (Noah Misch)
     </para>

     <para>
      The previous spinlock coding allowed the compiler to select register
      zero for use with an assembly instruction that does not accept that
      register, causing a build failure.  We have seen only one long-ago
      report that matches this bug, but it could cause problems for people
      trying to build modified <productname>PostgreSQL</productname> code
      or use atypical compiler options.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [5f3d271d0] 2019-10-12 00:21:47 -0700
Branch: REL_12_STABLE [3fb14cfcb] 2019-10-12 00:21:50 -0700
Branch: REL_11_STABLE [e5b4926ef] 2019-10-12 00:21:50 -0700
Branch: REL_10_STABLE [77cc4a595] 2019-10-12 00:21:50 -0700
Branch: REL9_6_STABLE [c73f4f680] 2019-10-12 00:21:50 -0700
Branch: REL9_5_STABLE [e40eb31c0] 2019-10-12 00:21:51 -0700
Branch: REL9_4_STABLE [b705582b4] 2019-10-12 00:21:51 -0700
-->
     <para>
      On AIX, don't use the compiler option <option>-qsrcmsg</option>
      (Noah Misch)
     </para>

     <para>
      This avoids an internal compiler error with xlc v16.1.0, with little
      consequence other than changing the format of compiler error messages.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master [ad7595b89] 2019-10-04 15:34:40 -0400
Branch: REL_12_STABLE [ec38d2311] 2019-10-04 15:39:27 -0400
Branch: REL_11_STABLE [3b9c22700] 2019-10-04 15:39:19 -0400
Branch: REL_10_STABLE [62d2caed6] 2019-10-04 15:39:12 -0400
Branch: REL9_6_STABLE [1e9a0487d] 2019-10-04 15:39:02 -0400
Branch: REL9_5_STABLE [6ca51b155] 2019-10-04 15:38:48 -0400
Branch: REL9_4_STABLE [8f8809091] 2019-10-04 15:38:36 -0400
-->
     <para>
      Fix MSVC build process to cope with spaces in the file path of
      OpenSSL (Andrew Dunstan)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
   <title>Release date:</title>
   <para>2019-10-03</para>
  </formalpara>

  <sect2>
   <title>Overview</title>

   <para>
    Major enhancements in <productname>PostgreSQL</productname> 12 include:
   </para>

   <!-- Items in this list summarize one or more items below -->

   <itemizedlist>

    <listitem>
     <para>
      General performance improvements, including:
      <itemizedlist>
       <listitem>
        <para>
         Optimizations to space utilization and read/write performance for
         B-tree indexes
        </para>
       </listitem>

       <listitem>
        <para>
         Partitioning performance enhancements, including improved query
         performance on tables with thousands of partitions, improved
         insertion performance with <xref linkend="sql-insert"/> and <xref
         linkend="sql-copy"/>, and the ability to execute <link
         linkend="sql-altertable-attach-partition"><command>ALTER TABLE ATTACH
         PARTITION</command></link> without blocking queries
        </para>
       </listitem>

       <listitem>
        <para>
         Automatic (but overridable) inlining
         of <link linkend="queries-with">common table expressions</link>
         (<acronym>CTEs</acronym>)
        </para>
       </listitem>

       <listitem>
        <para>
         Reduction of <acronym>WAL</acronym> overhead for creation of
         <link linkend="gist">GiST</link>, <link linkend="gin">GIN</link>, and
         <link linkend="spgist">SP-GiST</link> indexes
        </para>
       </listitem>

       <listitem>
        <para>
         Support for covering <link linkend="gist">GiST</link> indexes, via
         the <link linkend="indexes-index-only-scans"><literal>INCLUDE</literal></link>
         clause
        </para>
       </listitem>

       <listitem>
        <para>
         Multi-column most-common-value (MCV) statistics can be defined
         via <xref linkend="sql-createstatistics"/>, to support better
         plans for queries that test several non-uniformly-distributed
         columns
        </para>
       </listitem>
      </itemizedlist>
     </para>
    </listitem>

    <listitem>
     <para>
      Enhancements to administrative functionality, including:
      <itemizedlist>
       <listitem>
        <para>
         <link linkend="sql-reindex-concurrently"><command>REINDEX
         CONCURRENTLY</command></link> can rebuild an index without
         blocking writes to its table
        </para>
       </listitem>

       <listitem>
        <para>
         <xref linkend="app-pgchecksums"/> can enable/disable page checksums
         (used for detecting data corruption) in an offline cluster
        </para>
       </listitem>

       <listitem>
        <para>
         Progress reporting statistics for <xref linkend="sql-createindex"/>,
         <xref linkend="sql-reindex"/>, <xref linkend="sql-cluster"/>,
         <link linkend="sql-vacuum">VACUUM FULL</link>, and
         <xref linkend="app-pgchecksums"/>
        </para>
       </listitem>
      </itemizedlist>
     </para>
    </listitem>

    <listitem>
     <para>
       Support for the <link
       linkend="functions-sqljson-path"><acronym>SQL/JSON</acronym>
       path</link> language
     </para>
    </listitem>

    <listitem>
     <para>
       Stored <link linkend="ddl-generated-columns">generated columns</link>
     </para>
    </listitem>

    <listitem>
     <para>
       <link linkend="collation-nondeterministic">Nondeterministic</link> ICU
       collations, enabling case-insensitive and accent-insensitive grouping
       and ordering
     </para>
    </listitem>

    <listitem>
     <para>
      New authentication features, including:
      <itemizedlist>
       <listitem>
        <para>
         Encryption of TCP/IP connections when using
         <link linkend="gssapi-auth"><acronym>GSSAPI</acronym></link>
         authentication
        </para>
       </listitem>

       <listitem>
        <para>
         Discovery of LDAP servers using <acronym>DNS SRV</acronym> records
        </para>
       </listitem>

       <listitem>
        <para>
         Multi-factor authentication, using the <link linkend="auth-cert">
         <literal>clientcert=verify-full</literal></link> option combined
         with an additional authentication method in
         <filename>pg_hba.conf</filename>
        </para>
       </listitem>
      </itemizedlist>
     </para>
    </listitem>

   </itemizedlist>

   <para>
    The above items are explained in more detail in the sections below.
   </para>

  </sect2>

  <sect2>

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

   <itemizedlist>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-11-20 [578b22971] Remove WITH OIDS support, change oid catalog column visi
-->

     <para>
      Remove the special behavior of <link
      linkend="datatype-oid">oid</link> columns (Andres Freund,
      John Naylor)
     </para>

     <para>
      Previously, a normally-invisible <structfield>oid</structfield>
      column could be specified during table creation using <literal>WITH
      OIDS</literal>; that ability has been removed.  Columns can still be
      explicitly declared as type <type>oid</type>.  Operations on tables
      that have columns created using <literal>WITH OIDS</literal> will
      need adjustment.
     </para>

     <para>
      The system catalogs that previously had
      hidden <structfield>oid</structfield> columns now have
      ordinary <structfield>oid</structfield> columns.
      Hence, <command>SELECT *</command> will now output those columns,
      whereas previously they would be displayed only if selected
      explicitly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-10-11 [cda6a8d01] Remove deprecated abstime, reltime, tinterval datatypes.
-->

     <para>
      Remove data types <type>abstime</type>, <type>reltime</type>,
      and <type>tinterval</type> (Andres Freund)
     </para>

     <para>
      These are obsoleted by SQL-standard types such
      as <type>timestamp</type>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-10-11 [2d10defa7] Remove timetravel extension.
-->

     <para>
      Remove the <filename>timetravel</filename> extension
      (Andres Freund)
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-25 [2dedf4d9a] Integrate recovery.conf into postgresql.conf
-->

     <para>
      Move <filename>recovery.conf</filename> settings into <link
      linkend="runtime-config-wal-archive-recovery"><filename>postgresql.conf</filename></link>
      (Masao Fujii, Simon Riggs, Abhijit Menon-Sen, Sergei Kornilov)
     </para>

     <para>
      <filename>recovery.conf</filename> is no longer used,
      and the server will not start if that file exists.  <link
      linkend="runtime-config-wal-archive-recovery">recovery.signal</link>
      and <filename>standby.signal</filename> files are now used to switch
      into non-primary mode.  The <varname>trigger_file</varname> setting
      has been renamed to <xref linkend="guc-promote-trigger-file"/>.  The
      <varname>standby_mode</varname> setting has been removed.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-28 [f2cbffc7a] Only allow one recovery target setting
-->

     <para>
      Do not allow multiple conflicting <link
      linkend="runtime-config-wal-recovery-target"><varname>recovery_target</varname>*</link>
      specifications (Peter Eisentraut)
     </para>

     <para>
      Specifically, only allow one of <xref
      linkend="guc-recovery-target"/>, <xref
      linkend="guc-recovery-target-lsn"/>,
      <xref linkend="guc-recovery-target-name"/>,
      <xref linkend="guc-recovery-target-time"/>, and <xref
      linkend="guc-recovery-target-xid"/>.  Previously, multiple different
      instances of these parameters could be specified, and the last one
      was honored.  Now, only one can be specified, though the same one can
      be specified multiple times and the last specification is honored.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-01-13 [0acb3bc33] Change default of recovery_target_timeline to <literal>latest</literal>
-->

     <para>
      Cause recovery to advance to the latest timeline by default
      (Peter Eisentraut)
     </para>

     <para>
      Specifically, <xref linkend="guc-recovery-target-timeline"/> now
      defaults to <literal>latest</literal>.  Previously, it defaulted
      to <literal>current</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2018-07-29 [a7dc63d90] Refactor geometric functions and operators
2018-08-16 [c4c340088] Use the built-in float datatypes to implement geometric
2018-09-26 [2e2a392de] Fix problems in handling the line data type
-->

     <para>
      Refactor code for <link linkend="functions-geometry">geometric
      functions and operators</link> (Emre Hasegeli)
     </para>

     <para>
      This could lead to more accurate, but slightly different, results
      compared to previous releases.  Notably, cases involving NaN,
      underflow, overflow, and division by zero are handled more
      consistently than before.
     </para>
    </listitem>

    <listitem>
<!--
Author: Andrew Gierth <rhodiumtoad@postgresql.org>
2019-02-13 [02ddd4993] Change floating-point output format for improved perform
2018-10-12 [f1885386f] Make float exponent output on Windows look the same as e
-->

     <para>
      Improve performance by using a new algorithm for output
      of <link linkend="datatype-float"><type>real</type></link>
      and <type>double precision</type> values (Andrew Gierth)
     </para>

     <para>
      Previously, displayed floating-point values were rounded to 6
      (for <type>real</type>) or 15 (for <type>double precision</type>)
      digits by default, adjusted by the value of
      <xref linkend="guc-extra-float-digits"/>.  Now,
      whenever <varname>extra_float_digits</varname> is more than zero (as
      it now is by default), only the minimum number of digits required to
      preserve the exact binary value are output.  The behavior is the
      same as before when <varname>extra_float_digits</varname> is set to
      zero or less.
     </para>

     <para>
      Also, formatting of floating-point exponents is now uniform across
      platforms: two digits are used unless three are necessary.  In
      previous releases, Windows builds always printed three digits.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-29 [6645ad6bd] Use a separate random seed for SQL random()/setseed() fu
2018-12-29 [4203842a1] Use pg_strong_random() to select each server process's r
-->

     <para>
       <link linkend="functions-math-random-table"><function>random()</function></link>
      and <function>setseed()</function> now behave uniformly across
      platforms (Tom Lane)
     </para>

     <para>
      The sequence of <function>random()</function> values generated
      following a <function>setseed()</function> call with a particular
      seed value is likely to be different now than before.  However, it
      will also be repeatable, which was not previously guaranteed because
      of interference from other uses of random numbers inside the server.
      The SQL <function>random()</function> function now has its own
      private per-session state to forestall that.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-05-14 [7c850320d] Fix SQL-style substring() to have spec-compliant greedin
-->

     <para>
      Change SQL-style
      <link linkend="functions-similarto-regexp"><function>substring()</function></link>
      to have standard-compliant greediness behavior (Tom Lane)
     </para>

     <para>
      In cases where the pattern can be matched in more than one way, the
      initial sub-pattern is now treated as matching the least possible
      amount of text rather than the greatest; for example, a pattern such
      as <literal>%#"aa*#"%</literal> now selects the first group
      of <literal>a</literal>'s from the input, not the last group.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-04-23 [c06e3550d] Don't request pretty-printed output from xmlNodeDump().
-->

     <para>
      Do not pretty-print the result
      of <link linkend="functions-xml"><function>xpath()</function></link>
      or the <literal>XMLTABLE</literal> construct (Tom Lane)
     </para>

     <para>
      In some cases, these functions would insert extra whitespace
      (newlines and/or spaces) in nodeset values.  This is undesirable
      since depending on usage, the whitespace might be considered
      semantically significant.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-03-13 [6dd263cfa] Rename pg_verify_checksums to pg_checksums
-->

     <para>
      Rename command-line tool
      <application>pg_verify_checksums</application> to <xref
      linkend="app-pgchecksums"/> (Michaël Paquier)
     </para>
    </listitem>

    <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-04 [413ccaa74] pg_restore: Require -f - to mean stdout
-->

     <para>
      In <xref linkend="app-pgrestore"/>, require specification of
      <literal>-f -</literal> to send the dump contents to standard output
      (Euler Taveira)
     </para>

     <para>
      Previously, this happened by default if no destination was
      specified, but that was deemed to be unfriendly.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-14 [eaf746a5b] Make psql's "\pset format" command reject non-unique abb
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-26 [a7eece4fc] Fix breakage of "\pset format latex".
-->

     <para>
      Disallow non-unique abbreviations
      in <application>psql</application>'s <command>\pset format</command>
      command (Daniel Vérité)
     </para>

     <para>
      Previously, for example, <command>\pset format a</command> chose
      <literal>aligned</literal>; it will now fail since that could
      equally well mean <literal>asciidoc</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2019-03-20 [dd299df81] Make heap TID a tiebreaker nbtree index column.
-->

     <para>
      In new btree indexes, the maximum index entry length is
      reduced by eight bytes, to improve handling of duplicate entries
      (Peter Geoghegan)
     </para>

     <para>
      This means that a <xref linkend="sql-reindex"/> operation on an
      index <application>pg_upgrade</application>'d from a previous
      release could potentially fail.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-21 [bfb456c1b] Improve error reporting for DROP FUNCTION/PROCEDURE/AGGR
-->

     <para>
      Cause <link linkend="sql-dropfunction"><command>DROP IF EXISTS
      FUNCTION</command></link>/<literal>PROCEDURE</literal>/<literal>AGGREGATE</literal>/<literal>ROUTINE</literal>
      to generate an error if no argument list is supplied and there are
      multiple matching objects (David Rowley)
     </para>

     <para>
      Also improve the error message in such cases.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2019-06-16 [6cbfb784c] Rework the pg_statistic_ext catalog
2019-06-16 [aa087ec64] Add pg_stats_ext view for extended statistics
-->

     <para>
      Split the <link
      linkend="catalog-pg-statistic-ext"><structname>pg_statistic_ext</structname></link>
      catalog into two catalogs, and add the <link
      linkend="view-pg-stats-ext"><structname>pg_stats_ext</structname></link>
      view of it (Dean Rasheed, Tomas Vondra)
     </para>

     <para>
      This change supports hiding potentially-sensitive statistics data
      from unprivileged users.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-01 [96b00c433] Remove obsolete pg_constraint.consrc column
-->

     <para>
      Remove obsolete <link
      linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.<structfield>consrc</structfield>
      column (Peter Eisentraut)
     </para>

     <para>
      This column has been deprecated for a long time, because it did not
      update in response to other catalog changes (such as column renamings).
      The recommended way to get a text version of a check constraint's
      expression from <structname>pg_constraint</structname>
      is <literal>pg_get_expr(conbin, conrelid)</literal>.
      <function>pg_get_constraintdef()</function> is also a useful
      alternative.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-01 [fe5038236] Remove obsolete pg_attrdef.adsrc column
-->

     <para>
      Remove obsolete <link
      linkend="catalog-pg-attrdef"><structname>pg_attrdef</structname></link>.<structfield>adsrc</structfield>
      column (Peter Eisentraut)
     </para>

     <para>
      This column has been deprecated for a long time, because it did not
      update in response to other catalog changes (such as column renamings).
      The recommended way to get a text version of a default-value expression
      from <structname>pg_attrdef</structname> is <literal>pg_get_expr(adbin,
      adrelid)</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-19 [586b98fdf] Make type "name" collation-aware.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-04-05 [478cacb50] Ensure consistent name matching behavior in processSQLNa
-->

     <para>
      Mark table columns of type <link
      linkend="datatype-character-special-table">name</link> as having
      <quote>C</quote> collation by default (Tom Lane, Daniel Vérité)
     </para>

     <para>
      The comparison operators for data type <type>name</type> can now use
      any collation, rather than always using <quote>C</quote> collation.
      To preserve the previous semantics of queries, columns of
      type <type>name</type> are now explicitly marked as
      having <quote>C</quote> collation.  A side effect of this is that
      regular-expression operators on <type>name</type> columns will now
      use the <quote>C</quote> collation by default, not the database
      collation, to determine the behavior of locale-dependent regular
      expression patterns (such as <literal>\w</literal>).  If you want
      non-C behavior for a regular expression on a <type>name</type>
      column, attach an explicit <literal>COLLATE</literal> clause.  (For
      user-defined <type>name</type> columns, another possibility is to
      specify a different collation at table creation time; but that just
      moves the non-backwards-compatibility to the comparison operators.)
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-20 [7c15cef86] Base information_schema.sql_identifier domain on name, n
2018-12-20 [5bbee34d9] Avoid producing over-length specific_name outputs in inf
2018-12-18 [6b0faf723] Make collation-aware system catalog columns use "C" coll
-->

     <para>
      Treat object-name columns in
      the <link linkend="information-schema"><structname>information_schema</structname></link>
      views as being of type <type>name</type>, not <type>varchar</type>
      (Tom Lane)
     </para>

     <para>
      Per the SQL standard, object-name columns in
      the <structname>information_schema</structname> views are declared
      as being of domain type <type>sql_identifier</type>.
      In <productname>PostgreSQL</productname>, the underlying catalog
      columns are really of type <type>name</type>.  This change
      makes <type>sql_identifier</type> be a domain
      over <type>name</type>, rather than <type>varchar</type> as before.
      This eliminates a semantic mismatch in comparison and sorting
      behavior, which can greatly improve the performance of queries
      on <structname>information_schema</structname> views that restrict
      an object-name column.  Note however that inequality restrictions,
      for example
<programlisting>
SELECT ... FROM information_schema.tables WHERE table_name &lt; 'foo';
</programlisting>
      will now use <quote>C</quote>-locale comparison semantics by
      default, rather than the database's default collation as before.
      Sorting on these columns will also follow <quote>C</quote> ordering
      rules.  The previous behavior (and inefficiency) can be enforced by
      adding a <literal>COLLATE "default"</literal> clause.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-07-10 [bcbd94080] Remove dynamic_shared_memory_type=none
-->

     <para>
      Remove the ability to disable dynamic shared memory (Kyotaro
      Horiguchi)
     </para>

     <para>
      Specifically, <xref linkend="guc-dynamic-shared-memory-type"/>
      can no longer be set to <literal>none</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-09-12 [e7a221797] Parse more strictly integer parameters from connection s
-->

     <para>
      Parse libpq integer connection parameters more strictly (Fabien
      Coelho)
     </para>

     <para>
      In previous releases, using an incorrect integer value for
      connection parameters <literal>connect_timeout</literal>,
      <literal>keepalives</literal>, <literal>keepalives_count</literal>,
      <literal>keepalives_idle</literal>,
      <literal>keepalives_interval</literal> and <literal>port</literal>
      resulted in libpq either ignoring those values or failing with
      incorrect error messages.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>

  <sect2>
   <title>Changes</title>

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

   <sect3>
    <title>Server</title>

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

     <itemizedlist>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-07 [c6e4133fa] Postpone calculating total_table_pages until after pruni
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-15 [34c9e455d] Improve performance of partition pruning remapping a lit
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2018-11-16 [3f2393ede] Redesign initialization of partition routing structures
Author: Robert Haas <rhaas@postgresql.org>
2019-02-21 [9eefba181] Delay lock acquisition for partitions until we route a t
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-30 [428b260f8] Speed up planning when partitions can be pruned at plan
-->

       <para>
        Improve performance of many operations on partitioned tables
        (Amit Langote, David Rowley, Tom Lane, Álvaro Herrera)
       </para>

       <para>
        Allow tables with thousands of child partitions to be processed
        efficiently by operations that only affect a small number of
        partitions.
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-03 [f56f8f8da] Support foreign keys that reference partitioned tables
-->

       <para>
        Allow <link linkend="ddl-constraints-fk">foreign keys</link>
        to reference partitioned tables (Álvaro Herrera)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-08-01 [0d5f05cde] Allow multi-inserts during COPY into a partitioned table
-->

       <para>
        Improve speed of <command>COPY</command> into partitioned tables
        (David Rowley)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-01-25 [7c079d741] Allow generalized expression syntax for partition bounds
-->

       <para>
        Allow partition bounds to be any expression (Kyotaro Horiguchi,
        Tom Lane, Amit Langote)
       </para>

       <para>
        Such expressions are evaluated at partitioned-table creation time.
        Previously, only simple constants were allowed as partition bounds.
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2018-12-17 [ca4103025] Fix tablespace handling for partitioned tables
-->

       <para>
        Allow <command>CREATE TABLE</command>'s tablespace specification
        for a partitioned table to affect the tablespace of its children
        (David Rowley, Álvaro Herrera)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-04-05 [959d00e9d] Use Append rather than MergeAppend for scanning ordered
-->

       <para>
        Avoid sorting when partitions are already being scanned in the
        necessary order (David Rowley)
       </para>
      </listitem>

      <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2019-03-07 [898e5e329] Allow ATTACH PARTITION with only ShareUpdateExclusiveLoc
-->

       <para>
        <link linkend="sql-altertable"><command>ALTER TABLE ATTACH
        PARTITION</command></link> is now performed with reduced locking
        requirements (Robert Haas)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-02-08 [3677a0b26] Add pg_partition_root to display top-most parent of a pa
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-04 [b96f6b194] pg_partition_ancestors
Author: Michael Paquier <michael@paquier.xyz>
2018-10-30 [d5eec4eef] Add pg_partition_tree to display information about parti
-->

       <para>
        Add partition introspection functions (Michaël Paquier, Álvaro
        Herrera, Amit Langote)
       </para>

       <para>
        The new function <link
        linkend="functions-info-partition"><function>pg_partition_root()</function></link>
        returns the top-most parent of a partition tree, <link
        linkend="functions-info-partition"><function>pg_partition_ancestors()</function></link>
        reports all ancestors of a partition, and <link
        linkend="functions-info-partition"><function>pg_partition_tree()</function></link>
        displays information about partitions.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-12-18 [f94cec644] Include partitioned indexes to system view pg_indexes
-->

       <para>
        Include partitioned indexes in the system view <link
        linkend="view-pg-indexes"><structname>pg_indexes</structname></link>
        (Suraj Kharage)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-07 [1c5d9270e] psql \dP: list partitioned tables and indexes
-->

       <para>
        Add <application>psql</application> command <command>\dP</command>
        to list partitioned tables and indexes (Pavel Stehule)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2018-11-19 [d56e0fde8] psql: Describe partitioned tables/indexes as such
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-26 [1af25ca0c] Improve psql's \d display of foreign key constraints
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-17 [b036982db] psql: display tablespace for partitioned indexes
-->

       <para>
        Improve <application>psql</application> <command>\d</command>
        and <command>\z</command> display of partitioned tables (Pavel
        Stehule, Michaël Paquier, Álvaro Herrera)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-02-11 [1d92a0c9f] Redesign the partition dependency mechanism.
-->

       <para>
        Fix bugs that could cause <command>ALTER TABLE DETACH
        PARTITION</command> to leave behind incorrect dependency state,
        allowing subsequent operations to misbehave, for example by not
        dropping a former partition child index when its table is dropped
        (Tom Lane)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Indexes</title>

     <itemizedlist>

      <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2019-03-20 [dd299df81] Make heap TID a tiebreaker nbtree index column.
Author: Peter Geoghegan <pg@bowt.ie>
2019-03-20 [fab250243] Consider secondary factors during nbtree splits.
Author: Peter Geoghegan <pg@bowt.ie>
2019-03-25 [f21668f32] Add "split after new tuple" nbtree optimization.
-->

       <para>
        Improve performance and space utilization of btree indexes with
        many duplicates (Peter Geoghegan, Heikki Linnakangas)
       </para>

       <para>
        Previously, duplicate index entries were stored unordered within
        their duplicate groups.  This caused overhead during index
        inserts, wasted space due to excessive page splits, and it reduced
        <command>VACUUM</command>'s ability to recycle entire pages.
        Duplicate index entries are now sorted in heap-storage order.
       </para>

       <para>
        Indexes <application>pg_upgrade</application>'d from previous
        releases will not have these benefits.
       </para>
      </listitem>

      <listitem>
<!--
see commits above
-->

       <para>
        Allow multi-column btree indexes to be smaller (Peter Geoghegan,
        Heikki Linnakangas)
       </para>

       <para>
        Internal pages and min/max leaf page indicators now only store
        index keys until the change key, rather than all indexed keys.
        This also improves the locality of index access.
       </para>

       <para>
        Indexes <application>pg_upgrade</application>'d from previous
        releases will not have these benefits.
       </para>
      </listitem>

      <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2018-07-28 [d2086b08b] Reduce path length for locking leaf B-tree pages during
-->

       <para>
        Improve speed of btree index insertions by reducing locking
        overhead (Alexander Korotkov)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2019-03-10 [f2e403803] Support for INCLUDE attributes in GiST indexes
-->

       <para>
        Support <link
        linkend="indexes-index-only-scans"><literal>INCLUDE</literal></link> columns
        in <link linkend="gist">GiST</link> indexes (Andrey Borodin)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2018-09-19 [2a6368343] Add support for nearest-neighbor (KNN) searches to SP-Gi
-->

       <para>
        Add support for nearest-neighbor (<acronym>KNN</acronym>) searches
        of <link linkend="spgist">SP-GiST</link> indexes (Nikita Glukhov,
        Alexander Korotkov, Vlad Sterzhanov)
       </para>

      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2019-04-03 [9155580fd] Generate less WAL during GiST, GIN and SP-GiST index bui
-->

       <para>
        Reduce the <acronym>WAL</acronym> write overhead
        of <acronym>GiST</acronym>, <acronym>GIN</acronym>, and
        <acronym>SP-GiST</acronym> index creation (Anastasia Lubennikova,
        Andrey V. Lepikhov)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-03 [80b9e9c46] Improve performance of index-only scans with many index
-->

       <para>
        Allow index-only scans to be more efficient on indexes with many
        columns (Konstantin Knizhnik)
       </para>
      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2019-03-05 [fe280694d] Scan GiST indexes in physical order during VACUUM.
-->

       <para>
        Improve the performance of vacuum scans of GiST indexes (Andrey
        Borodin, Konstantin Kuznetsov, Heikki Linnakangas)
       </para>
      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2019-03-22 [7df159a62] Delete empty pages during GiST VACUUM.
-->

       <para>
        Delete empty leaf pages during <acronym>GiST</acronym>
        <command>VACUUM</command> (Andrey Borodin)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-14 [1b5d797cd] Lower lock level for renaming indexes
-->

       <para>
        Reduce locking requirements for index renaming (Peter Eisentraut)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Optimizer</title>

     <itemizedlist>

      <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2019-03-27 [7300a6995] Add support for multivariate MCV lists
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2019-03-27 [a63b29a1d] Minor improvements for the multivariate MCV lists
-->

       <para>
        Allow <xref linkend="sql-createstatistics"/> to create
        most-common-value statistics for multiple columns (Tomas Vondra)
       </para>

       <para>
        This improves optimization for queries that test several columns,
        requiring an estimate of the combined effect of
        several <literal>WHERE</literal> clauses.  If the columns are
        correlated and have non-uniform distributions then multi-column
        statistics will allow much better estimates.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-02-16 [608b167f9] Allow user control of CTE materialization, and change th
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-04-09 [947613127] Prevent inlining of multiply-referenced CTEs with outer
-->

       <para>
        Allow <link linkend="queries-with">common table expressions</link>
        (<acronym>CTEs</acronym>) to be inlined into the outer query
        (Andreas Karlsson, Andrew Gierth, David Fetter, Tom Lane)
       </para>

       <para>
        Specifically, <acronym>CTE</acronym>s are automatically inlined if
        they have no side-effects, are not recursive, and are referenced
        only once in the query.  Inlining can be prevented by
        specifying <literal>MATERIALIZED</literal>, or forced for
        multiply-referenced <acronym>CTE</acronym>s by
        specifying <literal>NOT MATERIALIZED</literal>.  Previously,
        <acronym>CTE</acronym>s were never inlined and were always
        evaluated before the rest of the query.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-07-16 [f7cb2842b] Add plan_cache_mode setting
-->

       <para>
        Allow control over when generic plans are used for prepared
        statements (Pavel Stehule)
       </para>

       <para>
        This is controlled by the <xref linkend="guc-plan-cache_mode"/>
        server parameter.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-25 [8edd0e794] Suppress Append and MergeAppend plan nodes that have a s
-->

       <para>
        Improve optimization of partition and <literal>UNION ALL</literal>
        queries that have only a single child (David Rowley)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-13 [04fe805a1] Drop no-op CoerceToDomain nodes from expressions at plan
-->

       <para>
        Improve processing of <link linkend="domains">domains</link> that
        have no check constraints (Tom Lane)
       </para>

       <para>
        Domains that are being used purely as type aliases no longer cause
        optimization difficulties.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-30 [6f19a8c41] Teach eval_const_expressions to constant-fold LEAST/GREA
-->

       <para>
        Pre-evaluate calls of <link
        linkend="functions-greatest-least"><literal>LEAST</literal></link>
        and <literal>GREATEST</literal> when their arguments are constants
        (Vik Fearing)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-02-20 [e04a3905e] Improve planner's understanding of strictness of type co
2019-03-01 [65ce07e02] Teach optimizer's predtest.c more things about ScalarArr
-->

       <para>
        Improve optimizer's ability to verify that partial indexes
        with <literal>IS NOT NULL</literal> conditions are usable in
        queries (Tom Lane, James Coleman)
       </para>

       <para>
        Usability can now be recognized in more cases where the calling
        query involves casts or
        large <literal><replaceable>x</replaceable> IN
        (<replaceable>array</replaceable>)</literal> clauses.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-14 [5e0928005] Make pg_statistic and related code account more honestly
-->

       <para>
        Compute <command>ANALYZE</command> statistics using the collation
        defined for each column (Tom Lane)
       </para>

       <para>
        Previously, the database's default collation was used for all
        statistics.  This potentially gives better optimizer behavior for
        columns with non-default collations.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-25 [f7111f72d] Improve planner's selectivity estimates for inequalities
-->

       <para>
        Improve selectivity estimates for inequality comparisons
        on <link linkend="ddl-system-columns"><structfield>ctid</structfield></link>
        columns (Edmund Horner)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-30 [b5415e3c2] Support parameterized TidPaths.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-30 [0a6ea4001] Add a hash opclass for type "tid".
-->

       <para>
        Improve optimization of joins on columns of type <link
        linkend="datatype-oid"><type>tid</type></link>
        (Tom Lane)
       </para>

       <para>
        These changes primarily improve the efficiency of self-joins
        on <structfield>ctid</structfield> columns.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-07-11 [39a96512b] Mark built-in btree comparison functions as leakproof wh
2019-09-21 [d9110d7e1] Straighten out leakproofness markings on text comparison
-->

       <para>
        Fix the leakproofness designations of some btree comparison operators
        and support functions (Tom Lane)
       </para>

       <para>
        This allows some optimizations that previously would not have been
        applied in the presence of security barrier views or row-level
        security.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

      <listitem>
<!--
Author: Bruce Momjian <bruce@momjian.us>
2018-09-21 [1f7fc7670] doc:  JIT is enabled by default in PG 12
-->

       <para>
        Enable <link linkend="jit">Just-in-Time</link>
        (<acronym>JIT</acronym>) compilation by default, if the server
        has been built with support for it (Andres Freund)
       </para>

       <para>
        Note that this support is not built by default, but has to be
        selected explicitly while configuring the build.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-01-06 [afb0d0712] Replace the data structure used for keyword lookup.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-01-09 [c64d0cd5c] Use perfect hashing, instead of binary search, for keywo
-->

       <para>
        Speed up keyword lookup (John Naylor, Joerg Sonnenberger, Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2019-01-25 [9556aa01c] Use single-byte Boyer-Moore-Horspool search even with mu
-->

       <para>
        Improve search performance for multi-byte characters
        in <function>position()</function> and related functions (Heikki
        Linnakangas)
       </para>
      </listitem>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2019-04-02 [4d0e994ee] Add support for partial TOAST decompression
-->

       <para>
        Allow <link linkend="storage-toast">toasted</link>
        values to be minimally decompressed (Paul Ramsey)
       </para>

       <para>
        This is useful for routines that only need to examine the initial
        portion of a toasted field.
       </para>
      </listitem>

      <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2019-03-13 [bbb96c370] Allow ALTER TABLE .. SET NOT NULL to skip provably unnec
-->

       <para>
        Allow <link linkend="sql-altertable"><command>ALTER TABLE ... SET
        NOT NULL</command></link> to avoid unnecessary table scans (Sergei
        Kornilov)
       </para>

       <para>
        This can be optimized when the table's column constraints can be
        recognized as disallowing nulls.
       </para>
      </listitem>

      <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
2019-03-08 [3c5926301] Avoid some table rewrites for ALTER TABLE .. SET DATA TY
-->

       <para>
        Allow <command>ALTER TABLE ... SET DATA TYPE</command> changing between
        <type>timestamp</type> and <type>timestamptz</type> to avoid a
        table rewrite when the session time zone is <acronym>UTC</acronym>
        (Noah Misch)
       </para>

       <para>
        In the <acronym>UTC</acronym> time zone, these two data types are
        binary compatible.
       </para>
      </listitem>

      <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-07-22 [86eaf208e] Hand code string to integer conversion for performance.
-->

       <para>
        Improve speed in converting strings to
        <type>int2</type> or <type>int4</type> integers (Andres Freund)
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2019-03-15 [bb16aba50] Enable parallel query with SERIALIZABLE isolation.
-->

       <para>
        Allow parallelized queries when in <link
        linkend="xact-serializable"><literal>SERIALIZABLE</literal></link>
        isolation mode (Thomas Munro)
       </para>

       <para>
        Previously, parallelism was disabled when in this mode.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2018-11-07 [3fd2a7932] Provide pg_pread() and pg_pwrite() for random I/O.
Author: Thomas Munro <tmunro@postgresql.org>
2018-11-07 [c24dcd0cf] Use pg_pread() and pg_pwrite() for data files and WAL.
-->

       <para>
        Use <function>pread()</function> and <function>pwrite()</function>
        for random I/O (Oskari Saarenmaa, Thomas Munro)
       </para>

       <para>
        This reduces the number of system calls required for I/O.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2018-07-24 [1bc180cd2] Use setproctitle_fast() to update the ps status, if avai
-->

       <para>
        Improve the speed of setting the <link
        linkend="guc-update-process-title">process title</link> on
        <systemitem class="osname">FreeBSD</systemitem> (Thomas Munro)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title>Monitoring</title>

     <itemizedlist>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-03 [799e22034] Log all statements from a sample of transactions
-->

       <para>
        Allow logging of statements from only a percentage of transactions
        (Adrien Nayrat)
       </para>

       <para>
        The parameter <xref linkend="guc-log-transaction-sample-rate"/>
        controls this.
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-02 [ab0dfc961] Report progress of CREATE INDEX operations
Author: Peter Eisentraut <peter@eisentraut.org>
2019-04-07 [03f9e5cba] Report progress of REINDEX operations
-->

       <para>
        Add progress reporting to <command>CREATE INDEX</command> and
        <command>REINDEX</command> operations (Álvaro Herrera, Peter
        Eisentraut)
       </para>

       <para>
        Progress is reported in the <link
        linkend="create-index-progress-reporting"><structname>pg_stat_progress_create_index</structname></link>
        system view.
       </para>
      </listitem>

      <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2019-03-25 [6f97457e0] Add progress reporting for CLUSTER and VACUUM FULL.
-->

       <para>
        Add progress reporting to <command>CLUSTER</command> and
        <command>VACUUM FULL</command> (Tatsuro Yamada)
       </para>

       <para>
        Progress is reported in the <link
        linkend="cluster-progress-reporting"><structname>pg_stat_progress_cluster</structname></link>
        system view.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-04-02 [280e5f140] Add progress reporting to pg_checksums
-->

       <para>
        Add progress reporting to <xref linkend="app-pgchecksums"/>
        (Michael Banck, Bernd Helmle)
       </para>

       <para>
        This is enabled with the option <option>--progress</option>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2019-03-09 [6b9e875f7] Track block level checksum failures in pg_stat_database
-->

       <para>
        Add counter of checksum failures to
        <structname>pg_stat_database</structname> (Magnus Hagander)
       </para>
      </listitem>

      <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2019-04-12 [77bd49adb] Show shared object statistics in pg_stat_database
-->

       <para>
        Add tracking of global objects in system view
        <structname>pg_stat_database</structname> (Julien Rouhaud)
       </para>

       <para>
        Global objects are shown with a <link
        linkend="pg-stat-database-view"><structname>pg_stat_database</structname></link>.<structfield>datid</structfield>
        value of zero.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-10-09 [c48101620] Add pg_ls_archive_statusdir function
-->

       <para>
        Add the ability to list the contents of the archive directory
        (Christoph Moench-Tegeder)
       </para>

       <para>
        The function is <link
        linkend="functions-admin-genfile-table"><function>pg_ls_archive_statusdir()</function></link>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-10-05 [9cd92d1a3] Add pg_ls_tmpdir function
-->

       <para>
        Add the ability to list the contents of temporary directories
        (Nathan Bossart)
       </para>

       <para>
        The function, <link
        linkend="functions-admin-genfile-table"><function>pg_ls_tmpdir()</function></link>,
        optionally allows specification of a tablespace.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-02-01 [f60a0e967] Add more columns to pg_stat_ssl
-->

       <para>
        Add information about the client certificate to the system view <link
        linkend="pg-stat-ssl-view"><structname>pg_stat_ssl</structname></link>
        (Peter Eisentraut)
       </para>

       <para>
        The new columns are <structfield>client_serial</structfield>
        and <structfield>issuer_dn</structfield>.  Column
        <structfield>clientdn</structfield> has been renamed to
        <structfield>client_dn</structfield> for clarity.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-02-21 [f9692a769] Hide other user's pg_stat_ssl rows
-->

       <para>
        Restrict visibility of rows in <structname>pg_stat_ssl</structname>
        for unprivileged users (Peter Eisentraut)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-01-30 [689d15e95] Log PostgreSQL version number on startup
-->

       <para>
        At server start, emit a log message including the server
        version number (Christoph Berg)
       </para>
      </listitem>

      <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2019-03-06 [342cb650e] Don't log incomplete startup packet if it's empty
-->

       <para>
        Prevent logging <quote>incomplete startup packet</quote> if a new
        connection is immediately closed (Tom Lane)
       </para>

       <para>
        This avoids log spam from certain forms of monitoring.
       </para>
      </listitem>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2018-09-28 [8bddc8640] Add application_name to connection authorized msg
-->

       <para>
        Include the <xref linkend="guc-application-name"/>, if set,
        in <xref linkend="guc-log-connections"/> log messages (Don Seiler)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-02-27 [6ae578a91] Set fallback_application_name for a walreceiver to clust
-->

       <para>
        Make the walreceiver set its application name to the cluster name,
        if set (Peter Eisentraut)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-12-09 [7fee252f6] Add timestamp of last received message from standby to p
-->

       <para>
        Add the timestamp of the last received standby message to <link
        linkend="pg-stat-replication-view"><structname>pg_stat_replication</structname></link>
        (Lim Myungkyu)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-07-02 [c55de5e51] Add wait event for fsync of WAL segments
-->

       <para>
        Add a <link linkend="wait-event-table">wait event</link> for fsync
        of <acronym>WAL</acronym> segments (Konstantin Knizhnik)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title><acronym>Authentication</acronym></title>

     <itemizedlist>

      <listitem>
<!--
Author: Stephen Frost <sfrost@snowman.net>
2019-04-03 [b0b39f72b] GSSAPI encryption support
-->

       <para>
        Add <link linkend="gssapi-auth"><acronym>GSSAPI</acronym></link>
        encryption support (Robbie Harwood, Stephen Frost)
       </para>

       <para>
        This feature allows TCP/IP connections to be encrypted when using
        GSSAPI authentication, without having to set up a separate
        encryption facility such as SSL.
        In support of this, add <literal>hostgssenc</literal>
        and <literal>hostnogssenc</literal> record types in <link
        linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>
        for selecting connections that do or do not use GSSAPI encryption,
        corresponding to the existing <literal>hostssl</literal>
        and <literal>hostnossl</literal> record types.
        There is also a new <xref linkend="libpq-connect-gssencmode"/>
        libpq option, and a <xref linkend="pg-stat-gssapi-view"/> system
        view.
       </para>
      </listitem>

      <listitem>
<!--
Author: Magnus Hagander <magnus@hagander.net>
2019-03-09 [0516c61b7] Add new clientcert hba option verify-full
-->

       <para>
        Allow the <link
        linkend="auth-cert"><literal>clientcert</literal></link>
        <filename>pg_hba.conf</filename> option to check that the database
        user name matches the client certificate's common name
        (Julian Markwort, Marius Timmer)
       </para>

       <para>
        This new check is enabled with
        <literal>clientcert=verify-full</literal>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2019-03-21 [0f086f84a] Add DNS SRV support for LDAP server discovery.
-->

       <para>
        Allow discovery of an <link
        linkend="auth-ldap"><acronym>LDAP</acronym></link> server using
        <acronym>DNS SRV</acronym> records (Thomas Munro)
       </para>

       <para>
        This avoids the requirement of specifying
        <literal>ldapserver</literal>.  It is only supported if
        <productname>PostgreSQL</productname> is compiled with
        <productname>OpenLDAP</productname>.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-03-23 [ed308d783] Add options to enable and disable checksums in pg_checks
-->

       <para>
        Add ability to enable/disable cluster checksums using <xref
        linkend="app-pgchecksums"/> (Michael Banck, Michaël Paquier)
       </para>

       <para>
        The cluster must be shut down for these operations.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-10 [cbccac371] Reduce the default value of autovacuum_vacuum_cost_delay
-->

       <para>
        Reduce the default value of <xref
        linkend="guc-autovacuum-vacuum-cost-delay"/> to 2ms (Tom Lane)
       </para>

       <para>
        This allows autovacuum operations to proceed faster by default.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-10 [caf626b2c] Convert [autovacuum_]vacuum_cost_delay into floating-poi
-->

       <para>
        Allow <xref linkend="guc-vacuum-cost-delay"/> to specify
        sub-millisecond delays, by accepting fractional values (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-10 [caf626b2c] Convert [autovacuum_]vacuum_cost_delay into floating-poi
-->

       <para>
        Allow time-based server parameters to use units of <link
        linkend="config-setting">microseconds</link>
        (<literal>us</literal>) (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-11 [1a83a80a2] Allow fractional input values for integer GUCs, and impr
-->

       <para>
        Allow fractional input for integer server parameters (Tom Lane)
       </para>

       <para>
        For example, <command>SET work_mem = '30.1GB'</command> is now
        allowed, even though <varname>work_mem</varname> is an integer
        parameter.  The value will be rounded to an integer after any
        required units conversion.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-10 [caf626b2c] Convert [autovacuum_]vacuum_cost_delay into floating-poi
-->

       <para>
        Allow units to be defined for floating-point server parameters
        (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2019-04-02 [475861b26] Add wal_recycle and wal_init_zero GUCs.
-->

       <para>
        Add <xref linkend="guc-wal-recycle"/> and <xref
        linkend="guc-wal-init-zero"/> server parameters to control
        <acronym>WAL</acronym> file recycling (Jerry Jelinek)
       </para>

       <para>
        Avoiding file recycling can be beneficial on copy-on-write file
        systems like <productname>ZFS</productname>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-04-06 [249d64999] Add support TCP user timeout in libpq and the backend se
-->

       <para>
        Add server parameter <xref linkend="guc-tcp-user-timeout"/> to
        control the server's <acronym>TCP</acronym> timeout (Ryohei Nagaura)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-20 [e73e67c71] Add settings to control SSL/TLS protocol version
-->

       <para>
        Allow control of the minimum and maximum <acronym>SSL</acronym>
        protocol versions (Peter Eisentraut)
       </para>

       <para>
        The server parameters are <xref
        linkend="guc-ssl-min-protocol-version"/> and <xref
        linkend="guc-ssl-max-protocol-version"/>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-07-30 [98efa76fe] Add ssl_library preset parameter
-->

       <para>
        Add server parameter <xref linkend="guc-ssl-library"/> to report
        the <acronym>SSL</acronym> library version used by the server
        (Peter Eisentraut)
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2019-02-03 [f1bebef60] Add shared_memory_type GUC.
-->

       <para>
        Add server parameter <xref linkend="guc-shared-memory-type"/>
        to control the type of shared memory to use (Andres Freund)
       </para>

       <para>
        This allows selection of <productname>System V</productname>
        shared memory, if desired.
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-02-07 [13b89f96d] Allow some recovery parameters to be changed with reload
-->

      <para>
       Allow some recovery parameters to be changed with reload (Peter
       Eisentraut)
      </para>

      <para>
       These parameters are <xref linkend="guc-archive-cleanup-command"/>,
       <xref linkend="guc-promote-trigger-file"/>, <xref
       linkend="guc-recovery-end-command"/>, and <xref
       linkend="guc-recovery-min-apply-delay"/>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-09-22 [db361db2f] Make GUC wal_sender_timeout user-settable
-->

      <para>
       Allow the streaming replication timeout (<xref
       linkend="guc-wal-sender-timeout"/>) to be set per connection
       (Takayuki Tsunakawa)
      </para>

      <para>
       Previously, this could only be set cluster-wide.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-10-25 [10074651e] Add pg_promote function
Author: Michael Paquier <michael@paquier.xyz>
2018-11-06 [8f045e242] Switch pg_promote to be parallel-safe
-->

      <para>
       Add function <link
       linkend="functions-recovery-control"><function>pg_promote()</function></link>
       to promote standbys to primaries (Laurenz Albe, Michaël Paquier)
      </para>

      <para>
       Previously, this operation was only possible by using <xref
       linkend="app-pg-ctl"/> or creating a trigger file.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-04-05 [9f06d79ef] Add facility to copy replication slots
-->

      <para>
       Allow replication slots to be copied (Masahiko Sawada)
      </para>

      <para>
       The functions for this are <link
       linkend="functions-replication-table"><function>pg_copy_physical_replication_slot()</function></link>
       and <function>pg_copy_logical_replication_slot()</function>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-02-12 [ea92368cd] Move max_wal_senders out of max_connections for connecti
-->

      <para>
       Make <xref linkend="guc-max-wal-senders"/> not count as part of
       <xref linkend="guc-max-connections"/> (Alexander Kukushkin)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-01-11 [ff8530605] Add value 'current' for recovery_target_timeline
-->

      <para>
       Add an explicit value of <literal>current</literal> for <xref
       linkend="guc-recovery-target-timeline"/> (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-09-07 [8582b4d04] Improve handling of corrupted two-phase state files at r
-->

      <para>
       Make recovery fail if a <link
       linkend="sql-prepare-transaction">two-phase transaction</link>
       status file is corrupt (Michaël Paquier)
      </para>

      <para>
       Previously, a warning was logged and recovery continued,
       allowing the transaction to be lost.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-29 [5dc92b844] REINDEX CONCURRENTLY
-->

      <para>
       Add <xref linkend="sql-reindex"/> <literal>CONCURRENTLY</literal>
       option to allow reindexing without locking out writes (Michaël
       Paquier, Andreas Karlsson, Peter Eisentraut)
      </para>

      <para>
       This is also controlled by the <xref linkend="app-reindexdb"/>
       application's <option>--concurrently</option> option.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-30 [fc22b6623] Generated columns
-->

      <para>
       Add support for <link linkend="ddl-generated-columns">generated
       columns</link> (Peter Eisentraut)
      </para>

      <para>
       The content of generated columns are computed from expressions
       (including references to other columns in the same table)
       rather than being specified by <command>INSERT</command> or
       <command>UPDATE</command> commands.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2019-01-20 [31f381740] Allow COPY FROM to filter data using WHERE conditions
-->

      <para>
       Add a <literal>WHERE</literal> clause
       to <link linkend="sql-copy"><command>COPY FROM</command></link> to
       control which rows are accepted (Surafel Temesgen)
      </para>

      <para>
       This provides a simple way to filter incoming data.
      </para>
     </listitem>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2018-10-09 [212fab992] Relax transactional restrictions on ALTER TYPE ... ADD V
-->

      <para>
       Allow enumerated values to be added more flexibly
       (Andrew Dunstan, Tom Lane, Thomas Munro)
      </para>

      <para>
       Previously, <link linkend="sql-altertype"><command>ALTER TYPE
       ... ADD VALUE</command></link> could not be called in a transaction
       block, unless it was part of the same transaction that created the
       enumerated type.  Now it can be called in a later transaction, so
       long as the new enumerated value is not referenced until after it is
       committed.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-24 [280a408b4] Transaction chaining
-->

      <para>
       Add commands to end a transaction and start a new one (Peter
       Eisentraut)
      </para>

      <para>
       The commands are <link linkend="sql-commit"><command>COMMIT AND
       CHAIN</command></link>
       and <link linkend="sql-rollback"><command>ROLLBACK AND
       CHAIN</command></link>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2019-04-08 [119dcfad9] Add vacuum_truncate reloption.
Author: Fujii Masao <fujii@postgresql.org>
2019-05-08 [b84dbc8eb] Add TRUNCATE parameter to VACUUM.
-->

      <para>
       Add <xref linkend="sql-vacuum"/> and <command>CREATE
       TABLE</command> options to prevent <command>VACUUM</command>
       from truncating trailing empty pages (Takayuki Tsunakawa)
      </para>

      <para>
       These options are <varname>vacuum_truncate</varname> and
       <varname>toast.vacuum_truncate</varname>.  Use of these options
       reduces <command>VACUUM</command>'s locking requirements, but
       prevents returning disk space to the operating system.
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2019-04-04 [a96c41fee] Allow VACUUM to be run with index cleanup disabled.
Author: Michael Paquier <michael@paquier.xyz>
2019-06-25 [ce59b75d4] Add toast-level reloption for vacuum_index_cleanup
-->

      <para>
       Allow <command>VACUUM</command> to skip index cleanup
       (Masahiko Sawada)
      </para>

      <para>
       This change adds a <command>VACUUM</command> command
       option <literal>INDEX_CLEANUP</literal> as well as a table storage
       option <literal>vacuum_index_cleanup</literal>.  Use of this option
       reduces the ability to reclaim space and can lead to index bloat,
       but it is helpful when the main goal is to freeze old tuples.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-10-04 [803b1301e] Add option SKIP_LOCKED to VACUUM and ANALYZE
-->

      <para>
       Add the ability to skip <command>VACUUM</command> and
       <command>ANALYZE</command> operations on tables that cannot be
       locked immediately (Nathan Bossart)
      </para>

      <para>
       This option is called <literal>SKIP_LOCKED</literal>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2019-03-29 [41b54ba78] Allow existing VACUUM options to take a Boolean argument
-->

      <para>
       Allow <command>VACUUM</command> and <command>ANALYZE</command>
       to take optional Boolean argument specifications (Masahiko Sawada)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-08-10 [f841ceb26] Improve TRUNCATE by avoiding early lock queue
2018-08-27 [a556549d7] Improve VACUUM and ANALYZE by avoiding early lock queue
-->

      <para>
       Prevent <xref linkend="sql-truncate"/>,
       <command>VACUUM</command> and <command>ANALYZE</command>
       from requesting a lock on
       tables for which the user lacks permission (Michaël Paquier)
      </para>

      <para>
       This prevents unauthorized locking, which could interfere with
       user queries.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2019-04-04 [ea569d64a] Add SETTINGS option to EXPLAIN, to print modified settin
-->

      <para>
       Add <xref linkend="sql-explain"/> option
       <literal>SETTINGS</literal> to output non-default optimizer
       settings (Tomas Vondra)
      </para>

      <para>
       This output can also be obtained when using <xref linkend="auto-explain"/>
       by setting <varname>auto_explain.log_settings</varname>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Andrew Gierth <rhodiumtoad@postgresql.org>
2019-03-19 [01bde4fa4] Implement OR REPLACE option for CREATE AGGREGATE.
-->

      <para>
       Add <literal>OR REPLACE</literal> option to
       <xref linkend="sql-createaggregate"/>
       (Andrew Gierth)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-19 [590a87025] Ignore attempts to add TOAST table to shared or catalog
-->

      <para>
       Allow modifications of system catalogs' options using <xref
       linkend="sql-altertable"/> (Peter Eisentraut)
      </para>

      <para>
       Modifications of catalogs' <literal>reloptions</literal> and
       autovacuum settings are now supported.  (Setting <xref
       linkend="guc-allow-system-table-mods"/> is still required.)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-13 [f177660ab] Include all columns in default names for foreign key con
-->

      <para>
       Use all key columns' names when selecting default constraint
       names for foreign keys (Peter Eisentraut)
      </para>

      <para>
       Previously, only the first column name was included in the constraint
       name, resulting in ambiguity for multi-column foreign keys.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-06-19 [d8594d123] Update list of combining characters
2019-06-24 [82be666ee] Update unicode_norm_table.h to Unicode 12.1.0
-->

      <para>
       Update assorted knowledge about Unicode to match Unicode 12.1.0
       (Peter Eisentraut)
      </para>

      <para>
       This fixes, for example, cases
       where <application>psql</application> would misformat output
       involving combining characters.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-24 [fd582317e] Sync our Snowball stemmer dictionaries with current upst
-->

      <para>
       Update Snowball stemmer dictionaries with support for new languages
       (Arthur Zakirov)
      </para>

      <para>
       This adds word stemming support for Arabic, Indonesian, Irish,
       Lithuanian, Nepali, and Tamil to <link linkend="textsearch">full
       text search</link>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-22 [5e1963fb7] Collations with nondeterministic comparison
-->

      <para>
       Allow creation of <link
       linkend="collation">collations</link> that report
       string equality for strings that are not bit-wise equal (Peter
       Eisentraut)
      </para>

      <para>
       This feature supports <quote>nondeterministic</quote> collations
       that can define case- and accent-agnostic equality comparisons.
       Thus, for example, a case-insensitive uniqueness constraint on a
       text column can be made more easily than before.  This is only
       supported for <acronym>ICU</acronym> collations.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-17 [b8f9a2a69] Add support for collation attributes on older ICU versio
-->

      <para>
       Add support for <acronym>ICU</acronym> collation attributes on older
       ICU versions (Peter Eisentraut)
      </para>

      <para>
       This allows customization of the collation rules in a consistent way
       across all ICU versions.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-19 [2ece7c07d] Add text-vs-name cross-type operators, and unify name_op
-->

      <para>
       Allow data
       type <link linkend="datatype-character-special-table">name</link>
       to more seamlessly be compared to other text types (Tom Lane)
      </para>

      <para>
       Type <type>name</type> now behaves much like a domain over
       type <type>text</type> that has default collation <quote>C</quote>.
       This allows cross-type comparisons to be processed more efficiently.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Functions</title>

    <itemizedlist>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2019-03-16 [72b646033] Partial implementation of SQL/JSON path language
Author: Alexander Korotkov <akorotkov@postgresql.org>
2019-03-16 [16d489b0f] Numeric error suppression in jsonpath
Author: Alexander Korotkov <akorotkov@postgresql.org>
2019-04-01 [0a02e2ae0] GIN support for @@ and @? jsonpath operators
-->

      <para>
       Add support for the <acronym>SQL/JSON</acronym> <link
       linkend="functions-sqljson-path">path</link> language
       (Nikita Glukhov, Teodor Sigaev, Alexander Korotkov, Oleg Bartunov,
       Liudmila Mantrova)
      </para>

      <para>
       This allows execution of complex queries on <type>JSON</type>
       values using an <acronym>SQL</acronym>-standard language.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-12 [f1d85aa98] Add support for hyperbolic functions, as well as log10()
-->

      <para>
       Add support for <link linkend="functions-math-hyp-table">hyperbolic
       functions</link> (Lætitia Avrot)
      </para>

      <para>
       Also add <function>log10()</function> as an alias for
       <function>log()</function>, for standards compliance.
      </para>
     </listitem>

     <listitem>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2018-10-06 [e954a727f] Improve the accuracy of floating point statistical aggre
-->
      <para>
       Improve the accuracy of statistical aggregates like <link
       linkend="functions-aggregate-statistics-table"><function>variance()</function></link>
       by using more precise algorithms (Dean Rasheed)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-14 [600b04d6b] Add a timezone-specific variant of date_trunc().
-->

      <para>
       Allow <link
       linkend="functions-datetime-table"><function>date_trunc()</function></link>
       to have an additional argument to control the time zone (Vik
       Fearing, Tom Lane)
      </para>

      <para>
       This is faster and simpler than using the <literal>AT TIME
       ZONE</literal> clause.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2018-09-09 [cf9846724] Improve behavior of to_timestamp()/to_date() functions
-->

      <para>
       Adjust <link
       linkend="functions-formatting-table"><function>to_timestamp()</function></link>/<function>to_date()</function>
       functions to be more forgiving of template mismatches (Artur
       Zakirov, Alexander Korotkov, Liudmila Mantrova)
      </para>

      <para>
       This new behavior more closely matches the
       <productname>Oracle</productname> functions of the same name.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-07 [251cf2e27] Fix minor deficiencies in XMLTABLE, xpath(), xmlexists()
-->

      <para>
       Fix assorted bugs in <link
       linkend="functions-xml"><acronym>XML</acronym> functions</link>
       (Pavel Stehule, Markus Winand, Chapman Flack)
      </para>

      <para>
       Specifically, in <literal>XMLTABLE</literal>,
       <function>xpath()</function>, and <function>xmlexists()</function>,
       fix some cases where nothing was output for a node, or an
       unexpected error was thrown, or necessary escaping of XML special
       characters was omitted.
      </para>
     </listitem>

     <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-07 [eaaa5986a] Fix the BY {REF,VALUE} clause of XMLEXISTS/XMLTABLE
-->

      <para>
       Allow the <literal>BY VALUE</literal> clause
       in <function>XMLEXISTS</function> and <function>XMLTABLE</function>
       (Chapman Flack)
      </para>

      <para>
       This SQL-standard clause has no effect
       in <productname>PostgreSQL</productname>'s implementation, but it
       was unnecessarily being rejected.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-03-27 [5bde1651b] Switch function current_schema[s]() to be parallel-unsaf
-->

      <para>
       Prevent <link
       linkend="functions-info-session-table"><function>current_schema()</function></link>
       and <function>current_schemas()</function> from being run by
       parallel workers, as they are not parallel-safe (Michaël Paquier)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-01-30 [5f5c01459] Allow RECORD and RECORD[] to be specified in function co
-->

      <para>
       Allow <type>RECORD</type> and <type>RECORD[]</type> to be used
       as column types in a query's column definition list for a <link
       linkend="queries-tablefunctions">table function</link> that is declared
       to return <type>RECORD</type> (Elvis Pranskevichus)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-01-04 [4879a5172] Support plpgsql variable names that conflict with unrese
-->

      <para>
       Allow SQL commands and variables with the same names as those
       commands to be used in the same PL/pgSQL function (Tom Lane)
      </para>

      <para>
       For example, allow a variable called <varname>comment</varname> to
       exist in a function that calls
       the <command>COMMENT</command> <acronym>SQL</acronym> command.
       Previously this combination caused a parse error.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2018-07-25 [167075be3] Add strict_multi_assignment and too_many_rows plpgsql ch
-->

      <para>
       Add new optional warning and error checks to PL/pgSQL (Pavel
       Stehule)
      </para>

      <para>
       The new checks allow for run-time validation of
       <literal>INTO</literal> column counts and single-row results.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-04-06 [249d64999] Add support TCP user timeout in libpq and the backend se
-->

      <para>
       Add connection parameter <xref linkend="libpq-tcp-user-timeout"/>
       to control <application>libpq</application>'s <acronym>TCP</acronym>
       timeout (Ryohei Nagaura)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-04-04 [7bac3acab] Add a "SQLSTATE-only" error verbosity option to libpq an
-->

      <para>
       Allow <application>libpq</application> (and thus
       <application>psql</application>) to report only the
       <literal>SQLSTATE</literal> value in error messages (Didier Gautheron)
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-11 [2970afa6c] Add PQresultMemorySize function to report allocated size
-->

      <para>
       Add <application>libpq</application>
       function <link linkend="libpq-pqresultmemorysize"><function>PQresultMemorySize()</function></link>
       to report the memory used by a query result (Lars Kanis, Tom Lane)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-09-07 [1fea1e325] libpq: Change "options" dispchar to normal
-->

      <para>
       Remove the no-display/debug flag from <application>libpq</application>'s
       <literal>options</literal> connection parameter (Peter Eisentraut)
      </para>

      <para>
       This allows this parameter to be set by
       <application>postgres_fdw</application>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Meskes <meskes@postgresql.org>
2019-02-18 [050710b36] Add bytea datatype to ECPG.
-->

      <para>
       Allow <xref linkend="app-ecpg"/> to create variables of data type
       <type>bytea</type> (Ryo Matsumura)
      </para>

      <para>
       This allows ECPG clients to interact with <type>bytea</type> data
       directly, rather than using an encoded form.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Meskes <meskes@postgresql.org>
2019-05-22 [a1dc6ab46] Implement PREPARE AS statement for ECPG.
-->

      <para>
       Add <command>PREPARE AS</command> support to
       <productname>ECPG</productname> (Ryo Matsumura)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-01-31 [00d1e88d3] Add - -min-xid-age and - -min-mxid-age options to vacuumdb
-->

      <para>
       Allow <xref linkend="app-vacuumdb"/> to select tables for vacuum
       based on their wraparound horizon (Nathan Bossart)
      </para>

      <para>
       The options are <option>--min-xid-age</option> and
       <option>--min-mxid-age</option>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-01-08 [354e95d1f] Add - -disable-page-skipping and - -skip-locked to vacuumd
-->

      <para>
       Allow <application>vacuumdb</application> to disable waiting for locks
       or skipping all-visible pages (Nathan Bossart)
      </para>

      <para>
       The options are <option>--skip-locked</option> and
       <option>--disable-page-skipping</option>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-04-01 [cc8d41511] Unified logging system for command-line programs
-->

      <para>
       Add colorization to the output of command-line utilities (Peter
       Eisentraut)
      </para>

      <para>
       This is enabled by setting the environment variable
       <envar>PG_COLOR</envar> to <literal>always</literal>
       or <literal>auto</literal>.  The specific colors used can be
       adjusted by setting the environment variable
       <envar>PG_COLORS</envar>, using ANSI escape codes for colors.
       For example, the default behavior is equivalent to
       <literal>PG_COLORS="error=01;31:warning=01;35:locus=01"</literal>.
      </para>
     </listitem>

     </itemizedlist>

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

     <itemizedlist>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-11-26 [aa2ba50c2] Add CSV table output mode in psql.
-->

       <para>
        Add <acronym>CSV</acronym> table output mode in
        <application>psql</application> (Daniel Vérité)
       </para>

       <para>
        This is controlled by <command>\pset format csv</command> or the
        command-line <option>--csv</option> option.
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-11 [27f3dea64] psql: Add documentation URL to \help output
-->

       <para>
        Show the manual page <acronym>URL</acronym> in
        <application>psql</application>'s <command>\help</command> output
        for a SQL command (Peter Eisentraut)
       </para>
      </listitem>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2018-11-19 [6e5f8d489] psql: Show IP address in \conninfo
2019-06-14 [313f56ce2] Tweak libpq's PQhost, PQhostaddr, and psql's \connect
-->

       <para>
        Display the <acronym>IP</acronym> address in
        <application>psql</application>'s <command>\conninfo</command>
        (Fabien Coelho)
       </para>
      </listitem>

      <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-12-23 [11a60d496] Add completion for storage parameters after CREATE TABLE
Author: Michael Paquier <michael@paquier.xyz>
2018-10-26 [5953c9969] Improve tab completion of CREATE EVENT TRIGGER in psql
Author: Michael Paquier <michael@paquier.xyz>
2018-10-26 [292ef6e27] Add tab completion of EXECUTE FUNCTION for CREATE TRIGGE
Author: Michael Paquier <michael@paquier.xyz>
2019-01-28 [23349b18d] Add tab completion for ALTER INDEX ALTER COLUMN in psql
Author: Michael Paquier <michael@paquier.xyz>
2018-12-20 [4cba9c2a3] Add more tab completion for CREATE TABLE in psql
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-20 [a7c4dad1a] Fix psql's tab completion for ALTER DATABASE ... SET TAB
Author: Michael Paquier <michael@paquier.xyz>
2018-12-25 [f89ae34ab] Improve tab completion of ALTER INDEX/TABLE with SET STA
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-20 [c9a8a401f] Fix psql's tab completion for TABLE.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-21 [121213d9d] Improve tab completion for ANALYZE, EXPLAIN, and VACUUM.
-->

       <para>
        Improve tab completion of <command>CREATE TABLE</command>,
        <command>CREATE TRIGGER</command>,
        <command>CREATE EVENT TRIGGER</command>,
        <command>ANALYZE</command>, <command>EXPLAIN</command>,
        <command>VACUUM</command>, <command>ALTER TABLE</command>,
        <command>ALTER INDEX</command>, <command>ALTER DATABASE</command>,
        and <command>ALTER INDEX ALTER COLUMN</command>
        (Dagfinn Ilmari Mannsåker, Tatsuro Yamada, Michaël Paquier,
        Tom Lane, Justin Pryzby)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4>
     <title><link linkend="pgbench"><application>pgbench</application></link></title>

     <itemizedlist>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-01-10 [6260cc550] pgbench: add \cset and \gset commands
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-25 [25ee70511] pgbench: Remove \cset
-->

       <para>
        Allow values produced by queries to be assigned
        to <application>pgbench</application> variables (Fabien Coelho,
        Álvaro Herrera)
       </para>

       <para>
        The command for this is <command>\gset</command>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-25 [5b7e03670] Avoid unnecessary precision loss for pgbench's - -rate ta
-->

       <para>
        Improve precision of <application>pgbench</application>'s
        <option>--rate</option> option (Tom Lane)
       </para>
      </listitem>

      <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-10-15 [5b75a4f82] pgbench: Report errors during run better
-->
       <para>
        Improve <application>pgbench</application>'s error reporting with
        clearer messages and return codes (Peter Eisentraut)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2018-09-01 [ec7436993] Implement "pg_ctl logrotate" command
-->

      <para>
       Allow control of log file rotation via <xref linkend="app-pg-ctl"/>
       (Kyotaro Horiguchi, Alexander Kuzmenkov, Alexander Korotkov)
      </para>

      <para>
       Previously, this was only possible via an <acronym>SQL</acronym>
       function or a process signal.
      </para>
     </listitem>

     <listitem>
<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2019-01-14 [bb24439ce] Detach postmaster process from pg_ctl's session at serve
-->

      <para>
       Properly detach the new server process
       during <literal><application>pg_ctl</application> start</literal>
       (Paul Guo)
      </para>

      <para>
       This prevents the server from being shut down if the shell script
       that invoked <application>pg_ctl</application> is interrupted later.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter_e@gmx.net>
2018-11-07 [3a769d823] pg_upgrade: Allow use of file cloning
-->

      <para>
       Allow <xref linkend="pgupgrade"/> to use the file system's cloning
       feature, if there is one (Peter Eisentraut)
      </para>

      <para>
       The <option>--clone</option> option has the advantages of
       <option>--link</option>, while preventing the old cluster from
       being changed after the new cluster has started.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-12-01 [2d34ad843] Add a - -socketdir option to pg_upgrade.
-->

      <para>
       Allow specification of the socket directory to use
       in <application>pg_upgrade</application> (Daniel Gustafsson)
      </para>

      <para>
       This is controlled by <option>--socketdir</option>; the default
       is the current directory.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-03-23 [e0090c869] Add option -N/- -no-sync to pg_checksums
-->

      <para>
       Allow <xref linkend="app-pgchecksums"/> to disable fsync operations
       (Michaël Paquier)
      </para>

      <para>
       This is controlled by the <option>--no-sync</option> option.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-07-10 [8a00b96aa] Add pg_rewind - -no-sync
-->

      <para>
       Allow <xref linkend="app-pgrewind"/> to disable fsync operations
       (Michaël Paquier)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-09-14 [0ba06e0bf] Allow concurrent-safe open() and fopen() in frontend
2018-09-20 [40cfe8606] Enforce translation mode for Windows frontends to text
-->

      <para>
       Fix <xref linkend="pgtestfsync"/> to report accurate
       <literal>open_datasync</literal> durations on
       <productname>Windows</productname> (Laurenz Albe)
      </para>
     </listitem>

    </itemizedlist>

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

     <itemizedlist>

      <listitem>
<!--
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
2019-03-07 [7e413a0f8] pg_dump: allow multiple rows per insert
2019-06-14 [a193cbec1] Add pg_dumpall rows-per-insert
-->

       <para>
        When <application>pg_dump</application> emits data
        with <command>INSERT</command> commands rather
        than <command>COPY</command>, allow more than one data row to be
        included in each <command>INSERT</command> (Surafel Temesgen,
        David Rowley)
       </para>

       <para>
        The option controlling this is <option>--rows-per-insert</option>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2018-07-13 [387a5cfb9] Add pg_dump - -on-conflict-do-nothing option.
-->

       <para>
        Allow <application>pg_dump</application> to emit <command>INSERT
        ... ON CONFLICT DO NOTHING</command> (Surafel Temesgen)
       </para>

       <para>
        This avoids conflict failures during restore.
        The option is <option>--on-conflict-do-nothing</option>.
       </para>
      </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-14 [548e50976] Improve parallel scheduling logic in pg_dump/pg_restore.
-->

       <para>
        Decouple the order of operations in a
        parallel <application>pg_dump</application> from the order used by
        a subsequent parallel <application>pg_restore</application> (Tom
        Lane)
       </para>

       <para>
        This allows <application>pg_restore</application> to perform
        more-fully-parallelized parallel restores, especially in cases
        where the original dump was not done in parallel.  Scheduling of a
        parallel <application>pg_dump</application> is also somewhat
        improved.
       </para>
      </listitem>

      <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2019-02-18 [af25bc03e] Provide an extra-float-digits setting for pg_dump / pg_d
-->

       <para>
        Allow the <xref linkend="guc-extra-float-digits"/> setting to be
        specified for <application>pg_dump</application> and
        <application>pg_dumpall</application> (Andrew Dunstan)
       </para>

       <para>
        This is primarily useful for making dumps that are exactly
        comparable across different source server versions.  It is not
        recommended for normal use, as it may result in loss of precision
        when the dump is restored.
       </para>
      </listitem>

      <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2019-03-01 [f092de050] Add - -exclude-database option to pg_dumpall
-->

       <para>
        Add <option>--exclude-database</option> option to
        <application>pg_dumpall</application> (Andrew Dunstan)
       </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-11-16 [4da597edf] Make TupleTableSlots extensible, finish split of
Author: Andres Freund <andres@anarazel.de>
2019-03-06 [8586bf7ed] tableam: introduce table AM infrastructure.
Author: Andres Freund <andres@anarazel.de>
2019-03-06 [3b925e905] tableam: Add pg_dump support.
Author: Andres Freund <andres@anarazel.de>
2019-03-11 [c2fe139c2] tableam: Add and use scan APIs.
Author: Andres Freund <andres@anarazel.de>
2019-03-23 [5db6df0c0] tableam: Add tuple_{insert, delete, update, lock} and us
Author: Andres Freund <andres@anarazel.de>
2019-03-28 [d25f51910] tableam: relation creation, VACUUM FULL/CLUSTER, SET TAB
Author: Andres Freund <andres@anarazel.de>
2019-03-29 [d3a5fc17e] Show table access methods as such in psql's \dA.
Author: Andres Freund <andres@anarazel.de>
2019-03-31 [73c954d24] tableam: sample scan.
Author: Andres Freund <andres@anarazel.de>
2019-03-31 [bfbcad478] tableam: bitmap table scan.
existin
-->

      <para>
       Add <xref linkend="sql-create-access-method"/> command to create
       new table types (Andres Freund, Haribabu Kommi, Álvaro Herrera,
       Alexander Korotkov, Dmitry Dolgov)
      </para>

      <para>
       This enables the development of new <link linkend="tableam">table
       access methods</link>, which can optimize storage for different
       use cases.  The existing <literal>heap</literal> access method
       remains the default.
      </para>
     </listitem>

      <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-02-09 [1fb57af92] Create the infrastructure for planner support functions.
2019-02-09 [a391ff3c3] Build out the planner support function infrastructure.
2019-02-11 [74dfe58a5] Allow extensions to generate lossy index conditions.
-->

       <para>
        Add <link linkend="xfunc-optimization">planner support
        function</link> interfaces to improve optimizer estimates,
        inlining, and indexing for functions (Tom Lane)
       </para>

       <para>
        This allows extensions to create planner support functions that
        can provide function-specific selectivity, cost, and row-count
        estimates that can depend on the function's arguments.  Support
        functions can also supply simplified representations and index
        conditions, greatly expanding optimization possibilities.
       </para>
      </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2019-03-12 [a6417078c] Create a script that can renumber manually-assigned OIDs
2019-03-12 [3aa0395d4] Remove remaining hard-wired OID references in the initia
-->

      <para>
       Simplify renumbering manually-assigned OIDs, and establish a new
       project policy for management of such OIDs (John Naylor, Tom Lane)
      </para>

      <para>
       Patches that manually assign OIDs for new built-in objects (such as
       new functions) should now randomly choose OIDs in the range
       8000&mdash;9999.  At the end of a development cycle, the OIDs used
       by committed patches will be renumbered down to lower numbers,
       currently somewhere in the 4<replaceable>xxx</replaceable> range,
       using the new <link
       linkend="system-catalog-oid-assignment"><command>renumber_oids.pl</command></link>
       script.  This approach should greatly reduce the odds of OID
       collisions between different in-process patches.
      </para>

      <para>
       While there is no specific policy reserving any OIDs for external
       use, it is recommended that forks and other projects needing
       private manually-assigned OIDs use numbers in the high
       7<replaceable>xxx</replaceable> range.  This will avoid conflicts
       with recently-merged patches, and it should be a long time before
       the core project reaches that range.
      </para>
     </listitem>

     <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2018-10-02 [a33245a85] Don't build static libraries on Cygwin
-->

      <para>
       Build <productname>Cygwin</productname> binaries using dynamic
       instead of static libraries (Marco Atzeri)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-01-01 [1707a0d2a] Remove configure switch - -disable-strong-random
-->

      <para>
       Remove <application>configure</application> switch
       <option>--disable-strong-random</option> (Michaël Paquier)
      </para>

      <para>
       A strong random-number source is now required.
      </para>
     </listitem>

     <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2018-09-26 [96bf88d52] Always use our own versions of *printf().
2018-09-26 [26e9d4d4e] Convert elog.c's useful_strerror() into a globally-used
2018-09-26 [758ce9b77] Incorporate strerror_r() into src/port/snprintf.c, too.
2018-09-26 [d6c55de1f] Implement %m in src/port/snprintf.c, and teach elog.c to
-->

      <para>
       <function>printf</function>-family functions, as well
       as <function>strerror</function>
       and <function>strerror_r</function>, now behave uniformly across
       platforms within Postgres code (Tom Lane)
      </para>

      <para>
       Notably, <function>printf</function>
       understands <literal>%m</literal> everywhere; on
       Windows, <function>strerror</function> copes with Winsock error
       codes (it used to do so in backend but not frontend code);
       and <function>strerror_r</function> always follows the GNU return
       convention.
      </para>
     </listitem>

     <listitem>
<!--
Author: Andres Freund <andres@anarazel.de>
2018-08-23 [d9dd406fe] Require C99 (and thus MSCV 2013 upwards).
-->

      <para>
       Require a C99-compliant compiler, and <acronym>MSVC</acronym>
       2013 or later on <productname>Windows</productname> (Andres Freund)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-01-11 [96b8b8b6f] Create INSTALL file using Pandoc
2019-03-27 [2488ea7a9] Use Pandoc also for plain-text documentation output
-->

      <para>
       Use <application>pandoc</application>,
       not <application>lynx</application>, for generating plain-text
       documentation output files (Peter Eisentraut)
      </para>

      <para>
       This affects only the <filename>INSTALL</filename> file generated
       during <literal>make dist</literal> and the seldom-used
       plain-text <filename>postgres.txt</filename> output file.
       Pandoc produces better output than lynx and avoids some
       locale/encoding issues.  Pandoc version 1.13 or later is required.
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2019-03-27 [ea55aec0a] doc: Add some images
-->

      <para>
       Support use of images in the <productname>PostgreSQL</productname>
       documentation (Jürgen Purtz)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

     <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2019-04-02 [ffab494a4] postgres_fdw: Perform the (ORDERED, NULL) upperrel opera
Author: Etsuro Fujita <efujita@postgresql.org>
2019-04-02 [d50d172e5] postgres_fdw: Perform the (FINAL, NULL) upperrel operati
-->

      <para>
       Allow <literal>ORDER BY</literal> sorts
       and <literal>LIMIT</literal> clauses to be pushed
       to <xref linkend="postgres-fdw"/> foreign servers in more
       cases (Etsuro Fujita)
      </para>
     </listitem>

     <listitem>
<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2018-12-04 [f8f6e4467] postgres_fdw: Improve cost and size estimation for aggre
Author: Etsuro Fujita <efujita@postgresql.org>
2019-01-24 [fd1afdbaf] postgres_fdw: Account for tlist eval costs in estimate_p
Author: Etsuro Fujita <efujita@postgresql.org>
2019-05-09 [edbcbe277] postgres_fdw: Fix cost estimation for aggregate pushdown
-->

      <para>
       Improve optimizer cost accounting for
       <application>postgres_fdw</application> queries (Etsuro Fujita)
      </para>
     </listitem>

     <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
2018-07-08 [a45adc747] Fix WITH CHECK OPTION on views referencing postgres_fdw
-->

      <para>
       Properly honor <literal>WITH CHECK OPTION</literal> on views
       that reference <application>postgres_fdw</application> tables
       (Etsuro Fujita)
      </para>

      <para>
       While <literal>CHECK OPTION</literal>s on
       <application>postgres_fdw</application> tables are ignored (because
       the reference is foreign), views on such tables are considered
       local, so this change enforces <literal>CHECK OPTION</literal>s
       on them.  Previously, only <command>INSERT</command>s and
       <command>UPDATE</command>s with <literal>RETURNING</literal>
       clauses that returned <literal>CHECK OPTION</literal> values
       were validated.
      </para>
     </listitem>

     <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2019-01-11 [43cbedab8] Extend pg_stat_statements_reset to reset statistics spec
-->

      <para>
       Allow <link
       linkend="pgstatstatements"><function>pg_stat_statements_reset()</function></link>
       to be more granular (Haribabu Kommi, Amit Kapila)
      </para>

      <para>
       The function now allows reset of statistics for specific databases,
       users, and queries.
      </para>
     </listitem>

     <listitem>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2018-07-31 [2d36a5e9d] Provide a log_level setting for auto_explain
-->

      <para>
       Allow control of the <xref linkend="auto-explain"/> log level
       (Tom Dunstan, Andrew Dunstan)
      </para>

      <para>
       The default is <literal>LOG</literal>.
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2019-01-10 [e1c1d5444] Update unaccent rules with release 34 of CLDR for Latin-
-->

      <para>
       Update <xref linkend="unaccent"/> rules with new
       punctuation and symbols (Hugh Ranalli, Michaël Paquier)
      </para>
     </listitem>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2019-02-01 [456e3718e] Add combining characters to unaccent.rules.
-->

      <para>
       Allow <application>unaccent</application> to handle some accents
       encoded as combining characters (Hugh Ranalli)
      </para>
     </listitem>

     <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
2018-09-02 [5e8d670c3] Add Greek characters to unaccent.rules.
-->

      <para>
       Allow <application>unaccent</application> to remove accents from
       Greek characters (Tasos Maschalidis)
      </para>
     </listitem>

     <listitem>
<!--
Author: Peter Geoghegan <pg@bowt.ie>
2019-03-20 [c1afd175b] Allow amcheck to re-find tuples using new search.
-->

      <para>
       Add a parameter to
       <xref linkend="amcheck"/>'s <function>bt_index_parent_check()</function>
       function to check each index tuple from the root of the tree
       (Peter Geoghegan)
      </para>
     </listitem>

     <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2018-08-28 [1aaf532de] Rework option set of oid2name
Author: Michael Paquier <michael@paquier.xyz>
2018-08-28 [bfea331a5] Rework option set of vacuumlo
-->

      <para>
       Improve <xref linkend="oid2name"/> and <xref linkend="vacuumlo"/>
       option handling to match other commands (Tatsuro Yamada)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

  </sect2>

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

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

   <simplelist>
    <member>Abhijit Menon-Sen</member>
    <member>Achilleas Mantzios</member>
    <member>Adam Berlin</member>
    <member>Adam Bielanski</member>
    <member>Aditya Toshniwal</member>
    <member>Adrien Nayrat</member>
    <member>Alan Jackson</member>
    <member>Albert Schabhuetl</member>
    <member>Aleksander Alekseev</member>
    <member>Alex Aktsipetrov</member>
    <member>Alex Kliukin</member>
    <member>Alex Macy</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Kukushkin</member>
    <member>Alexander Kuzmenkov</member>
    <member>Alexander Lakhin</member>
    <member>Alexandra Ryzhevich</member>
    <member>Alexey Bashtanov</member>
    <member>Alexey Ermakov</member>
    <member>Alexey Kondratov</member>
    <member>Alexey Kryuchkov</member>
    <member>Alexey Stepanov</member>
    <member>Allison Kaptur</member>
    <member>Álvaro Herrera</member>
    <member>Alyssa Ross</member>
    <member>Amit Kapila</member>
    <member>Amit Khandekar</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Anastasia Lubennikova</member>
    <member>André Hänsel</member>
    <member>Andrea Gelmini</member>
    <member>Andreas Joseph Krogh</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Kunert</member>
    <member>Andreas Scherbaum</member>
    <member>Andreas Seltenreich</member>
    <member>Andrei Yahorau</member>
    <member>Andres Freund</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Fletcher</member>
    <member>Andrew Gierth</member>
    <member>Andrew Krasichkov</member>
    <member>Andrey Borodin</member>
    <member>Andrey Klychkov</member>
    <member>Andrey Lepikhov</member>
    <member>Andy Abelisto</member>
    <member>Anthony Greene</member>
    <member>Anthony Skorski</member>
    <member>Antonin Houska</member>
    <member>Arne Roland</member>
    <member>Arseny Sher</member>
    <member>Arthur Zakirov</member>
    <member>Ash Marath</member>
    <member>Ashutosh Bapat</member>
    <member>Ashutosh Sharma</member>
    <member>Ashwin Agrawal</member>
    <member>Aya Iwata</member>
    <member>Bartosz Polnik</member>
    <member>Basil Bourque</member>
    <member>Bernd Helmle</member>
    <member>Brad DeJong</member>
    <member>Brigitte Blanc-Lafay</member>
    <member>Bruce Klein</member>
    <member>Bruce Momjian</member>
    <member>Bruno Wolff</member>
    <member>Chapman Flack</member>
    <member>Chen Huajun</member>
    <member>Chris Travers</member>
    <member>Chris Wilson</member>
    <member>Christian Hofstaedtler</member>
    <member>Christoph Berg</member>
    <member>Christoph Moench-Tegeder</member>
    <member>Clemens Ladisch</member>
    <member>Colm McHugh</member>
    <member>Corey Huinker</member>
    <member>Craig Ringer</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Daisuke Higuchi</member>
    <member>Daniel Fiori</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Westermann</member>
    <member>Daniel Wilches</member>
    <member>Darafei Praliaskouski</member>
    <member>Daryl Waycott</member>
    <member>Dave Cramer</member>
    <member>David Binderman</member>
    <member>David Fetter</member>
    <member>David G. Johnston</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>Davy Machado</member>
    <member>Dean Rasheed</member>
    <member>Derek Hans</member>
    <member>Derek Nelson</member>
    <member>Devrim Gündüz</member>
    <member>Dian Fay</member>
    <member>Didier Gautheron</member>
    <member>Dilip Kumar</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Marakasov</member>
    <member>Dmitry Molotkov</member>
    <member>Dmitry Shalashov</member>
    <member>Don Seiler</member>
    <member>Donald Dong</member>
    <member>Doug Rady</member>
    <member>Edmund Horner</member>
    <member>Eduards Bezverhijs</member>
    <member>Elvis Pranskevichus</member>
    <member>Emanuel Araújo</member>
    <member>Emre Hasegeli</member>
    <member>Eric Cyr</member>
    <member>Erik Rijkers</member>
    <member>Ertugrul Kahveci</member>
    <member>Etsuro Fujita</member>
    <member>Eugen Konkov</member>
    <member>Euler Taveira</member>
    <member>Fabien Coelho</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Feike Steenbergen</member>
    <member>Filip Rembialkowski</member>
    <member>Gaby Schilders</member>
    <member>Geert Lobbestael</member>
    <member>George Tarasov</member>
    <member>Georgios Kokolatos</member>
    <member>Gianni Ciolli</member>
    <member>Gilles Darold</member>
    <member>Greg Stark</member>
    <member>Grigory Smolkin</member>
    <member>Guillaume Lelarge</member>
    <member>Gunnlaugur Thor Briem</member>
    <member>Gurjeet Singh</member>
    <member>Hadi Moshayedi</member>
    <member>Hailong Li</member>
    <member>Hans Buschmann</member>
    <member>Haribabu Kommi</member>
    <member>Haruka Takatsuka</member>
    <member>Hayato Kuroda</member>
    <member>Heikki Linnakangas</member>
    <member>Hironobu Suzuki</member>
    <member>Hubert Lubaczewski</member>
    <member>Hugh Ranalli</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Ildar Musin</member>
    <member>Insung Moon</member>
    <member>Ioseph Kim</member>
    <member>Isaac Morland</member>
    <member>Ivan Panchenko</member>
    <member>Jack Kelly</member>
    <member>Jacob Champion</member>
    <member>Jaime Casanova</member>
    <member>Jakob Egger</member>
    <member>Jakub Glapa</member>
    <member>Jakub Janecek</member>
    <member>James Coleman</member>
    <member>James Inform</member>
    <member>James Robinson</member>
    <member>James Sewell</member>
    <member>James Tomson</member>
    <member>Jan Chochol</member>
    <member>Jaroslav Sivy</member>
    <member>Jean-Christophe Arnu</member>
    <member>Jean-Marc Voillequin</member>
    <member>Jean-Pierre Pelletier</member>
    <member>Jeevan Chalke</member>
    <member>Jeevan Ladhe</member>
    <member>Jeff Davis</member>
    <member>Jeff Janes</member>
    <member>Jeremy Evans</member>
    <member>Jeremy Schneider</member>
    <member>Jeremy Smith</member>
    <member>Jerry Jelinek</member>
    <member>Jesper Pedersen</member>
    <member>Jianing Yang</member>
    <member>Jie Zhang</member>
    <member>Jim Nasby</member>
    <member>Jimmy Yih</member>
    <member>Joe Conway</member>
    <member>Joe Wildish</member>
    <member>Joerg Sonnenberger</member>
    <member>John Klann</member>
    <member>John Naylor</member>
    <member>Jonah Harris</member>
    <member>Jonathan S. Katz</member>
    <member>Jorge Gustavo Rocha</member>
    <member>José Arthur Benetasso Villanova</member>
    <member>Joshua D. Drake</member>
    <member>Juan José Santamaría Flecha</member>
    <member>Julian Hsiao</member>
    <member>Julian Markwort</member>
    <member>Julian Schauder</member>
    <member>Julien Rouhaud</member>
    <member>Jürgen Purtz</member>
    <member>Jürgen Strobel</member>
    <member>Justin Pryzby</member>
    <member>Kaiting Chen</member>
    <member>Karen Huddleston</member>
    <member>Karl Czajkowski</member>
    <member>Karl O. Pinc</member>
    <member>Keiichi Hirobe</member>
    <member>Keith Fiske</member>
    <member>Ken Tanzer</member>
    <member>Kenji Uno</member>
    <member>Kevin Grittner</member>
    <member>Kevin Hale Boyes</member>
    <member>Kieran McCusker</member>
    <member>Kirk Jamison</member>
    <member>Kohei KaiGai</member>
    <member>Konstantin Knizhnik</member>
    <member>Konstantin Kuznetsov</member>
    <member>Kristjan Tammekivi</member>
    <member>Kuntal Ghosh</member>
    <member>Kyle Samson</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lætitia Avrot</member>
    <member>Lars Kanis</member>
    <member>Laurenz Albe</member>
    <member>Lim Myungkyu</member>
    <member>Liu Huailing</member>
    <member>Liudmila Mantrova</member>
    <member>Lloyd Albin</member>
    <member>Luca Ferrari</member>
    <member>Luis M. Carril</member>
    <member>Lukas Eder</member>
    <member>Lukas Fittl</member>
    <member>Madelaine Thibaut</member>
    <member>Madeleine Thompson</member>
    <member>Magnus Hagander</member>
    <member>Mahendra Singh</member>
    <member>Mai Peng</member>
    <member>Maksim Milyutin</member>
    <member>Maksym Boguk</member>
    <member>Malthe Borch</member>
    <member>Manuel Rigger</member>
    <member>Marco Atzeri</member>
    <member>Marco Slot</member>
    <member>Marina Polyakova</member>
    <member>Mario De Frutos Dieguez</member>
    <member>Marius Timmer</member>
    <member>Mark Chambers</member>
    <member>Mark Dilger</member>
    <member>Marko Tiikkaja</member>
    <member>Markus Winand</member>
    <member>Martín Marqués</member>
    <member>Masahiko Sawada</member>
    <member>Masao Fujii</member>
    <member>Mateusz Guzik</member>
    <member>Mathias Brossard</member>
    <member>Matt Williams</member>
    <member>Matthias Otterbach</member>
    <member>Matvey Arye</member>
    <member>Melanie Plageman</member>
    <member>Mi Tar</member>
    <member>Michael Banck</member>
    <member>Michael Davidson</member>
    <member>Michael Meskes</member>
    <member>Michael Paquier</member>
    <member>Michael Vitale</member>
    <member>Michel Pelletier</member>
    <member>Mikalai Keida</member>
    <member>Mike Palmiotto</member>
    <member>Mithun Cy</member>
    <member>Morgan Owens</member>
    <member>Murat Kabilov</member>
    <member>Nathan Bossart</member>
    <member>Nawaz Ahmed</member>
    <member>Neeraj Kumar</member>
    <member>Nick Barnes</member>
    <member>Nico Williams</member>
    <member>Nikita Glukhov</member>
    <member>Nikolay Shaplov</member>
    <member>Ning Yu</member>
    <member>Nishant Fnu</member>
    <member>Noah Misch</member>
    <member>Norbert Benkocs</member>
    <member>Noriyoshi Shinoda</member>
    <member>Oleg Bartunov</member>
    <member>Oleg Samoilov</member>
    <member>Oleksii Kliukin</member>
    <member>Ondrej Bouda</member>
    <member>Oskari Saarenmaa</member>
    <member>Pan Bian</member>
    <member>Patrick Francelle</member>
    <member>Patrick McHardy</member>
    <member>Paul A. Jungwirth</member>
    <member>Paul Bonaud</member>
    <member>Paul Guo</member>
    <member>Paul Martinez</member>
    <member>Paul Ramsey</member>
    <member>Paul Schaap</member>
    <member>Paul van der Linden</member>
    <member>Pavan Deolasee</member>
    <member>Pavel Oskin</member>
    <member>Pavel Raiskup</member>
    <member>Pavel Stehule</member>
    <member>Peifeng Qiu</member>
    <member>Peter Billen</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Neave</member>
    <member>Petr Fedorov</member>
    <member>Petr Jelínek</member>
    <member>Petr Slavov</member>
    <member>Petru-Florin Mihancea</member>
    <member>Phil Bayer</member>
    <member>Phil Florent</member>
    <member>Philip Dubé</member>
    <member>Pierre Ducroquet</member>
    <member>Piotr Gabriel Kosinski</member>
    <member>Piotr Stefaniak</member>
    <member>Piotr Wlodarczyk</member>
    <member>Prabhat Sahu</member>
    <member>Quentin Rameau</member>
    <member>Rafael Castro</member>
    <member>Rafia Sabih</member>
    <member>Rahila Syed</member>
    <member>Rajkumar Raghuwanshi</member>
    <member>Rares Salcudean</member>
    <member>Raúl Marín Rodríguez</member>
    <member>Regina Obe</member>
    <member>Renaud Navarro</member>
    <member>Richard Guo</member>
    <member>Rick Otten</member>
    <member>Rikard Falkeborn</member>
    <member>RK Korlapati</member>
    <member>Robbie Harwood</member>
    <member>Robert Haas</member>
    <member>Robert Treat</member>
    <member>Robert Vollmert</member>
    <member>Roger Curley</member>
    <member>Roman Zharkov</member>
    <member>Ronan Dunklau</member>
    <member>Rui Hai Jiang</member>
    <member>Rushabh Lathia</member>
    <member>Ryan Lambert</member>
    <member>Ryo Matsumura</member>
    <member>Ryohei Nagaura</member>
    <member>Ryohei Takahashi</member>
    <member>Samuel Williams</member>
    <member>Sand Stone</member>
    <member>Sanyo Capobiango</member>
    <member>Satoru Koizumi</member>
    <member>Sean Johnston</member>
    <member>Serge Latyntsev</member>
    <member>Sergei Kornilov</member>
    <member>Sergey Pashkov</member>
    <member>Sergio Conde Gómez</member>
    <member>Shawn Debnath</member>
    <member>Shay Rojansky</member>
    <member>Sho Kato</member>
    <member>Shohei Mochizuki</member>
    <member>Shouyu Luo</member>
    <member>Simon Riggs</member>
    <member>Sivasubramanian Ramasubramanian</member>
    <member>Slawomir Chodnicki</member>
    <member>Stas Kelvish</member>
    <member>Stefan Kadow</member>
    <member>Stepan Yankevych</member>
    <member>Stephen Amell</member>
    <member>Stephen Frost</member>
    <member>Steve Rogerson</member>
    <member>Steve Singer</member>
    <member>Steven Winfield</member>
    <member>Surafel Temesgen</member>
    <member>Suraj Kharage</member>
    <member>Suresh Kumar R</member>
    <member>Takayuki Tsunakawa</member>
    <member>Takeshi Ideriha</member>
    <member>Takuma Hoshiai</member>
    <member>Tasos Maschalidis</member>
    <member>Tatsuo Ishii</member>
    <member>Tatsuro Yamada</member>
    <member>Teodor Sigaev</member>
    <member>Thom Brown</member>
    <member>Thomas Munro</member>
    <member>Thomas Poty</member>
    <member>Tillmann Schulz</member>
    <member>Tim Möhlmann</member>
    <member>Timur Birsh</member>
    <member>Tobias Bussmann</member>
    <member>Tom Cassidy</member>
    <member>Tom Dunstan</member>
    <member>Tom Gottfried</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tushar Ahuja</member>
    <member>Ulf Adams</member>
    <member>Vaishnavi Prabakaran</member>
    <member>Victor Petrovykh</member>
    <member>Victor Wagner</member>
    <member>Victor Yegorov</member>
    <member>Vijaykumar Jain</member>
    <member>Vik Fearing</member>
    <member>Vlad Sterzhanov</member>
    <member>Vladimir Baranoff</member>
    <member>Vladimir Kriukov</member>
    <member>Wu Fei</member>
    <member>Yaroslav Schekin</member>
    <member>Yi Huang</member>
    <member>Yoshikazu Imai</member>
    <member>Yugo Nagata</member>
    <member>Yulian Khodorkovskiy</member>
    <member>Yuming Wang</member>
    <member>YunQiang Su</member>
    <member>Yuri Kurenkov</member>
    <member>Yusuke Egashira</member>
    <member>Yuzuko Hosoya</member>
    <member>Zhou Digoal</member>
   </simplelist>
  </sect2>

 </sect1>
