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

 <sect1 id="release-18-1">
  <title>Release 18.1</title>

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

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

  <sect2 id="release-18-1-migration">
   <title>Migration to Version 18.1</title>

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

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

   <itemizedlist>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [5e4fcbe53] 2025-11-10 09:00:00 -0600
Branch: REL_18_STABLE [00eb646ea] 2025-11-10 09:00:00 -0600
Branch: REL_17_STABLE [e2fb3dfa8] 2025-11-10 09:00:00 -0600
Branch: REL_16_STABLE [d20abb587] 2025-11-10 09:00:00 -0600
Branch: REL_15_STABLE [2393d374a] 2025-11-10 09:00:00 -0600
Branch: REL_14_STABLE [95cce5669] 2025-11-10 09:00:00 -0600
Branch: REL_13_STABLE [8a2530ebc] 2025-11-10 09:00:00 -0600
-->
     <para>
      Check for <literal>CREATE</literal> privileges on the schema
      in <command>CREATE STATISTICS</command> (Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;00eb646ea">&sect;</ulink>
     </para>

     <para>
      This omission allowed table owners to create statistics in any
      schema, potentially leading to unexpected naming conflicts.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks
      Jelte Fennema-Nio for reporting this problem.
      (CVE-2025-12817)
     </para>
    </listitem>

    <listitem>
<!--
Author: Jacob Champion <jchampion@postgresql.org>
Branch: master [600086f47] 2025-11-10 06:20:33 -0800
Branch: REL_18_STABLE [7eb8fcad8] 2025-11-10 06:03:01 -0800
Branch: REL_17_STABLE [f5999f018] 2025-11-10 06:03:03 -0800
Branch: REL_16_STABLE [585fd9b3c] 2025-11-10 06:03:04 -0800
Branch: REL_15_STABLE [91421565f] 2025-11-10 06:03:05 -0800
Branch: REL_14_STABLE [96d2c7e96] 2025-11-10 06:03:05 -0800
Branch: REL_13_STABLE [d6f0c0d6d] 2025-11-10 06:03:06 -0800
-->
     <para>
      Avoid integer overflow in allocation-size calculations
      within <application>libpq</application> (Jacob Champion)
      <ulink url="&commit_baseurl;7eb8fcad8">&sect;</ulink>
     </para>

     <para>
      Several places in <application>libpq</application> were not
      sufficiently careful about computing the required size of a memory
      allocation.  Sufficiently large inputs could cause integer overflow,
      resulting in an undersized buffer, which would then lead to writing
      past the end of the buffer.
     </para>

     <para>
      The <productname>PostgreSQL</productname> Project thanks Aleksey
      Solovev of Positive Technologies for reporting this problem.
      (CVE-2025-12818)
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [ef5e60a9d] 2025-10-09 01:07:59 -0400
Branch: REL_18_STABLE [dc9125111] 2025-10-09 01:07:52 -0400
Branch: REL_17_STABLE [09f86a42f] 2025-10-09 01:07:36 -0400
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [c09a06918] 2025-11-04 12:25:04 +0100
Branch: REL_18_STABLE [1baae827e] 2025-11-04 12:25:14 +0100
Branch: REL_17_STABLE [1e6dfdaa0] 2025-11-04 12:25:20 +0100
-->
     <para>
      Prevent <quote>unrecognized node type</quote> errors when a SQL/JSON
      function such as <function>JSON_VALUE</function> has
      a <literal>DEFAULT</literal> clause containing
      a <literal>COLLATE</literal> expression (Jian He)
      <ulink url="&commit_baseurl;dc9125111">&sect;</ulink>
      <ulink url="&commit_baseurl;1baae827e">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [18d261409] 2025-10-21 12:35:36 +0900
Branch: REL_18_STABLE [40c242830] 2025-10-21 12:38:16 +0900
Branch: REL_18_STABLE [ee49f2cf4] 2025-10-21 14:12:13 +0900
-->
     <para>
      Avoid incorrect optimization of
      variable-free <literal>HAVING</literal> clauses with grouping sets
      (Richard Guo)
      <ulink url="&commit_baseurl;40c242830">&sect;</ulink>
      <ulink url="&commit_baseurl;ee49f2cf4">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [257ee7834] 2025-10-30 11:58:45 +0900
Branch: REL_18_STABLE [ef6168baf] 2025-10-30 12:03:15 +0900
-->
     <para>
      Do not use parallelism in hash right semi joins (Richard Guo)
      <ulink url="&commit_baseurl;ef6168baf">&sect;</ulink>
     </para>

     <para>
      The case does not work reliably due to a race condition in updating
      the join's shared hash table.
     </para>
    </listitem>

    <listitem>
<!--
Author: Richard Guo <rguo@postgresql.org>
Branch: master [c1777f2d6] 2025-11-05 18:09:21 +0900
Branch: REL_18_STABLE [500f64636] 2025-11-05 18:15:02 +0900
-->
     <para>
      Avoid possible division-by-zero when creating ordered-append plans
      (Richard Guo)
      <ulink url="&commit_baseurl;500f64636">&sect;</ulink>
     </para>

     <para>
      This mistake could result in incorrect selection of the cheapest
      path, or in an assertion failure in debug builds.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [35e53b684] 2025-10-28 10:07:29 +0100
Branch: REL_18_STABLE [74197bdc8] 2025-10-28 10:11:35 +0100
-->
     <para>
      Fix planner failure with index types that can do ordered access but
      not index-only scans (Maxime Schoemans)
      <ulink url="&commit_baseurl;74197bdc8">&sect;</ulink>
     </para>

     <para>
      This oversight resulted in errors like <quote>no data returned for
      index-only scan</quote>.  The case does not arise with any in-core
      index type, but some extensions encountered the problem.
     </para>
    </listitem>

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

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [c98dffcb7] 2025-11-04 18:51:17 +0100
Branch: REL_18_STABLE [a26b753a0] 2025-11-04 18:47:14 +0100
-->
     <para>
      Avoid possible out-of-memory or <quote>invalid memory alloc request
      size</quote> failures during parallel GIN index build (Tomas Vondra)
      <ulink url="&commit_baseurl;a26b753a0">&sect;</ulink>
     </para>
    </listitem>

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

     <para>
      Previously, autosummarization would fail for such indexes, and then
      leave placeholder index tuples behind, causing the index to bloat
      over time.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [9fd29d7ff] 2025-10-21 20:46:14 +1300
Branch: REL_18_STABLE [715983a81] 2025-10-21 20:46:49 +1300
Branch: REL_17_STABLE [c4f5a59ab] 2025-10-21 20:47:10 +1300
Branch: REL_16_STABLE [ef915bf93] 2025-10-21 20:47:35 +1300
Branch: REL_15_STABLE [810aaf7f2] 2025-10-21 20:48:06 +1300
Branch: REL_14_STABLE [eea24eb0a] 2025-10-21 20:48:34 +1300
Branch: REL_13_STABLE [c28f8ca29] 2025-10-21 20:49:00 +1300
-->
     <para>
      Fix integer-overflow hazard in BRIN index scans when the table
      contains close to 2<superscript>32</superscript> pages (Sunil S)
      <ulink url="&commit_baseurl;715983a81">&sect;</ulink>
     </para>

     <para>
      This oversight could result in an infinite loop or scanning of
      unneeded table pages.
     </para>
    </listitem>

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [6911f8037] 2025-10-23 13:11:02 +1300
Branch: REL_18_STABLE [ceb51d09b] 2025-10-23 13:12:03 +1300
Branch: REL_17_STABLE [10945148e] 2025-10-23 13:12:49 +1300
Branch: REL_16_STABLE [3398b0d02] 2025-10-23 13:13:19 +1300
Branch: REL_15_STABLE [b8ecfbe5a] 2025-10-23 13:13:44 +1300
Branch: REL_14_STABLE [e4316ec4d] 2025-10-23 13:14:08 +1300
Branch: REL_13_STABLE [4afab175b] 2025-10-23 13:14:33 +1300
-->
     <para>
      Fix incorrect zero-extension of stored values in JIT-generated tuple
      deforming code (David Rowley)
      <ulink url="&commit_baseurl;ceb51d09b">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [5c0a20003] 2025-10-18 16:07:04 +1300
Branch: REL_18_STABLE [0b6a02f03] 2025-10-18 16:07:41 +1300
-->
     <para>
      Fix rare crash when processing hashed <literal>GROUPING
      SETS</literal> queries (David Rowley)
      <ulink url="&commit_baseurl;0b6a02f03">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Branch: master [b85c4700f] 2025-10-17 22:21:50 +0200
Branch: REL_18_STABLE [aa151022e] 2025-10-17 22:27:49 +0200
-->
     <para>
      Repair faulty hash-table-size-choosing logic in hash joins
      (Tomas Vondra)
      <ulink url="&commit_baseurl;aa151022e">&sect;</ulink>
     </para>

     <para>
      Hash joins sometimes used more memory than intended, or failed to
      divide it in an efficient way.
     </para>
    </listitem>

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [688dc6299] 2025-10-15 12:47:33 -0500
Branch: REL_18_STABLE [c8af5019b] 2025-10-15 12:47:33 -0500
Branch: REL_18_STABLE [15d7dded0] 2025-10-15 13:14:00 -0500
-->
     <para>
      Improve relation lookup logic in statistics manipulation functions
      (Nathan Bossart)
      <ulink url="&commit_baseurl;c8af5019b">&sect;</ulink>
      <ulink url="&commit_baseurl;15d7dded0">&sect;</ulink>
     </para>

     <para>
      Fix <function>pg_restore_relation_stats()</function>,
      <function>pg_clear_relation_stats()</function>,
      <function>pg_restore_attribute_stats()</function>, and
      <function>pg_clear_attribute_stats()</function> to check
      privileges before acquiring lock on the target relation
      rather than after.
     </para>
    </listitem>

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

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

    <listitem>
<!--
Author: Amit Langote <amitlan@postgresql.org>
Branch: master [905e932f0] 2025-10-16 14:01:44 +0900
Branch: REL_18_STABLE [1296dcf18] 2025-10-16 14:01:50 +0900
-->
     <para>
      Fix crash during EvalPlanQual rechecks on partitioned tables (David
      Rowley, Amit Langote)
      <ulink url="&commit_baseurl;1296dcf18">&sect;</ulink>
     </para>
    </listitem>

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

     <para>
      In such cases the foreign or custom access method should be invoked
      normally, but that did not happen, typically leading to a crash.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [3231fd045] 2025-10-11 20:30:12 +0200
Branch: REL_18_STABLE [08c037dff] 2025-10-11 20:30:12 +0200
Branch: REL_17_STABLE [ea06f97ee] 2025-10-11 20:30:12 +0200
Branch: REL_16_STABLE [b835759ec] 2025-10-11 20:30:12 +0200
Branch: REL_15_STABLE [bdae98495] 2025-10-11 20:30:12 +0200
Branch: REL_14_STABLE [b753be38a] 2025-10-11 20:30:12 +0200
-->
     <para>
      Avoid duplicating hash partition constraints during <literal>DETACH
      CONCURRENTLY</literal> (Haiyang Li)
      <ulink url="&commit_baseurl;08c037dff">&sect;</ulink>
     </para>

     <para>
      <command>ALTER TABLE DETACH PARTITION CONCURRENTLY</command> was
      written to add a copy of the partitioning constraint to the
      now-detached partition.  This was misguided, partially because
      non-concurrent <literal>DETACH</literal> doesn't do that, but mostly
      because in the case of hash partitioning the constraint expression
      contains references to the parent table's OID.  That causes problems
      during dump/restore, or if the parent table is dropped
      after <literal>DETACH</literal>.  In v19 and later, we'll no longer
      create any such copied constraints at all.  In released branches, to
      minimize the risk of unforeseen consequences, only skip adding a
      copied constraint if it is for hash partitioning.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [040cc5f3c] 2025-11-04 14:46:58 +0100
Branch: REL_18_STABLE [ba99c9491] 2025-11-04 14:47:15 +0100
Branch: REL_17_STABLE [0b44f2443] 2025-11-04 15:18:09 +0100
Branch: REL_16_STABLE [7180d56c5] 2025-11-04 15:22:17 +0100
Branch: REL_15_STABLE [643a5e96c] 2025-11-04 15:28:46 +0100
Branch: REL_14_STABLE [04345d7a4] 2025-11-04 15:37:08 +0100
Branch: REL_13_STABLE [7f239c72a] 2025-11-04 15:37:19 +0100
-->
     <para>
      Disallow generated columns in partition keys
      (Jian He, Ashutosh Bapat)
      <ulink url="&commit_baseurl;ba99c9491">&sect;</ulink>
     </para>

     <para>
      This was already not allowed, but the check missed some cases, such
      as where the column reference is implicit in a whole-row reference.
     </para>
    </listitem>

    <listitem>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master [aa606b931] 2025-11-06 13:54:42 +0100
Branch: REL_18_STABLE [0f9e0068b] 2025-11-06 13:55:08 +0100
Branch: REL_17_STABLE [07f787e57] 2025-11-06 14:01:42 +0100
Branch: REL_16_STABLE [26958f4d9] 2025-11-06 14:01:57 +0100
Branch: REL_15_STABLE [8278737bf] 2025-11-06 14:02:03 +0100
Branch: REL_14_STABLE [ccfe28eb4] 2025-11-06 14:02:09 +0100
Branch: REL_13_STABLE [3717849e6] 2025-11-06 14:02:13 +0100
-->
     <para>
      Disallow generated columns in <literal>COPY ... FROM
      ... WHERE</literal> clauses (Peter Eisentraut, Jian He)
      <ulink url="&commit_baseurl;0f9e0068b">&sect;</ulink>
     </para>

     <para>
      Previously, incorrect behavior or an obscure error message resulted
      from attempting to reference such a column, since generated columns
      have not yet been computed at the point
      where <literal>WHERE</literal> filtering is done.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [cf8be0225] 2025-11-03 15:58:19 +0100
Branch: REL_18_STABLE [d9ffc2729] 2025-11-03 15:58:19 +0100
-->
     <para>
      Prevent setting a column as identity if it has a not-null constraint
      but the constraint is marked as invalid (Jian He)
      <ulink url="&commit_baseurl;d9ffc2729">&sect;</ulink>
     </para>

     <para>
      Identity columns must be not-null, but the check for that missed
      this edge case.
     </para>
    </listitem>

    <listitem>
<!--
Author: John Naylor <john.naylor@postgresql.org>
Branch: master [54ab74865] 2025-10-03 16:05:02 +0700
Branch: REL_18_STABLE [76613b539] 2025-10-03 16:07:42 +0700
Branch: REL_17_STABLE [3549ffb6a] 2025-10-03 16:07:34 +0700
-->
     <para>
      Avoid potential use-after-free in parallel vacuum (Kevin Oommen
      Anish)
      <ulink url="&commit_baseurl;76613b539">&sect;</ulink>
     </para>

     <para>
      This bug seems to have no consequences in standard builds, but it's
      theoretically a hazard.
     </para>
    </listitem>

    <listitem>
<!--
Author: Noah Misch <noah@leadboat.com>
Branch: master [a95393ecd] 2025-09-29 11:15:44 -0700
Branch: REL_18_STABLE [d024160ff] 2025-09-29 11:15:47 -0700
Branch: REL_17_STABLE [6778fbca6] 2025-09-29 11:15:48 -0700
Branch: REL_16_STABLE [ab16418ee] 2025-09-29 11:15:48 -0700
Branch: REL_15_STABLE [d202ec1fb] 2025-09-29 11:15:48 -0700
Branch: REL_14_STABLE [5816baa9b] 2025-09-29 11:15:49 -0700
Branch: REL_13_STABLE [afb2cce74] 2025-09-29 11:15:49 -0700
-->
     <para>
      Fix visibility checking for statistics objects
      in <literal>pg_temp</literal> (Noah Misch)
      <ulink url="&commit_baseurl;d024160ff">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [ff47f9c16] 2025-10-11 16:39:22 +0200
Branch: REL_18_STABLE [33e7b4a7c] 2025-10-11 16:39:22 +0200
Branch: REL_17_STABLE [f9993ac64] 2025-10-11 16:39:22 +0200
Branch: REL_16_STABLE [c72b5c536] 2025-10-11 16:39:22 +0200
Branch: REL_15_STABLE [23b316c36] 2025-10-11 16:39:22 +0200
-->
     <para>
      Fix minor memory leak during WAL replay of database creation
      (Nathan Bossart)
      <ulink url="&commit_baseurl;33e7b4a7c">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [883a95646] 2025-10-22 11:27:15 +0900
Branch: REL_18_STABLE [9670032cc] 2025-10-22 11:28:48 +0900
Branch: REL_17_STABLE [62d5ee75b] 2025-10-22 11:28:57 +0900
Branch: REL_16_STABLE [2e55cf4ef] 2025-10-22 11:29:02 +0900
Branch: REL_15_STABLE [59b215f72] 2025-10-22 11:29:07 +0900
Branch: REL_14_STABLE [a7ab6ce6a] 2025-10-22 11:29:13 +0900
Branch: REL_13_STABLE [7d7ebdb80] 2025-10-22 11:29:18 +0900
-->
     <para>
      Fix incorrect reporting of replication lag
      in <structname>pg_stat_replication</structname> view (Fujii Masao)
      <ulink url="&commit_baseurl;9670032cc">&sect;</ulink>
     </para>

     <para>
      If any standby server's replay LSN stopped advancing,
      the <structfield>write_lag</structfield>
      and <structfield>flush_lag</structfield> columns would eventually
      stop updating.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [f33e60a53] 2025-10-22 20:09:43 +0900
Branch: REL_18_STABLE [6ff7ba9fe] 2025-10-22 20:10:58 +0900
Branch: REL_17_STABLE [1db2870bb] 2025-10-22 20:11:47 +0900
Branch: REL_16_STABLE [4fd916eab] 2025-10-22 20:12:36 +0900
Branch: REL_15_STABLE [caf529aba] 2025-10-22 20:13:15 +0900
Branch: REL_14_STABLE [f106f53df] 2025-10-22 20:14:02 +0900
Branch: REL_13_STABLE [b00a16bae] 2025-10-22 20:14:07 +0900
-->
     <para>
      Avoid duplicative log messages about
      invalid <varname>primary_slot_name</varname> settings (Fujii Masao)
      <ulink url="&commit_baseurl;6ff7ba9fe">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [e0dc4bbfb] 2025-10-27 06:48:32 +0000
Branch: REL_18_STABLE [b45a8d7d8] 2025-10-27 06:37:35 +0000
Branch: REL_17_STABLE [0024f5a10] 2025-10-27 06:34:29 +0000
-->
     <para>
      Avoid failures when <varname>synchronized_standby_slots</varname>
      references nonexistent replication slots (Shlok Kyal)
      <ulink url="&commit_baseurl;b45a8d7d8">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [912af1c7e] 2025-10-10 09:23:59 +0900
Branch: REL_18_STABLE [9a6ea00ac] 2025-10-10 09:24:48 +0900
Branch: REL_17_STABLE [42348839d] 2025-10-10 09:24:50 +0900
Branch: REL_16_STABLE [bfdd1a12d] 2025-10-10 09:24:53 +0900
Branch: REL_15_STABLE [0adf424b4] 2025-10-10 09:24:54 +0900
Branch: REL_14_STABLE [f57f2760e] 2025-10-10 09:24:57 +0900
Branch: REL_13_STABLE [c878d9808] 2025-10-10 09:24:59 +0900
-->
     <para>
      Remove the unfinished slot state file after failing to write a
      replication slot's state to disk (Michael Paquier)
      <ulink url="&commit_baseurl;9a6ea00ac">&sect;</ulink>
     </para>

     <para>
      Previously, a failure such as out-of-disk-space resulted in leaving
      a temporary <filename>state.tmp</filename> file behind.  That's
      problematic because it would block all subsequent attempts to
      write the state, requiring manual intervention to clean up.
     </para>
    </listitem>

    <listitem>
<!--
Author: Amit Kapila <akapila@postgresql.org>
Branch: master [e41d954da] 2025-09-24 04:11:53 +0000
Branch: REL_18_STABLE [37fc5de43] 2025-09-24 04:00:15 +0000
Branch: REL_17_STABLE [2f6e1a490] 2025-09-24 03:49:02 +0000
Branch: REL_16_STABLE [a54c7a113] 2025-09-24 03:38:27 +0000
-->
     <para>
      Fix mishandling of lock timeout signals in parallel apply workers
      for logical replication (Hayato Kuroda)
      <ulink url="&commit_baseurl;37fc5de43">&sect;</ulink>
     </para>

     <para>
      The same signal number was being used for both worker shutdown and
      lock timeout, leading to confusion.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [17b2d5ec7] 2025-11-04 10:47:38 +0900
Branch: REL_18_STABLE [a14201073] 2025-11-04 10:52:33 +0900
Branch: REL_17_STABLE [e7340b484] 2025-11-04 10:52:35 +0900
Branch: REL_16_STABLE [9b6109607] 2025-11-04 10:52:38 +0900
Branch: REL_15_STABLE [da5ea6c70] 2025-11-04 10:52:41 +0900
Branch: REL_14_STABLE [a1b8b3b2e] 2025-11-04 10:52:42 +0900
Branch: REL_13_STABLE [25b484080] 2025-11-04 10:52:44 +0900
-->
     <para>
      Avoid unwanted WAL receiver shutdown when switching from streaming
      to archive WAL source (Xuneng Zhou)
      <ulink url="&commit_baseurl;a14201073">&sect;</ulink>
     </para>

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

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

     <para>
      An error during logical decoding could result in crashes in
      subsequent logical decoding attempts in the same session.
      The case is only reachable when <application>pgoutput</application>
      is invoked via SQL functions.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [d43209468] 2025-10-30 13:13:28 +0900
Branch: REL_18_STABLE [bf3dba508] 2025-10-30 13:13:31 +0900
Branch: REL_17_STABLE [f3fb6bc9f] 2025-10-30 13:13:34 +0900
Branch: REL_16_STABLE [e3714dc05] 2025-10-30 13:13:37 +0900
-->
     <para>
      Avoid unnecessary invalidation of logical replication slots
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;bf3dba508">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Jeff Davis <jdavis@postgresql.org>
Branch: master [d115de9d8] 2025-11-04 16:48:16 -0800
Branch: REL_18_STABLE [3ebea75f9] 2025-11-04 16:49:00 -0800
-->
     <para>
      Re-establish special case for <literal>C</literal> collation in
      locale setup (Jeff Davis)
      <ulink url="&commit_baseurl;3ebea75f9">&sect;</ulink>
     </para>

     <para>
      This fixes a regression in access to shared catalogs early in
      backend startup, before a database has been selected.  It is not
      known to be a problem for any
      core <productname>PostgreSQL</productname> code, but some extensions
      were broken.
     </para>
    </listitem>

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

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

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

    <listitem>
<!--
Author: David Rowley <drowley@postgresql.org>
Branch: master [50eb4e118] 2025-10-30 14:48:10 +1300
Branch: REL_18_STABLE [af3a79e08] 2025-10-30 14:49:07 +1300
Branch: REL_17_STABLE [bd6f986c9] 2025-10-30 14:49:42 +1300
Branch: REL_16_STABLE [cdc04a6c3] 2025-10-30 14:50:05 +1300
Branch: REL_15_STABLE [f3420e006] 2025-10-30 14:50:26 +1300
Branch: REL_14_STABLE [86bd9497f] 2025-10-30 14:50:46 +1300
Branch: REL_13_STABLE [7b955c227] 2025-10-30 14:51:08 +1300
-->
     <para>
      Fix false memory-context-checking warnings in debug builds
      on 64-bit Windows (David Rowley)
      <ulink url="&commit_baseurl;af3a79e08">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [7504d2be9] 2025-09-27 14:29:41 -0400
Branch: REL_18_STABLE [78a284b0b] 2025-09-27 14:29:41 -0400
Branch: REL_17_STABLE [3fc9aa5b0] 2025-09-27 14:29:41 -0400
Branch: REL_16_STABLE [b7f6798c0] 2025-09-27 14:29:41 -0400
Branch: REL_15_STABLE [9ca79896a] 2025-09-27 14:29:41 -0400
Branch: REL_14_STABLE [0be39b4b1] 2025-09-27 14:29:41 -0400
-->
     <para>
      Correctly handle <literal>GROUP BY DISTINCT</literal> in PL/pgSQL
      assignment statements (Tom Lane)
      <ulink url="&commit_baseurl;78a284b0b">&sect;</ulink>
     </para>

     <para>
      The parser failed to record the <literal>DISTINCT</literal> option
      in this context, so that the command would act as if it were
      plain <literal>GROUP BY</literal>.
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [798b19d27] 2025-10-23 11:47:46 -0400
Branch: REL_18_STABLE [447a794f6] 2025-10-23 11:47:46 -0400
Branch: REL_17_STABLE [fbc41a145] 2025-10-23 11:47:46 -0400
Branch: REL_16_STABLE [cbfd4d0f8] 2025-10-23 11:47:46 -0400
Branch: REL_15_STABLE [4cde73259] 2025-10-23 11:47:46 -0400
Branch: REL_14_STABLE [7fb8c9240] 2025-10-23 11:47:46 -0400
Branch: REL_13_STABLE [d90c92d1c] 2025-10-23 11:47:46 -0400
-->
     <para>
      Avoid leaking memory when handling a SQL error within PL/Python
      (Tom Lane)
      <ulink url="&commit_baseurl;447a794f6">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [ea78bd6d5] 2025-10-05 16:27:47 -0400
Branch: REL_18_STABLE [d83879a32] 2025-10-05 16:27:47 -0400
Branch: REL_17_STABLE [1c4671f7b] 2025-10-05 16:27:47 -0400
Branch: REL_16_STABLE [46c4478db] 2025-10-05 16:27:47 -0400
Branch: REL_15_STABLE [771b106d1] 2025-10-05 16:27:47 -0400
Branch: REL_14_STABLE [f46d77377] 2025-10-05 16:27:47 -0400
Branch: REL_13_STABLE [fc287cf3c] 2025-10-05 16:27:47 -0400
-->
     <para>
      Fix <application>libpq</application>'s handling of socket-related
      errors on Windows within its GSSAPI logic (Ning Wu, Tom Lane)
      <ulink url="&commit_baseurl;d83879a32">&sect;</ulink>
     </para>

     <para>
      The code for encrypting/decrypting transmitted data using GSSAPI did
      not correctly recognize error conditions on the connection socket,
      since Windows reports those differently than other platforms.  This
      led to failure to make such connections on Windows.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [615ff828e] 2025-10-18 18:18:19 +0200
Branch: REL_18_STABLE [0fe07fa11] 2025-10-18 18:18:19 +0200
Branch: REL_17_STABLE [c945b06d5] 2025-10-18 18:18:19 +0200
-->
     <para>
      Fix dumping of non-inherited not-null constraints on inherited table
      columns (Dilip Kumar)
      <ulink url="&commit_baseurl;0fe07fa11">&sect;</ulink>
     </para>

     <para>
      <application>pg_dump</application> failed to preserve such
      constraints when dumping from a pre-v18 server.
     </para>
    </listitem>

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [4921a5972] 2025-10-18 17:50:10 +0200
Branch: REL_18_STABLE [162e70ea0] 2025-10-18 17:50:10 +0200
Branch: REL_17_STABLE [7419c99a2] 2025-10-18 17:50:10 +0200
Branch: REL_16_STABLE [06c1ee6b7] 2025-10-18 17:50:10 +0200
Branch: REL_15_STABLE [4cc3b4445] 2025-10-18 17:50:10 +0200
Branch: REL_14_STABLE [6062c3db3] 2025-10-18 17:50:10 +0200
Branch: REL_13_STABLE [d20df9590] 2025-10-18 17:50:10 +0200
-->
     <para>
      Fix <application>pg_dump</application>'s sorting of
      foreign key constraints (Álvaro Herrera)
      <ulink url="&commit_baseurl;162e70ea0">&sect;</ulink>
     </para>

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

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

     <para>
      Error checking was missing or incorrect in several places, and there
      were also portability issues that would manifest on big-endian
      hardware.  These problems had been missed because this code is only
      used to read compressed TOC files within directory-format
      dumps.   <application>pg_dump</application> never produces such a
      dump; the case can be reached only by manually compressing the TOC
      file after the fact, which is a supported thing to do but very
      uncommon.
     </para>
    </listitem>

    <listitem>
<!--
Author: Michael Paquier <michael@paquier.xyz>
Branch: master [902c08887] 2025-10-03 14:03:55 +0900
Branch: REL_18_STABLE [c00637b5f] 2025-10-03 14:04:00 +0900
Branch: REL_17_STABLE [de6de069d] 2025-10-03 14:04:01 +0900
Branch: REL_16_STABLE [640590bb4] 2025-10-03 14:04:03 +0900
Branch: REL_15_STABLE [b5cefc197] 2025-10-03 14:04:05 +0900
Branch: REL_14_STABLE [9b3beb7c6] 2025-10-03 14:04:06 +0900
Branch: REL_13_STABLE [f1a2f3a0c] 2025-10-03 14:04:08 +0900
-->
     <para>
      Fix <application>pgbench</application> to error out cleanly if
      a <literal>COPY</literal> operation is started (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;c00637b5f">&sect;</ulink>
     </para>

     <para>
      <application>pgbench</application> doesn't intend to support this
      case, but previously it went into an infinite loop.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [19d4f9ffc] 2025-09-30 23:52:28 +0900
Branch: REL_18_STABLE [29aabbc43] 2025-09-30 23:53:32 +0900
Branch: REL_17_STABLE [a912118c6] 2025-09-30 23:53:46 +0900
Branch: REL_16_STABLE [36c4d30c8] 2025-09-30 23:53:53 +0900
Branch: REL_15_STABLE [bdccb6302] 2025-09-30 23:54:01 +0900
Branch: REL_14_STABLE [cb21e1f92] 2025-09-30 23:55:02 +0900
Branch: REL_13_STABLE [7d7e81d1e] 2025-09-30 23:55:33 +0900
-->
     <para>
      Fix <application>pgbench</application>'s reporting of multiple
      errors (Yugo Nagata)
      <ulink url="&commit_baseurl;29aabbc43">&sect;</ulink>
     </para>

     <para>
      In cases where two successive <function>PQgetResult</function> calls
      both fail, <application>pgbench</application> might report the wrong
      error message.
     </para>
    </listitem>

    <listitem>
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [8bb174295] 2025-09-26 21:23:43 +0900
Branch: REL_18_STABLE [c736808e0] 2025-09-26 21:24:59 +0900
Branch: REL_17_STABLE [f39d9164b] 2025-09-26 21:25:05 +0900
Branch: REL_16_STABLE [8b2e290bd] 2025-09-26 21:25:11 +0900
Branch: REL_15_STABLE [704f51771] 2025-09-26 21:25:17 +0900
-->
     <para>
      In <application>pgbench</application>, fix faulty assertion about
      errors in pipeline mode (Yugo Nagata)
      <ulink url="&commit_baseurl;c736808e0">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [9224c3025] 2025-10-22 13:38:40 -0400
Branch: REL_18_STABLE [e2072b47b] 2025-10-22 13:38:37 -0400
Branch: REL_17_STABLE [4eb6992af] 2025-10-22 13:38:37 -0400
-->
     <para>
      Fix per-file memory leakage
      in <application>pg_combinebackup</application> (Tom Lane)
      <ulink url="&commit_baseurl;e2072b47b">&sect;</ulink>
     </para>
    </listitem>

    <listitem>
<!--
Author: Masahiko Sawada <msawada@postgresql.org>
Branch: master [8ae0f6a0c] 2025-11-04 15:47:25 -0800
Branch: REL_18_STABLE [71aa2e114] 2025-11-04 15:47:22 -0800
Branch: master [eab9e4e27] 2025-08-19 12:11:42 -0700
Branch: REL_18_STABLE Release: REL_18_0 [0beb7e933] 2025-08-19 12:11:39 -0700
Branch: REL_17_STABLE [b6090ed96] 2025-08-19 12:11:37 -0700
Branch: REL_16_STABLE [815fcfb20] 2025-08-19 12:11:34 -0700
Branch: REL_15_STABLE [eb9ee4d18] 2025-08-19 12:11:32 -0700
Branch: REL_14_STABLE [79643105a] 2025-08-19 12:11:29 -0700
Branch: REL_13_STABLE [7d8d36289] 2025-08-19 12:11:25 -0700
-->
     <para>
      Ensure that <filename>contrib/pg_buffercache</filename> functions
      can be canceled (Satyanarayana Narlapuram, Yuhang Qiu)
      <ulink url="&commit_baseurl;71aa2e114">&sect;</ulink>
      <ulink url="&commit_baseurl;0beb7e933">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
Branch: master [208927e65] 2025-10-17 11:36:50 -0500
Branch: REL_18_STABLE [3ccf8e9ac] 2025-10-17 11:36:50 -0500
Branch: REL_17_STABLE [a0551bc57] 2025-10-17 11:36:50 -0500
Branch: REL_16_STABLE [fae0ce5e3] 2025-10-17 11:36:50 -0500
Branch: REL_15_STABLE [6c03ae8d6] 2025-10-17 11:36:50 -0500
Branch: REL_14_STABLE [f146eb45c] 2025-10-17 11:36:50 -0500
Branch: REL_13_STABLE [19a64f567] 2025-10-17 11:36:50 -0500
Author: Tom Lane <tgl@sss.pgh.pa.us>
Branch: master [da44d71e7] 2025-10-18 18:36:21 -0400
Branch: REL_18_STABLE [c29d32d27] 2025-10-18 18:36:21 -0400
Branch: REL_17_STABLE [d4e8c37cc] 2025-10-18 18:36:21 -0400
Branch: REL_16_STABLE [c26a8eaf6] 2025-10-18 18:36:21 -0400
-->
     <para>
      Fix <filename>contrib/pg_prewarm</filename>'s privilege checks for
      indexes (Ayush Vatsa, Nathan Bossart)
      <ulink url="&commit_baseurl;3ccf8e9ac">&sect;</ulink>
      <ulink url="&commit_baseurl;c29d32d27">&sect;</ulink>
     </para>

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

    <listitem>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master [16edc1b94] 2025-10-29 12:35:02 +0100
Branch: REL_18_STABLE [b1635c166] 2025-10-29 12:35:02 +0100
-->
     <para>
      In <filename>contrib/pg_stat_statements</filename>, avoid
      crash when two or more constants are marked as having the same
      location in the SQL statement text (Sami Imseih, Dmitry Dolgov)
      <ulink url="&commit_baseurl;b1635c166">&sect;</ulink>
     </para>
    </listitem>

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

     <para>
      Count all-zero pages as free space, and ignore pages that are
      invalid according to a check of the page's special-space size.
      The code for btree indexes already counted all-zero pages as free,
      but the hash and gist code would error out, which has been found to
      be much less user-friendly.  Similarly, make all three cases agree
      on ignoring corrupted pages rather than throwing errors.
     </para>
    </listitem>

    <listitem>
<!--
Author: Thomas Munro <tmunro@postgresql.org>
Branch: master [c5d34f4a5] 2025-11-08 12:26:43 +1300
Branch: REL_18_STABLE [f8ccab0e9] 2025-11-08 12:28:15 +1300
Branch: REL_17_STABLE [03d9140cb] 2025-11-08 12:28:52 +1300
Branch: REL_16_STABLE [2f76ffe5e] 2025-11-08 12:29:15 +1300
Branch: REL_15_STABLE [1c7cba4c5] 2025-11-08 12:30:08 +1300
Branch: REL_14_STABLE [d8ba910b0] 2025-11-08 12:32:42 +1300
Branch: REL_13_STABLE [77b5b2c6f] 2025-11-08 12:33:01 +1300
-->
     <para>
      Harden our read and write barrier macros to satisfy Clang
      (Thomas Munro)
      <ulink url="&commit_baseurl;f8ccab0e9">&sect;</ulink>
     </para>

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

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

   </itemizedlist>

  </sect2>
 </sect1>

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

  <formalpara>
   <title>Release date:</title>
   <para>2025-09-25</para>
  </formalpara>

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

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

   <itemizedlist>

    <listitem>
     <para>
      An asynchronous I/O (AIO) subsystem that can improve performance of
      sequential scans, bitmap heap scans, vacuums, and other operations.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="pgupgrade"><application>pg_upgrade</application></link>
      now retains optimizer statistics.
     </para>
    </listitem>

    <listitem>
     <para>
      Support for "skip scan" lookups that allow using
      <link linkend="indexes-multicolumn">multicolumn B-tree indexes</link> in
      more cases.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="func_uuid_gen_table"><function>uuidv7()</function></link>
      function for generating timestamp-ordered
      <link linkend="datatype-uuid">UUIDs</link>.
     </para>
    </listitem>

    <listitem>
     <para>
      Virtual
      <link linkend="sql-createtable-parms-generated-stored">generated columns</link>
      that compute their values during read operations.  This is now the
      default for generated columns.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="auth-oauth">OAuth authentication</link> support.
     </para>
    </listitem>

    <listitem>
     <para>
      <literal>OLD</literal> and <literal>NEW</literal> support for
      <link linkend="dml-returning"><literal>RETURNING</literal></link> clauses
      in <xref linkend="sql-insert"/>, <xref linkend="sql-update"/>,
      <xref linkend="sql-delete"/>, and <xref linkend="sql-merge"/> commands.
     </para>
    </listitem>

    <listitem>
     <para>
      Temporal constraints, or constraints over ranges, for
      <link linkend="sql-createtable-parms-primary-key">PRIMARY KEY</link>,
      <link linkend="sql-createtable-parms-unique">UNIQUE</link>, and
      <link linkend="sql-createtable-parms-references">FOREIGN KEY</link>
      constraints.
     </para>
    </listitem>
   </itemizedlist>

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

  </sect2>

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

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

   <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-16 [04bec894a04] initdb: Change default to using data checksums.
-->

    <listitem>
    <para>
    Change <xref linkend="app-initdb"/> default to enable data checksums
    (Greg Sabino Mullane)
    <ulink url="&commit_baseurl;04bec894a04">&sect;</ulink>
    </para>

    <para>
    Checksums can be disabled with the
    new <application>initdb</application> option
    <option>--no-data-checksums</option>.  <xref linkend="pgupgrade"/>
    requires matching cluster checksum settings, so this new option can
    be useful to upgrade non-checksum old clusters.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-16 [d7674c9fa] Seek zone abbreviations in the IANA data before timezone
-->

    <listitem>
    <para>
    Change time zone abbreviation handling (Tom Lane)
    <ulink url="&commit_baseurl;d7674c9fa">&sect;</ulink>
    </para>

    <para>
    The system will now favor the current session's time
    zone abbreviations before checking the server variable
    <xref linkend="guc-timezone-abbreviations"/>. Previously
    <varname>timezone_abbreviations</varname> was checked first.
    </para>
    </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-12-02 [db6a4a985] Deprecate MD5 passwords.
-->

    <listitem>
    <para>
    Deprecate <link linkend="auth-password">MD5 password</link>
    authentication (Nathan Bossart)
    <ulink url="&commit_baseurl;db6a4a985">&sect;</ulink>
    </para>

    <para>
    Support for MD5 passwords will be removed in a future major
    version release.  <xref linkend="sql-createrole"/> and <xref
    linkend="sql-alterrole"/> now emit deprecation warnings when
    setting MD5 passwords.  These warnings can be disabled by setting
    the <xref linkend="guc-md5-password-warnings"/> parameter to
    <literal>off</literal>.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-09-24 [62ddf7ee9] Add ONLY support for VACUUM and ANALYZE
-->

    <listitem>
    <para>
    Change <xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/>
    to process the inheritance children of a parent (Michael Harris)
    <ulink url="&commit_baseurl;62ddf7ee9">&sect;</ulink>
    </para>

    <para>
    The previous behavior can be performed by using the new
    <literal>ONLY</literal> option.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-30 [770233748] Do not treat \. as an EOF marker in CSV mode for COPY IN
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-10-01 [da8a4c166] Reject a copy EOF marker that has data ahead of it on th
-->

    <listitem>
    <para>
    Prevent <link linkend="sql-copy"><command>COPY FROM</command></link>
    from treating <literal>\.</literal> as an end-of-file marker when
    reading <acronym>CSV</acronym> files (Daniel Vérité, Tom Lane)
    <ulink url="&commit_baseurl;770233748">&sect;</ulink>
    <ulink url="&commit_baseurl;da8a4c166">&sect;</ulink>
    </para>

    <para>
    <xref linkend="app-psql"/> will still treat
    <literal>\.</literal> as an end-of-file marker when reading
    <acronym>CSV</acronym> files from <literal>STDIN</literal>.
    Older <application>psql</application> clients connecting to
    <productname>PostgreSQL</productname> 18 servers might experience <link
    linkend="app-psql-meta-commands-copy"><literal>\copy</literal></link>
    problems.  This release also enforces that <literal>\.</literal>
    must appear alone on a line.
    </para>
    </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-03 [e2bab2d79] Remove support for unlogged on partitioned tables
-->

    <listitem>
    <para>
    Disallow unlogged partitioned tables (Michael Paquier)
    <ulink url="&commit_baseurl;e2bab2d79">&sect;</ulink>
    </para>

    <para>
    Previously <link linkend="sql-altertable"><command>ALTER TABLE SET
    [UN]LOGGED</command></link> did nothing, and the creation of an
    unlogged partitioned table did not cause its children to be unlogged.
    </para>
    </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-23 [01463e1cc] Ensure that AFTER triggers run as the instigating user.
-->

    <listitem>
    <para>
    Execute <literal>AFTER</literal> <link
    linkend="triggers">triggers</link> as the role that was active when
    trigger events were queued (Laurenz Albe)
    <ulink url="&commit_baseurl;01463e1cc">&sect;</ulink>
    </para>

    <para>
    Previously such triggers were run as the role that was active at
    trigger execution time (e.g., at <xref linkend="sql-commit"/>).
    This is significant for cases where the role is changed between queue
    time and transaction commit.
    </para>
    </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-12 [fefa76f70] Remove old RULE privilege completely.
-->

    <listitem>
    <para>
    Remove non-functional support for rule privileges in <xref
    linkend="sql-grant"/>/<xref linkend="sql-revoke"/> (Fujii Masao)
    <ulink url="&commit_baseurl;fefa76f70">&sect;</ulink>
    </para>

    <para>
    These have been non-functional since
    <productname>PostgreSQL</productname> 8.2.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-12 [f0d112759] Remove "parent" column from pg_backend_memory_contexts
-->

    <listitem>
    <para>
    Remove column <link
    linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>.<structfield>parent</structfield>
    (Melih Mutlu)
    <ulink url="&commit_baseurl;f0d112759">&sect;</ulink>
    </para>

    <para>
    This is no longer needed since
    <structname>pg_backend_memory_contexts</structname>.<structfield>path</structfield>
    was added.
    </para>
    </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-25 [32d3ed816] Add path column to pg_backend_memory_contexts view
Author: David Rowley <drowley@postgresql.org>
2025-04-18 [d9e03864b] Make levels 1-based in
    pg_log_backend_memory_contexts()
Author: Fujii Masao <fujii@postgresql.org>
2025-04-21 [706cbed35] doc: Fix memory context level in pg_log_backend_memory_c
-->

    <listitem>
    <para>
    Change
    <structname>pg_backend_memory_contexts</structname>.<structfield>level</structfield>
    and <link
    linkend="functions-admin-signal-table"><function>pg_log_backend_memory_contexts()</function></link>
    to be one-based (Melih Mutlu, Atsushi Torikoshi, David Rowley,
    Fujii Masao)
    <ulink url="&commit_baseurl;32d3ed816">&sect;</ulink>
    <ulink url="&commit_baseurl;d9e03864b">&sect;</ulink>
    <ulink url="&commit_baseurl;706cbed35">&sect;</ulink>
    </para>

    <para>
    These were previously zero-based.
    </para>
    </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-12-17 [fb1a18810f0] Remove ts_locale.c's lowerstr()
-->

    <listitem>
    <para>
    Change <link linkend="textsearch">full text search</link> to use the
    default collation provider of the cluster to read configuration files
    and dictionaries, rather than always using libc (Peter Eisentraut)
    <ulink url="&commit_baseurl;fb1a18810f0">&sect;</ulink>
    </para>

    <para>
    Clusters that default to non-libc collation providers (e.g., ICU,
    builtin) that behave differently than libc for characters processed
    by LC_CTYPE could observe changes in behavior of some full-text
    search functions, as well as the <xref linkend="pgtrgm"/> extension.
    When upgrading such clusters using <xref linkend="pgupgrade"/>, it
    is recommended to reindex all indexes related to full-text search
    and <application>pg_trgm</application> after the upgrade.
    </para>
    </listitem>

   </itemizedlist>

  </sect2>

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

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

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

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

     <itemizedlist>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-02-17 [fc069a3a6] Implement Self-Join Elimination
-->

      <listitem>
      <para>
      Automatically remove some unnecessary table self-joins (Andrey
      Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina)
      <ulink url="&commit_baseurl;fc069a3a6">&sect;</ulink>
      </para>

      <para>
      This optimization can be disabled using server variable <xref
      linkend="guc-enable-self-join-elimination"/>.
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-04-04 [c0962a113] Convert 'x IN (VALUES ...)' to 'x = ANY ...' then approp
-->

      <listitem>
      <para>
      Convert some <link
      linkend="functions-comparisons-in-scalar"><literal>IN (VALUES
      ...)</literal></link> to <literal>x = ANY ...</literal> for better
      optimizer statistics (Alena Rybakina, Andrei Lepikhov)
      <ulink url="&commit_baseurl;c0962a113">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2024-11-24 [ae4569161] Teach bitmap path generation about transforming OR-claus
-->

      <listitem>
      <para>
      Allow transforming <link
      linkend="functions-logical"><literal>OR</literal></link>-clauses
      to arrays for faster index processing (Alexander Korotkov, Andrey
      Lepikhov)
      <ulink url="&commit_baseurl;ae4569161">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-10 [52c707483] Use a hash table to de-duplicate column names in ruleuti
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-12-19 [276279295] Convert SetOp to read its inputs as outerPlan and innerP
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-12-19 [8d96f57d5] Improve planner's handling of SetOp plans.
Author: David Rowley <drowley@postgresql.org>
2024-09-05 [908a96861] Optimize WindowAgg's use of tuplestores
-->

      <listitem>
      <para>
      Speed up the processing of <link
      linkend="sql-intersect"><literal>INTERSECT</literal></link>,
      <link linkend="sql-except"><literal>EXCEPT</literal></link>, <link
      linkend="tutorial-window">window aggregates</link>, and <link
      linkend="sql-createview">view column aliases</link> (Tom Lane,
      David Rowley)
      <ulink url="&commit_baseurl;52c707483">&sect;</ulink>
      <ulink url="&commit_baseurl;276279295">&sect;</ulink>
      <ulink url="&commit_baseurl;8d96f57d5">&sect;</ulink>
      <ulink url="&commit_baseurl;908a96861">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-11-26 [a8ccf4e93] Reordering DISTINCT keys to match input path's pathkeys
-->

      <listitem>
      <para>
      Allow the keys of <link linkend="sql-distinct"><command>SELECT
      DISTINCT</command></link> to be internally reordered to avoid sorting
      (Richard Guo)
      <ulink url="&commit_baseurl;a8ccf4e93">&sect;</ulink>
      </para>

      <para>
      This optimization can be disabled using <xref
      linkend="guc-enable-distinct-reordering"/>.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-12 [bd10ec529] Detect redundant GROUP BY columns using UNIQUE indexes
-->

      <listitem>
      <para>
      Ignore <link linkend="sql-groupby"><literal>GROUP BY</literal></link>
      columns that are functionally dependent on other columns (Zhang
      Mingli, Jian He, David Rowley)
      <ulink url="&commit_baseurl;bd10ec529">&sect;</ulink>
      </para>

      <para>
      If a <literal>GROUP BY</literal> clause includes all columns of
      a unique index, as well as other columns of the same table, those
      other columns are redundant and can be dropped from the grouping.
      This was already true for non-deferred primary keys.
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-10-09 [67a54b9e8] Allow pushdown of HAVING clauses with grouping sets
Author: Richard Guo <rguo@postgresql.org>
2024-09-10 [247dea89f] Introduce an RTE for the grouping step
Author: Richard Guo <rguo@postgresql.org>
2024-09-10 [f5050f795] Mark expressions nullable by grouping sets
Author: Richard Guo <rguo@postgresql.org>
2025-03-13 [cc5d98525] Fix incorrect handling of subquery pullup
-->

      <listitem>
      <para>
      Allow some <link
      linkend="sql-having"><literal>HAVING</literal></link> clauses
      on <link linkend="queries-grouping-sets"><literal>GROUPING
      SETS</literal></link> to be pushed to <link
      linkend="sql-where"><literal>WHERE</literal></link> clauses
      (Richard Guo)
      <ulink url="&commit_baseurl;67a54b9e8">&sect;</ulink>
      <ulink url="&commit_baseurl;247dea89f">&sect;</ulink>
      <ulink url="&commit_baseurl;f5050f795">&sect;</ulink>
      <ulink url="&commit_baseurl;cc5d98525">&sect;</ulink>
      </para>

      <para>
      This allows earlier row filtering.  This release also fixes some
      <literal>GROUPING SETS</literal> queries that used to return
      incorrect results.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-09 [036bdcec9] Teach planner how to estimate rows for timestamp generat
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-12-02 [97173536e] Add a planner support function for numeric generate_seri
-->

      <listitem>
      <para>
      Improve row estimates for <link
      linkend="functions-srf-series"><function>generate_series()</function></link>
      using <link linkend="datatype-numeric"><type>numeric</type></link>
      and <link linkend="datatype-datetime"><type>timestamp</type></link>
      values (David Rowley, Song Jinzhou)
      <ulink url="&commit_baseurl;036bdcec9">&sect;</ulink>
      <ulink url="&commit_baseurl;97173536e">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-07-05 [aa86129e1] Support "Right Semi Join" plan shapes
-->

      <listitem>
      <para>
      Allow the optimizer to use <literal>Right Semi Join</literal> plans
      (Richard Guo)
      <ulink url="&commit_baseurl;aa86129e1">&sect;</ulink>
      </para>

      <para>
      Semi-joins are used when needing to find if there is at least
      one match.
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-10-09 [828e94c9d] Consider explicit incremental sort for mergejoins
-->

      <listitem>
      <para>
      Allow merge joins to use <link
      linkend="guc-enable-incremental-sort">incremental sorts</link>
      (Richard Guo)
      <ulink url="&commit_baseurl;828e94c9d">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Langote <amitlan@postgresql.org>
2025-04-04 [88f55bc97] Make derived clause lookup in EquivalenceClass more effi
Author: David Rowley <drowley@postgresql.org>
2025-04-08 [d69d45a5a] Speedup child EquivalenceMember lookup in planner
-->

      <listitem>
      <para>
      Improve the efficiency of planning queries accessing many partitions
      (Ashutosh Bapat, Yuya Watari, David Rowley)
      <ulink url="&commit_baseurl;88f55bc97">&sect;</ulink>
      <ulink url="&commit_baseurl;d69d45a5a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2024-07-30 [9b282a935] Fix partitionwise join with partially-redundant join cla
Author: Richard Guo <rguo@postgresql.org>
2024-07-29 [513f4472a] Reduce memory used by partitionwise joins
-->

      <listitem>
      <para>
      Allow <link linkend="guc-enable-partitionwise-join">partitionwise
      joins</link> in more cases, and reduce its memory usage (Richard Guo,
      Tom Lane, Ashutosh Bapat)
      <ulink url="&commit_baseurl;9b282a935">&sect;</ulink>
      <ulink url="&commit_baseurl;513f4472a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-03-10 [fae535da0] Teach Append to consider tuple_fraction when accumulatin
-->

      <listitem>
      <para>
      Improve cost estimates of partition queries (Nikita Malakhov,
      Andrei Lepikhov)
      <ulink url="&commit_baseurl;fae535da0">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-02 [0dca5d68d] Change SQL-language functions to use the plan cache.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-17 [09b07c295] Minor performance improvement for SQL-language functions
-->

      <listitem>
      <para>
      Improve <link linkend="xfunc-sql"><acronym>SQL</acronym>-language
      function</link> plan caching (Alexander Pyhalov, Tom Lane)
      <ulink url="&commit_baseurl;0dca5d68d">&sect;</ulink>
      <ulink url="&commit_baseurl;09b07c295">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-08-21 [e22253467] Treat number of disabled nodes in a path as a separate c
-->

      <listitem>
      <para>
      Improve handling of disabled optimizer features (Robert Haas)
      <ulink url="&commit_baseurl;e22253467">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2025-04-04 [92fe23d93] Add nbtree skip scan optimization.
Author: Peter Geoghegan <pg@bowt.ie>
2025-04-04 [8a510275d] Further optimize nbtree search scan key comparisons.
-->

      <listitem>
      <para>
      Allow skip scans of <link linkend="xfunc-sql">btree</link> indexes
      (Peter Geoghegan)
      <ulink url="&commit_baseurl;92fe23d93">&sect;</ulink>
      <ulink url="&commit_baseurl;8a510275d">&sect;</ulink>
      </para>

      <para>
      This allows multi-column btree indexes to be used in more cases such
      as when there are no restrictions on the first or early indexed
      columns (or there are non-equality ones), and there are useful
      restrictions on later indexed columns.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-18 [f278e1fe3] Allow non-btree unique indexes for partition keys
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-18 [9d6db8bec] Allow non-btree unique indexes for matviews
-->

      <listitem>
      <para>
      Allow non-btree unique indexes to be used as partition keys and in
      materialized views (Mark Dilger)
      <ulink url="&commit_baseurl;f278e1fe3">&sect;</ulink>
      <ulink url="&commit_baseurl;9d6db8bec">&sect;</ulink>
      </para>

      <para>
      The index type must still support equality.
      </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-03-03 [8492feb98] Allow parallel CREATE INDEX for GIN indexes
-->

      <listitem>
      <para>
      Allow <link linkend="gin"><literal>GIN</literal></link> indexes to
      be created in parallel (Tomas Vondra, Matthias van de Meent)
      <ulink url="&commit_baseurl;8492feb98">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [e9e7b6604] Add GiST and btree sortsupport routines for range types
-->

      <listitem>
      <para>
      Allow values to be sorted to speed range-type <link
      linkend="gist">GiST</link> and <link linkend="btree">btree</link>
      index builds (Bernd Helmle)
      <ulink url="&commit_baseurl;e9e7b6604">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-03-17 [02844012b] aio: Basic subsystem initialization
Author: Andres Freund <andres@anarazel.de>
2025-03-17 [da7226993] aio: Add core asynchronous I/O infrastructure
Author: Andres Freund <andres@anarazel.de>
2025-03-18 [55b454d0e] aio: Infrastructure for io_method=worker
Author: Andres Freund <andres@anarazel.de>
2025-03-18 [247ce06b8] aio: Add io_method=worker
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-19 [10f664684] Introduce io_max_combine_limit.
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-19 [06fb5612c] Increase io_combine_limit range to 1MB.
Author: Andres Freund <andres@anarazel.de>
2025-03-26 [c325a7633] aio: Add io_method=io_uring
Author: Andres Freund <andres@anarazel.de>
2025-03-29 [50cb7505b] aio: Implement support for reads in smgr/md/fd
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [047cba7fa] bufmgr: Implement AIO read support
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [12ce89fd0] bufmgr: Use AIO in StartReadBuffers()
Author: Andres Freund <andres@anarazel.de>
2025-03-30 [2a5e709e7] Enable IO concurrency on all systems
-->

      <listitem>
      <para>
      Add an asynchronous I/O subsystem (Andres Freund, Thomas Munro,
      Nazir Bilal Yavuz, Melanie Plageman)
      <ulink url="&commit_baseurl;02844012b">&sect;</ulink>
      <ulink url="&commit_baseurl;da7226993">&sect;</ulink>
      <ulink url="&commit_baseurl;55b454d0e">&sect;</ulink>
      <ulink url="&commit_baseurl;247ce06b8">&sect;</ulink>
      <ulink url="&commit_baseurl;10f664684">&sect;</ulink>
      <ulink url="&commit_baseurl;06fb5612c">&sect;</ulink>
      <ulink url="&commit_baseurl;c325a7633">&sect;</ulink>
      <ulink url="&commit_baseurl;50cb7505b">&sect;</ulink>
      <ulink url="&commit_baseurl;047cba7fa">&sect;</ulink>
      <ulink url="&commit_baseurl;12ce89fd0">&sect;</ulink>
      <ulink url="&commit_baseurl;2a5e709e7">&sect;</ulink>
      </para>

      <para>
      This feature allows backends to queue multiple read requests,
      which allows for more efficient sequential scans, bitmap
      heap scans, vacuums, etc.  This is enabled by server
      variable <xref linkend="guc-io-method"/>, with server
      variables <xref linkend="guc-io-combine-limit"/> and <xref
      linkend="guc-io-max-combine-limit"/> added to control it.
      This also enables <xref linkend="guc-effective-io-concurrency"/>
      and <xref linkend="guc-maintenance-io-concurrency"/>
      values greater than zero for systems without
      <function>fadvise()</function> support.  The new system view <link
      linkend="view-pg-aios"><structname>pg_aios</structname></link>
      shows the file handles being used for asynchronous I/O.
      </para>
      </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-09-21 [c4d5cb71d] Increase the number of fast-path lock slots
-->

      <listitem>
      <para>
      Improve the locking performance of queries that access many relations
      (Tomas Vondra)
      <ulink url="&commit_baseurl;c4d5cb71d">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-20 [adf97c156] Speed up Hash Join by making ExprStates support hashing
Author: David Rowley <drowley@postgresql.org>
2024-12-11 [0f5738202] Use ExprStates for hashing in GROUP BY and SubPlans
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [4d143509c] Create accessor functions for TupleHashEntry.
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [a0942f441] Add ExecCopySlotMinimalTupleExtra().
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-24 [626df47ad] Remove 'additional' pointer from TupleHashEntryData.
-->

      <listitem>
      <para>
      Improve the performance and reduce memory usage of hash joins and
      <link linkend="sql-groupby"><literal>GROUP BY</literal></link>
      (David Rowley, Jeff Davis)
      <ulink url="&commit_baseurl;adf97c156">&sect;</ulink>
      <ulink url="&commit_baseurl;0f5738202">&sect;</ulink>
      <ulink url="&commit_baseurl;4d143509c">&sect;</ulink>
      <ulink url="&commit_baseurl;a0942f441">&sect;</ulink>
      <ulink url="&commit_baseurl;626df47ad">&sect;</ulink>
      </para>

      <para>
      This also improves hash set operations used by <link
      linkend="sql-except"><literal>EXCEPT</literal></link>, and hash
      lookups of subplan values.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-02-11 [052026c9b] Eagerly scan all-visible pages to amortize aggressive va
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-03 [06eae9e62] Trigger more frequent autovacuums with relallfrozen
-->

      <listitem>
      <para>
      Allow normal vacuums to freeze some pages, even though they are
      all-visible (Melanie Plageman)
      <ulink url="&commit_baseurl;052026c9b">&sect;</ulink>
      <ulink url="&commit_baseurl;06eae9e62">&sect;</ulink>
      </para>

      <para>
      This reduces the overhead of later full-relation
      freezing.  The aggressiveness of this can be
      controlled by server variable and per-table setting <xref
      linkend="guc-vacuum-max-eager-freeze-failure-rate"/>.  Previously
      vacuum never processed all-visible pages until freezing was required.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-20 [0164a0f9e] Add vacuum_truncate configuration parameter.
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-vacuum-truncate"/> to control
      file truncation during <xref linkend="sql-vacuum"/> (Nathan Bossart,
      Gurjeet Singh)
      <ulink url="&commit_baseurl;0164a0f9e">&sect;</ulink>
      </para>

      <para>
      A storage-level parameter with the same name and behavior already
      existed.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [ff79b5b2a] Increase default effective_io_concurrency to 16
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-18 [cc6be07eb] Increase default maintenance_io_concurrency to 16
-->

      <listitem>
      <para>
      Increase server variables <xref
      linkend="guc-effective-io-concurrency"/>'s and <xref
      linkend="guc-maintenance-io-concurrency"/>'s default values to 16
      (Melanie Plageman)
      <ulink url="&commit_baseurl;ff79b5b2a">&sect;</ulink>
      <ulink url="&commit_baseurl;cc6be07eb">&sect;</ulink>
      </para>

      <para>
      This more accurately reflects modern hardware.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [9219093ca] Modularize log_connections output
-->

      <listitem>
      <para>
      Increase the logging granularity of server variable <xref
      linkend="guc-log-connections"/> (Melanie Plageman)
      <ulink url="&commit_baseurl;9219093ca">&sect;</ulink>
      </para>

      <para>
      This server variable was previously only boolean, which is still
      supported.
      </para>
      </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-12 [18cd15e70] Add connection establishment duration logging
-->

      <listitem>
      <para>
      Add <varname>log_connections</varname> option to report the duration
      of connection stages (Melanie Plageman)
      <ulink url="&commit_baseurl;18cd15e70">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-07 [3516ea768] Add local-address escape "%L" to log_line_prefix.
-->

      <listitem>
      <para>
      Add <xref linkend="guc-log-line-prefix"/> escape
      <literal>%L</literal> to output the client <acronym>IP</acronym>
      address (Greg Sabino Mullane)
      <ulink url="&commit_baseurl;3516ea768">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-03-14 [6d376c3b0] Add GUC option to log lock acquisition failures.
Author: Fujii Masao <fujii@postgresql.org>
2025-06-03 [73bdcfab3] Rename log_lock_failure GUC to log_lock_failures for con
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-log-lock-failures"/> to log
      lock acquisition failures (Yuki Seino, Fujii Masao)
      <ulink url="&commit_baseurl;6d376c3b0">&sect;</ulink>
      <ulink url="&commit_baseurl;73bdcfab3">&sect;</ulink>
      </para>

      <para>
      Specifically it reports <link
      linkend="sql-for-update-share"><command>SELECT
      ... NOWAIT</command></link> lock failures.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-01-28 [30a6ed0ce] Track per-relation cumulative time spent in [auto]vacuum
-->

      <listitem>
      <para>
      Modify <link
      linkend="monitoring-pg-stat-all-tables-view"><structname>pg_stat_all_tables</structname></link>
      and its variants to report the time spent in <xref
      linkend="sql-vacuum"/>, <xref linkend="sql-analyze"/>, and their
      <link linkend="autovacuum">automatic</link> variants (Sami Imseih)
      <ulink url="&commit_baseurl;30a6ed0ce">&sect;</ulink>
      </para>

      <para>
      The new columns are <structfield>total_vacuum_time</structfield>,
      <structfield>total_autovacuum_time</structfield>,
      <structfield>total_analyze_time</structfield>, and
      <structfield>total_autoanalyze_time</structfield>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-11 [bb8dff999] Add cost-based vacuum delay time to progress views.
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-14 [7720082ae] Add delay time to VACUUM/ANALYZE (VERBOSE) and autovacuu
-->

      <listitem>
      <para>
      Add delay time reporting to <xref linkend="sql-vacuum"/> and <xref
      linkend="sql-analyze"/> (Bertrand Drouvot, Nathan Bossart)
      <ulink url="&commit_baseurl;bb8dff999">&sect;</ulink>
      <ulink url="&commit_baseurl;7720082ae">&sect;</ulink>
      </para>

      <para>
      This information appears in the server log, the system views <link
      linkend="vacuum-progress-reporting"><structname>pg_stat_progress_vacuum</structname></link>
      and <link
      linkend="pg-stat-progress-analyze-view"><structname>pg_stat_progress_analyze</structname></link>,
      and the output of <xref linkend="sql-vacuum"/> and <xref
      linkend="sql-analyze"/> when in <literal>VERBOSE</literal>
      mode; tracking must be enabled with the server variable <xref
      linkend="guc-track-cost-delay-timing"/>.
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-08-13 [4c1b4cdb8] Add resource statistics reporting to ANALYZE VERBOSE.
Author: Masahiko Sawada <msawada@postgresql.org>
2024-09-09 [bb7775234] Add WAL usage reporting to ANALYZE VERBOSE output.
-->

      <listitem>
      <para>
      Add <acronym>WAL</acronym>, <acronym>CPU</acronym>, and average
      read statistics output to <command>ANALYZE VERBOSE</command>
      (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;4c1b4cdb8">&sect;</ulink>
      <ulink url="&commit_baseurl;bb7775234">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [6a8a7ce47] Add information about WAL buffers full to VACUUM/ANALYZE
-->

      <listitem>
      <para>
      Add full <acronym>WAL</acronym> buffer count to
      <command>VACUUM</command>/<command>ANALYZE (VERBOSE)</command>
      and autovacuum log output (Bertrand Drouvot)
      <ulink url="&commit_baseurl;6a8a7ce47">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-12-19 [9aea73fc6] Add backend-level statistics to pgstats
Author: Michael Paquier <michael@paquier.xyz>
2025-03-03 [3f1db99bf] Handle auxiliary processes in SQL functions of backend s
-->

      <listitem>
      <para>
      Add per-backend I/O statistics reporting (Bertrand Drouvot)
      <ulink url="&commit_baseurl;9aea73fc6">&sect;</ulink>
      <ulink url="&commit_baseurl;3f1db99bf">&sect;</ulink>
      </para>

      <para>
      The statistics are accessed via <link
      linkend="pg-stat-get-backend-io"><function>pg_stat_get_backend_io()</function></link>.
      Per-backend I/O statistics can be cleared via <link
      linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_backend_stats()</function></link>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-01-14 [f92c854cf] Make pg_stat_io count IOs as bytes instead of blocks for
-->

      <listitem>
      <para>
      Add <link
      linkend="monitoring-pg-stat-io-view"><structname>pg_stat_io</structname></link>
      columns to report I/O activity in bytes (Nazir Bilal Yavuz)
      <ulink url="&commit_baseurl;f92c854cf">&sect;</ulink>
      </para>

      <para>
      The new columns are <structfield>read_bytes</structfield>,
      <structfield>write_bytes</structfield>, and
      <structfield>extend_bytes</structfield>.  The
      <structfield>op_bytes</structfield> column, which always equaled
      <link linkend="guc-block-size"><varname>BLCKSZ</varname></link>,
      has been removed.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-04 [a051e71e2] Add data for WAL in pg_stat_io and backend statistics
Author: Michael Paquier <michael@paquier.xyz>
2025-02-20 [4538bd3f1] doc: Add details about object "wal" in pg_stat_io
Author: Michael Paquier <michael@paquier.xyz>
2025-03-06 [7f7f324eb] Add more monitoring data for WAL writes in the WAL recei
-->

      <listitem>
      <para>
      Add <acronym>WAL</acronym> I/O activity rows to
      <structname>pg_stat_io</structname> (Nazir Bilal Yavuz, Bertrand
      Drouvot, Michael Paquier)
      <ulink url="&commit_baseurl;a051e71e2">&sect;</ulink>
      <ulink url="&commit_baseurl;4538bd3f1">&sect;</ulink>
      <ulink url="&commit_baseurl;7f7f324eb">&sect;</ulink>
      </para>

      <para>
      This includes <acronym>WAL</acronym> receiver activity and a wait
      event for such writes.
      </para>

      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-26 [6c349d83b] Re-add GUC track_wal_io_timing
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-track-wal-io-timing"/>
      to control tracking <acronym>WAL</acronym> timing
      in <structname>pg_stat_io</structname> instead of <link
      linkend="pg-stat-wal-view"><structname>pg_stat_wal</structname></link>
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;6c349d83b">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-24 [2421e9a51] Remove read/sync fields from pg_stat_wal and GUC track_w
Author: Michael Paquier <michael@paquier.xyz>
2025-02-26 [6c349d83b] Re-add GUC track_wal_io_timing
-->

      <listitem>
      <para>
      Remove read/sync columns from <structname>pg_stat_wal</structname>
      (Bertrand Drouvot)
      <ulink url="&commit_baseurl;2421e9a51">&sect;</ulink>
      <ulink url="&commit_baseurl;6c349d83b">&sect;</ulink>
      </para>

      <para>
      This removes columns <structfield>wal_write</structfield>,
      <structfield>wal_sync</structfield>,
      <structfield>wal_write_time</structfield>, and
      <structfield>wal_sync_time</structfield>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-03-11 [76def4cdd] Add WAL data to backend statistics
-->

      <listitem>
      <para>
      Add function <link
      linkend="pg-stat-get-backend-wal"><function>pg_stat_get_backend_wal()</function></link>
      to return per-backend <acronym>WAL</acronym> statistics (Bertrand
      Drouvot)
      <ulink url="&commit_baseurl;76def4cdd">&sect;</ulink>
      </para>

      <para>
      Per-backend <acronym>WAL</acronym>
      statistics can be cleared via <link
      linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_backend_stats()</function></link>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-10-11 [4e1fad378] Add pg_ls_summariesdir().
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-admin-genfile-table"><function>pg_ls_summariesdir()</function></link>
      to specifically list the contents of <link
      linkend="storage-file-layout"><envar>PGDATA</envar></link>/<link
      linkend="guc-wal-summary-keep-time"><filename>pg_wal/summaries</filename></link>
      (Yushi Ogiwara)
      <ulink url="&commit_baseurl;4e1fad378">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-30 [559efce1d] Add num_done counter to the pg_stat_checkpointer view.
-->

      <listitem>
      <para>
      Add column <link
      linkend="monitoring-pg-stat-checkpointer-view"><structname>pg_stat_checkpointer</structname></link>.<structfield>num_done</structfield>
      to report the number of completed checkpoints (Anton A. Melnikov)
      <ulink url="&commit_baseurl;559efce1d">&sect;</ulink>
      </para>

      <para>
      Columns <structfield>num_timed</structfield> and
      <structfield>num_requested</structfield> count both completed and
      skipped checkpoints.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-02 [17cc5f666] Fix inconsistent reporting of checkpointer stats.
-->

      <listitem>
      <para>
      Add column
      <structname>pg_stat_checkpointer</structname>.<structfield>slru_written</structfield>
      to report <acronym>SLRU</acronym> buffers written (Nitin Jadhav)
      <ulink url="&commit_baseurl;17cc5f666">&sect;</ulink>
      </para>

      <para>
      Also, modify the checkpoint server log message to report separate
      shared buffer and <acronym>SLRU</acronym> buffer values.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-11-11 [e7a9496de] Add two attributes to pg_stat_database for parallel work
-->

      <listitem>
      <para>
      Add columns to <link
      linkend="monitoring-pg-stat-database-view"><structname>pg_stat_database</structname></link>
      to report parallel worker activity (Benoit Lobréau)
      <ulink url="&commit_baseurl;e7a9496de">&sect;</ulink>
      </para>

      <para>
      The new columns are
      <structfield>parallel_workers_to_launch</structfield> and
      <structfield>parallel_workers_launched</structfield>.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-18 [62d712ecf] Introduce squashing of constant lists in query jumbling
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-27 [9fbd53dea] Remove the query_id_squash_values GUC
Author: Álvaro Herrera <alvherre@kurilemu.de>
Branch: master Release: REL_18_BR [c2da1a5d6] 2025-06-24 19:36:32 +0200
-->

      <listitem>
      <para>
      Have <link linkend="guc-compute-query-id">query id</link> computation
      of constant lists consider only the first and last constants (Dmitry
      Dolgov, Sami Imseih)
      <ulink url="&commit_baseurl;62d712ecf">&sect;</ulink>
      <ulink url="&commit_baseurl;9fbd53dea">&sect;</ulink>
      <ulink url="&commit_baseurl;c2da1a5d6">&sect;</ulink>
      </para>

      <para>
      Jumbling is used by <xref linkend="pgstatstatements"/>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-03-26 [787514b30] Use relation name instead of OID in query jumbling for R
-->

      <listitem>
      <para>
      Adjust query id computations to group together queries using the
      same relation name (Michael Paquier, Sami Imseih)
      <ulink url="&commit_baseurl;787514b30">&sect;</ulink>
      </para>

      <para>
      This is true even if the tables in different schemas have different
      column names.
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-01 [12227a1d5] Add context type field to pg_backend_memory_contexts
-->

      <listitem>
      <para>
      Add column <link
      linkend="view-pg-backend-memory-contexts"><structname>pg_backend_memory_contexts</structname></link>.<structfield>type</structfield>
      to report the type of memory context (David Rowley)
      <ulink url="&commit_baseurl;12227a1d5">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-25 [32d3ed816] Add path column to pg_backend_memory_contexts view
-->

      <listitem>
      <para>
      Add column
      <structname>pg_backend_memory_contexts</structname>.<structfield>path</structfield>
      to show memory context parents (Melih Mutlu)
      <ulink url="&commit_baseurl;32d3ed816">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-04 [4564f1ceb] Add pg_get_acl() to get the ACL for a database object
Author: Michael Paquier <michael@paquier.xyz>
2024-07-10 [d898665bf] Extend pg_get_acl() to handle sub-object IDs
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-info-object-table"><function>pg_get_acl()</function></link>
      to retrieve database access control details (Joel Jacobson)
      <ulink url="&commit_baseurl;4564f1ceb">&sect;</ulink>
      <ulink url="&commit_baseurl;d898665bf">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-09-12 [4eada203a] Add has_largeobject_privilege function.
-->

      <listitem>
      <para>
      Add function <link
      linkend="functions-info-access-table"><function>has_largeobject_privilege()</function></link>
      to check large object privileges (Yugo Nagata)
      <ulink url="&commit_baseurl;4eada203a">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-04-04 [0d6c47766] Extend ALTER DEFAULT PRIVILEGES to define default privil
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-alterdefaultprivileges"/> to define
      large object default privileges (Takatsuka Haruka, Yugo Nagata,
      Laurenz Albe)
      <ulink url="&commit_baseurl;0d6c47766">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-07-09 [ccd38024b] Introduce pg_signal_autovacuum_worker.
-->

      <listitem>
      <para>
      Add predefined role <link
      linkend="predefined-roles"><literal>pg_signal_autovacuum_worker</literal></link>
      (Kirill Reshke)
      <ulink url="&commit_baseurl;ccd38024b">&sect;</ulink>
      </para>

      <para>
      This allows sending signals to autovacuum workers.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-02-20 [b3f0be788] Add support for OAUTHBEARER SASL mechanism
-->

      <listitem>
      <para>
      Add support for the <link linkend="auth-oauth">OAuth authentication
      method</link> (Jacob Champion, Daniel Gustafsson, Thomas Munro)
      <ulink url="&commit_baseurl;b3f0be788">&sect;</ulink>
      </para>

      <para>
      This adds an <literal>oauth</literal> authentication method to <link
      linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>,
      libpq OAuth options, a server variable <xref
      linkend="guc-oauth-validator-libraries"/> to load
      token validation libraries, and a configure flag <link
      linkend="configure-option-with-libcurl"><option>--with-libcurl</option></link>
      to add the required compile-time libraries.
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [45188c2ea] Support configuring TLSv1.3 cipher suites
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-ssl-tls13-ciphers"/> to allow
      specification of multiple colon-separated TLSv1.3 cipher suites
      (Erica Zhang, Daniel Gustafsson)
      <ulink url="&commit_baseurl;45188c2ea">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-03-18 [daa02c6bd] Add X25519 to the default set of curves
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-ssl-groups"/>'s default
      to include elliptic curve X25519 (Daniel Gustafsson, Jacob Champion)
      <ulink url="&commit_baseurl;daa02c6bd">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [3d1ef3a15] Support configuring multiple ECDH curves
-->

      <listitem>
      <para>
      Rename server variable <varname>ssl_ecdh_curve</varname> to <xref
      linkend="guc-ssl-groups"/> and allow multiple colon-separated
      <acronym>ECDH</acronym> curves to be specified (Erica Zhang,
      Daniel Gustafsson)
      <ulink url="&commit_baseurl;3d1ef3a15">&sect;</ulink>
      </para>

      <para>
      The previous name still works.
      </para>
      </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [a460251f0] Make cancel request keys longer
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-07-29 [9d9b9d46f] Move cancel key generation to after forking the backend
-->

      <listitem>
      <para>
      Make <link linkend="functions-admin-signal-table">cancel request
      keys</link> 256 bits (Heikki Linnakangas, Jelte Fennema-Nio)
      <ulink url="&commit_baseurl;a460251f0">&sect;</ulink>
      <ulink url="&commit_baseurl;9d9b9d46f">&sect;</ulink>
      </para>

      <para>
      This is only possible when the server and client support wire
      protocol version 3.2, introduced in this release.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-01-06 [c758119e5] Allow changing autovacuum_max_workers without restarting
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-autovacuum-worker-slots"/>
      to specify the maximum number of background workers (Nathan Bossart)
      <ulink url="&commit_baseurl;c758119e5">&sect;</ulink>
      </para>

      <para>
      With this variable set, <xref linkend="guc-autovacuum-max-workers"/>
      can be adjusted at runtime up to this maximum without a server
      restart.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-05 [306dc520b] Introduce autovacuum_vacuum_max_threshold.
-->

      <listitem>
      <para>
      Allow specification of the fixed number of dead tuples that will
      trigger an <link linkend="autovacuum">autovacuum</link> (Nathan
      Bossart, Frédéric Yhuel)
      <ulink url="&commit_baseurl;306dc520b">&sect;</ulink>
      </para>

      <para>
      The server variable is <xref
      linkend="guc-autovacuum-vacuum-max-threshold"/>.  Percentages are
      still used for triggering.
      </para>
      </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-03-24 [adb5f85fa] Redefine max_files_per_process to control additionally o
-->

      <listitem>
      <para>
      Change server variable <xref linkend="guc-max-files-per-process"/>
      to limit only files opened by a backend (Andres Freund)
      <ulink url="&commit_baseurl;adb5f85fa">&sect;</ulink>
      </para>

      <para>
      Previously files opened by the postmaster were also counted toward
      this limit.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-07-26 [0dcaea569] Introduce num_os_semaphores GUC.
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-num-os-semaphores"/> to
      report the required number of semaphores (Nathan Bossart)
      <ulink url="&commit_baseurl;0dcaea569">&sect;</ulink>
      </para>

      <para>
      This is useful for operating system configuration.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-19 [4f7f7b037] extension_control_path
Author: Peter Eisentraut <peter@eisentraut.org>
2025-05-02 [81eaaa2c4] Make "directory" setting work with extension_control_pat
-->

      <listitem>
      <para>
      Add server variable <xref linkend="guc-extension-control-path"/> to
      specify the location of extension control files (Peter Eisentraut,
      Matheus Alcantara)
      <ulink url="&commit_baseurl;4f7f7b037">&sect;</ulink>
      <ulink url="&commit_baseurl;81eaaa2c4">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-02-19 [ac0e33136] Invalidate inactive replication slots.
-->

      <listitem>
      <para>
      Allow inactive replication slots to be automatically invalidated using
      server variable <xref linkend="guc-idle-replication-slot-timeout"/>
      (Nisha Moond, Bharath Rupireddy)
      <ulink url="&commit_baseurl;ac0e33136">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-03-21 [04ff636cb] Add GUC option to control maximum active replication ori
-->

      <listitem>
      <para>
      Add server variable <xref
      linkend="guc-max-active-replication-origins"/> to control the
      maximum active replication origins (Euler Taveira)
      <ulink url="&commit_baseurl;04ff636cb">&sect;</ulink>
      </para>

      <para>
      This was previously controlled by <xref
      linkend="guc-max-replication-slots"/>, but this new setting allows
      a higher origin count in cases where fewer slots are required.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-10-30 [745217a05] Replicate generated columns when specified in the column
Author: Amit Kapila <akapila@postgresql.org>
2024-11-07 [7054186c4] Replicate generated columns when 'publish_generated_colu
Author: Amit Kapila <akapila@postgresql.org>
2024-12-04 [87ce27de6] Ensure stored generated columns must be published when r
Author: Amit Kapila <akapila@postgresql.org>
2025-01-30 [6252b1eaf] Doc: Generated column replication.
-->

      <listitem>
      <para>
      Allow the values of <link
      linkend="sql-createtable-parms-generated-stored">generated
      columns</link> to be logically replicated (Shubham Khanna, Vignesh C,
      Zhijie Hou, Shlok Kyal, Peter Smith)
      <ulink url="&commit_baseurl;745217a05">&sect;</ulink>
      <ulink url="&commit_baseurl;7054186c4">&sect;</ulink>
      <ulink url="&commit_baseurl;87ce27de6">&sect;</ulink>
      <ulink url="&commit_baseurl;6252b1eaf">&sect;</ulink>
      </para>

      <para>
      If the publication specifies a column list, all specified
      columns, generated and non-generated, are published.
      Without a specified column list, publication option
      <literal>publish_generated_columns</literal> controls whether
      generated columns are published. Previously generated columns
      were not replicated and the subscriber had to compute
      the values if possible;  this is particularly useful for
      non-<productname>PostgreSQL</productname> subscribers which lack
      such a capability.
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-10-28 [1bf1140be] Change the default value of the streaming option to 'par
-->

      <listitem>
      <para>
      Change the default <xref linkend="sql-createsubscription"/> streaming
      option from <literal>off</literal> to <literal>parallel</literal>
      (Vignesh C)
      <ulink url="&commit_baseurl;1bf1140be">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-07-24 [1462aad2e] Allow altering of two_phase option of a SUBSCRIPTION.
Author: Amit Kapila <akapila@postgresql.org>
2025-04-03 [4868c96bc] Fix slot synchronization for two_phase enabled slots.
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-altersubscription"/> to change the
      replication slot's two-phase commit behavior (Hayato Kuroda, Ajin
      Cherian, Amit Kapila, Zhijie Hou)
      <ulink url="&commit_baseurl;1462aad2e">&sect;</ulink>
      <ulink url="&commit_baseurl;4868c96bc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2024-08-20 [9758174e2] Log the conflicts while applying changes in logical repl
Author: Amit Kapila <akapila@postgresql.org>
2024-08-22 [edcb71258] Doc: explain the log format of logical replication confl
Author: Amit Kapila <akapila@postgresql.org>
2024-08-29 [640178c92] Rename the conflict types for the origin differ cases.
Author: Amit Kapila <akapila@postgresql.org>
2024-09-04 [6c2b5edec] Collect statistics about conflicts in logical replicatio
Author: Amit Kapila <akapila@postgresql.org>
2025-03-24 [73eba5004] Detect and Log multiple_unique_conflicts type conflict.
-->

      <listitem>
      <para>
      Log <link linkend="hot-standby-conflict">conflicts</link> while
      applying logical replication changes (Zhijie Hou, Nisha Moond)
      <ulink url="&commit_baseurl;9758174e2">&sect;</ulink>
      <ulink url="&commit_baseurl;edcb71258">&sect;</ulink>
      <ulink url="&commit_baseurl;640178c92">&sect;</ulink>
      <ulink url="&commit_baseurl;6c2b5edec">&sect;</ulink>
      <ulink url="&commit_baseurl;73eba5004">&sect;</ulink>
      </para>

      <para>
      Also report in new columns of <link
      linkend="monitoring-pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link>.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-02-07 [83ea6c540] Virtual generated columns
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-28 [cdc168ad4] Add support for not-null constraints on virtual generate
Author: Richard Guo <rguo@postgresql.org>
2025-02-25 [1e4351af3] Expand virtual generated columns in the planner
-->

     <listitem>
     <para>
     Allow <link linkend="sql-createtable-parms-generated-stored">generated
     columns</link> to be virtual, and make them the default (Peter
     Eisentraut, Jian He, Richard Guo, Dean Rasheed)
     <ulink url="&commit_baseurl;83ea6c540">&sect;</ulink>
     <ulink url="&commit_baseurl;cdc168ad4">&sect;</ulink>
     <ulink url="&commit_baseurl;1e4351af3">&sect;</ulink>
     </para>

     <para>
     Virtual generated columns generate their values when the columns
     are read, not written.  The write behavior can still be specified
     via the <literal>STORED</literal> option.
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-16 [80feb727c] Add OLD/NEW support to RETURNING in DML queries.
-->

     <listitem>
     <para>
     Add <literal>OLD</literal>/<literal>NEW</literal> support to <link
     linkend="dml-returning"><literal>RETURNING</literal></link> in
     <acronym>DML</acronym> queries (Dean Rasheed)
     <ulink url="&commit_baseurl;80feb727c">&sect;</ulink>
     </para>

     <para>
     Previously <literal>RETURNING</literal> only returned new values for
     <xref linkend="sql-insert"/> and <xref linkend="sql-update"/>, and old
     values for <xref linkend="sql-delete"/>; <xref linkend="sql-merge"/>
     would return the appropriate value for the internal query executed.
     This new syntax allows the <literal>RETURNING</literal> list of
     <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>/<command>MERGE</command>
     to explicitly return old and new values by using the special aliases
     <literal>old</literal> and <literal>new</literal>.  These aliases
     can be renamed to avoid identifier conflicts.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-19 [302cf1575] Add support for LIKE in CREATE FOREIGN TABLE
-->

     <listitem>
     <para>
     Allow foreign tables to be created like existing local tables
     (Zhang Mingli)
     <ulink url="&commit_baseurl;302cf1575">&sect;</ulink>
     </para>

     <para>
     The syntax is <link linkend="sql-createforeigntable"><command>CREATE
     FOREIGN TABLE ... LIKE</command></link>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-11-27 [85b7efa1c] Support LIKE with nondeterministic collations
-->

     <listitem>
     <para>
     Allow <link linkend="functions-like"><literal>LIKE</literal></link>
     with <link linkend="collation-nondeterministic">nondeterministic
     collations</link> (Peter Eisentraut)
     <ulink url="&commit_baseurl;85b7efa1c">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-02-21 [329304c90] Support text position search functions with nondetermini
-->

     <listitem>
     <para>
     Allow text position search functions with nondeterministic collations
     (Peter Eisentraut)
     <ulink url="&commit_baseurl;329304c90">&sect;</ulink>
     </para>

     <para>
     These used to generate an error.
     </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-17 [d3d098316] Support PG_UNICODE_FAST locale in the builtin collation
-->

     <listitem>
     <para>
     Add builtin collation provider <link
     linkend="locale-providers"><literal>PG_UNICODE_FAST</literal></link>
     (Jeff Davis)
     <ulink url="&commit_baseurl;d3d098316">&sect;</ulink>
     </para>

     <para>
     This locale supports case mapping, but sorts in code point order,
     not natural language order.
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-09-24 [62ddf7ee9] Add ONLY support for VACUUM and ANALYZE
-->

     <listitem>
     <para>
     Allow <xref linkend="sql-vacuum"/> and <xref linkend="sql-analyze"/>
     to process partitioned tables without processing their children
     (Michael Harris)
     <ulink url="&commit_baseurl;62ddf7ee9">&sect;</ulink>
     </para>

     <para>
     This is enabled with the new <literal>ONLY</literal> option.  This is
     useful since autovacuum does not process partitioned tables, just
     its children.
     </para>
     </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2024-10-11 [e839c8ecc] Create functions pg_set_relation_stats, pg_clear_relatio
Author: Jeff Davis <jdavis@postgresql.org>
2024-10-24 [d32d14639] Add functions pg_restore_relation_stats(), pg_restore_at
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-25 [650ab8aaf] Stats: use schemaname/relname instead of regclass.
-->

     <listitem>
     <para>
     Add functions to modify per-relation and per-column optimizer
     statistics (Corey Huinker)
     <ulink url="&commit_baseurl;e839c8ecc">&sect;</ulink>
     <ulink url="&commit_baseurl;d32d14639">&sect;</ulink>
     <ulink url="&commit_baseurl;650ab8aaf">&sect;</ulink>
     </para>

     <para>
     The functions are <link
     linkend="functions-admin-statsmod"><function>pg_restore_relation_stats()</function></link>,
     <function>pg_restore_attribute_stats()</function>,
     <function>pg_clear_relation_stats()</function>, and
     <function>pg_clear_attribute_stats()</function>.
     </para>
     </listitem>


<!--
Author: Thomas Munro <tmunro@postgresql.org>
2025-04-08 [f78ca6f3e] Introduce file_copy_method setting.
-->

     <listitem>
     <para>
     Add server variable <xref linkend="guc-file-copy-method"/> to control
     the file copying method (Nazir Bilal Yavuz)
     <ulink url="&commit_baseurl;f78ca6f3e">&sect;</ulink>
     </para>

     <para>
     This controls whether <link
     linkend="sql-createdatabase"><command>CREATE DATABASE
     ... STRATEGY=FILE_COPY</command></link> and <link
     linkend="sql-alterdatabase"><command>ALTER DATABASE ... SET
     TABLESPACE</command></link> uses file copy or clone.
     </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-18-constraints">
     <title><link linkend="ddl-constraints">Constraints</link></title>

     <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [fc0438b4e] Add temporal PRIMARY KEY and UNIQUE constraints
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [89f908a6d] Add temporal FOREIGN KEY contraints
-->

      <listitem>
      <para>
      Allow the specification of non-overlapping <link
      linkend="sql-createtable-parms-primary-key"><literal>PRIMARY
      KEY</literal></link>, <link linkend="sql-createtable-parms-unique">
      <literal>UNIQUE</literal></link>, and
      <link linkend="sql-createtable-parms-references">foreign key</link>
      constraints (Paul A. Jungwirth)
      <ulink url="&commit_baseurl;fc0438b4e">&sect;</ulink>
      <ulink url="&commit_baseurl;89f908a6d">&sect;</ulink>
      </para>

      <para>
      This is specified by <literal>WITHOUT OVERLAPS</literal> for
      <literal>PRIMARY KEY</literal> and <literal>UNIQUE</literal>, and by
      <literal>PERIOD</literal> for foreign keys, all applied to the last
      specified column.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-11 [ca87c415e] Add support for NOT ENFORCED in CHECK constraints
Author: Peter Eisentraut <peter@eisentraut.org>
2025-04-02 [eec0040c4] Add support for NOT ENFORCED in foreign key constraints
-->

      <listitem>
      <para>
      Allow <link
      linkend="sql-createtable-parms-check"><literal>CHECK</literal></link>
      and <link linkend="sql-createtable-parms-references">foreign
      key</link> constraints to be specified as <literal>NOT
      ENFORCED</literal> (Amul Sul)
      <ulink url="&commit_baseurl;ca87c415e">&sect;</ulink>
      <ulink url="&commit_baseurl;eec0040c4">&sect;</ulink>
      </para>

      <para>
      This also adds column <link
      linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.<structfield>conenforced</structfield>.
      </para>
      </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-11-15 [9321d2fdf] Fix collation handling for foreign keys
-->

      <listitem>
      <para>
      Require <link
      linkend="sql-createtable-parms-references">primary/foreign key</link>
      relationships to use either deterministic collations or the the
      same nondeterministic collations (Peter Eisentraut)
      <ulink url="&commit_baseurl;9321d2fdf">&sect;</ulink>
      </para>

      <para>
      The restore of a <xref linkend="app-pgdump"/>, also used by <xref
      linkend="pgupgrade"/>, will fail if these requirements are not met;
      schema changes must be made for these upgrade methods to succeed.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-11-08 [14e87ffa5] Add pg_constraint rows for not-null constraints
Author: Fujii Masao <fujii@postgresql.org>
Branch: master Release: REL_18_BR [81ce602d4] 2025-06-26 20:25:34 +0900
-->

      <listitem>
      <para>
      Store column <link
      linkend="sql-createtable-parms-not-null"><literal>NOT
      NULL</literal></link> specifications in <link
      linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>
      (Álvaro Herrera, Bernd Helmle)
      <ulink url="&commit_baseurl;14e87ffa5">&sect;</ulink>
      <ulink url="&commit_baseurl;81ce602d4">&sect;</ulink>
      </para>

      <para>
      This allows names to be specified for <literal>NOT NULL</literal>
      constraint.  This also adds <literal>NOT NULL</literal> constraints
      to foreign tables and <literal>NOT NULL</literal> inheritance
      control to local tables.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-04-07 [a379061a2] Allow NOT NULL constraints to be added as NOT VALID
-->

      <listitem>
      <para>
      Allow <xref linkend="sql-altertable"/> to set the <literal>NOT
      VALID</literal> attribute of <literal>NOT NULL</literal> constraints
      (Rushabh Lathia, Jian He)
      <ulink url="&commit_baseurl;a379061a2">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-05 [f4e53e10b] Add ALTER TABLE ... ALTER CONSTRAINT ... SET [NO] INHERI
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-03-27 [4a02af8b1] Simplify syntax for ALTER TABLE ALTER CONSTRAINT NO INHE
-->

      <listitem>
      <para>
      Allow modification of the inheritability of <literal>NOT
      NULL</literal> constraints (Suraj Kharage, Álvaro Herrera)
      <ulink url="&commit_baseurl;f4e53e10b">&sect;</ulink>
      <ulink url="&commit_baseurl;4a02af8b1">&sect;</ulink>
      </para>

      <para>
      The syntax is <link linkend="sql-altertable"><command>ALTER TABLE
      ... ALTER CONSTRAINT ... [NO] INHERIT</command></link>.
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-01-23 [b663b9436] Allow NOT VALID foreign key constraints on partitioned t
-->

      <listitem>
      <para>
      Allow <literal>NOT VALID</literal> foreign key constraints on
      partitioned tables (Amul Sul)
      <ulink url="&commit_baseurl;b663b9436">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-09-30 [4dea33ce7] Don't disallow DROP of constraints ONLY on partitioned t
-->

      <listitem>
      <para>
      Allow <link
      linkend="sql-altertable-desc-drop-constraint">dropping</link>
      of constraints <literal>ONLY</literal> on partitioned tables
      (Álvaro Herrera)
      <ulink url="&commit_baseurl;4dea33ce7">&sect;</ulink>
      </para>

      <para>
      This was previously erroneously prohibited.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

    <sect4 id="release-18-copy">
     <title><xref linkend="sql-copy"/></title>

     <itemizedlist>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-08 [4ac2a9bec] Add REJECT_LIMIT option to the COPY command.
-->

      <listitem>
      <para>
      Add <literal>REJECT_LIMIT</literal> to control the number of invalid
      rows <command>COPY FROM</command> can ignore (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;4ac2a9bec">&sect;</ulink>
      </para>

      <para>
      This is available when <literal>ON_ERROR = 'ignore'</literal>.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-04-04 [534874fac] Allow "COPY table TO" command to copy rows from material
-->

      <listitem>
      <para>
      Allow <command>COPY TO</command> to copy rows from populated
      materialized views (Jian He)
      <ulink url="&commit_baseurl;534874fac">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-03 [e7834a1a2] Add LOG_VERBOSITY = 'silent' support to COPY command.
-->

      <listitem>
      <para>
      Add <command>COPY</command> <literal>LOG_VERBOSITY</literal> level
      <literal>silent</literal> to suppress log output of ignored rows
      (Atsushi Torikoshi)
      <ulink url="&commit_baseurl;e7834a1a2">&sect;</ulink>
      </para>

      <para>
      This new level suppresses output for discarded input rows when
      <literal>on_error = 'ignore'</literal>.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-02-06 [401a6956f] Disallow COPY FREEZE on foreign tables.
-->

      <listitem>
      <para>
      Disallow <command>COPY FREEZE</command> on foreign tables (Nathan
      Bossart)
      <ulink url="&commit_baseurl;401a6956f">&sect;</ulink>
      </para>

      <para>
      Previously, the <command>COPY</command> worked but the
      <literal>FREEZE</literal> was ignored, so disallow this command.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

    <sect4 id="release-18-explain">
     <title><xref linkend="sql-explain"/></title>

     <itemizedlist>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-11 [c2a4078eb] Enable BUFFERS with EXPLAIN ANALYZE by default
-->

      <listitem>
      <para>
      Automatically include <literal>BUFFERS</literal> output in
      <command>EXPLAIN ANALYZE</command> (Guillaume Lelarge, David Rowley)
      <ulink url="&commit_baseurl;c2a4078eb">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [320545bfc] Add information about WAL buffers being full to EXPLAIN
-->

      <listitem>
      <para>
      Add full <acronym>WAL</acronym> buffer count to <command>EXPLAIN
      (WAL)</command> output (Bertrand Drouvot)
      <ulink url="&commit_baseurl;320545bfc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Peter Geoghegan <pg@bowt.ie>
2025-03-11 [0fbceae84] Show index search count in EXPLAIN ANALYZE, take 2.
-->

      <listitem>
      <para>
      In <command>EXPLAIN ANALYZE</command>, report the number of index
      lookups used per index scan node (Peter Geoghegan)
      <ulink url="&commit_baseurl;0fbceae84">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-02-21 [ddb17e387] Allow EXPLAIN to indicate fractional rows.
Author: Robert Haas <rhaas@postgresql.org>
2025-02-27 [95dbd827f] EXPLAIN: Always use two fractional digits for row counts
-->

      <listitem>
      <para>
      Modify <command>EXPLAIN</command> to output fractional row counts
      (Ibrar Ahmed, Ilia Evdokimov, Robert Haas)
      <ulink url="&commit_baseurl;ddb17e387">&sect;</ulink>
      <ulink url="&commit_baseurl;95dbd827f">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-05 [1eff8279d] Add memory/disk usage for Material nodes in EXPLAIN
Author: David Rowley <drowley@postgresql.org>
2024-07-05 [53abb1e0e] Fix newly introduced issue in EXPLAIN for Materialize no
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-09-17 [95d6e9af0] Add memory/disk usage for Window aggregate nodes in EXPL
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-09-23 [40708acd6] Add memory/disk usage for more executor nodes.
-->

      <listitem>
      <para>
      Add memory and disk usage details to <literal>Material</literal>,
      <literal>Window Aggregate</literal>, and common table expression
      nodes to <command>EXPLAIN</command> output (David Rowley, Tatsuo
      Ishii)
      <ulink url="&commit_baseurl;1eff8279d">&sect;</ulink>
      <ulink url="&commit_baseurl;53abb1e0e">&sect;</ulink>
      <ulink url="&commit_baseurl;95d6e9af0">&sect;</ulink>
      <ulink url="&commit_baseurl;40708acd6">&sect;</ulink>
      </para>
      </listitem>


<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-11 [8b1b34254] Improve EXPLAIN's display of window functions.
-->

      <listitem>
      <para>
      Add details about window function arguments to
      <command>EXPLAIN</command> output (Tom Lane)
      <ulink url="&commit_baseurl;8b1b34254">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-07-09 [5a1e6df3b] Show Parallel Bitmap Heap Scan worker stats in EXPLAIN A
-->

      <listitem>
      <para>
      Add <literal>Parallel Bitmap Heap Scan</literal> worker cache
      statistics to <command>EXPLAIN ANALYZE</command> (David Geier,
      Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley)
      <ulink url="&commit_baseurl;5a1e6df3b">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-08-21 [c01743aa4] Show number of disabled nodes in EXPLAIN ANALYZE output.
Author: David Rowley <drowley@postgresql.org>
2024-10-11 [161320b4b] Adjust EXPLAIN's output for disabled nodes
Author: David Rowley <drowley@postgresql.org>
2024-10-29 [84b8fccbe] Doc: add detail about EXPLAIN's "Disabled" property
-->

      <listitem>
      <para>
      Indicate disabled nodes in <command>EXPLAIN ANALYZE</command> output
      (Robert Haas, David Rowley, Laurenz Albe)
      <ulink url="&commit_baseurl;c01743aa4">&sect;</ulink>
      <ulink url="&commit_baseurl;161320b4b">&sect;</ulink>
      <ulink url="&commit_baseurl;84b8fccbe">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-23 [4e7f62bc3] Add support for Unicode case folding.
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-17 [286a365b9] Support Unicode full case mapping and conversion.
-->

     <listitem>
     <para>
     Improve <link linkend="collation-managing-standard">Unicode</link>
     full case mapping and conversion (Jeff Davis)
     <ulink url="&commit_baseurl;4e7f62bc3">&sect;</ulink>
     <ulink url="&commit_baseurl;286a365b9">&sect;</ulink>
     </para>

     <para>
     This adds the ability to do conditional and title case mapping,
     and case map single characters to multiple characters.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-24 [a5579a90a] Make jsonb casts to scalar types translate JSON null to
-->

     <listitem>
     <para>
     Allow <link linkend="datatype-json"><type>jsonb</type></link>
     <literal>null</literal> values to be cast to scalar types as
     <literal>NULL</literal> (Tom Lane)
     <ulink url="&commit_baseurl;a5579a90a">&sect;</ulink>
     </para>

     <para>
     Previously such casts generated an error.
     </para>
     </listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2025-03-05 [4603903d2] Allow json{b}_strip_nulls() to remove null array elements
-->

     <listitem>
     <para>
     Add optional parameter to <link
     linkend="functions-json-processing-table"><function>json{b}_strip_nulls</function></link>
     to allow removal of null array elements (Florents Tselai)
     <ulink url="&commit_baseurl;4603903d2">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-04-01 [6c12ae09f] Introduce a SQL-callable function array_sort(anyarray).
-->

     <listitem>
     <para>
     Add function <link
     linkend="array-functions-table"><function>array_sort()</function></link>
     which sorts an array's first dimension (Junwang Zhao, Jian He)
     <ulink url="&commit_baseurl;6c12ae09f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-11-01 [49d6c7d8d] Add SQL function array_reverse()
-->

     <listitem>
     <para>
     Add function <link
     linkend="array-functions-table"><function>array_reverse()</function></link>
     which reverses an array's first dimension (Aleksander Alekseev)
     <ulink url="&commit_baseurl;49d6c7d8d">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-13 [0697b2390] Add reverse(bytea).
-->

     <listitem>
     <para>
     Add function <link
     linkend="functions-string-other"><function>reverse()</function></link>
     to reverse bytea bytes (Aleksander Alekseev)
     <ulink url="&commit_baseurl;0697b2390">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-03-07 [6da469bad] Allow casting between bytea and integer types.
-->

     <listitem>
     <para>
     Allow casting between integer types and <link
     linkend="datatype-binary"><type>bytea</type></link> (Aleksander
     Alekseev)
     <ulink url="&commit_baseurl;6da469bad">&sect;</ulink>
     </para>

     <para>
     The integer values are stored as <type>bytea</type> two's complement
     values.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-04-03 [82a46cca9] Update Unicode data to Unicode 16.0.0
-->

     <listitem>
     <para>
     Update Unicode data to <link
     linkend="collation-managing-standard">Unicode</link> 16.0.0 (Peter
     Eisentraut)
     <ulink url="&commit_baseurl;82a46cca9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-02-18 [b464e51ab] Update to latest Snowball sources.
-->

     <listitem>
     <para>
     Add full text search <link
     linkend="textsearch-snowball-dictionary">stemming</link> for Estonian
     (Tom Lane)
     <ulink url="&commit_baseurl;b464e51ab">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-24 [cd838e200] Neaten up our choices of SQLSTATEs for XML-related error
-->

     <listitem>
     <para>
     Improve the <link linkend="datatype-xml"><type>XML</type></link>
     error codes to more closely match the <acronym>SQL</acronym> standard
     (Tom Lane)
     <ulink url="&commit_baseurl;cd838e200">&sect;</ulink>
     </para>

     <para>
     These errors are reported via <link
     linkend="errcodes-appendix"><literal>SQLSTATE</literal></link>.
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-01-24 [bfc599206] Add SQL function CASEFOLD().
-->

     <listitem>
     <para>
     Add function <link
     linkend="functions-string-other"><function>casefold()</function></link>
     to allow for more sophisticated case-insensitive matching (Jeff Davis)
     <ulink url="&commit_baseurl;bfc599206">&sect;</ulink>
     </para>

     <para>
     This allows more accurate comparisons, i.e., a character can have
     multiple upper or lower case equivalents, or upper or lower case
     conversion changes the number of characters.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-11 [a0f1fce80] Add min and max aggregates for composite types (records)
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-10-08 [2d24fd942] Add min and max aggregates for bytea type.
-->

     <listitem>
     <para>
     Allow <link
     linkend="functions-aggregate-table"><function>MIN()</function></link>/<link
     linkend="functions-aggregate-table"><function>MAX()</function></link>
     aggregates on arrays and composite types (Aleksander Alekseev,
     Marat Buharov)
     <ulink url="&commit_baseurl;a0f1fce80">&sect;</ulink>
     <ulink url="&commit_baseurl;2d24fd942">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-08-16 [6be39d77a] Fix extraction of week and quarter fields from intervals
-->

     <listitem>
     <para>
     Add a <literal>WEEK</literal> option to <link
     linkend="functions-datetime-extract"><function>EXTRACT()</function></link>
     (Tom Lane)
     <ulink url="&commit_baseurl;6be39d77a">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-08-16 [6be39d77a] Fix extraction of week and quarter fields from intervals
-->

     <listitem>
     <para>
     Improve the output <literal>EXTRACT(QUARTER ...)</literal> for
     negative values (Tom Lane)
     <ulink url="&commit_baseurl;6be39d77a">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-01-22 [172e6b3ad] Support RN (roman-numeral format) in to_number().
-->

     <listitem>
     <para>
     Add roman numeral support to <link
     linkend="functions-formatting-table"><function>to_number()</function></link>
     (Hunaid Sohail)
     <ulink url="&commit_baseurl;172e6b3ad">&sect;</ulink>
     </para>

     <para>
     This is accessed via the <literal>RN</literal> pattern.
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-12-11 [78c5e141e] Add UUID version 7 generation function.
-->

     <listitem>
     <para>
     Add <link linkend="datatype-uuid"><type>UUID</type></link>
     version 7 generation function <link
     linkend="func_uuid_gen_table"><function>uuidv7()</function></link>
     (Andrey Borodin)
     <ulink url="&commit_baseurl;78c5e141e">&sect;</ulink>
     </para>

     <para>
     This <type>UUID</type> value is
     temporally sortable.  Function alias <link
     linkend="func_uuid_gen_table"><function>uuidv4()</function></link>
     has been added to explicitly generate version 4 UUIDs.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-08-12 [760162fed] Add user-callable CRC functions.
-->

     <listitem>
     <para>
     Add functions <link
     linkend="functions-binarystring-other"><function>crc32()</function></link>
     and <link
     linkend="functions-binarystring-other"><function>crc32c()</function></link>
     to compute <acronym>CRC</acronym> values (Aleksander Alekseev)
     <ulink url="&commit_baseurl;760162fed">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-03-26 [a3b6dfd41] Add support for gamma() and lgamma() functions.
-->

     <listitem>
     <para>
     Add math functions <link
     linkend="functions-math-func-table"><function>gamma()</function></link>
     and <link
     linkend="functions-math-func-table"><function>lgamma()</function></link>
     (Dean Rasheed)
     <ulink url="&commit_baseurl;a3b6dfd41">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-03 [246dedc5d] Allow =&gt; syntax for named cursor arguments in plpgsql.
-->

     <listitem>
     <para>
     Allow <literal>=&gt;</literal> syntax for named cursor arguments in
     <link linkend="plpgsql">PL/pgSQL</link> (Pavel Stehule)
     <ulink url="&commit_baseurl;246dedc5d">&sect;</ulink>
     </para>

     <para>
     We previously only accepted <literal>:=</literal>.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-25 [580f8727c] Add argument names to the regexp_XXX functions.
-->

     <listitem>
     <para>
     Allow <link
     linkend="functions-posix-regexp"><function>regexp_match[es]()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_like()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_replace()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_count()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_instr()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_substr()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_split_to_table()</function></link>/<link
     linkend="functions-posix-regexp"><function>regexp_split_to_array()</function></link>
     to use named arguments (Jian He)
     <ulink url="&commit_baseurl;580f8727c">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3 id="release-18-libpq">
    <title><xref linkend="libpq"/></title>

    <itemizedlist>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-09-09 [cdb6b0fdb] Add PQfullProtocolVersion() to surface the precise proto
-->

     <listitem>
     <para>
     Add function <link
     linkend="libpq-PQfullProtocolVersion"><function>PQfullProtocolVersion()</function></link>
     to report the full, including minor, protocol version number (Jacob
     Champion, Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;cdb6b0fdb">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [285613c60] libpq: Add min/max_protocol_version connection options
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-02 [507034910] libpq: Handle NegotiateProtocolVersion message different
-->

     <listitem>
     <para>
     Add libpq connection <link
     linkend="libpq-connect-ssl-max-protocol-version">parameters</link>
     and <link linkend="libpq-envars">environment variables</link> to
     specify the minimum and maximum acceptable protocol version for
     connections (Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;285613c60">&sect;</ulink>
     <ulink url="&commit_baseurl;507034910">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-08-19 [28a1121fd] Mark search_path as GUC_REPORT
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2024-08-19 [0d06a7eac] Document that search_path is reported by the server
-->

     <listitem>
     <para>
     Report <xref linkend="guc-search-path"/> changes to the client
     (Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra)
     <ulink url="&commit_baseurl;28a1121fd">&sect;</ulink>
     <ulink url="&commit_baseurl;0d06a7eac">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-12 [ea92f3a0a] libpq: Trace frontend authentication challenges
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-14 [a5c6b8f22] libpq: Trace responses to SSLRequest and GSSENCRequest
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-16 [b8b3f861f] libpq: Trace all messages received from the server
Author: Robert Haas <rhaas@postgresql.org>
2025-02-24 [e87c14b19] libpq: Trace all NegotiateProtocolVersion fields
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2024-08-09 [7adec2d5f] libpq: Trace StartupMessage/SSLRequest/GSSENCRequest cor
-->

     <listitem>
     <para>
     Add <link
     linkend="libpq-PQtrace"><function>PQtrace()</function></link> output
     for all message types, including authentication (Jelte Fennema-Nio)
     <ulink url="&commit_baseurl;ea92f3a0a">&sect;</ulink>
     <ulink url="&commit_baseurl;a5c6b8f22">&sect;</ulink>
     <ulink url="&commit_baseurl;b8b3f861f">&sect;</ulink>
     <ulink url="&commit_baseurl;e87c14b19">&sect;</ulink>
     <ulink url="&commit_baseurl;7adec2d5f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-04-03 [2da74d8d6] libpq: Add support for dumping SSL key material to file
-->

     <listitem>
     <para>
     Add libpq connection parameter <link
     linkend="libpq-connect-sslkeylogfile"><varname>sslkeylogfile</varname></link>
     which dumps out <acronym>SSL</acronym> key material (Abhishek Chanda,
     Daniel Gustafsson)
     <ulink url="&commit_baseurl;2da74d8d6">&sect;</ulink>
     </para>

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

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2025-03-25 [3c86223c9] libpq: Deprecate pg_int64.
-->

     <listitem>
     <para>
     Modify some libpq function signatures to use
     <literal>int64_t</literal> (Thomas Munro)
     <ulink url="&commit_baseurl;3c86223c9">&sect;</ulink>
     </para>

     <para>
     These previously used <literal>pg_int64</literal>, which is now
     deprecated.
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-08-22 [d55322b0d] psql: Add more meta-commands able to use the extended pr
Author: Michael Paquier <michael@paquier.xyz>
Branch: master Release: REL_18_BR [fc39b286a] 2025-06-24 13:12:46 +0900
-->

     <listitem>
     <para>
     Allow <application>psql</application> to parse, bind, and close
     named prepared statements (Anthonin Bonnefoy, Michael Paquier)
     <ulink url="&commit_baseurl;d55322b0d">&sect;</ulink>
     <ulink url="&commit_baseurl;fc39b286a">&sect;</ulink>
     </para>

     <para>
     This is accomplished with new commands <link
     linkend="app-psql-meta-command-parse"><literal>\parse</literal></link>,
     <link
     linkend="app-psql-meta-command-bind-named"><literal>\bind_named</literal></link>,
     and <link
     linkend="app-psql-meta-command-close-prepared"><literal>\close_prepared</literal></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-21 [41625ab8e] psql: Add support for pipelines
Author: Michael Paquier <michael@paquier.xyz>
2025-03-18 [17caf6644] psql: Add \sendpipeline to send query buffers while in a
Author: Michael Paquier <michael@paquier.xyz>
2025-03-19 [2cce0fe44] psql: Allow queries terminated by semicolons while in pi
-->

     <listitem>
     <para>
     Add <application>psql</application> backslash commands to allowing
     issuance of pipeline queries (Anthonin Bonnefoy)
     <ulink url="&commit_baseurl;41625ab8e">&sect;</ulink>
     <ulink url="&commit_baseurl;17caf6644">&sect;</ulink>
     <ulink url="&commit_baseurl;2cce0fe44">&sect;</ulink>
     </para>

     <para>
     The new commands are <link
     linkend="app-psql-meta-command-pipeline"><literal>\startpipeline</literal></link>,
     <literal>\syncpipeline</literal>, <literal>\sendpipeline</literal>,
     <literal>\endpipeline</literal>, <literal>\flushrequest</literal>,
     <literal>\flush</literal>, and <literal>\getresults</literal>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-25 [3ce357584] psql: Add pipeline status to prompt and some state varia
-->

     <listitem>
     <para>
     Allow adding pipeline status to the <application>psql</application>
     prompt and add related state variables (Anthonin Bonnefoy)
     <ulink url="&commit_baseurl;3ce357584">&sect;</ulink>
     </para>

     <para>
     The new prompt character is <literal>%P</literal> and
     the new <application>psql</application> variables are <link
     linkend="app-psql-variables-pipeline-sync-count"><literal>PIPELINE_SYNC_COUNT</literal></link>,
     <link
     linkend="app-psql-variables-pipeline-command-count"><literal>PIPELINE_COMMAND_COUNT</literal></link>,
     and <link
     linkend="app-psql-variables-pipeline-result-count"><literal>PIPELINE_RESULT_COUNT</literal></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-12-18 [477728b5d] psql: Add more information about service name
-->

     <listitem>
     <para>
     Allow adding the connection service name to the
     <application>psql</application> prompt or access it via
     <application>psql</application> variable (Michael Banck)
     <ulink url="&commit_baseurl;477728b5d">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-14 [00f4c2959] psql: Add option to use expanded mode to all list comman
-->

     <listitem>
     <para>
     Add <application>psql</application> option to use expanded mode on
     all list commands (Dean Rasheed)
     <ulink url="&commit_baseurl;00f4c2959">&sect;</ulink>
     </para>

     <para>
     Adding backslash suffix <literal>x</literal> enables this.
     </para>
     </listitem>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-02-22 [bba2fbc62] Change \conninfo to use tabular format
-->

     <listitem>
     <para>
     Change <application>psql</application>'s <xref
     linkend="app-psql-meta-command-conninfo"/> to use tabular format
     and include more information (Álvaro Herrera, Maiquel Grassi,
     Hunaid Sohail)
     <ulink url="&commit_baseurl;bba2fbc62">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-01-14 [2355e5111] psql: Add leakproof indicator to \df+, \do+, \dAo+, and
-->

     <listitem>
     <para>
     Add function's leakproof indicator
     to <application>psql</application>'s <link
     linkend="app-psql-meta-command-df-lc"><literal>\df+</literal></link>,
     <literal>\do+</literal>, <literal>\dAo+</literal>, and
     <literal>\dC+</literal> outputs (Yugo Nagata)
     <ulink url="&commit_baseurl;2355e5111">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-02 [978f38c77] Add information about access method for partitioned rela
-->

     <listitem>
     <para>
     Add access method details for partitioned relations in <link
     linkend="app-psql-meta-command-dp-uc"><literal>\dP+</literal></link>
     (Justin Pryzby)
     <ulink url="&commit_baseurl;978f38c77">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Magnus Hagander <magnus@hagander.net>
2025-03-24 [d696406a9] psql: show default extension version in \dx output
-->

     <listitem>
     <para>
     Add <literal>default_version</literal>
     to the <application>psql</application> <link
     linkend="app-psql-meta-command-dx-lc"><literal>\dx</literal></link>
     extension output (Magnus Hagander)
     <ulink url="&commit_baseurl;d696406a9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-03-25 [1a759c832] psql: Make default \watch interval configurable
-->

     <listitem>
     <para>
     Add <application>psql</application> variable <xref
     linkend="app-psql-variables-watch-interval"/> to set the default <link
     linkend="app-psql-meta-command-watch"><literal>\watch</literal></link>
     wait time (Daniel Gustafsson)
     <ulink url="&commit_baseurl;1a759c832">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-01 [983a588e0] initdb: Add new option "- -no-data-checksums"
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-16 [04bec894a] initdb: Change default to using data checksums.
-->

     <listitem>
     <para>
     Change <xref linkend="app-initdb"/> to default to enabling checksums
     (Greg Sabino Mullane)
     <ulink url="&commit_baseurl;983a588e0">&sect;</ulink>
     <ulink url="&commit_baseurl;04bec894a">&sect;</ulink>
     </para>

     <para>
     The new <application>initdb</application> option
     <option>--no-data-checksums</option> disables checksums.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [cf131fa94] initdb: Add - -no-sync-data-files.
-->

     <listitem>
     <para>
     Add <application>initdb</application> option
     <option>--no-sync-data-files</option> to avoid syncing heap/index
     files (Nathan Bossart)
     <ulink url="&commit_baseurl;cf131fa94">&sect;</ulink>
     </para>

     <para>
     <application>initdb</application> option <option>--no-sync</option>
     is still available to avoid syncing any files.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-18 [edba754f0] vacuumdb: Add option for analyzing only relations missin
Author: Nathan Bossart <nathan@postgresql.org>
2025-04-30 [987910502] vacuumdb: Don't skip empty relations in - -missing-stats-
-->

     <listitem>
     <para>
     Add <xref linkend="app-vacuumdb"/> option
     <option>--missing-stats-only</option> to compute only missing
     optimizer statistics (Corey Huinker, Nathan Bossart)
     <ulink url="&commit_baseurl;edba754f0">&sect;</ulink>
     <ulink url="&commit_baseurl;987910502">&sect;</ulink>
     </para>

     <para>
     This option can only be run by superusers and can only
     be used with options <option>--analyze-only</option> and
     <option>--analyze-in-stages</option>.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-17 [99aeb8470] pg_combinebackup: Add -k, - -link option.
-->

     <listitem>
     <para>
     Add <xref linkend="app-pgcombinebackup"/> option
     <option>-k</option>/<option>--link</option> to enable hard linking
     (Israel Barth Rubio, Robert Haas)
     <ulink url="&commit_baseurl;99aeb8470">&sect;</ulink>
     </para>

     <para>
     Only some files can be hard linked.  This should not be used if the
     backups will be used independently.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2024-09-27 [8dfd31290] pg_verifybackup: Verify tar-format backups.
-->

     <listitem>
     <para>
     Allow <xref linkend="app-pgverifybackup"/> to verify tar-format
     backups (Amul Sul)
     <ulink url="&commit_baseurl;8dfd31290">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-03-12 [4ecdd4110] pg_rewind: Add dbname to primary_conninfo when using - -w
-->

     <listitem>
     <para>
     If <xref linkend="app-pgrewind"/>'s <option>--source-server</option>
     specifies a database name, use it in
     <option>--write-recovery-conf</option> output (Masahiko Sawada)
     <ulink url="&commit_baseurl;4ecdd4110">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [30666d185] pg_resetwal: Add - -char-signedness option to change the
-->

     <listitem>
     <para>
     Add <xref linkend="app-pgresetwal"/> option
     <option>--char-signedness</option> to change the default
     <type>char</type> signedness (Masahiko Sawada)
     <ulink url="&commit_baseurl;30666d185">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>


    <sect4 id="release-18-pgdump">
     <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>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-03-25 [bde2fb797] Add pg_dump - -with-{schema|data|statistics} options.
Author: Jeff Davis <jdavis@postgresql.org>
2025-08-02 [a3e8dc143] Simplify options in pg_dump and pg_restore.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgdump"/> option <option>--statistics</option>
      (Jeff Davis)
      <ulink url="&commit_baseurl;bde2fb797">&sect;</ulink>
      <ulink url="&commit_baseurl;a3e8dc143">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [9c49f0e8c] pg_dump: Add - -sequence-data.
Author: Nathan Bossart <nathan@postgresql.org>
2025-05-07 [acea3fc49] pg_dumpall: Add - -sequence-data.
-->

      <listitem>
      <para>
      Add <application>pg_dump</application> and <xref
      linkend="app-pg-dumpall"/> option <option>--sequence-data</option> to
      dump sequence data that would normally be excluded (Nathan Bossart)
      <ulink url="&commit_baseurl;9c49f0e8c">&sect;</ulink>
      <ulink url="&commit_baseurl;acea3fc49">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgdump"/>, <xref linkend="app-pg-dumpall"/>,
      and <xref linkend="app-pgrestore"/> options
      <option>--statistics-only</option>, <option>--no-statistics</option>,
      <option>--no-data</option>, and <option>--no-schema</option>
      (Corey Huinker, Jeff Davis)
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-16 [cd3c45125] pg_dump, pg_dumpall, pg_restore: Add - -no-policies optio
-->

      <listitem>
      <para>
      Add option <option>--no-policies</option> to disable row level
      security policy processing in <xref linkend="app-pgdump"/>,
      <xref linkend="app-pg-dumpall"/>, <xref linkend="app-pgrestore"/>
      (Nikolay Samokhvalov)
      <ulink url="&commit_baseurl;cd3c45125">&sect;</ulink>
      </para>

      <para>
      This is useful for migrating to systems with different policies.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-pgupgrade">
     <title><xref linkend="pgupgrade"/></title>

     <itemizedlist>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-18 [c9d502eb6] Update guidance for running vacuumdb after pg_upgrade.
Author: Nathan Bossart <nathan@postgresql.org>
2025-04-30 [d5f1b6a75] Further adjust guidance for running vacuumdb after pg_up
Author: Jeff Davis <jdavis@postgresql.org>
2025-02-20 [1fd1bd871] Transfer statistics during pg_upgrade.
-->

      <listitem>
      <para>
      Allow <application>pg_upgrade</application> to preserve optimizer
      statistics (Corey Huinker, Jeff Davis, Nathan Bossart)
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      <ulink url="&commit_baseurl;c9d502eb6">&sect;</ulink>
      <ulink url="&commit_baseurl;d5f1b6a75">&sect;</ulink>
      <ulink url="&commit_baseurl;1fd1bd871">&sect;</ulink>
      </para>

      <para>
      Extended statistics are not preserved.  Also add
      <application>pg_upgrade</application> option
      <option>--no-statistics</option> to disable statistics preservation.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [40e2e5e92] Introduce framework for parallelizing various pg_upgrade
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [6d3d2e8e5] pg_upgrade: Parallelize retrieving relation information.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [7baa36de5] pg_upgrade: Parallelize subscription check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [46cad8b31] pg_upgrade: Parallelize retrieving loadable libraries.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [6ab8f27bc] pg_upgrade: Parallelize retrieving extension updates.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [bbf83cab9] pg_upgrade: Parallelize data type checks.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [9db3018cf] pg_upgrade: Parallelize contrib/isn check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [c34eabfbb] pg_upgrade: Parallelize postfix operator check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [cf2f82a37] pg_upgrade: Parallelize incompatible polymorphics check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [f93f5f7b9] pg_upgrade: Parallelize WITH OIDS check.
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-16 [c880cf258] pg_upgrade: Parallelize encoding conversion check.
-->

      <listitem>
      <para>
      Allow <application>pg_upgrade</application> to process database
      checks in parallel (Nathan Bossart)
      <ulink url="&commit_baseurl;40e2e5e92">&sect;</ulink>
      <ulink url="&commit_baseurl;6d3d2e8e5">&sect;</ulink>
      <ulink url="&commit_baseurl;7baa36de5">&sect;</ulink>
      <ulink url="&commit_baseurl;46cad8b31">&sect;</ulink>
      <ulink url="&commit_baseurl;6ab8f27bc">&sect;</ulink>
      <ulink url="&commit_baseurl;bbf83cab9">&sect;</ulink>
      <ulink url="&commit_baseurl;9db3018cf">&sect;</ulink>
      <ulink url="&commit_baseurl;c34eabfbb">&sect;</ulink>
      <ulink url="&commit_baseurl;cf2f82a37">&sect;</ulink>
      <ulink url="&commit_baseurl;f93f5f7b9">&sect;</ulink>
      <ulink url="&commit_baseurl;c880cf258">&sect;</ulink>
      </para>

      <para>
      This is controlled by the existing <option>--jobs</option> option.
      </para>
      </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-25 [626d7236b] pg_upgrade: Add - -swap for faster file transfer.
-->

      <listitem>
      <para>
      Add <application>pg_upgrade</application> option
      <option>--swap</option> to swap directories rather than copy, clone,
      or link files (Nathan Bossart)
      <ulink url="&commit_baseurl;626d7236b">&sect;</ulink>
      </para>

      <para>
      This mode is potentially the fastest.
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [a8238f87f] pg_upgrade: Preserve default char signedness value from
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [1aab68059] pg_upgrade: Add - -set-char-signedness to set the default
-->

      <listitem>
      <para>
      Add <application>pg_upgrade</application> option
      <option>--set-char-signedness</option> to set the default
      <type>char</type> signedness of new cluster (Masahiko Sawada)
      <ulink url="&commit_baseurl;a8238f87f">&sect;</ulink>
      <ulink url="&commit_baseurl;1aab68059">&sect;</ulink>
      </para>

      <para>
      This is to handle cases where a
      pre-<productname>PostgreSQL</productname> 18 cluster's default
      <acronym>CPU</acronym> signedness does not match the new cluster.
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-logicalrep-app">
     <title>Logical Replication Applications</title>

     <itemizedlist>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-03-28 [fb2ea12f4] pg_createsubscriber: Add '- -all' option.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgcreatesubscriber"/> option
      <option>--all</option> to create logical replicas for all databases
      (Shubham Khanna)
      <ulink url="&commit_baseurl;fb2ea12f4">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-03-20 [e5aeed4b8] pg_createsubscriber: Add -R publications option.
Author: Peter Eisentraut <peter@eisentraut.org>
Branch: master Release: REL_18_BR [60dda7bbc] 2025-06-25 10:50:43 +0200
-->

      <listitem>
      <para>
      Add <application>pg_createsubscriber</application> option
      <option>--clean</option> to remove publications (Shubham Khanna)
      <ulink url="&commit_baseurl;e5aeed4b8">&sect;</ulink>
      <ulink url="&commit_baseurl;60dda7bbc">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-02-26 [e117cfb2f] Add two-phase option in pg_createsubscriber.
-->

      <listitem>
      <para>
      Add <application>pg_createsubscriber</application> option
      <option>--enable-two-phase</option> to enable prepared transactions
      (Shubham Khanna)
      <ulink url="&commit_baseurl;e117cfb2f">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-04-04 [cf2655a90] pg_recvlogical: Add - -failover option.
-->

      <listitem>
      <para>
      Add <xref linkend="app-pgrecvlogical"/> option
      <option>--enable-failover</option> to specify failover slots (Hayato Kuroda)
      <ulink url="&commit_baseurl;cf2655a90">&sect;</ulink>
      </para>

      <para>
      Also add option <option>--enable-two-phase</option> as a synonym
      for <option>--two-phase</option>, and deprecate the latter.
      </para>
      </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-03-25 [c68100aa4] Allow pg_recvlogical - -drop-slot to work without - -dbnam
-->

      <listitem>
      <para>
      Allow <application>pg_recvlogical</application>
      <option>--drop-slot</option> to work without
      <option>--dbname</option> (Hayato Kuroda)
      <ulink url="&commit_baseurl;c68100aa4">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-07-05 [4b211003e] Support loading of injection points
Author: Michael Paquier <michael@paquier.xyz>
2024-07-18 [a0a5869a8] Add INJECTION_POINT_CACHED() to run injection points dir
-->

     <listitem>
     <para>
     Separate the loading and running of <link
     linkend="xfunc-addin-injection-points">injection points</link>
     (Michael Paquier, Heikki Linnakangas)
     <ulink url="&commit_baseurl;4b211003e">&sect;</ulink>
     <ulink url="&commit_baseurl;a0a5869a8">&sect;</ulink>
     </para>

     <para>
     Injection points can now be created, but not run, via <link
     linkend="xfunc-addin-injection-points"><function>INJECTION_POINT_LOAD()</function></link>,
     and such injection points can be run via <link
     linkend="xfunc-addin-injection-points"><function>INJECTION_POINT_CACHED()</function></link>.
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-05-10 [371f2db8b] Add support for runtime arguments in injection points
-->

     <listitem>
     <para>
     Support runtime arguments in injection points (Michael Paquier)
     <ulink url="&commit_baseurl;371f2db8b">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2024-07-26 [20e0e7da9] Add test for early backend startup errors
-->

     <listitem>
     <para>
     Allow inline injection point test code with <link
     linkend="xfunc-addin-injection-points"><function>IS_INJECTION_POINT_ATTACHED()</function></link>
     (Heikki Linnakangas)
     <ulink url="&commit_baseurl;20e0e7da9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-08-05 [ca6fde922] Optimize JSON escaping using SIMD
-->

     <listitem>
     <para>
     Improve the performance of processing long <link
     linkend="datatype-json"><type>JSON</type></link> strings using
     <acronym>SIMD</acronym> (Single Instruction Multiple Data) (David
     Rowley)
     <ulink url="&commit_baseurl;ca6fde922">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2025-04-06 [3c6e8c123] Compute CRC32C using AVX-512 instructions where availabl
-->

     <listitem>
     <para>
     Speed up CRC32C calculations using x86 <acronym>AVX</acronym>-512
     instructions (Raghuveer Devulapalli, Paul Amonson)
     <ulink url="&commit_baseurl;3c6e8c123">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-28 [6be53c276] Optimize popcount functions with ARM Neon intrinsics.
Author: Nathan Bossart <nathan@postgresql.org>
2025-03-28 [519338ace] Optimize popcount functions with ARM SVE intrinsics.
-->

     <listitem>
     <para>
     Add <acronym>ARM</acronym> Neon and <acronym>SVE CPU</acronym>
     intrinsics for popcount (integer bit counting) (Chiranmoy
     Bhattacharya, Devanga Susmitha, Rama Malladi)
     <ulink url="&commit_baseurl;6be53c276">&sect;</ulink>
     <ulink url="&commit_baseurl;519338ace">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-07-09 [ca481d3c9] Optimise numeric multiplication for short inputs.
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-08-15 [c4e44224c] Extend mul_var_short() to 5 and 6-digit inputs.
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-08-15 [8dc28d7eb] Optimise numeric multiplication using base-NBASE^2 arith
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2024-10-04 [9428c001f] Speed up numeric division by always using the "fast" alg
-->

     <listitem>
     <para>
     Improve the speed of numeric multiplication and division (Joel
     Jacobson, Dean Rasheed)
     <ulink url="&commit_baseurl;ca481d3c9">&sect;</ulink>
     <ulink url="&commit_baseurl;c4e44224c">&sect;</ulink>
     <ulink url="&commit_baseurl;8dc28d7eb">&sect;</ulink>
     <ulink url="&commit_baseurl;9428c001f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [65c298f61] Add support for basic NUMA awareness
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [8cc139bec] Introduce pg_shmem_allocations_numa view
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-04-07 [ba2a3c230] Add pg_buffercache_numa view with NUMA node info
-->

     <listitem>
     <para>
     Add configure option <link
     linkend="configure-option-with-libnuma"><option>--with-libnuma</option></link>
     to enable <acronym>NUMA</acronym> awareness (Jakub Wartak, Bertrand
     Drouvot)
     <ulink url="&commit_baseurl;65c298f61">&sect;</ulink>
     <ulink url="&commit_baseurl;8cc139bec">&sect;</ulink>
     <ulink url="&commit_baseurl;ba2a3c230">&sect;</ulink>
     </para>

     <para>
     The function <link
     linkend="functions-info-session-table"><function>pg_numa_available()</function></link>
     reports on <acronym>NUMA</acronym> awareness, and system views <link
     linkend="view-pg-shmem-allocations-numa"><structname>pg_shmem_allocations_numa</structname></link>
     and <link
     linkend="pgbuffercache-pg-buffercache-numa"><structname>pg_buffercache_numa</structname></link>
     which report on shared memory distribution across
     <acronym>NUMA</acronym> nodes.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2024-09-18 [b52c4fc3c] Add TOAST table to pg_index.
-->

     <listitem>
     <para>
     Add <link
     linkend="storage-toast"><acronym>TOAST</acronym></link> table to <link
     linkend="catalog-pg-index"><structname>pg_index</structname></link>
     to allow for very large expression indexes (Nathan Bossart)
     <ulink url="&commit_baseurl;b52c4fc3c">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2024-12-20 [02a8d0c45] Remove pg_attribute.attcacheoff column
-->

     <listitem>
     <para>
     Remove column <link
     linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attcacheoff</structfield>
     (David Rowley)
     <ulink url="&commit_baseurl;02a8d0c45">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2025-03-03 [99f8f3fbb] Add relallfrozen to pg_class
-->

     <listitem>
     <para>
     Add column <link
     linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relallfrozen</structfield>
     (Melanie Plageman)
     <ulink url="&commit_baseurl;99f8f3fbb">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-10 [56fead44d] Add amgettreeheight index AM API routine
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-07 [af4002b38] Rename amcancrosscompare
-->

     <listitem>
     <para>
     Add <link
     linkend="indexam"><structfield>amgettreeheight</structfield></link>,
     <literal>amconsistentequality</literal>, and
     <literal>amconsistentordering</literal> to the index access method
     <acronym>API</acronym> (Mark Dilger)
     <ulink url="&commit_baseurl;56fead44d">&sect;</ulink>
     <ulink url="&commit_baseurl;af4002b38">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-09-17 [7406ab623] Add stratnum GiST support function
-->

     <listitem>
     <para>
     Add GiST support function <link
     linkend="gist-extensibility"><function>stratnum()</function></link>
     (Paul A. Jungwirth)
     <ulink url="&commit_baseurl;7406ab623">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-02-21 [44fe30fda] Add default_char_signedness field to ControlFileData.
-->

     <listitem>
     <para>
     Record the default <acronym>CPU</acronym> signedness of
     <literal>char</literal> in <xref linkend="app-pgcontroldata"/>
     (Masahiko Sawada)
     <ulink url="&commit_baseurl;44fe30fda">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-12 [72a3d0462] Prepare for Python "Limited API" in PL/Python
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-14 [0793ab810] Activate Python "Limited API" in PL/Python
-->

     <listitem>
     <para>
     Add support for Python "Limited <acronym>API</acronym>" in <xref
     linkend="plpython"/> (Peter Eisentraut)
     <ulink url="&commit_baseurl;72a3d0462">&sect;</ulink>
     <ulink url="&commit_baseurl;0793ab810">&sect;</ulink>
     </para>

     <para>
     This helps prevent problems caused by
     <application>Python</application> 3.x version mismatches.
     </para>
     </listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2025-04-29 [45363fca6] Bump the minimum supported Python version to 3.6.8
-->

     <listitem>
     <para>
     Change the minimum supported <application>Python</application>
     version to 3.6.8 (Jacob Champion)
     <ulink url="&commit_baseurl;45363fca6">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-09-02 [a70e01d43] Remove support for OpenSSL older than 1.1.0
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2024-10-24 [6c66b7443] Raise the minimum supported OpenSSL version to 1.1.1
-->

     <listitem>
     <para>
     Remove support for <application>OpenSSL</application> versions older
     than 1.1.1 (Daniel Gustafsson)
     <ulink url="&commit_baseurl;a70e01d43">&sect;</ulink>
     <ulink url="&commit_baseurl;6c66b7443">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-10-01 [972c2cd28] jit: Require at least LLVM 14, if enabled.
-->

     <listitem>
     <para>
     If <application>LLVM</application> is enabled, require version 14
     or later (Thomas Munro)
     <ulink url="&commit_baseurl;972c2cd28">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-26 [9324c8c58] Introduce PG_MODULE_MAGIC_EXT macro.
-->

     <listitem>
     <para>
     Add macro <link
     linkend="functions-info"><literal>PG_MODULE_MAGIC_EXT</literal></link>
     to allow extensions to report their name and version (Andrei Lepikhov)
     <ulink url="&commit_baseurl;9324c8c58">&sect;</ulink>
     </para>

     <para>
     This information can be access via the new function <link
     linkend="functions-info-session-table"><function>pg_get_loaded_modules()</function></link>.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-09-09 [218527d01] Don't bother checking the result of SPI_connect[_ext] an
-->

     <listitem>
     <para>
     Document that <link
     linkend="spi-spi-connect"><function>SPI_connect()</function></link>/<link
     linkend="spi-spi-connect"><function>SPI_connect_ext()</function></link>
     always returns success (<literal>SPI_OK_CONNECT</literal>) (Stepan
     Neretin)
     <ulink url="&commit_baseurl;218527d01">&sect;</ulink>
     </para>

     <para>
     Errors are always reported via <function>ereport()</function>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2024-07-31 [e54a42ac9] Add API and ABI stability guidance to the C language doc
-->

     <listitem>
     <para>
     Add <link linkend="xfunc-api-abi-stability-guidance">documentation
     section</link> about <acronym>API</acronym> and <acronym>ABI</acronym>
     compatibility (David Wheeler, Peter Eisentraut)
     <ulink url="&commit_baseurl;e54a42ac9">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-27 [5afaba629] doc: Meson is not experimental on Windows
-->

     <listitem>
     <para>
     Remove the experimental designation of
     <application>Meson</application> builds on <systemitem
     class="osname">Windows</systemitem> (Aleksander Alekseev)
     <ulink url="&commit_baseurl;5afaba629">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2024-07-30 [e25626677] Remove - -disable-spinlocks.
Author: Thomas Munro <tmunro@postgresql.org>
2024-07-30 [813852613] Remove - -disable-atomics, require 32 bit atomics.
-->

     <listitem>
     <para>
     Remove configure options <option>--disable-spinlocks</option> and
     <option>--disable-atomics</option> (Thomas Munro)
     <ulink url="&commit_baseurl;e25626677">&sect;</ulink>
     <ulink url="&commit_baseurl;813852613">&sect;</ulink>
     </para>

     <para>
     Thirty-two-bit atomic operations are now required.
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2024-07-01 [edadeb071] Remove support for HPPA (a/k/a PA-RISC) architecture.
-->

     <listitem>
     <para>
     Remove support for the
     <acronym>HPPA</acronym>/<acronym>PA-RISC</acronym> architecture
     (Tom Lane)
     <ulink url="&commit_baseurl;edadeb071">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2024-10-14 [7cdfeee32] Add contrib/pg_logicalinspect.
-->

     <listitem>
     <para>
     Add extension <xref linkend="pglogicalinspect"/> to inspect logical
     snapshots (Bertrand Drouvot)
     <ulink url="&commit_baseurl;7cdfeee32">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-26 [8d5ceb113] pg_overexplain: Additional EXPLAIN options for debugging
-->

     <listitem>
     <para>
     Add extension <xref linkend="pgoverexplain"/> which adds debug details
     to <link linkend="sql-explain"><command>EXPLAIN</command></link>
     output (Robert Haas)
     <ulink url="&commit_baseurl;8d5ceb113">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-07-26 [c297a47c5] postgres_fdw: Add "used_in_xact" column to postgres_fdw_
Author: Fujii Masao <fujii@postgresql.org>
2024-07-26 [857df3cef] postgres_fdw: Add connection status check to postgres_fd
Author: Fujii Masao <fujii@postgresql.org>
2024-09-18 [4f08ab554] postgres_fdw: Extend postgres_fdw_get_connections to ret
Author: Fujii Masao <fujii@postgresql.org>
2025-03-03 [fe186bda7] postgres_fdw: Extend postgres_fdw_get_connections to ret
-->

     <listitem>
     <para>
     Add output columns to <link
     linkend="postgres-fdw-functions"><function>postgres_fdw_get_connections()</function></link>
     (Hayato Kuroda, Sagar Dilip Shedge)
     <ulink url="&commit_baseurl;c297a47c5">&sect;</ulink>
     <ulink url="&commit_baseurl;857df3cef">&sect;</ulink>
     <ulink url="&commit_baseurl;4f08ab554">&sect;</ulink>
     <ulink url="&commit_baseurl;fe186bda7">&sect;</ulink>
     </para>

     <para>
     New output column <structfield>used_in_xact</structfield> indicates
     if the foreign data wrapper is being used by a current transaction,
     <structfield>closed</structfield> indicates if it is closed,
     <structfield>user_name</structfield> indicates the user name, and
     <structfield>remote_backend_pid</structfield> indicates the remote
     backend process identifier.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-01-15 [761c79508] postgres_fdw: SCRAM authentication pass-through
-->

     <listitem>
     <para>
     Allow <link linkend="auth-password"><acronym>SCRAM</acronym></link>
     authentication from the client to be passed to <xref
     linkend="postgres-fdw"/> servers (Matheus Alcantara, Peter Eisentraut)
     <ulink url="&commit_baseurl;761c79508">&sect;</ulink>
     </para>

     <para>
     This avoids storing <application>postgres_fdw</application>
     authentication information in the database, and is
     enabled with the <application>postgres_fdw</application> <link
     linkend="postgres-fdw-option-use-scram-passthrough"><literal>use_scram_passthrough</literal></link>
     connection option.  libpq uses new connection parameters
     <xref linkend="libpq-connect-scram-client-key"/> and <xref
     linkend="libpq-connect-scram-server-key"/>.
     </para>
     </listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-03-26 [3642df265] dblink: SCRAM authentication pass-through
-->

     <listitem>
     <para>
     Allow <acronym>SCRAM</acronym> authentication from the client to be
     passed to <xref linkend="dblink"/> servers (Matheus Alcantara)
     <ulink url="&commit_baseurl;3642df265">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-10-03 [a1c4c8a9e] file_fdw: Add on_error and log_verbosity options to file
-->

     <listitem>
     <para>
     Add <literal>on_error</literal> and <literal>log_verbosity</literal>
     options to <xref linkend="file-fdw"/> (Atsushi Torikoshi)
     <ulink url="&commit_baseurl;a1c4c8a9e">&sect;</ulink>
     </para>

     <para>
     These control how <application>file_fdw</application> handles and
     reports invalid file rows.
     </para>
     </listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2024-11-20 [6c8f67032] file_fdw: Add REJECT_LIMIT option to file_fdw.
-->

     <listitem>
     <para>
     Add <literal>reject_limit</literal> to control the number of
     invalid rows <application>file_fdw</application> can ignore (Atsushi
     Torikoshi)
     <ulink url="&commit_baseurl;6c8f67032">&sect;</ulink>
     </para>

     <para>
     This is active when <literal>ON_ERROR = 'ignore'</literal>.
     </para>
     </listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-01-07 [f7e1b3828] Add passwordcheck.min_password_length.
-->

     <listitem>
     <para>
     Add configurable variable <varname>min_password_length</varname> to
     <xref linkend="passwordcheck"/> (Emanuele Musella, Maurizio Boriani)
     <ulink url="&commit_baseurl;f7e1b3828">&sect;</ulink>
     </para>

     <para>
     This controls the minimum password length.
     </para>
     </listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2024-10-11 [cae0f3c40] pgbench: Improve result outputs related to failed transa
-->

     <listitem>
     <para>
     Have <xref linkend="pgbench"/> report the number of failed, retried,
     or skipped transactions in per-script reports (Yugo Nagata)
     <ulink url="&commit_baseurl;cae0f3c40">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-03-16 [448904423] contrib/isn: Make weak mode a GUC setting, and fix relat
-->

     <listitem>
     <para>
     Add <xref linkend="isn"/> server variable <literal>weak</literal>
     to control invalid check digit acceptance (Viktor Holmberg)
     <ulink url="&commit_baseurl;448904423">&sect;</ulink>
     </para>

     <para>
     This was previously only controlled by function <link
     linkend="isn-functions"><function>isn_weak()</function></link>.
     </para>
     </listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-04-03 [e4309f73f] Add support for sorted gist index builds to btree_gist
-->

     <listitem>
     <para>
     Allow values to be sorted to speed <xref linkend="btree-gist"/>
     index builds (Bernd Helmle, Andrey Borodin)
     <ulink url="&commit_baseurl;e4309f73f">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2025-03-29 [14ffaece0] amcheck: Add gin_index_check() to verify GIN index
-->

     <listitem>
     <para>
     Add <xref linkend="amcheck"/> check function <link
     linkend="amcheck-functions"><function>gin_index_check()</function></link>
     to verify <literal>GIN</literal> indexes (Grigory Kryachko, Heikki
     Linnakangas, Andrey Borodin)
     <ulink url="&commit_baseurl;14ffaece0">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-04-08 [dcf7e1697] Add pg_buffercache_evict_{relation,all} functions
-->

     <listitem>
     <para>
     Add functions <link
     linkend="pgbuffercache-pg-buffercache-evict-relation"><function>pg_buffercache_evict_relation()</function></link>
     and <link
     linkend="pgbuffercache-pg-buffercache-evict-all"><function>pg_buffercache_evict_all()</function></link>
     to evict unpinned shared buffers (Nazir Bilal Yavuz)
     <ulink url="&commit_baseurl;dcf7e1697">&sect;</ulink>
     </para>

     <para>
     The existing function <link
     linkend="pgbuffercache-pg-buffercache-evict"><function>pg_buffercache_evict()</function></link>
     now returns the buffer flush status.
     </para>
     </listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-03-18 [c65bc2e1d] Make it possible for loadable modules to add EXPLAIN opt
Author: Robert Haas <rhaas@postgresql.org>
2025-03-18 [4fd02bf7c] Add some new hooks so extensions can add details to EXPL
Author: Robert Haas <rhaas@postgresql.org>
2025-03-20 [50ba65e73] Add an additional hook for EXPLAIN option validation.
-->

     <listitem>
     <para>
     Allow extensions to install custom <xref linkend="sql-explain"/>
     options (Robert Haas, Sami Imseih)
     <ulink url="&commit_baseurl;c65bc2e1d">&sect;</ulink>
     <ulink url="&commit_baseurl;4fd02bf7c">&sect;</ulink>
     <ulink url="&commit_baseurl;50ba65e73">&sect;</ulink>
     </para>
     </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-08-04 [7949d9594] Introduce pluggable APIs for Cumulative Statistics
Author: Michael Paquier <michael@paquier.xyz>
2024-08-05 [2eff9e678] Add helper routines to retrieve data for custom fixed-nu
-->

     <listitem>
     <para>
     Allow extensions to use the server's cumulative statistics
     <acronym>API</acronym> (Michael Paquier)
     <ulink url="&commit_baseurl;7949d9594">&sect;</ulink>
     <ulink url="&commit_baseurl;2eff9e678">&sect;</ulink>
     </para>
     </listitem>

    </itemizedlist>

    <sect4 id="release-18-pgstatstatements">
     <title><xref linkend="pgstatstatements"/></title>

     <itemizedlist>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-28 [6b652e6ce] Set query ID for inner queries of CREATE TABLE AS and DE
-->

      <listitem>
      <para>
      Allow the queries of <xref linkend="sql-createtableas"/>
      and <xref linkend="sql-declare"/> to be tracked by
      <application>pg_stat_statements</application> (Anthonin Bonnefoy)
      <ulink url="&commit_baseurl;6b652e6ce">&sect;</ulink>
      </para>

      <para>
      They are also now assigned query ids.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-09-30 [dc6851596] Show values of SET statements as constants in pg_stat_st
-->

      <listitem>
      <para>
      Allow the parameterization of <xref linkend="sql-set"/> values in
      <application>pg_stat_statements</application> (Greg Sabino Mullane,
      Michael Paquier)
      <ulink url="&commit_baseurl;dc6851596">&sect;</ulink>
      </para>

      <para>
      This reduces the bloat caused by <command>SET</command> statements
      with differing constants.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2024-10-09 [cf54a2c00] pg_stat_statements: Add columns to track parallel worker
-->

      <listitem>
      <para>
      Add <link
      linkend="pgstatstatements-pg-stat-statements"><structname>pg_stat_statements</structname></link>
      columns to report parallel activity (Guillaume Lelarge)
      <ulink url="&commit_baseurl;cf54a2c00">&sect;</ulink>
      </para>

      <para>
      The new columns are
      <structfield>parallel_workers_to_launch</structfield> and
      <structfield>parallel_workers_launched</structfield>.
      </para>
      </listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-02-17 [ce5bcc4a9] pg_stat_statements: Add wal_buffers_full
-->

      <listitem>
      <para>
      Add
      <structname>pg_stat_statements</structname>.<structfield>wal_buffers_full</structfield>
      to report full <acronym>WAL</acronym> buffers (Bertrand Drouvot)
      <ulink url="&commit_baseurl;ce5bcc4a9">&sect;</ulink>
      </para>
      </listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-18-pgcrypto">
     <title><xref linkend="pgcrypto"/></title>

     <itemizedlist>

<!--
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
2025-04-05 [749a9e20c] Add modern SHA-2 based password hashes to pgcrypto.
-->

      <listitem>
      <para>
      Add <application>pgcrypto</application> algorithms <link
      linkend="pgcrypto-crypt-algorithms"><literal>sha256crypt</literal></link>
      and <link
      linkend="pgcrypto-crypt-algorithms"><literal>sha512crypt</literal></link>
      (Bernd Helmle)
      <ulink url="&commit_baseurl;749a9e20c">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-02-14 [9ad1b3d01] pgcrypto: Add support for CFB mode in AES encryption
-->

      <listitem>
      <para>
      Add <link
      linkend="pgcrypto-raw-enc-funcs"><acronym>CFB</acronym></link> mode
      to <application>pgcrypto</application> encryption and decryption
      (Umar Hayat)
      <ulink url="&commit_baseurl;9ad1b3d01">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-01-24 [924d89a35] pgcrypto: Add function to check FIPS mode
-->

      <listitem>
      <para>
      Add function <link
      linkend="pgcrypto-openssl-support-funcs"><function>fips_mode()</function></link>
      to report the server's <acronym>FIPS</acronym> mode (Daniel
      Gustafsson)
      <ulink url="&commit_baseurl;924d89a35">&sect;</ulink>
      </para>
      </listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-01-24 [035f99cbe] pgcrypto: Make it possible to disable built-in crypto
-->

      <listitem>
      <para>
      Add <application>pgcrypto</application> server variable <link
      linkend="pgcrypto-configuration-parameters-builtin_crypto_enabled"><varname>builtin_crypto_enabled</varname></link>
      to allow disabling builtin non-<acronym>FIPS</acronym> mode
      cryptographic functions (Daniel Gustafsson, Joe Conway)
      <ulink url="&commit_baseurl;035f99cbe">&sect;</ulink>
      </para>

      <para>
      This is useful for guaranteeing <acronym>FIPS</acronym> mode behavior.
      </para>
      </listitem>

     </itemizedlist>
    </sect4>

   </sect3>

  </sect2>

  <sect2 id="release-18-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>Abhishek Chanda</member>
    <member>Adam Guo</member>
    <member>Adam Rauch</member>
    <member>Aidar Imamov</member>
    <member>Ajin Cherian</member>
    <member>Alastair Turner</member>
    <member>Alec Cozens</member>
    <member>Aleksander Alekseev</member>
    <member>Alena Rybakina</member>
    <member>Alex Friedman</member>
    <member>Alex Richman</member>
    <member>Alexander Alehin</member>
    <member>Alexander Borisov</member>
    <member>Alexander Korotkov</member>
    <member>Alexander Kozhemyakin</member>
    <member>Alexander Kukushkin</member>
    <member>Alexander Kuzmenkov</member>
    <member>Alexander Kuznetsov</member>
    <member>Alexander Lakhin</member>
    <member>Alexander Pyhalov</member>
    <member>Alexandra Wang</member>
    <member>Alexey Dvoichenkov</member>
    <member>Alexey Makhmutov</member>
    <member>Alexey Shishkin</member>
    <member>Ali Akbar</member>
    <member>Álvaro Herrera</member>
    <member>Álvaro Mongil</member>
    <member>Amit Kapila</member>
    <member>Amit Langote</member>
    <member>Amul Sul</member>
    <member>Andreas Karlsson</member>
    <member>Andreas Scherbaum</member>
    <member>Andreas Ulbrich</member>
    <member>Andrei Lepikhov</member>
    <member>Andres Freund</member>
    <member>Andrew</member>
    <member>Andrew Bille</member>
    <member>Andrew Dunstan</member>
    <member>Andrew Jackson</member>
    <member>Andrew Kane</member>
    <member>Andrew Watkins</member>
    <member>Andrey Borodin</member>
    <member>Andrey Chudnovsky</member>
    <member>Andrey Rachitskiy</member>
    <member>Andrey Rudometov</member>
    <member>Andy Alsup</member>
    <member>Andy Fan</member>
    <member>Anthonin Bonnefoy</member>
    <member>Anthony Hsu</member>
    <member>Anthony Leung</member>
    <member>Anton Melnikov</member>
    <member>Anton Voloshin</member>
    <member>Antonin Houska</member>
    <member>Antti Lampinen</member>
    <member>Arseniy Mukhin</member>
    <member>Artur Zakirov</member>
    <member>Arun Thirupathi</member>
    <member>Ashutosh Bapat</member>
    <member>Asphator</member>
    <member>Atsushi Torikoshi</member>
    <member>Avi Weinberg</member>
    <member>Aya Iwata</member>
    <member>Ayush Tiwari</member>
    <member>Ayush Vatsa</member>
    <member>Bastien Roucariès</member>
    <member>Ben Peachey Higdon</member>
    <member>Benoit Lobréau</member>
    <member>Bernd Helmle</member>
    <member>Bernd Reiß</member>
    <member>Bernhard Wiedemann</member>
    <member>Bertrand Drouvot</member>
    <member>Bertrand Mamasam</member>
    <member>Bharath Rupireddy</member>
    <member>Bogdan Grigorenko</member>
    <member>Boyu Yang</member>
    <member>Braulio Fdo Gonzalez</member>
    <member>Bruce Momjian</member>
    <member>Bykov Ivan</member>
    <member>Cameron Vogt</member>
    <member>Cary Huang</member>
    <member>Cédric Villemain</member>
    <member>Cees van Zeeland</member>
    <member>ChangAo Chen</member>
    <member>Chao Li</member>
    <member>Chapman Flack</member>
    <member>Charles Samborski</member>
    <member>Chengwen Wu</member>
    <member>Chengxi Sun</member>
    <member>Chiranmoy Bhattacharya</member>
    <member>Chris Gooch</member>
    <member>Christian Charukiewicz</member>
    <member>Christoph Berg</member>
    <member>Christophe Courtois</member>
    <member>Christopher Inokuchi</member>
    <member>Clemens Ruck</member>
    <member>Corey Huinker</member>
    <member>Craig Milhiser</member>
    <member>Crisp Lee</member>
    <member>Dagfinn Ilmari Mannsåker</member>
    <member>Daniel Elishakov</member>
    <member>Daniel Gustafsson</member>
    <member>Daniel Vérité</member>
    <member>Daniel Westermann</member>
    <member>Daniele Varrazzo</member>
    <member>Daniil Davydov</member>
    <member>Daria Shanina</member>
    <member>Dave Cramer</member>
    <member>Dave Page</member>
    <member>David Benjamin</member>
    <member>David Christensen</member>
    <member>David Fiedler</member>
    <member>David G. Johnston</member>
    <member>David Geier</member>
    <member>David Rowley</member>
    <member>David Steele</member>
    <member>David Wheeler</member>
    <member>David Zhang</member>
    <member>Davinder Singh</member>
    <member>Dean Rasheed</member>
    <member>Devanga Susmitha</member>
    <member>Devrim Gündüz</member>
    <member>Dian Fay</member>
    <member>Dilip Kumar</member>
    <member>Dimitrios Apostolou</member>
    <member>Dipesh Dhameliya</member>
    <member>Dmitrii Bondar</member>
    <member>Dmitry Dolgov</member>
    <member>Dmitry Koval</member>
    <member>Dmitry Kovalenko</member>
    <member>Dmitry Yurichev</member>
    <member>Dominique Devienne</member>
    <member>Donghang Lin</member>
    <member>Dorjpalam Batbaatar</member>
    <member>Drew Callahan</member>
    <member>Duncan Sands</member>
    <member>Dwayne Towell</member>
    <member>Dzmitry Jachnik</member>
    <member>Egor Chindyaskin</member>
    <member>Egor Rogov</member>
    <member>Emanuel Ionescu</member>
    <member>Emanuele Musella</member>
    <member>Emre Hasegeli</member>
    <member>Eric Cyr</member>
    <member>Erica Zhang</member>
    <member>Erik Nordström</member>
    <member>Erik Rijkers</member>
    <member>Erik Wienhold</member>
    <member>Erki Eessaar</member>
    <member>Ethan Mertz</member>
    <member>Etienne LAFARGE</member>
    <member>Etsuro Fujita</member>
    <member>Euler Taveira</member>
    <member>Evan Si</member>
    <member>Evgeniy Gorbanev</member>
    <member>Fabio R. Sluzala</member>
    <member>Fabrízio de Royes Mello</member>
    <member>Feike Steenbergen</member>
    <member>Feliphe Pozzer</member>
    <member>Felix</member>
    <member>Fire Emerald</member>
    <member>Florents Tselai</member>
    <member>Francesco Degrassi</member>
    <member>Frank Streitzig</member>
    <member>Frédéric Yhuel</member>
    <member>Fredrik Widlert</member>
    <member>Gabriele Bartolini</member>
    <member>Gavin Panella</member>
    <member>Geoff Winkless</member>
    <member>George MacKerron</member>
    <member>Gilles Darold</member>
    <member>Grant Gryczan</member>
    <member>Greg Burd</member>
    <member>Greg Sabino Mullane</member>
    <member>Greg Stark</member>
    <member>Grigory Kryachko</member>
    <member>Guillaume Lelarge</member>
    <member>Gunnar Morling</member>
    <member>Gunnar Wagner</member>
    <member>Gurjeet Singh</member>
    <member>Haifang Wang</member>
    <member>Hajime Matsunaga</member>
    <member>Hamid Akhtar</member>
    <member>Hannu Krosing</member>
    <member>Hari Krishna Sunder</member>
    <member>Haruka Takatsuka</member>
    <member>Hayato Kuroda</member>
    <member>Heikki Linnakangas</member>
    <member>Hironobu Suzuki</member>
    <member>Holger Jakobs</member>
    <member>Hubert Lubaczewski</member>
    <member>Hugo Dubois</member>
    <member>Hugo Zhang</member>
    <member>Hunaid Sohail</member>
    <member>Hywel Carver</member>
    <member>Ian Barwick</member>
    <member>Ibrar Ahmed</member>
    <member>Igor Gnatyuk</member>
    <member>Igor Korot</member>
    <member>Ilia Evdokimov</member>
    <member>Ilya Gladyshev</member>
    <member>Ilyasov Ian</member>
    <member>Imran Zaheer</member>
    <member>Isaac Morland</member>
    <member>Israel Barth Rubio</member>
    <member>Ivan Kush</member>
    <member>Jacob Brazeal</member>
    <member>Jacob Champion</member>
    <member>Jaime Casanova</member>
    <member>Jakob Egger</member>
    <member>Jakub Wartak</member>
    <member>James Coleman</member>
    <member>James Hunter</member>
    <member>Jan Behrens</member>
    <member>Japin Li</member>
    <member>Jason Smith</member>
    <member>Jayesh Dehankar</member>
    <member>Jeevan Chalke</member>
    <member>Jeff Davis</member>
    <member>Jehan-Guillaume de Rorthais</member>
    <member>Jelte Fennema-Nio</member>
    <member>Jian He</member>
    <member>Jianghua Yang</member>
    <member>Jiao Shuntian</member>
    <member>Jim Jones</member>
    <member>Jim Nasby</member>
    <member>Jingtang Zhang</member>
    <member>Jingzhou Fu</member>
    <member>Joe Conway</member>
    <member>Joel Jacobson</member>
    <member>John Hutchins</member>
    <member>John Naylor</member>
    <member>Jonathan Katz</member>
    <member>Jorge Solórzano</member>
    <member>José Villanova</member>
    <member>Josef Šimánek</member>
    <member>Joseph Koshakow</member>
    <member>Julien Rouhaud</member>
    <member>Junwang Zhao</member>
    <member>Justin Pryzby</member>
    <member>Kaido Vaikla</member>
    <member>Kaimeh</member>
    <member>Karina Litskevich</member>
    <member>Karthik S</member>
    <member>Kartyshov Ivan</member>
    <member>Kashif Zeeshan</member>
    <member>Keisuke Kuroda</member>
    <member>Kevin Hale Boyes</member>
    <member>Kevin K Biju</member>
    <member>Kirill Reshke</member>
    <member>Kirill Zdornyy</member>
    <member>Koen De Groote</member>
    <member>Koichi Suzuki</member>
    <member>Koki Nakamura</member>
    <member>Konstantin Knizhnik</member>
    <member>Kouhei Sutou</member>
    <member>Kuntal Ghosh</member>
    <member>Kyotaro Horiguchi</member>
    <member>Lakshmi Narayana Velayudam</member>
    <member>Lars Kanis</member>
    <member>Laurence Parry</member>
    <member>Laurenz Albe</member>
    <member>Lele Gaifax</member>
    <member>Li Yong</member>
    <member>Lilian Ontowhee</member>
    <member>Lingbin Meng</member>
    <member>Luboslav Špilák</member>
    <member>Luca Vallisa</member>
    <member>Lukas Fittl</member>
    <member>Maciek Sakrejda</member>
    <member>Magnus Hagander</member>
    <member>Mahendra Singh Thalor</member>
    <member>Mahendrakar Srinivasarao</member>
    <member>Maiquel Grassi</member>
    <member>Maksim Korotkov</member>
    <member>Maksim Melnikov</member>
    <member>Man Zeng</member>
    <member>Marat Buharov</member>
    <member>Marc Balmer</member>
    <member>Marco Nenciarini</member>
    <member>Marcos Pegoraro</member>
    <member>Marina Polyakova</member>
    <member>Mark Callaghan</member>
    <member>Mark Dilger</member>
    <member>Marlene Brandstaetter</member>
    <member>Marlene Reiterer</member>
    <member>Martin Rakhmanov</member>
    <member>Masahiko Sawada</member>
    <member>Masahiro Ikeda</member>
    <member>Masao Fujii</member>
    <member>Mason Mackaman</member>
    <member>Mat Arye</member>
    <member>Matheus Alcantara</member>
    <member>Mats Kindahl</member>
    <member>Matthew Gabeler-Lee</member>
    <member>Matthew Kim</member>
    <member>Matthew Sterrett</member>
    <member>Matthew Woodcraft</member>
    <member>Matthias van de Meent</member>
    <member>Matthieu Denais</member>
    <member>Maurizio Boriani</member>
    <member>Max Johnson</member>
    <member>Max Madden</member>
    <member>Maxim Boguk</member>
    <member>Maxim Orlov</member>
    <member>Maximilian Chrzan</member>
    <member>Melanie Plageman</member>
    <member>Melih Mutlu</member>
    <member>Mert Alev</member>
    <member>Michael Banck</member>
    <member>Michael Bondarenko</member>
    <member>Michael Christofides</member>
    <member>Michael Guissine</member>
    <member>Michael Harris</member>
    <member>Michaël Paquier</member>
    <member>Michail Nikolaev</member>
    <member>Michal Kleczek</member>
    <member>Michel Pelletier</member>
    <member>Mikaël Gourlaouen</member>
    <member>Mikhail Gribkov</member>
    <member>Mikhail Kot</member>
    <member>Milosz Chmura</member>
    <member>Muralikrishna Bandaru</member>
    <member>Murat Efendioglu</member>
    <member>Mutaamba Maasha</member>
    <member>Naeem Akhter</member>
    <member>Nat Makarevitch</member>
    <member>Nathan Bossart</member>
    <member>Navneet Kumar</member>
    <member>Nazir Bilal Yavuz</member>
    <member>Neil Conway</member>
    <member>Niccolò Fei</member>
    <member>Nick Davies</member>
    <member>Nicolas Maus</member>
    <member>Niek Brasa</member>
    <member>Nikhil Raj</member>
    <member>Nikita</member>
    <member>Nikita Kalinin</member>
    <member>Nikita Malakhov</member>
    <member>Nikolay Samokhvalov</member>
    <member>Nikolay Shaplov</member>
    <member>Nisha Moond</member>
    <member>Nitin Jadhav</member>
    <member>Nitin Motiani</member>
    <member>Noah Misch</member>
    <member>Noboru Saito</member>
    <member>Noriyoshi Shinoda</member>
    <member>Ole Peder Brandtzæg</member>
    <member>Oleg Sibiryakov</member>
    <member>Oleg Tselebrovskiy</member>
    <member>Olleg Samoylov</member>
    <member>Onder Kalaci</member>
    <member>Ondrej Navratil</member>
    <member>Patrick Stählin</member>
    <member>Paul Amonson</member>
    <member>Paul Jungwirth</member>
    <member>Paul Ramsey</member>
    <member>Pavel Borisov</member>
    <member>Pavel Luzanov</member>
    <member>Pavel Nekrasov</member>
    <member>Pavel Stehule</member>
    <member>Peter Eisentraut</member>
    <member>Peter Geoghegan</member>
    <member>Peter Mittere</member>
    <member>Peter Smith</member>
    <member>Phil Eaton</member>
    <member>Philipp Salvisberg</member>
    <member>Philippe Beaudoin</member>
    <member>Pierre Giraud</member>
    <member>Pixian Shi</member>
    <member>Polina Bungina</member>
    <member>Przemyslaw Sztoch</member>
    <member>Quynh Tran</member>
    <member>Rafia Sabih</member>
    <member>Raghuveer Devulapalli</member>
    <member>Rahila Syed</member>
    <member>Rama Malladi</member>
    <member>Ran Benita</member>
    <member>Ranier Vilela</member>
    <member>Renan Alves Fonseca</member>
    <member>Richard Guo</member>
    <member>Richard Neill</member>
    <member>Rintaro Ikeda</member>
    <member>Robert Haas</member>
    <member>Robert Treat</member>
    <member>Robins Tharakan</member>
    <member>Roman Zharkov</member>
    <member>Ronald Cruz</member>
    <member>Ronan Dunklau</member>
    <member>Rui Zhao</member>
    <member>Rushabh Lathia</member>
    <member>Rustam Allakov</member>
    <member>Ryo Kanbayashi</member>
    <member>Ryohei Takahashi</member>
    <member>RyotaK</member>
    <member>Sagar Dilip Shedge</member>
    <member>Salvatore Dipietro</member>
    <member>Sam Gabrielsson</member>
    <member>Sam James</member>
    <member>Sameer Kumar</member>
    <member>Sami Imseih</member>
    <member>Samuel Thibault</member>
    <member>Satyanarayana Narlapuram</member>
    <member>Sebastian Skalacki</member>
    <member>Senglee Choi</member>
    <member>Sergei Kornilov</member>
    <member>Sergey Belyashov</member>
    <member>Sergey Dudoladov</member>
    <member>Sergey Prokhorenko</member>
    <member>Sergey Sargsyan</member>
    <member>Sergey Soloviev</member>
    <member>Sergey Tatarintsev</member>
    <member>Shaik Mohammad Mujeeb</member>
    <member>Shawn McCoy</member>
    <member>Shenhao Wang</member>
    <member>Shihao Zhong</member>
    <member>Shinya Kato</member>
    <member>Shlok Kyal</member>
    <member>Shubham Khanna</member>
    <member>Shveta Malik</member>
    <member>Simon Riggs</member>
    <member>Smolkin Grigory</member>
    <member>Sofia Kopikova</member>
    <member>Song Hongyu</member>
    <member>Song Jinzhou</member>
    <member>Soumyadeep Chakraborty</member>
    <member>Sravan Kumar</member>
    <member>Srinath Reddy</member>
    <member>Stan Hu</member>
    <member>Stepan Neretin</member>
    <member>Stephen Fewer</member>
    <member>Stephen Frost</member>
    <member>Steve Chavez</member>
    <member>Steven Niu</member>
    <member>Suraj Kharage</member>
    <member>Sven Klemm</member>
    <member>Takamichi Osumi</member>
    <member>Takeshi Ideriha</member>
    <member>Tatsuo Ishii</member>
    <member>Ted Yu</member>
    <member>Tels</member>
    <member>Tender Wang</member>
    <member>Teodor Sigaev</member>
    <member>Thom Brown</member>
    <member>Thomas Baehler</member>
    <member>Thomas Krennwallner</member>
    <member>Thomas Munro</member>
    <member>Tim Wood</member>
    <member>Timur Magomedov</member>
    <member>Tobias Wendorff</member>
    <member>Todd Cook</member>
    <member>Tofig Aliev</member>
    <member>Tom Lane</member>
    <member>Tomas Vondra</member>
    <member>Tomasz Rybak</member>
    <member>Tomasz Szypowski</member>
    <member>Torsten Foertsch</member>
    <member>Toshi Harada</member>
    <member>Tristan Partin</member>
    <member>Triveni N</member>
    <member>Umar Hayat</member>
    <member>Vallimaharajan G</member>
    <member>Vasya Boytsov</member>
    <member>Victor Yegorov</member>
    <member>Vignesh C</member>
    <member>Viktor Holmberg</member>
    <member>Vinícius Abrahão</member>
    <member>Vinod Sridharan</member>
    <member>Virender Singla</member>
    <member>Vitaly Davydov</member>
    <member>Vladlen Popolitov</member>
    <member>Vladyslav Nebozhyn</member>
    <member>Walid Ibrahim</member>
    <member>Webbo Han</member>
    <member>Wenhui Qiu</member>
    <member>Will Mortensen</member>
    <member>Will Storey</member>
    <member>Wolfgang Walther</member>
    <member>Xin Zhang</member>
    <member>Xing Guo</member>
    <member>Xuneng Zhou</member>
    <member>Yan Chengpen</member>
    <member>Yang Lei</member>
    <member>Yaroslav Saburov</member>
    <member>Yaroslav Syrytsia</member>
    <member>Yasir Hussain</member>
    <member>Yasuo Honda</member>
    <member>Yogesh Sharma</member>
    <member>Yonghao Lee</member>
    <member>Yoran Heling</member>
    <member>Yu Liang</member>
    <member>Yugo Nagata</member>
    <member>Yuhang Qiu</member>
    <member>Yuki Seino</member>
    <member>Yura Sokolov</member>
    <member>Yurii Rashkovskii</member>
    <member>Yushi Ogiwara</member>
    <member>Yusuke Sugie</member>
    <member>Yuta Katsuragi</member>
    <member>Yuto Sasaki</member>
    <member>Yuuki Fujii</member>
    <member>Yuya Watari</member>
    <member>Zane Duffield</member>
    <member>Zeyuan Hu</member>
    <member>Zhang Mingli</member>
    <member>Zhihong Yu</member>
    <member>Zhijie Hou</member>
    <member>Zsolt Parragi</member>
   </simplelist>
  </sect2>

 </sect1>
