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

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

 <formalpara>
  <title>Release date:</title>
  <para>2026-??-??, AS OF 2026-07-18</para>
 </formalpara>

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

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

   <itemizedlist>
    <listitem>
     <para>
      Support for
      <link linkend="ddl-property-graphs">property graph queries</link>
      (<acronym>SQL/PGQ</acronym>).
     </para>
    </listitem>

    <listitem>
     <para>
      A new <link linkend="sql-repack"><command>REPACK</command></link> command
      that reclaims disk space and reorganizes table contents, combining the
      functionality of the existing <command>VACUUM FULL</command> and
      <command>CLUSTER</command> commands.  Its <literal>CONCURRENTLY</literal>
      option allows repacking without blocking reads and writes to the table.
     </para>
    </listitem>

    <listitem>
     <para>
      Logical replication now
      <link linkend="logical-replication-sequences">replicates sequence values</link>
      and can be enabled without a server restart when
      <xref linkend="guc-wal-level"/> is set to <literal>replica</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
      Autovacuum can now use
      <link linkend="guc-autovacuum-max-parallel-workers">parallel worker processes</link>
      to vacuum a table's indexes, and a
      <link linkend="autovacuum-priority">new scoring system</link> prioritizes
      the tables that most need vacuuming or analyzing.
     </para>
    </listitem>

    <listitem>
     <para>
      Data checksums can now be
      <link linkend="checksums-online-enable-disable">enabled or disabled while the database server is running</link>.
     </para>
    </listitem>

    <listitem>
     <para>
      A new <link linkend="sql-wait-for"><command>WAIT FOR</command></link>
      command that waits until a standby has replayed changes up to a chosen
      point, thereby supporting <quote>read-your-writes</quote> query patterns
      on standbys.
     </para>
    </listitem>

    <listitem>
     <para>
      Support for temporal updates and deletes via the new
      <link linkend="dml-application-time-update-delete"><literal>FOR PORTION OF</literal></link>
      clause.
     </para>
    </listitem>

    <listitem>
     <para>
      A new
      <link linkend="pgplanadvice"><application>pg_plan_advice</application></link>
      extension for stabilizing and controlling the query planner's decisions,
      and a companion
      <link linkend="pgstashadvice"><application>pg_stash_advice</application></link>
      extension that applies this advice automatically based on the query.
     </para>
    </listitem>

    <listitem>
     <para>
      Better performance in many areas, including automatic scaling of the
      number of I/O worker processes, quicker foreign-key checks, and further
      planning and execution optimizations.
     </para>
    </listitem>
   </itemizedlist>

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

  </sect2>

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

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

   <itemizedlist>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-02-11 [1d92e0c2c] Add password expiration warnings.
-->

<listitem>
<para>
Add server variable <link linkend="guc-password-expiration-warning-threshold"><varname>password_expiration_warning_threshold</varname></link> to warn about password expiration (Gilles Darold, Nathan Bossart)
<ulink url="&commit_baseurl;1d92e0c2c">&sect;</ulink>
</para>

<para>
The default warning period is seven days.
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-02-23 [bc60ee860] Warn upon successful MD5 password authentication.
-->

<listitem>
<para>
Issue a warning after successful MD5 password authentication (Nathan Bossart)
<ulink url="&commit_baseurl;bc60ee860">&sect;</ulink>
</para>

<para>
The warning can be disabled via server variable <link linkend="guc-md5-password-warnings"><varname>md5_password_warnings</varname></link>.  MD5 passwords were marked as deprecated in <productname>PostgreSQL</productname> 18.
</para>
</listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2026-04-08 [a1643d40b] Remove RADIUS support.
-->

<listitem>
<para>
Remove <acronym>RADIUS</acronym> support (Thomas Munro)
<ulink url="&commit_baseurl;a1643d40b">&sect;</ulink>
</para>

<para>
<productname>PostgreSQL</productname> only supported <acronym>RADIUS</acronym> over <acronym>UDP</acronym>, which is unfixably insecure.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-01-21 [457620845] Force standard_conforming_strings to always be ON.
-->

<listitem>
<para>
Force <link linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</varname></link> to always be <literal>on</literal> in the database server (Tom Lane)
<ulink url="&commit_baseurl;457620845">&sect;</ulink>
</para>

<para>
Dumps created using pre-<productname>PostgreSQL</productname> 19 versions of <link linkend="app-pgdump"><application>pg_dump</application></link>
or <link linkend="app-pg-dumpall"><application>pg_dumpall</application></link>, and using <literal>standard_conforming_strings = off</literal>,
will not properly load into <productname>PostgreSQL</productname> 19 and later servers.  Users should create dumps using <productname>PostgreSQL</productname> 19
or later versions of these applications, or use <literal>standard_conforming_strings = on</literal>.
</para>

<para>
Client applications still support operations with servers having <literal>standard_conforming_strings = off</literal>, for compatibility with old servers.  The server variable <varname>escape_string_warning</varname> has been removed as unnecessary.
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-02-23 [b380a56a3] Disallow CR and LF in database, role, and tablespace nam
-->

<listitem>
<para>
Disallow carriage returns and line feeds in database, role, and tablespace names (Mahendra Singh Thalor)
<ulink url="&commit_baseurl;b380a56a3">&sect;</ulink>
</para>

<para>
<link linkend="pgupgrade"><application>pg_upgrade</application></link> will also disallow upgrading of clusters that use such names.  This was changed to avoid security problems.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-01-08 [b3b0b4571] Create btree_gist v1.9, in which inet/cidr opclasses are
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-01-08 [b352d3d80] Mark GiST inet_ops as opcdefault, and deal with ensuing
-->

<listitem>
<para>
Change the default index opclasses for <link linkend="datatype-net-types"><type>inet</type></link> and <link linkend="datatype-net-types"><type>cidr</type></link> data types from <xref linkend="btree-gist"/> to <link linkend="gist">GiST</link> (Tom Lane)
<ulink url="&commit_baseurl;b3b0b4571">&sect;</ulink>
<ulink url="&commit_baseurl;b352d3d80">&sect;</ulink>
</para>

<para>
The <xref linkend="btree-gist"/> <type>inet</type>/<type>cidr</type> opclasses are broken because they can exclude rows that should be returned.  <link linkend="pgupgrade"><application>pg_upgrade</application></link> will disallow upgrading of clusters with <xref linkend="btree-gist"/> <type>inet</type>/<type>cidr</type> indexes.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-04-06 [a9c350d9e] Don't try to re-order the subcommands of CREATE SCHEMA.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-04-06 [404db8f9e] Execute foreign key constraints in CREATE SCHEMA at the
-->

<listitem>
<para>
Stop reordering non-schema objects created by <link linkend="sql-createschema"><command>CREATE SCHEMA</command></link> (Tom Lane, Jian He)
<ulink url="&commit_baseurl;a9c350d9e">&sect;</ulink>
<ulink url="&commit_baseurl;404db8f9e">&sect;</ulink>
</para>

<para>
The goal of the reordering was to avoid dependencies, but it was imperfect.  <productname>PostgreSQL</productname> now uses the specified object ordering, except for foreign keys which are created last.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-04-06 [21c69dc73] Disallow system columns in COPY FROM WHERE conditions.
-->

<listitem>
<para>
Disallow system columns from being used in <link linkend="sql-copy"><command>COPY FROM ... WHERE</command></link> (Tom Lane)
<ulink url="&commit_baseurl;21c69dc73">&sect;</ulink>
</para>

<para>
The values of such columns were not well-defined.
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2026-05-01 [8d829f5a0] Fix JSON_ARRAY(query) empty set handling and view depars
-->

<listitem>
<para>
Change a <link linkend="functions-json"><function>json_array()</function></link> call which returns no rows to return an empty <acronym>JSON</acronym> array (Richard Guo)
<ulink url="&commit_baseurl;8d829f5a0">&sect;</ulink>
</para>

<para>
This previously returned <literal>NULL</literal>.
</para>
</listitem>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2026-04-05 [de28140de] postgres_fdw: Inherit the local transaction's access/def
-->

<listitem>
<para>
Cause transactions to pass their <literal>READ ONLY</literal> and <literal>DEFERRABLE</literal> status to <xref linkend="postgres-fdw"/> sessions (Etsuro Fujita)
<ulink url="&commit_baseurl;de28140de">&sect;</ulink>
</para>

<para>
This means <literal>READ ONLY</literal> transactions can no longer modify rows processed by <xref linkend="postgres-fdw"/> sessions.
</para>
</listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2026-04-03 [79534f906] Change default of max_locks_per_transaction to 128
-->

<listitem>
<para>
Change default of <link linkend="guc-max-locks-per-transaction"><varname>max_locks_per_transaction</varname></link> from 64 to 128 (Heikki Linnakangas)
<ulink url="&commit_baseurl;79534f906">&sect;</ulink>
</para>

<para>
Lock size allocation has changed, so effectively settings must now be doubled to match their capacity in previous releases.
</para>
</listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2026-04-02 [7f8c88c2b] jit: Change the default to off.
-->

<listitem>
<para>
Change <link linkend="jit"><acronym>JIT</acronym></link> to be disabled by default (Jelte Fennema-Nio)
<ulink url="&commit_baseurl;7f8c88c2b">&sect;</ulink>
</para>

<para>
Previously <acronym>JIT</acronym> was enabled by default, and activated based on optimizer costs, but this costing has been determined to be unreliable.  This change requires sites that are doing many
large analytical queries to manually enable <acronym>JIT</acronym>.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-11-18 [3edaf29fa] Rename two columns in pg_stat_subscription_stats.
-->

<listitem>
<para>
Rename column <structfield>sync_error_count</structfield> to <structfield>sync_table_error_count</structfield> in system view <link linkend="pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link> (Vignesh C)
<ulink url="&commit_baseurl;3edaf29fa">&sect;</ulink>
</para>

<para>
This is necessary since sequence errors are now tracked separately.
</para>
</listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2025-12-03 [6c5c393b7] Rename BUFFERPIN wait event class to BUFFER
-->

<listitem>
<para>
Rename wait event type <literal>BUFFERPIN</literal> to <literal>BUFFER</literal> (Andres Freund)
<ulink url="&commit_baseurl;6c5c393b7">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-12-30 [bc6374cd7] Change IndexAmRoutines to be statically-allocated struct
-->

<listitem>
<para>
Change index access method handlers to use a static <link linkend="indexam"><structname>IndexAmRoutines</structname></link> structure, rather than dynamically allocated ones (Matthias van de Meent)
<ulink url="&commit_baseurl;bc6374cd7">&sect;</ulink>
</para>
</listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2026-03-09 [91f33a2ae] Replace get_relation_info_hook with build_simple_rel_hoo
-->

<listitem>
<para>
Remove optimizer hook get_relation_info_hook and add better-placed hook build_simple_rel_hook (Robert Haas)
<ulink url="&commit_baseurl;91f33a2ae">&sect;</ulink>
</para>
</listitem>

<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-06-26 [4df5fe383] 2026-06-26 Make crosstabview honor boolean/null display
-->

<listitem>
<para>
Change <link linkend="app-psql"><application>psql</application></link>'s <literal>\crosstabview</literal> command to honor the <literal>\pset null</literal> setting (Chao Li)
<ulink url="&commit_baseurl;4df5fe383">&sect;</ulink>
</para>
</listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2026-04-08 [77645d44e] Remove MULE_INTERNAL encoding.
-->

<listitem>
<para>
Remove <literal>MULE_INTERNAL</literal> encoding (Thomas Munro)
<ulink url="&commit_baseurl;77645d44e">&sect;</ulink>
</para>

<para>
This encoding was complex and rarely used.  Databases using it will need to be dumped and restored with a different encoding.
</para>
</listitem>

   </itemizedlist>

  </sect2>

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

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

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

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

     <itemizedlist>
<!--
Author: Richard Guo <rguo@postgresql.org>
2026-03-12 [383eb21eb] Convert NOT IN sublinks to anti-joins when safe
-->

<listitem>
<para>
Allow <literal>NOT IN</literal> clauses to be converted to more efficient <literal>ANTI JOIN</literal>s when NULLs are not present (Richard Guo)
<ulink url="&commit_baseurl;383eb21eb">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2026-02-12 [cf74558fe] Reduce LEFT JOIN to ANTI JOIN using NOT NULL constraints
-->

<listitem>
<para>
Allow more <literal>LEFT JOIN</literal>s to be converted to <literal>ANTI JOIN</literal>s (Tender Wang, Richard Guo)
<ulink url="&commit_baseurl;cf74558fe">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-07-03 [0da29e4cb] Enable use of Memoize for ANTI joins
-->

<listitem>
<para>
Allow use of Memoize for <literal>ANTI JOIN</literal>s with unique inner sides (Richard Guo)
<ulink url="&commit_baseurl;0da29e4cb">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-10-08 [8e1185910] Implement Eager Aggregation
Author: Richard Guo <rguo@postgresql.org>
2026-04-06 [bd94845e8] Fix collation handling for grouping keys in eager aggreg
Author: Richard Guo <rguo@postgresql.org>
2026-04-06 [3a08a2a8b] Fix volatile function evaluation in eager aggregation
-->

<listitem>
<para>
Allow some aggregate processing to be performed before joins (Richard Guo, Antonin Houska)
<ulink url="&commit_baseurl;8e1185910">&sect;</ulink>
<ulink url="&commit_baseurl;bd94845e8">&sect;</ulink>
<ulink url="&commit_baseurl;3a08a2a8b">&sect;</ulink>
</para>

<para>
This can reduce the number of rows needed to be processed.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-03-19 [1811f1af9] Improve hash join's handling of tuples with null join ke
-->

<listitem>
<para>
Improve hash join's handling of tuples with <literal>NULL</literal> join keys (Tom Lane)
<ulink url="&commit_baseurl;1811f1af9">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-08-19 [24225ad9a] Pathify RHS unique-ification for semijoin planning
-->

<listitem>
<para>
Improve the planning of semijoins (Richard Guo)
<ulink url="&commit_baseurl;24225ad9a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-07-08 [55a780e94] Consider explicit incremental sort for Append and MergeA
-->

<listitem>
<para>
Allow Append and MergeAppend to consider explicit incremental sorts (Richard Guo)
<ulink url="&commit_baseurl;55a780e94">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2026-02-10 [f41ab5157] Teach planner to transform "x IS [NOT] DISTINCT FROM NUL
-->

<listitem>
<para>
Convert <link linkend="functions-comparison-pred-table"><literal>IS [NOT] DISTINCT FROM NULL</literal></link> to <literal>IS [NOT] NULL</literal> during constant folding (Richard Guo)
<ulink url="&commit_baseurl;f41ab5157">&sect;</ulink>
</para>

<para>
The latter form is more easily optimized.
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2026-02-10 [0a3796125] Optimize IS DISTINCT FROM with non-nullable inputs
-->

<listitem>
<para>
Simplify <link linkend="functions-comparison-pred-table"><literal>IS [NOT] DISTINCT FROM</literal></link> to equality/inequality operators when inputs are proven non-nullable (Richard Guo)
<ulink url="&commit_baseurl;0a3796125">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-07-22 [e2debb643] Reduce "Var IS [NOT] NULL" quals during constant folding
-->

<listitem>
<para>
Perform earlier constant folding of  <replaceable>var</replaceable> <literal>IS [NOT] NULL</literal> in the optimizer (Richard Guo)
<ulink url="&commit_baseurl;e2debb643">&sect;</ulink>
</para>

<para>
This allows for later optimizations.
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-12-24 [10c4fe074] Simplify COALESCE expressions using non-nullable argumen
Author: Richard Guo <rguo@postgresql.org>
2025-12-24 [cb7b7ec7a] Optimize ROW(...) IS [NOT] NULL using non-nullable field
-->

<listitem>
<para>
Simplify <link linkend="functions-coalesce-nvl-ifnull"><function>COALESCE()</function></link> and <literal>ROW(...) IS [NOT] NULL</literal> to avoid evaluating unnecessary arguments (Richard Guo)
<ulink url="&commit_baseurl;10c4fe074">&sect;</ulink>
<ulink url="&commit_baseurl;cb7b7ec7a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2026-02-10 [0aaf0de7f] Optimize BooleanTest with non-nullable input
-->

<listitem>
<para>
Simplify <literal>IS [NOT] TRUE/FALSE/UNKNOWN</literal> to plain boolean expressions when the input is proven non-nullable (Richard Guo)
<ulink url="&commit_baseurl;0aaf0de7f">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-11-19 [057012b20] Speed up eqjoinsel() with lots of MCV entries.
-->

<listitem>
<para>
Speed up join selectivity computations for large optimizer statistics targets (Ilia Evdokimov, David Geier)
<ulink url="&commit_baseurl;057012b20">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-09-20 [1eccb9315] Re-allow using statistics for bool-valued functions in W
-->

<listitem>
<para>
Enable proper optimizer statistics for functions returning boolean values (Tom Lane)
<ulink url="&commit_baseurl;1eccb9315">&sect;</ulink>
</para>
</listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2026-04-01 [f7f4052a4] Add support for extended statistics on virtual generated
-->

<listitem>
<para>
Allow <link linkend="sql-createstatistics">extended statistics</link> on virtual generated columns (Yugo Nagata)
<ulink url="&commit_baseurl;f7f4052a4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-26 [0e80f3f88] Add pg_restore_extended_stats()
Author: Michael Paquier <michael@paquier.xyz>
2026-01-27 [302879bd6] Add support for "dependencies" in pg_restore_extended_st
Author: Michael Paquier <michael@paquier.xyz>
2026-01-29 [efbebb4e8] Add support for "mcv" in pg_restore_extended_stats()
Author: Michael Paquier <michael@paquier.xyz>
2026-03-03 [ba97bf9cb] Add support for "exprs" in pg_restore_extended_stats()
-->

<listitem>
<para>
Allow function <link linkend="functions-admin-statsmod"><function>pg_restore_extended_stats()</function></link> to restore optimizer extended statistics (Corey Huinker, Michael Paquier, Chao Li)
<ulink url="&commit_baseurl;0e80f3f88">&sect;</ulink>
<ulink url="&commit_baseurl;302879bd6">&sect;</ulink>
<ulink url="&commit_baseurl;efbebb4e8">&sect;</ulink>
<ulink url="&commit_baseurl;ba97bf9cb">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-16 [d756fa101] Add pg_clear_extended_stats()
-->

<listitem>
<para>
Add function <link linkend="functions-admin-statsmod"><function>pg_clear_extended_stats()</function></link> to remove extended statistics (Corey Huinker, Michael Paquier)
<ulink url="&commit_baseurl;d756fa101">&sect;</ulink>
</para>
</listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2026-03-09 [8300d3ad4] Consider startup cost as a figure of merit for partial p
-->

<listitem>
<para>
Adjust the optimizer to consider startup costs of partial paths (Robert Haas, Tomas Vondra)
<ulink url="&commit_baseurl;8300d3ad4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Richard Guo <rguo@postgresql.org>
2025-10-08 [185e30426] Allow negative aggtransspace to indicate unbounded state
-->

<listitem>
<para>
Allow negative values of <link linkend="catalog-pg-aggregate"><structname>pg_aggregate</structname></link>.<link linkend="catalog-pg-aggregate"><structfield>aggtransspace</structfield></link> to indicate unbounded memory usage (Richard Guo)
<ulink url="&commit_baseurl;185e30426">&sect;</ulink>
</para>

<para>
This information is used by the optimizer in planning memory usage.
</para>
</listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>
<!--
Author: Amit Langote <amitlan@postgresql.org>
2026-03-31 [2da86c1ef] Add fast path for foreign key constraint checks
Author: Amit Langote <amitlan@postgresql.org>
2026-04-01 [e484b0eea] Fix two issues in fast-path FK check introduced by commi
Author: Amit Langote <amitlan@postgresql.org>
2026-04-03 [b7b27eb41] Optimize fast-path FK checks with batched index probes
Author: Amit Langote <amitlan@postgresql.org>
2026-04-07 [5c54c3ed1] Fix deferred FK check batching introduced by commit b7b2
-->

<listitem>
<para>
Improve performance of foreign key constraint checks (Junwang Zhao, Amit Langote, Chao Li)
<ulink url="&commit_baseurl;2da86c1ef">&sect;</ulink>
<ulink url="&commit_baseurl;e484b0eea">&sect;</ulink>
<ulink url="&commit_baseurl;b7b27eb41">&sect;</ulink>
<ulink url="&commit_baseurl;5c54c3ed1">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2026-04-05 [a9ee66881] aio: io_uring: Trigger async processing for large IOs
Author: Andres Freund <andres@anarazel.de>
2026-04-05 [8ca147d58] read stream: Split decision about look ahead for AIO and
Author: Andres Freund <andres@anarazel.de>
2026-04-05 [f63ca3379] read_stream: Only increase read-ahead distance when wait
-->

<listitem>
<para>
Improve <link linkend="guc-io-method">asynchronous I/O</link> read-ahead scheduling for large requests (Andres Freund)
<ulink url="&commit_baseurl;a9ee66881">&sect;</ulink>
<ulink url="&commit_baseurl;8ca147d58">&sect;</ulink>
<ulink url="&commit_baseurl;f63ca3379">&sect;</ulink>
</para>
</listitem>

<!--
Author: Thomas Munro <tmunro@postgresql.org>
2026-04-08 [d1c01b79d] aio: Adjust I/O worker pool automatically.
-->

<listitem>
<para>
Allow <link linkend="guc-io-method"><varname>io_method</varname></link> method <literal>worker</literal> to automatically control needed background workers (Thomas Munro)
<ulink url="&commit_baseurl;d1c01b79d">&sect;</ulink>
</para>

<para>
The new server variables are <link linkend="guc-io-min-workers"><varname>io_min_workers</varname></link>, <link linkend="guc-io-max-workers"><varname>io_max_workers</varname></link>, <link linkend="guc-io-worker-idle-timeout"><varname>io_worker_idle_timeout</varname></link>, and <link linkend="guc-io-worker-launch-interval"><varname>io_worker_launch_interval</varname></link>.
</para>
</listitem>

<!--
Author: Melanie Plageman <melanieplageman@gmail.com>
2026-03-30 [b46e1e54d] Allow on-access pruning to set pages all-visible
-->

<listitem>
<para>
Allow query table scans to mark pages as all-visible in the <link linkend="vacuum-for-visibility-map">visibility map</link> (Melanie Plageman)
<ulink url="&commit_baseurl;b46e1e54d">&sect;</ulink>
</para>

<para>
Previously only <link linkend="sql-vacuum"><command>VACUUM</command></link> and <link
linkend="sql-copy"><command>COPY ... FREEZE</command></link> could do this.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2026-04-06 [1ff3180ca] Allow autovacuum to use parallel vacuum workers.
Author: Masahiko Sawada <msawada@postgresql.org>
2026-04-10 [2a3d2f9f6] doc: Improve consistency of parallel vacuum description.
-->

<listitem>
<para>
Allow <link linkend="autovacuum">autovacuum</link> to use <link linkend="reloption-autovacuum-parallel-workers"><varname>parallel autovacuum workers</varname></link> (Daniil Davydov)
<ulink url="&commit_baseurl;1ff3180ca">&sect;</ulink>
<ulink url="&commit_baseurl;2a3d2f9f6">&sect;</ulink>
</para>

<para>
The maximum number of workers is controlled by server variable <link linkend="guc-autovacuum-max-parallel-workers"><varname>autovacuum_max_parallel_workers</varname></link> and per-table storage parameter <varname>autovacuum_parallel_workers</varname>.
</para>
</listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2025-11-27 [0ca3b1697] Add parallelism support for TID Range Scans
-->

<listitem>
<para>
Allow <link linkend="datatype-oid"><type>TID</type></link> Range Scans to be parallelized (Cary Huang, David Rowley)
<ulink url="&commit_baseurl;0ca3b1697">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-13 [e0a3a3fd5] Optimize COPY FROM (FORMAT {text,csv}) using SIMD.
-->

<listitem>
<para>
Improve <link linkend="sql-copy"><command>COPY FROM</command></link> performance for text and <acronym>CSV</acronym> input using <acronym>SIMD</acronym> CPU instructions (Nazir Bilal Yavuz, Shinya Kato)
<ulink url="&commit_baseurl;e0a3a3fd5">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-01-15 [282b1cde9] Optimize LISTEN/NOTIFY via shared channel map and direct
-->

<listitem>
<para>
Improve <link linkend="sql-notify"><command>NOTIFY</command></link> to only wake up backends that are listening to specified notifications (Joel Jacobson)
<ulink url="&commit_baseurl;282b1cde9">&sect;</ulink>
</para>

<para>
Previously most backends were woken by <link linkend="sql-notify"><command>NOTIFY</command></link>.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-05 [34dfca293] Change default value of default_toast_compression to "lz
-->

<listitem>
<para>
Change the default <link linkend="storage-toast"><acronym>TOAST</acronym></link> compression method from <literal>pglz</literal> to the more efficient <literal>lz4</literal> (Euler Taveira)
<ulink url="&commit_baseurl;34dfca293">&sect;</ulink>
</para>

<para>
This is done by changing the default for server variable <link linkend="guc-default-toast-compression"><varname>default_toast_compression</varname></link>.
</para>
</listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2026-03-16 [c456e3911] Optimize tuple deformation
-->

<listitem>
<para>
Improve performance of internal row deformation (David Rowley)
<ulink url="&commit_baseurl;c456e3911">&sect;</ulink>
</para>
</listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2026-01-06 [c4ff35f10] ICU: use UTF8-optimized case conversion API
-->

<listitem>
<para>
Improve performance of repeated <acronym>UTF-8</acronym> case-folding operations (Andreas Karlsson)
<ulink url="&commit_baseurl;c4ff35f10">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-16 [bfa3c4f10] Optimize hash index bulk-deletion with streaming read
Author: Michael Paquier <michael@paquier.xyz>
2026-03-12 [6c228755a] Use streaming read for VACUUM cleanup of GIN
-->

<listitem>
<para>
Improve performance of hash index bulk-deletion and <link linkend="gin"><literal>GIN</literal></link> index vacuuming using streaming reads (Xuneng Zhou)
<ulink url="&commit_baseurl;bfa3c4f10">&sect;</ulink>
<ulink url="&commit_baseurl;6c228755a">&sect;</ulink>
</para>
</listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2026-02-14 [ef3c3cf6d] Perform radix sort on SortTuples with pass-by-value Datu
-->

<listitem>
<para>
Improve sort performance using radix sort (John Naylor)
<ulink url="&commit_baseurl;ef3c3cf6d">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2026-04-07 [294520c44] instrumentation: Use Time-Stamp Counter on x86-64 to low
Author: Andres Freund <andres@anarazel.de>
2026-04-07 [16fca4825] pg_test_timing: Also test RDTSC[P] timing, report time s
-->

<listitem>
<para>
Improve timing performance measurements (Lukas Fittl, Andres Freund, David Geier)
<ulink url="&commit_baseurl;294520c44">&sect;</ulink>
<ulink url="&commit_baseurl;16fca4825">&sect;</ulink>
</para>

<para>
This benefits <link linkend="sql-explain"><command>EXPLAIN (ANALYZE, TIMING)</command></link> and <link linkend="pgtesttiming"><application>pg_test_timing</application></link>, and is controlled via server variable <link linkend="guc-timing-clock-source"><varname>timing_clock_source</varname></link>.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-03-20 [ce8d5fe0e] plpgsql: optimize "SELECT simple-expression INTO var".
-->

<listitem>
<para>
Optimize <link linkend="plpgsql"><application>plpgsql</application></link> syntax <literal>SELECT simple-expression INTO</literal> <replaceable>var</replaceable> (Tom Lane)
<ulink url="&commit_baseurl;ce8d5fe0e">&sect;</ulink>
</para>
</listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-19-system-views">
     <title>System Views</title>

     <itemizedlist>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-24 [4019f725f] Add support for lock statistics in pgstats
-->

<listitem>
<para>
Add system view <link linkend="pg-stat-lock-view"><structname>pg_stat_lock</structname></link> and function <link linkend="monitoring-pg-stat-lock-view"><function>pg_stat_get_lock()</function></link> to report per-lock-type statistics (Bertrand Drouvot)
<ulink url="&commit_baseurl;4019f725f">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-06 [01d485b14] Add system view pg_stat_recovery
Author: Michael Paquier <michael@paquier.xyz>
2026-03-06 [2d4ead6f4] Fix order of columns in pg_stat_recovery
-->

<listitem>
<para>
Add system view <link linkend="pg-stat-recovery-view"><structname>pg_stat_recovery</structname></link> to report recovery status (Xuneng Zhou, Shinya Kato)
<ulink url="&commit_baseurl;01d485b14">&sect;</ulink>
<ulink url="&commit_baseurl;2d4ead6f4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-04-06 [87f61f0c8] Add pg_stat_autovacuum_scores system view.
-->

<listitem>
<para>
Add system view <link linkend="pg-stat-autovacuum-scores-view"><structname>pg_stat_autovacuum_scores</structname></link> to report per-table <link linkend="autovacuum">autovacuum</link> details (Sami Imseih)
<ulink url="&commit_baseurl;87f61f0c8">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-09 [167ed8082] Introduce pg_dsm_registry_allocations view.
Author: Nathan Bossart <nathan@postgresql.org>
2025-12-02 [f894acb24] Show size of DSAs and dshashes in pg_dsm_registry_alloca
-->

<listitem>
<para>
Add system view <link linkend="view-pg-dsm-registry-allocations"><structname>pg_dsm_registry_allocations</structname></link> to report <link linkend="guc-dynamic-shared-memory-type">dynamic shared memory</link> details (Florents Tselai, Nathan Bossart)
<ulink url="&commit_baseurl;167ed8082">&sect;</ulink>
<ulink url="&commit_baseurl;f894acb24">&sect;</ulink>
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-12-09 [0d7895206] Add mode and started_by columns to pg_stat_progress_vacu
-->

<listitem>
<para>
Add vacuum initiation details to system view <link linkend="pg-stat-progress-vacuum-view"><structname>pg_stat_progress_vacuum</structname></link> (Shinya Kato)
<ulink url="&commit_baseurl;0d7895206">&sect;</ulink>
</para>

<para>
The new <structfield>started_by</structfield> column reports the initiator of the vacuum, and <structfield>mode</structfield> indicates its aggressiveness.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-12-09 [ab40db385] Add started_by column to pg_stat_progress_analyze view.
-->

<listitem>
<para>
Add analyze initiation details to system view <link linkend="pg-stat-progress-analyze-view"><structname>pg_stat_progress_analyze</structname></link> (Shinya Kato)
<ulink url="&commit_baseurl;ab40db385">&sect;</ulink>
</para>

<para>
The new <structfield>started_by</structfield> column reports the initiator of the analyze.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-10-08 [d3b6183dd] Add mem_exceeded_count column to pg_stat_replication_slo
-->

<listitem>
<para>
Add <structfield>mem_exceeded_count</structfield> column to system view <link linkend="pg-stat-replication-slots-view"><structname>pg_stat_replication_slots</structname></link> (Bertrand Drouvot)
<ulink url="&commit_baseurl;d3b6183dd">&sect;</ulink>
</para>

<para>
This reports the number of times that <link linkend="guc-logical-decoding-work-mem"><varname>logical_decoding_work_mem</varname></link> was exceeded.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-11-25 [76b78721c] Add slotsync skip statistics.
Author: Amit Kapila <akapila@postgresql.org>
2025-11-28 [e68b6adad] Add slotsync_skip_reason column to pg_replication_slots
Author: Amit Kapila <akapila@postgresql.org>
2025-12-05 [5db6a344a] Rename column slotsync_skip_at to slotsync_last_skip.
-->

<listitem>
<para>
Add slot synchronization skip information to <link linkend="pg-stat-replication-slots-view"><structname>pg_stat_replication_slots</structname></link> and <link linkend="view-pg-replication-slots"><structname>pg_replication_slots</structname></link> (Shlok Kyal)
<ulink url="&commit_baseurl;76b78721c">&sect;</ulink>
<ulink url="&commit_baseurl;e68b6adad">&sect;</ulink>
<ulink url="&commit_baseurl;5db6a344a">&sect;</ulink>
</para>

<para>
The new columns are <structfield>slotsync_skip_count</structfield>, <structfield>slotsync_last_skip</structfield>, and <structfield>slotsync_skip_reason</structfield>.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-08-04 [fd5a1a0c3] Detect and report update_deleted conflicts.
-->

<listitem>
<para>
Add <structfield>update_deleted</structfield> column to system view <link linkend="monitoring-pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link> (Zhijie Hou)
<ulink url="&commit_baseurl;fd5a1a0c3">&sect;</ulink>
</para>

<para>
This reports the number of rows where updates were ignored due to concurrent deletes.  This requires the subscriber have <varname>retain_dead_tuples</varname> enabled.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-11-07 [f6a4c498d] Add seq_sync_error_count to subscription statistics.
Author: Amit Kapila <akapila@postgresql.org>
2025-11-18 [3edaf29fa] Rename two columns in pg_stat_subscription_stats.
-->

<listitem>
<para>
Add <structfield>sync_seq_error_count</structfield> column to system view <link linkend="pg-stat-subscription-stats"><structname>pg_stat_subscription_stats</structname></link> to report sequence synchronization errors (Vignesh C)
<ulink url="&commit_baseurl;f6a4c498d">&sect;</ulink>
<ulink url="&commit_baseurl;3edaf29fa">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-10-06 [a5b543258] Add stats_reset to pg_stat_all_{tables,indexes} and rela
-->

<listitem>
<para>
Add <structfield>stats_reset</structfield> column to system views <link linkend="pg-stat-all-tables-view"><structname>pg_stat_all_tables</structname></link>, <link linkend="pg-stat-all-indexes-view"><structname>pg_stat_all_indexes</structname></link>, and <link linkend="pg-statio-all-sequences-view"><structname>pg_statio_all_sequences</structname></link> (Bertrand Drouvot, Sami Imseih, Shihao Zhong)
<ulink url="&commit_baseurl;a5b543258">&sect;</ulink>
</para>

<para>
It also appears in the <literal>sys</literal> and <literal>user</literal> view variants.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-10-08 [b71bae41a] Add stats_reset to pg_stat_user_functions
Author: Fujii Masao <fujii@postgresql.org>
2026-03-16 [8fe315f18] Add stats_reset column to pg_statio_all_sequences
-->

<listitem>
<para>
Add <structfield>stats_reset</structfield> column to system views <link linkend="pg-stat-user-functions-view"><structname>pg_stat_user_functions</structname></link> and <link linkend="pg-stat-database-conflicts-view"><structname>pg_stat_database_conflicts</structname></link> (Bertrand Drouvot, Shihao Zhong)
<ulink url="&commit_baseurl;b71bae41a">&sect;</ulink>
<ulink url="&commit_baseurl;8fe315f18">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-01-01 [f3c9e341c] Add paths of extensions to pg_available_extensions
-->

<listitem>
<para>
Add <structfield>location</structfield> column to system views <link linkend="view-pg-available-extensions"><structname>pg_available_extensions</structname></link> and <link linkend="view-pg-available-extension-versions"><structname>pg_available_extension_versions</structname></link> to report the file system directory of extensions (Matheus Alcantara)
<ulink url="&commit_baseurl;f3c9e341c">&sect;</ulink>
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-08-05 [deb674454] Add backup_type column to pg_stat_progress_basebackup.
-->

<listitem>
<para>
Add <structfield>backup_type</structfield> column to system view <link linkend="pg-stat-progress-basebackup-view"><structname>pg_stat_progress_basebackup</structname></link> to report the type of backup (Shinya Kato)
<ulink url="&commit_baseurl;deb674454">&sect;</ulink>
</para>

<para>
Possible values are <literal>full</literal> or <literal>incremental</literal>.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-23 [a36164e74] Add WALRCV_CONNECTING state to the WAL receiver
-->

<listitem>
<para>
Add <literal>connecting</literal> value to system view column <link linkend="pg-stat-wal-receiver-view"><structname>pg_stat_wal_receiver</structname></link>.<link linkend="pg-stat-wal-receiver-view"><structfield>status</structfield></link> (Xuneng Zhou)
<ulink url="&commit_baseurl;a36164e74">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-10-28 [f9a09aa29] Add wal_fpi_bytes to pg_stat_wal and pg_stat_get_backend
-->

<listitem>
<para>
Add reporting of the bytes written to <acronym>WAL</acronym> for full page images (Shinya Kato)
<ulink url="&commit_baseurl;f9a09aa29">&sect;</ulink>
</para>

<para>
This is accessible via system view <link linkend="pg-stat-wal-view"><structname>pg_stat_wal</structname></link> and function <link linkend="pg-stat-get-backend-wal"><function>pg_stat_get_backend_wal()</function></link>.
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-17 [3b88e50d6] Add more columns to pg_stats, pg_stats_ext, and pg_stats
-->

<listitem>
<para>
Add columns to system views <link linkend="view-pg-stats"><structname>pg_stats</structname></link>, <link linkend="view-pg-stats-ext"><structname>pg_stats_ext</structname></link>, and <link linkend="view-pg-stats-ext-exprs"><structname>pg_stats_ext_exprs</structname></link> (Corey Huinker)
<ulink url="&commit_baseurl;3b88e50d6">&sect;</ulink>
</para>

<para>
Adds table <type>OID</type> and attribute number columns to <link linkend="view-pg-stats"><structname>pg_stats</structname></link>, and table <type>OID</type> and statistics object <type>OID</type> columns to the other two.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-02-10 [307447e6d] Add information about range type stats to pg_stats_ext_e
-->

<listitem>
<para>
Add information about range type <link linkend="sql-createstatistics">extended statistics</link> to system view <link linkend="view-pg-stats-ext-exprs"><structname>pg_stats_ext_exprs</structname></link> (Corey Huinker, Michael Paquier)
<ulink url="&commit_baseurl;307447e6d">&sect;</ulink>
</para>
</listitem>

     </itemizedlist>
    </sect4>

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

     <itemizedlist>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-02-09 [38e0190ce] Allow log_min_messages to be set per process type
-->

<listitem>
<para>
Allow <link linkend="guc-log-min-messages"><varname>log_min_messages</varname></link> log levels to be specified by process type (Euler Taveira)
<ulink url="&commit_baseurl;38e0190ce">&sect;</ulink>
</para>

<para>
The new format is <replaceable>type</replaceable>:<replaceable>level</replaceable>.  A value without a colon controls all process types, allowing backward compatibility.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-10-15 [dd3ae3783] Add log_autoanalyze_min_duration
-->

<listitem>
<para>
Add server variable <link linkend="guc-log-autoanalyze-min-duration"><varname>log_autoanalyze_min_duration</varname></link> to log long-running analyze operations by <link linkend="autovacuum">autovacuum</link> operations (Shinya Kato)
<ulink url="&commit_baseurl;dd3ae3783">&sect;</ulink>
</para>

<para>
Server variable <link linkend="guc-log-autovacuum-min-duration"><varname>log_autovacuum_min_duration</varname></link> now only controls logging of vacuum operations by autovacuum.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-09-12 [2aac62be8] Default to log_lock_waits=on
-->

<listitem>
<para>
Enable server variable <link linkend="guc-log-lock-waits"><varname>log_lock_waits</varname></link> by default (Laurenz Albe)
<ulink url="&commit_baseurl;2aac62be8">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2025-09-06 [06473f5a3] Allow to log raw parse tree.
-->

<listitem>
<para>
Add server variable <link linkend="guc-debug-print-raw-parse"><varname>debug_print_raw_parse</varname></link> to log raw parse trees (Chao Li)
<ulink url="&commit_baseurl;06473f5a3">&sect;</ulink>
</para>

<para>
This is also enabled when the server is started with debug level three and higher.
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-07-22 [112faf137] Log remote NOTICE, WARNING, and similar messages using e
-->

<listitem>
<para>
Make messages coming from remote servers appear in the server logs in the same format as local server messages (Vignesh C)
<ulink url="&commit_baseurl;112faf137">&sect;</ulink>
</para>

<para>
These include replication, <xref linkend="postgres-fdw"/>, and <xref linkend="dblink"/> servers.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-11-03 [ad25744f4] Add wal_fpi_bytes to VACUUM and ANALYZE logs
-->

<listitem>
<para>
Add reporting of <acronym>WAL</acronym> <link linkend="guc-full-page-writes">full-page write</link> bytes to <link linkend="sql-vacuum"><command>VACUUM</command></link> and <link linkend="sql-analyze"><command>ANALYZE</command></link> logging (Shinya Kato)
<ulink url="&commit_baseurl;ad25744f4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-02-03 [e05a24c2d] Add two IO wait events for COPY FROM/TO on a pipe/file/p
-->

<listitem>
<para>
Add IO wait events for <link linkend="sql-copy"><command>COPY FROM/TO</command></link> on a pipe, file, or program (Nikolay Samokhvalov)
<ulink url="&commit_baseurl;e05a24c2d">&sect;</ulink>
</para>
</listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2026-01-05 [7a39f43d8] Extend xlogwait infrastructure with write and flush wait
-->

<listitem>
<para>
Add wait events for <acronym>WAL</acronym> write and flush <link linkend="wal-internals">LSN</link>s (Xuneng Zhou)
<ulink url="&commit_baseurl;7a39f43d8">&sect;</ulink>
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-10-06 [b93172ca5] Expose sequence page LSN via pg_get_sequence_data.
-->

<listitem>
<para>
Have <link linkend="func-pg-get-sequence-data"><function>pg_get_sequence_data()</function></link> return the sequence page <link linkend="wal-internals"><acronym>LSN</acronym></link> (Vignesh C)
<ulink url="&commit_baseurl;b93172ca5">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-12-30 [97b101776] Add pg_get_multixact_stats()
-->

<listitem>
<para>
Add function <link linkend="functions-info-snapshot"><function>pg_get_multixact_stats()</function></link> to report <link linkend="vacuum-for-multixact-wraparound">multixact</link> activity (Naga Appani)
<ulink url="&commit_baseurl;97b101776">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-20 [48f11bfa0] Bump transaction/multixact ID warning limits to 100M.
-->

<listitem>
<para>
Issue warnings when the <link linkend="vacuum-for-wraparound">wraparound</link> of xid and multi-xids is less than 100 million (Nathan Bossart)
<ulink url="&commit_baseurl;48f11bfa0">&sect;</ulink>
</para>

<para>
The previous warning was 40 million.  Warnings are issued to clients and in the server log.
</para>
</listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>
<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2026-04-03 [f19c0ecca] Online enabling and disabling of data checksums
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2026-04-08 [b364828f8] doc: Fix data_checksums data type
-->

<listitem>
<para>
Allow <link linkend="functions-admin-checksum">online enabling</link> and disabling of <link linkend="checksums">data checksums</link> (Daniel Gustafsson, Magnus Hagander, Tomas Vondra)
<ulink url="&commit_baseurl;f19c0ecca">&sect;</ulink>
<ulink url="&commit_baseurl;b364828f8">&sect;</ulink>
</para>

<para>
Previously the checksum status could only be changed while the cluster was offline using <link linkend="app-pgchecksums"><application>pg_checksums</application></link>.
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-27 [d7965d65f] Add rudimentary table prioritization to autovacuum.
-->

<listitem>
<para>
Add scoring system to control the order that tables are processed by <link linkend="autovacuum">autovacuum</link> (Nathan Bossart)
<ulink url="&commit_baseurl;d7965d65f">&sect;</ulink>
</para>

<para>
The new server variables are <link linkend="guc-autovacuum-freeze-score-weight"><varname>autovacuum_freeze_score_weight</varname></link>, <link linkend="guc-autovacuum-multixact-freeze-score-weight"><varname>autovacuum_multixact_freeze_score_weight</varname></link>, <link linkend="guc-autovacuum-vacuum-score-weight"><varname>autovacuum_vacuum_score_weight</varname></link>, <link linkend="guc-autovacuum-vacuum-insert-score-weight"><varname>autovacuum_vacuum_insert_score_weight</varname></link>, and
<link linkend="guc-autovacuum-analyze-score-weight"><varname>autovacuum_analyze_score_weight</varname></link>.
</para>
</listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2026-03-18 [4f433025f] ssl: Serverside SNI support for libpq
-->

<listitem>
<para>
Add server-side support for <link linkend="ssl-sni"><acronym>SNI</acronym></link> (Server Name Indication) (Daniel Gustafsson, Jacob Champion)
<ulink url="&commit_baseurl;4f433025f">&sect;</ulink>
</para>

<para>
New configuration file <link linkend="guc-hosts-file"><filename>PGDATA/pg_hosts.conf</filename></link> specifies hostname/key pairs.
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-04-07 [b977bd308] oauth: Allow validators to register custom HBA options
-->

<listitem>
<para>
Allow OAuth validators to register custom <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link> authentication options (Jacob Champion, Zsolt Parragi)
<ulink url="&commit_baseurl;b977bd308">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-02-23 [d98197602] Allow pg_{read,write}_all_data to access large objects.
-->

<listitem>
<para>
Allow roles <link linkend="predefined-role-pg-read-all-data"><literal>pg_read_all_data</literal></link> and <link linkend="predefined-role-pg-read-all-data"><literal>pg_write_all_data</literal></link> to read/write large objects (Nitin Motiani, Nathan Bossart)
<ulink url="&commit_baseurl;d98197602">&sect;</ulink>
</para>

<para>
These roles are designed to allow non-super users to run <link linkend="app-pgdump"><application>pg_dump</application></link>.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-06 [f1e251be8] Allow bgworkers to be terminated for database-related co
-->

<listitem>
<para>
Allow background workers to be configured to terminate before database-level operations (Aya Iwata)
<ulink url="&commit_baseurl;f1e251be8">&sect;</ulink>
</para>

<para>
This allows database-level operations to complete more quickly since blocking background workers can now be terminated.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-11-04 [ff4597acd] Allow "SET list_guc TO NULL" to specify setting the GUC
-->

<listitem>
<para>
Allow <link linkend="config-setting">server variables</link> that represent lists to be emptied by setting the value to <literal>NULL</literal> (Tom Lane)
<ulink url="&commit_baseurl;ff4597acd">&sect;</ulink>
</para>
</listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2025-09-24 [5334620ee] Update GB18030 encoding from version 2000 to 2022
-->

<listitem>
<para>
Update <link linkend="multibyte-charset-supported">GB18030 encoding</link> from version 2000 to 2022 (Chao Li, Zheng Tao)
<ulink url="&commit_baseurl;5334620ee">&sect;</ulink>
</para>

<para>
See the commit message for compatibility details.
</para>
</listitem>

     </itemizedlist>

    </sect4>

    <sect4 id="release-19-replication">
     <title><link linkend="streaming-replication">Streaming Replication and Recovery</link></title>

     <itemizedlist>
<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-11-05 [447aae13b] Implement WAIT FOR command
Author: Alexander Korotkov <akorotkov@postgresql.org>
2026-01-05 [49a181b5d] Add the MODE option to the WAIT FOR LSN command
-->

<listitem>
<para>
Add <link linkend="sql-wait-for"><command>WAIT FOR</command></link> command to allow standbys to wait for <link linkend="wal-internals"><acronym>LSN</acronym></link> values to be written, flushed, or replayed (Kartyshov Ivan, Alexander Korotkov, Xuneng Zhou)
<ulink url="&commit_baseurl;447aae13b">&sect;</ulink>
<ulink url="&commit_baseurl;49a181b5d">&sect;</ulink>
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-12-15 [0d2d4a0ec] Add retry logic to pg_sync_replication_slots().
-->

<listitem>
<para>
Improve function <link linkend="pg-sync-replication-slots"><function>pg_sync_replication_slots()</function></link> to wait for replication synchronization completion (Ajin Cherian, Zhijie Hou)
<ulink url="&commit_baseurl;0d2d4a0ec">&sect;</ulink>
</para>

<para>
Previously, certain synchronization failures would not be reported.
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2026-04-06 [a8f45dee9] Add wal_sender_shutdown_timeout GUC to limit shutdown wa
-->

<listitem>
<para>
Add server variable <link linkend="guc-wal-sender-shutdown-timeout"><varname>wal_sender_shutdown_timeout</varname></link> to limit replica synchronization waits during shutdown (Andrey Silitskiy, Hayato Kuroda)
<ulink url="&commit_baseurl;a8f45dee9">&sect;</ulink>
</para>

<para>
By default, senders still wait forever for synchronization.
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2026-02-20 [8a6af3ad0] Make GUC wal_receiver_timeout user-settable.
Author: Fujii Masao <fujii@postgresql.org>
2026-02-20 [fb80f388f] Add per-subscription wal_receiver_timeout setting.
-->

<listitem>
<para>
Allow <link linkend="guc-wal-receiver-timeout"><varname>wal_receiver_timeout</varname></link> to be set per-subscription and user (Fujii Masao)
<ulink url="&commit_baseurl;8a6af3ad0">&sect;</ulink>
<ulink url="&commit_baseurl;fb80f388f">&sect;</ulink>
</para>

<para>
This allows subscribers to use different <link linkend="guc-wal-receiver-timeout"><varname>wal_receiver_timeout</varname></link> values.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-09-19 [5b148706c] Add optional pid parameter to pg_replication_origin_sess
-->

<listitem>
<para>
Add optional pid parameter to <link linkend="pg-replication-origin-session-setup"><function>pg_replication_origin_session_setup()</function></link> to allow parallelization of <acronym>SQL</acronym>-level replication solutions (Doruk Yilmaz, Hayato Kuroda)
<ulink url="&commit_baseurl;5b148706c">&sect;</ulink>
</para>
</listitem>

     </itemizedlist>

    </sect4>

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

     <itemizedlist>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-10-23 [f0b3573c3] Introduce "REFRESH SEQUENCES" for subscriptions.
Author: Amit Kapila <akapila@postgresql.org>
2025-11-05 [5509055d6] Add sequence synchronization for logical replication.
Author: Amit Kapila <akapila@postgresql.org>
2025-11-12 [55cefadde] Doc: Add documentation for sequence synchronization.
-->

<listitem>
<para>
Allow sequence values stored in subscribers to match the publisher (Vignesh C)
<ulink url="&commit_baseurl;f0b3573c3">&sect;</ulink>
<ulink url="&commit_baseurl;5509055d6">&sect;</ulink>
<ulink url="&commit_baseurl;55cefadde">&sect;</ulink>
</para>

<para>
This is enabled during <link linkend="sql-createsubscription"><command>CREATE SUBSCRIPTION</command></link>, <link linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION ... REFRESH PUBLICATION</command></link>, and <link linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION ... REFRESH SEQUENCES</command></link>.  The latter only updates values, not sequence
existence.  Function <link linkend="func-pg-get-sequence-data"><function>pg_get_sequence_data()</function></link> allows inspection of sequence synchronization.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-10-09 [96b378497] Add "ALL SEQUENCES" support to publications.
-->

<listitem>
<para>
Allow <link linkend="sql-createpublication"><command>CREATE</command></link>/<link linkend="sql-alterpublication"><command>ALTER PUBLICATION</command></link> to publish all sequences (Vignesh C, Tomas Vondra)
<ulink url="&commit_baseurl;96b378497">&sect;</ulink>
</para>

<para>
This is enabled with the <literal>ALL SEQUENCES</literal> clause.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-10-23 [f0b3573c3] Introduce "REFRESH SEQUENCES" for subscriptions.
-->

<listitem>
<para>
Allow <link linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION</command></link> on publications to synchronize the existence of sequences on subscribers to match the publisher (Vignesh C)
<ulink url="&commit_baseurl;f0b3573c3">&sect;</ulink>
</para>

<para>
This is enabled with the <literal>REFRESH SEQUENCES</literal> clause.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2026-03-20 [493f8c643] Add support for EXCEPT TABLE in ALTER PUBLICATION.
Author: Amit Kapila <akapila@postgresql.org>
2026-04-01 [6b0550c45] Fix miscellaneous issues in EXCEPT publication clause.
Author: Amit Kapila <akapila@postgresql.org>
2026-03-04 [fd366065e] Allow table exclusions in publications via EXCEPT TABLE.
Author: Amit Kapila <akapila@postgresql.org>
2026-03-31 [5984ea868] Change syntax of EXCEPT TABLE clause in publication comm
-->

<listitem>
<para>
Allow <link linkend="sql-createpublication"><command>CREATE</command></link>/<link linkend="sql-alterpublication"><command>ALTER PUBLICATION</command></link> to exclude some tables (Vignesh C, Shlok Kyal)
<ulink url="&commit_baseurl;493f8c643">&sect;</ulink>
<ulink url="&commit_baseurl;6b0550c45">&sect;</ulink>
<ulink url="&commit_baseurl;fd366065e">&sect;</ulink>
<ulink url="&commit_baseurl;5984ea868">&sect;</ulink>
</para>

<para>
This is controlled with the <literal>EXCEPT</literal> clause, and is useful when specifying <literal>ALL TABLES</literal>.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-07-23 [228c37086] Preserve conflict-relevant data during logical replicati
Author: Amit Kapila <akapila@postgresql.org>
2025-09-15 [0d48d393d] Resume conflict-relevant data retention automatically.
Author: Amit Kapila <akapila@postgresql.org>
2025-09-02 [a850be2fe] Add max_retention_duration option to subscriptions.
-->

<listitem>
<para>
Add <link linkend="sql-createpublication"><command>CREATE</command></link>/<link linkend="sql-alterpublication"><command>ALTER PUBLICATION</command></link> setting <link linkend="sql-createsubscription-params-with-retain-dead-tuples"><varname>retain_dead_tuples</varname></link> to retain information needed for conflict resolution (Zhijie Hou)
<ulink url="&commit_baseurl;228c37086">&sect;</ulink>
<ulink url="&commit_baseurl;0d48d393d">&sect;</ulink>
<ulink url="&commit_baseurl;a850be2fe">&sect;</ulink>
</para>

<para>
Also add setting <link linkend="sql-createsubscription-params-with-max-retention-duration"><varname>max_retention_duration</varname></link> to limit <varname>retain_dead_tuples</varname> retention.
</para>
</listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2026-03-06 [8185bb534] CREATE SUBSCRIPTION ... SERVER.
-->

<listitem>
<para>
Allow <link linkend="sql-createsubscription"><command>CREATE SUBSCRIPTION</command></link> to use <xref linkend="postgres-fdw"/> foreign data wrapper connection parameters (Jeff Davis)
<ulink url="&commit_baseurl;8185bb534">&sect;</ulink>
</para>

<para>
The connection parameters are referenced via <link linkend="sql-createsubscription"><command>CREATE SUBSCRIPTION ... SERVER</command></link>.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-12-23 [67c20979c] Toggle logical decoding dynamically based on logical slo
-->

<listitem>
<para>
When server variable <link linkend="guc-wal-level"><varname>wal_level</varname></link> is <literal>replica</literal>, allow automatic enablement of logical replication when needed (Masahiko Sawada)
<ulink url="&commit_baseurl;67c20979c">&sect;</ulink>
</para>

<para>
New server variable <link linkend="guc-effective-wal-level"><varname>effective_wal_level</varname></link> reports the effective <acronym>WAL</acronym> level.
</para>
</listitem>

     </itemizedlist>

    </sect4>

   </sect3>

   <sect3 id="release-19-query">
    <title>Query Commands</title>

    <itemizedlist>
<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-16 [2f094e7ac] SQL Property Graph Queries (SQL/PGQ)
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-31 [c5b3253b8] Property references are preferred over regular column re
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-31 [a0dd0702e] Fix cross variable references in graph pattern causing s
-->

<listitem>
<para>
Add support for <acronym>SQL</acronym> Property Graph Queries (<acronym>SQL</acronym>/<acronym>PGQ</acronym>) (Peter Eisentraut, Ashutosh Bapat)
<ulink url="&commit_baseurl;2f094e7ac">&sect;</ulink>
<ulink url="&commit_baseurl;c5b3253b8">&sect;</ulink>
<ulink url="&commit_baseurl;a0dd0702e">&sect;</ulink>
</para>

<para>
Internally these are processed like views so are written as standard relational queries.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-04-01 [8e72d914c] Add UPDATE/DELETE FOR PORTION OF
Author: Peter Eisentraut <peter@eisentraut.org>
2026-04-07 [b6ccd30d8] Add isolation tests for UPDATE/DELETE FOR PORTION OF
-->

<listitem>
<para>
Add <literal>FOR PORTION OF</literal> clause to <link linkend="sql-update"><command>UPDATE</command></link> and <link linkend="sql-delete"><command>DELETE</command></link> (Paul A. Jungwirth)
<ulink url="&commit_baseurl;8e72d914c">&sect;</ulink>
<ulink url="&commit_baseurl;b6ccd30d8">&sect;</ulink>
</para>

<para>
This allows operations on temporal ranges.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-03-06 [415100aa6] Support grouping-expression references and GROUPING() in
-->

<listitem>
<para>
Allow <literal>GROUP BY</literal> to process target list subqueries that have expressions referencing non-subquery columns (Tom Lane)
<ulink url="&commit_baseurl;415100aa6">&sect;</ulink>
</para>

<para>
Also fix a bug in how <link linkend="functions-grouping-table"><function>GROUPING()</function></link> handles target list subquery aliases.
</para>
</listitem>

<!--
Author: Tatsuo Ishii <ishii@postgresql.org>
2025-10-03 [25a30bbd4] Add IGNORE NULLS/RESPECT NULLS option to Window function
-->

<listitem>
<para>
Allow <link linkend="functions-window">window functions</link> to ignore NULLs with the <literal>IGNORE NULLS</literal>/<literal>RESPECT NULLS</literal> clause (Oliver Ford, Tatsuo Ishii)
<ulink url="&commit_baseurl;25a30bbd4">&sect;</ulink>
</para>

<para>
Supported window functions are <function>lead()</function>, <function>lag()</function>, <function>first_value()</function>, <function>last_value()</function>, and <function>nth_value()</function>.
</para>
</listitem>

<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2026-02-12 [88327092f] Add support for INSERT ... ON CONFLICT DO SELECT.
-->

<listitem>
<para>
Add support for <link linkend="sql-insert"><command>INSERT ... ON CONFLICT DO SELECT ... RETURNING</command></link> (Andreas Karlsson, Marko Tiikkaja, Viktor Holmberg)
<ulink url="&commit_baseurl;88327092f">&sect;</ulink>
</para>

<para>
This allows conflicting rows to be returned, and optionally locked with <literal>FOR UPDATE</literal>/<literal>SHARE</literal>.
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-03-10 [ac58465e0] Introduce the REPACK command
-->

<listitem>
<para>
Add <link linkend="sql-repack"><command>REPACK</command></link> command which replaces <link linkend="sql-vacuum"><command>VACUUM FULL</command></link> and <link linkend="sql-cluster"><command>CLUSTER</command></link> (Antonin Houska)
<ulink url="&commit_baseurl;ac58465e0">&sect;</ulink>
</para>

<para>
The two former commands did similar things, but with confusing names, so unify them as <link linkend="sql-repack"><command>REPACK</command></link>.  The old commands have been retained for compatibility.
</para>
</listitem>

<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-04-06 [28d534e2a] Add CONCURRENTLY option to REPACK
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-04-07 [8fb95a8ab] doc: Add an example of REPACK (CONCURRENTLY)
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-04-07 [e76d8c749] Reserve replication slots specifically for REPACK
-->

<listitem>
<para>
Allow <link linkend="sql-repack"><command>REPACK</command></link> to rebuild tables without access-exclusive locking (Antonin Houska, Mihail Nikalayeu, Álvaro Herrera)
<ulink url="&commit_baseurl;28d534e2a">&sect;</ulink>
<ulink url="&commit_baseurl;8fb95a8ab">&sect;</ulink>
<ulink url="&commit_baseurl;e76d8c749">&sect;</ulink>
</para>

<para>
This is enabled via the <literal>CONCURRENTLY</literal> option.  Server variable <link linkend="guc-max-repack-replication-slots"><varname>max_repack_replication_slots</varname></link> was also added.
</para>
</listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-12-14 [f2e4cc427] Implement ALTER TABLE ... MERGE PARTITIONS ... command
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-12-14 [4b3d17362] Implement ALTER TABLE ... SPLIT PARTITION ... command
-->

<listitem>
<para>
Allow partitions to be merged and split using <link linkend="sql-altertable"><command>ALTER TABLE ... MERGE/SPLIT PARTITIONS</command></link> (Dmitry Koval, Alexander Korotkov, Tender Wang, Richard Guo, Dagfinn Ilmari Mannsåker, Fujii Masao, Jian He)
<ulink url="&commit_baseurl;f2e4cc427">&sect;</ulink>
<ulink url="&commit_baseurl;4b3d17362">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-19 [dd1398f13] Allow choosing specific grantors via GRANT/REVOKE ... GR
-->

<listitem>
<para>
Allow <link linkend="sql-grant"><command>GRANT</command></link>/<link linkend="sql-revoke"><command>REVOKE</command></link> to specify the effective role performing the privileges adjustment (Nathan Bossart, Tom Lane)
<ulink url="&commit_baseurl;dd1398f13">&sect;</ulink>
</para>

<para>
The <literal>GRANTED BY</literal> clause controls this.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-04-06 [d51697484] Support more object types within CREATE SCHEMA.
-->

<listitem>
<para>
Allow <link linkend="sql-createschema"><command>CREATE SCHEMA</command></link> to create more types of objects in newly-created schemas (Kirill Reshke, Jian He, Tom Lane)
<ulink url="&commit_baseurl;d51697484">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-11 [a4f126516] Add option list to CHECKPOINT command.
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-11 [2f698d7f4] Add MODE option to CHECKPOINT command.
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-11 [8d33fbacb] Add FLUSH_UNLOGGED option to CHECKPOINT command.
-->

<listitem>
<para>
Allow <link linkend="sql-checkpoint"><command>CHECKPOINT</command></link> to accept a list of options (Christoph Berg)
<ulink url="&commit_baseurl;a4f126516">&sect;</ulink>
<ulink url="&commit_baseurl;2f698d7f4">&sect;</ulink>
<ulink url="&commit_baseurl;8d33fbacb">&sect;</ulink>
</para>

<para>
Supported options are <literal>MODE</literal> and <literal>FLUSH_UNLOGGED</literal>.
</para>
</listitem>

<!--
Author: Jeff Davis <jdavis@postgresql.org>
2026-03-06 [8185bb534] CREATE SUBSCRIPTION ... SERVER.
Author: Jeff Davis <jdavis@postgresql.org>
2026-04-09 [90630ec42] Document new catalog columns, missed in commit 8185bb534
-->

<listitem>
<para>
Add <literal>CONNECTION</literal> clause to <link linkend="sql-createforeigndatawrapper"><command>CREATE FOREIGN DATA WRAPPER</command></link> to specify a function to be called for subscription connection parameters (Jeff Davis, Noriyoshi Shinoda)
<ulink url="&commit_baseurl;8185bb534">&sect;</ulink>
<ulink url="&commit_baseurl;90630ec42">&sect;</ulink>
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-12-30 [736f754ee] Add dead items memory usage to VACUUM (VERBOSE) and auto
Author: Masahiko Sawada <msawada@postgresql.org>
2026-03-19 [adcdbe938] Add parallel vacuum worker usage to VACUUM (VERBOSE) and
-->

<listitem>
<para>
Add memory usage and parallelism reporting to <link linkend="sql-vacuum"><command>VACUUM (VERBOSE)</command></link> and <link linkend="autovacuum">autovacuum</link> logs (Tatsuya Kawata, Daniil Davydov)
<ulink url="&commit_baseurl;736f754ee">&sect;</ulink>
<ulink url="&commit_baseurl;adcdbe938">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

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

     <itemizedlist>
<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-11 [342051d73] Add support for altering CHECK constraint enforceability
-->

<listitem>
<para>
Allow <link linkend="sql-altertable"><command>ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED</command></link> for <literal>CHECK</literal> constraints (Jian He)
<ulink url="&commit_baseurl;342051d73">&sect;</ulink>
</para>

<para>
Previously enforcement changes were only supported for foreign key constraints.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-02-24 [f80bedd52] Allow ALTER COLUMN SET EXPRESSION on virtual columns wit
-->

<listitem>
<para>
Allow <link linkend="sql-altertable"><command>ALTER TABLE ... COLUMN SET EXPRESSION</command></link> to succeed on virtual columns with <literal>CHECK</literal> constraints (Jian He)
<ulink url="&commit_baseurl;f80bedd52">&sect;</ulink>
</para>

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

     </itemizedlist>
    </sect4>

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

     <itemizedlist>
<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-07-03 [bc2f348e8] Support multi-line headers in COPY FROM command.
-->

<listitem>
<para>
Allow multiple headers lines to be skipped by <link linkend="sql-copy"><command>COPY FROM</command></link> (Shinya Kato, Fujii Masao)
<ulink url="&commit_baseurl;bc2f348e8">&sect;</ulink>
</para>

<para>
Previously only a single header line could be skipped.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-03 [2a525cc97] Add COPY (on_error set_null) option
-->

<listitem>
<para>
Allow <link linkend="sql-copy"><command>COPY FROM</command></link> to set invalid input values to <literal>NULL</literal> (Jian He, Kirill Reshke)
<ulink url="&commit_baseurl;2a525cc97">&sect;</ulink>
</para>

<para>
This is done using the <link linkend="sql-copy"><command>COPY</command></link> option <literal>ON_ERROR SET_NULL</literal>.
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-20 [7dadd38cd] json format for COPY TO
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-20 [4c0390ac5] Add option force_array for COPY JSON FORMAT
-->

<listitem>
<para>
Allow <link linkend="sql-copy"><command>COPY TO</command></link> to output <acronym>JSON</acronym> format (Joe Conway, Jian He, Andrew Dunstan)
<ulink url="&commit_baseurl;7dadd38cd">&sect;</ulink>
<ulink url="&commit_baseurl;4c0390ac5">&sect;</ulink>
</para>

<para>
<acronym>JSON</acronym> output can also be a single <acronym>JSON</acronym> array using the <link linkend="sql-copy"><command>COPY</command></link> option <literal>FORCE_ARRAY</literal>.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2025-10-20 [4bea91f21] Support COPY TO for partitioned tables.
Author: Masahiko Sawada <msawada@postgresql.org>
2025-11-20 [266543a62] Use "COPY table TO" for partitioned tables in initial ta
-->

<listitem>
<para>
Allow <link linkend="sql-copy"><command>COPY TO</command></link> to process partitioned tables (Jian He, Ajin Cherian)
<ulink url="&commit_baseurl;4bea91f21">&sect;</ulink>
<ulink url="&commit_baseurl;266543a62">&sect;</ulink>
</para>

<para>
Previously <link linkend="sql-copy"><command>COPY (SELECT ...)</command></link> had to be used to output partitioned tables.  This also improves logical replication table synchronization.
</para>
</listitem>

     </itemizedlist>
    </sect4>

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

     <itemizedlist>
<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2026-04-07 [681daed93] Add EXPLAIN (IO) infrastructure with BitmapHeapScan supp
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2026-04-07 [3b1117d6e] Add EXPLAIN (IO) instrumentation for SeqScan
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2026-04-07 [e157fe6f7] Add EXPLAIN (IO) instrumentation for TidRangeScan
-->

<listitem>
<para>
Add <link linkend="sql-explain"><command>EXPLAIN ANALYZE</command></link> option <literal>IO</literal> to report asynchronous IO activity (Tomas Vondra)
<ulink url="&commit_baseurl;681daed93">&sect;</ulink>
<ulink url="&commit_baseurl;3b1117d6e">&sect;</ulink>
<ulink url="&commit_baseurl;e157fe6f7">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-10-30 [5ab0b6a24] Expose wal_fpi_bytes in EXPLAIN (WAL)
-->

<listitem>
<para>
Add reporting of <acronym>WAL</acronym> <link linkend="guc-full-page-writes">full-page write</link> bytes to <link linkend="sql-explain"><command>EXPLAIN (ANALYZE, WAL)</command></link> output (Shinya Kato)
<ulink url="&commit_baseurl;5ab0b6a24">&sect;</ulink>
</para>
</listitem>

<!--
Author: David Rowley <drowley@postgresql.org>
2025-07-29 [4bc62b868] Display Memoize planner estimates in EXPLAIN
-->

<listitem>
<para>
Add Memoize cache and lookup estimates to <link linkend="sql-explain"><command>EXPLAIN</command></link> output (Ilia Evdokimov, Lukas Fittl)
<ulink url="&commit_baseurl;4bc62b868">&sect;</ulink>
</para>

<para>
This can show why Memoize was chosen.
</para>
</listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-07 [b139bd3b6] Add data type oid8, 64-bit unsigned identifier
-->

<listitem>
<para>
Add the 64-bit unsigned data type <link linkend="datatype-oid"><type>oid8</type></link> (Michael Paquier)
<ulink url="&commit_baseurl;b139bd3b6">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-04-02 [bd4f879a9] Add additional jsonpath string methods
-->

<listitem>
<para>
Add more <link linkend="datatype-jsonpath"><type>jsonpath</type></link> string methods (Florents Tselai, David E. Wheeler)
<ulink url="&commit_baseurl;bd4f879a9">&sect;</ulink>
</para>

<para>
They are <link linkend="functions-sqljson-path-operators"><function>ltrim()</function></link>, <link linkend="functions-sqljson-path-operators"><function>rtrim()</function></link>, <link linkend="functions-sqljson-path-operators"><function>btrim()</function></link>, <link linkend="functions-sqljson-path-operators"><function>lower()</function></link>, <link linkend="functions-sqljson-path-operators"><function>upper()</function></link>, <link linkend="functions-sqljson-path-operators"><function>initcap()</function></link>, <link linkend="functions-sqljson-path-operators"><function>replace()</function></link>, and <link linkend="functions-sqljson-path-operators"><function>split_part()</function></link>.  These are immutable like their non-<acronym>JSON</acronym> string variants.
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2026-03-19 [ba21f5bf8] Allow explicit casting between bytea and uuid.
-->

<listitem>
<para>
Allow casts between <link linkend="datatype-binary"><type>bytea</type></link> and <link linkend="datatype-uuid"><type>uuid</type></link> data types (Dagfinn Ilmari Mannsåker, Aleksander Alekseev)
<ulink url="&commit_baseurl;ba21f5bf8">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-06-30 [bd09f024a] Add new OID alias type regdatabase.
-->

<listitem>
<para>
Add ability to cast between database names and <link linkend="datatype-oid"><type>oid8</type></link>s using <link linkend="datatype-oid"><type>regdatabase</type></link> (Ian Lawrence Barwick)
<ulink url="&commit_baseurl;bd09f024a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andres Freund <andres@anarazel.de>
2026-04-05 [df6949ccf] Add tid_block() and tid_offset() accessor functions
-->

<listitem>
<para>
Add functions <link linkend="functions-tid"><function>tid_block()</function></link> and <link linkend="functions-tid"><function>tid_offset()</function></link> to extract block numbers and offsets from <link linkend="datatype-oid"><type>tid</type></link> values (Ayush Tiwari)
<ulink url="&commit_baseurl;df6949ccf">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-09-09 [faf071b55] Add date and timestamp variants of random(min, max).
Author: Dean Rasheed <dean.a.rasheed@gmail.com>
2025-09-11 [9c24111c4] doc: Improve description of new random(min, max) functio
-->

<listitem>
<para>
Add <link linkend="datatype-datetime"><type>date</type></link>, <link linkend="datatype-datetime"><type>timestamp</type></link>, and <link linkend="datatype-datetime"><type>timestamptz</type></link> versions of <link linkend="functions-math-random-table"><literal>random(min, max)</literal></link> (Damien Clochard, Dean Rasheed)
<ulink url="&commit_baseurl;faf071b55">&sect;</ulink>
<ulink url="&commit_baseurl;9c24111c4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2026-03-25 [497c1170c] Add base32hex support to encode() and decode() functions
Author: Masahiko Sawada <msawada@postgresql.org>
2026-03-27 [e752a2ccc] doc: Clarify collation requirements for base32hex sortab
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-09-20 [e1d917182] Add support for base64url encoding and decoding
-->

<listitem>
<para>
Allow <link linkend="functions-binarystring-conversions"><function>encode()</function></link> and <link linkend="functions-binarystring-conversions"><function>decode()</function></link> to process data in <literal>base64url</literal> and <literal>base32hex</literal> formats (Andrey Borodin, Aleksander Alekseev, Florents Tselai)
<ulink url="&commit_baseurl;497c1170c">&sect;</ulink>
<ulink url="&commit_baseurl;e752a2ccc">&sect;</ulink>
<ulink url="&commit_baseurl;e1d917182">&sect;</ulink>
</para>

<para>
This format retains ordering, unlike <literal>base32</literal>.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-11-22 [5eed8ce50] Add range_minus_multi and multirange_minus_multi functio
-->

<listitem>
<para>
Add functions to return a set of ranges resulting from range subtraction (Paul A. Jungwirth)
<ulink url="&commit_baseurl;5eed8ce50">&sect;</ulink>
</para>

<para>
The functions are <link linkend="range-functions-table"><function>range_minus_multi()</function></link> and <link linkend="multirange-functions-table"><function>multirange_minus_multi()</function></link>.  This is useful to represent range subtraction results with gaps.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-10-22 [2b75c38b7] Add error_on_null(), checking if the input is the null v
-->

<listitem>
<para>
Add function <link linkend="functions-comparison-func-table"><function>error_on_null()</function></link> to return the supplied parameter, or error on <literal>NULL</literal> input (Joel Jacobson)
<ulink url="&commit_baseurl;2b75c38b7">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-17 [3b4c2b9db] Allow IS JSON predicate to work with domain types
-->

<listitem>
<para>
Allow <link linkend="functions-sqljson-misc"><literal>IS JSON</literal></link> to work on domains defined over supported base types (Jian He)
<ulink url="&commit_baseurl;3b4c2b9db">&sect;</ulink>
</para>

<para>
The supported base types are <link linkend="datatype-character"><type>TEXT</type></link>, <link linkend="datatype-json"><type>JSON</type></link>, <link linkend="datatype-json"><type>JSONB</type></link>, and <link linkend="datatype-binary"><type>BYTEA</type></link>.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-01-05 [7dc95cc3b] Update to latest Snowball sources.
-->

<listitem>
<para>
Add <link linkend="textsearch-snowball-dictionary">full text stemmers</link> for Polish and Esperanto (Tom Lane)
<ulink url="&commit_baseurl;7dc95cc3b">&sect;</ulink>
</para>

<para>
The Dutch stemmer has also been updated.  The old Dutch stemmer is available via <link linkend="textsearch-snowball-dictionary"><literal>dutch_porter</literal></link>.
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-04-05 [76e514ebb] Add pg_get_role_ddl() function
-->

<listitem>
<para>
Add function <link linkend="functions-get-object-ddl-table"><function>pg_get_role_ddl()</function></link> to output role creation commands (Mario Gonzalez, Bryan Green, Andrew Dunstan, Euler Taveira)
<ulink url="&commit_baseurl;76e514ebb">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-04-05 [b99fd9fd7] Add pg_get_tablespace_ddl() function
-->

<listitem>
<para>
Add function <link linkend="functions-get-object-ddl-table"><function>pg_get_tablespace_ddl()</function></link> to output tablespace creation commands (Nishant Sharma, Manni Wood, Andrew Dunstan, Euler Taveira)
<ulink url="&commit_baseurl;b99fd9fd7">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-04-05 [a4f774cf1] Add pg_get_database_ddl() function
-->

<listitem>
<para>
Add function <link linkend="functions-get-object-ddl-table"><function>pg_get_database_ddl()</function></link> to output database creation commands (Akshay Joshi, Andrew Dunstan, Euler Taveira)
<ulink url="&commit_baseurl;a4f774cf1">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-08-21 [53eff471c] PL/Python: Add event trigger support
-->

<listitem>
<para>
Allow event triggers to be written using <link linkend="plpython"><application>PL/Python</application></link> (Euler Taveira, Dimitri Fontaine)
<ulink url="&commit_baseurl;53eff471c">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-07-13 [092f3c63e] libpq: Add "servicefile" connection option
-->

<listitem>
<para>
Allow libpq connections to specify a service file via <link linkend="libpq-connect-servicefile"><literal>servicefile</literal></link> (Torsten Förtsch, Ryo Kanbayashi)
<ulink url="&commit_baseurl;092f3c63e">&sect;</ulink>
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-02-06 [d8d7c5dc8] libpq: Prepare for protocol grease during 19beta
-->

<listitem>
<para>
Add special libpq protocol parameters for compatibility testing (Jelte Fennema-Nio, Jacob Champion)
<ulink url="&commit_baseurl;d8d7c5dc8">&sect;</ulink>
</para>

<para>
Otherwise known as <ulink url="https://wiki.postgresql.org/wiki/Grease">protocol grease</ulink>, which was active during the 19 beta period. These will no longer be sent as of the <productname>PostgreSQL</productname> 19 official release, but the parameter reservations will remain for potential use in the future.
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-03-30 [993368113] libpq: Add oauth_ca_file option to change CAs without de
-->

<listitem>
<para>
Add libpq connection parameter <link linkend="libpq-connect-oauth-ca-file"><varname>oauth_ca_file</varname></link> to specify an alternate certificate authority when communicating with OAuth providers (Jonathan Gonzalez V., Jacob Champion)
<ulink url="&commit_baseurl;993368113">&sect;</ulink>
</para>

<para>
This can also be set via the <link linkend="libpq-envars"><envar>PGOAUTHCAFILE</envar></link> environment variable.  The default is to use <application>curl</application>'s built-in certificates.
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-04-07 [6d00fb904] libpq: Split PGOAUTHDEBUG=UNSAFE into multiple options
-->

<listitem>
<para>
Allow libpq environment variable <link linkend="libpq-envars"><envar>PGOAUTHDEBUG</envar></link> to specify particular debug options (Zsolt Parragi, Jacob Champion)
<ulink url="&commit_baseurl;6d00fb904">&sect;</ulink>
</para>

<para>
The <literal>UNSAFE</literal> option still generates all debugging output.
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-03-06 [e982331b5] libpq: Introduce PQAUTHDATA_OAUTH_BEARER_TOKEN_V2
Author: Jacob Champion <jchampion@postgresql.org>
2026-03-31 [0af4d402c] libpq: Poison the v2 part of a v1 Bearer request
-->

<listitem>
<para>
Improve custom OAuth client flows (Jacob Champion)
<ulink url="&commit_baseurl;e982331b5">&sect;</ulink>
<ulink url="&commit_baseurl;0af4d402c">&sect;</ulink>
</para>

<para>
Previously, libpq reported only a generic error message during custom flow failures, and each flow implementation was required to calculate the issuer identifier independently. Add a new authdata hook type <link linkend="libpq-oauth-authdata-oauth-bearer-token-v2"><literal>PQAUTHDATA_OAUTH_BEARER_TOKEN_V2</literal></link> that precomputes the issuer ID and lets hooks provide error details.
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-03-05 [b8d768583] libpq: Add PQgetThreadLock() to mirror PQregisterThreadL
-->

<listitem>
<para>
Add libpq function <link linkend="libpq-threading"><function>PQgetThreadLock()</function></link> to retrieve the current locking callback (Jacob Champion)
<ulink url="&commit_baseurl;b8d768583">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-10-28 [b3ce55f41] Add psql PROMPT variable for search_path.
-->

<listitem>
<para>
Allow the search path to appear in the <link linkend="app-psql"><application>psql</application></link> prompt via <link linkend="app-psql-prompting-S"><literal>%S</literal></link> (Florents Tselai)
<ulink url="&commit_baseurl;b3ce55f41">&sect;</ulink>
</para>

<para>
This works when <link linkend="app-psql"><application>psql</application></link> is connected to <productname>PostgreSQL</productname> 18 or later.
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2026-02-03 [dddbbc253] psql: Add %i prompt escape to indicate hot standby statu
-->

<listitem>
<para>
Allow the hot standby status to appear in the <link linkend="app-psql"><application>psql</application></link> prompt via <link linkend="app-psql-prompting-i"><literal>%i</literal></link> (Jim Jones)
<ulink url="&commit_baseurl;dddbbc253">&sect;</ulink>
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2026-02-28 [aecc55866] psql: Show comments in \dRp+, \dRs+, and \dX+ psql meta-
-->

<listitem>
<para>
Modify <link linkend="app-psql"><application>psql</application></link> backslash commands to show comments for publications, subscriptions, and extended statistics (Fujii Masao, Jim Jones)
<ulink url="&commit_baseurl;aecc55866">&sect;</ulink>
</para>

<para>
The modified commands are <link linkend="app-psql-meta-command-drp"><literal>\dRp+</literal></link>, <link linkend="app-psql-meta-command-drs"><literal>\dRs+</literal></link>, and <link linkend="app-psql-meta-command-dx-uc"><literal>\dX+</literal></link>.
</para>
</listitem>

<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2025-11-03 [645cb44c5] Add \pset options for boolean value display
-->

<listitem>
<para>
Allow control over how booleans are displayed in <link linkend="app-psql"><application>psql</application></link> (David G. Johnston)
<ulink url="&commit_baseurl;645cb44c5">&sect;</ulink>
</para>

<para>
The \pset variables are <link linkend="app-psql-meta-command-pset-display-true"><varname>display_true</varname></link> and <link linkend="app-psql-meta-command-pset-display-false"><varname>display_false</varname></link>.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-07-14 [6b1c4d326] psql: Add variable SERVICEFILE
-->

<listitem>
<para>
Add <link linkend="app-psql"><application>psql</application></link> variable <link linkend="app-psql-variables-servicefile"><varname>SERVICEFILE</varname></link> to reference the service file location (Ryo Kanbayashi)
<ulink url="&commit_baseurl;6b1c4d326">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-10-07 [27da1a796] Improve psql's ability to select pager mode accurately.
-->

<listitem>
<para>
Allow <link linkend="app-psql"><application>psql</application></link> to more accurately determine if the <link linkend="app-psql-meta-command-pset-pager">pager</link> is needed (Erik Wienhold)
<ulink url="&commit_baseurl;27da1a796">&sect;</ulink>
</para>
</listitem>

<!--
Author: Masahiko Sawada <msawada@postgresql.org>
2026-03-25 [5fa7837d9] psql: Fix tab completion for FOREIGN DATA WRAPPER and SU
Author: Masahiko Sawada <msawada@postgresql.org>
2025-12-22 [c6a7d3bab] psql: Improve tab completion for COPY option lists.
Author: Fujii Masao <fujii@postgresql.org>
2025-11-23 [81966c545] psql: Improve tab-completion for PREPARE.
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-11-12 [a1f7f91be] Add tab completion support for the WAIT FOR command
Author: Masahiko Sawada <msawada@postgresql.org>
2025-11-04 [6d2ff1de4] psql: Add tab completion for COPY ... PROGRAM.
Author: Masahiko Sawada <msawada@postgresql.org>
2025-11-04 [02fd47dbf] psql: Improve tab completion for COPY ... STDIN/STDOUT.
Author: Fujii Masao <fujii@postgresql.org>
2025-10-24 [14ee8e640] psql: Improve tab completion for large objects.
Author: Fujii Masao <fujii@postgresql.org>
2025-07-15 [ff0bcb248] psql: Fix tab-completion after GRANT/REVOKE on LARGE OBJ
Author: Fujii Masao <fujii@postgresql.org>
2025-07-09 [86c539c5a] psql: Improve psql tab completion for GRANT/REVOKE on la
Author: Álvaro Herrera <alvherre@kurilemu.de>
2025-07-03 [a604affad] Add tab-completion for ALTER TABLE not-nulls
Author: Fujii Masao <fujii@postgresql.org>
2025-06-30 [a4c10de92] psql: Improve tab completion for COPY command.
Author: Masahiko Sawada <msawada@postgresql.org>
2026-01-07 [28c4b8a05] psql: Add tab completion for pstdin and pstdout in \copy
Author: Fujii Masao <fujii@postgresql.org>
2026-03-02 [0bf7d4ca9] psql: Add tab completion for DELETE ... USING.
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-03-02 [344b572e3] psql: Tab-complete ALTER ROLE ... IN DATABASE SET/RESET
-->

<listitem>
<para>
Add or improve <link linkend="app-psql"><application>psql</application></link> tab completion (Yamaguchi Atsuo, Yugo Nagata, Haruna Miwa, Xuneng Zhou, Dagfinn Ilmari Mannsåker, Fujii Masao, Álvaro Herrera, Jian He, Tatsuya Kawata, Ian Lawrence Barwick, Vasuki M)
<ulink url="&commit_baseurl;5fa7837d9">&sect;</ulink>
<ulink url="&commit_baseurl;c6a7d3bab">&sect;</ulink>
<ulink url="&commit_baseurl;81966c545">&sect;</ulink>
<ulink url="&commit_baseurl;a1f7f91be">&sect;</ulink>
<ulink url="&commit_baseurl;6d2ff1de4">&sect;</ulink>
<ulink url="&commit_baseurl;02fd47dbf">&sect;</ulink>
<ulink url="&commit_baseurl;14ee8e640">&sect;</ulink>
<ulink url="&commit_baseurl;ff0bcb248">&sect;</ulink>
<ulink url="&commit_baseurl;86c539c5a">&sect;</ulink>
<ulink url="&commit_baseurl;a604affad">&sect;</ulink>
<ulink url="&commit_baseurl;a4c10de92">&sect;</ulink>
<ulink url="&commit_baseurl;28c4b8a05">&sect;</ulink>
<ulink url="&commit_baseurl;0bf7d4ca9">&sect;</ulink>
<ulink url="&commit_baseurl;344b572e3">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-27 [c32fb29e9] Include extended statistics data in pg_dump
-->

<listitem>
<para>
Allow <link linkend="app-pgdump"><application>pg_dump</application></link> to include restorable extended statistics (Corey Huinker)
<ulink url="&commit_baseurl;c32fb29e9">&sect;</ulink>
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-08-20 [6429e5b77] vacuumdb: Make vacuumdb - -analyze-only process partition
Author: Fujii Masao <fujii@postgresql.org>
2026-06-03 [95b6ec52e] vacuumdb: Fix - -analyze-in-stages skipping partitioned t
-->

<listitem>
<para>
Change <link linkend="app-vacuumdb"><application>vacuumdb</application></link>'s <option>--analyze-only</option> and <option>--analyze-in-stages</option> options to analyze partitioned tables when no targets are specified (Laurenz Albe, Mircea Cadariu, Chao Li)
<ulink url="&commit_baseurl;6429e5b77">&sect;</ulink>
<ulink url="&commit_baseurl;95b6ec52e">&sect;</ulink>
</para>

<para>
Previously it skipped partitioned tables.  This now matches the behavior of <link linkend="sql-analyze"><command>ANALYZE</command></link>.
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-12-09 [d107176d2] vacuumdb: Add - -dry-run.
-->

<listitem>
<para>
Allow <link linkend="app-vacuumdb"><application>vacuumdb</application></link> to report its commands without running them using option <option>--dry-run</option> (Corey Huinker)
<ulink url="&commit_baseurl;d107176d2">&sect;</ulink>
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-20 [b3cf461b3] pg_verifybackup: Enable WAL parsing for tar-format backu
-->

<listitem>
<para>
Allow <link linkend="app-pgverifybackup"><application>pg_verifybackup</application></link> to read <acronym>WAL</acronym> files stored in <application>tar</application> archives (Amul Sul)
<ulink url="&commit_baseurl;b3cf461b3">&sect;</ulink>
</para>

<para>
Add option <option>--wal-path</option> as an alias for the existing and deprecated <option>--wal-directory</option> option.
</para>
</listitem>

<!--
Author: Andrew Dunstan <andrew@dunslane.net>
2026-03-20 [b15c15139] pg_waldump: Add support for reading WAL from tar archive
-->

<listitem>
<para>
Allow <link linkend="pgwaldump"><application>pg_waldump</application></link> to read <acronym>WAL</acronym> files stored in <application>tar</application> archives (Amul Sul)
<ulink url="&commit_baseurl;b15c15139">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-09-08 [3bcfcd815] pg_upgrade: Transfer pg_largeobject_metadata's files whe
Author: Nathan Bossart <nathan@postgresql.org>
2026-02-09 [158408fef] pg_upgrade: Fix handling of pg_largeobject_metadata.
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-18 [161a3e8b6] pg_upgrade: Use COPY for large object metadata.
Author: Nathan Bossart <nathan@postgresql.org>
2026-02-16 [b33f75361] pg_upgrade: Use COPY for LO metadata for upgrades from
-->

<listitem>
<para>
Improve performance of <link linkend="pgupgrade"><application>pg_upgrade</application></link> copying large object metadata (Nathan Bossart)
<ulink url="&commit_baseurl;3bcfcd815">&sect;</ulink>
<ulink url="&commit_baseurl;158408fef">&sect;</ulink>
<ulink url="&commit_baseurl;161a3e8b6">&sect;</ulink>
<ulink url="&commit_baseurl;b33f75361">&sect;</ulink>
</para>

<para>
Various methods are used, depending on the <productname>PostgreSQL</productname> version of the old cluster.
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-07-30 [412036c22] Teach pg_upgrade to handle in-place tablespaces.
-->

<listitem>
<para>
Allow <link linkend="pgupgrade"><application>pg_upgrade</application></link> to process non-default tablespaces stored in the <envar>PGDATA</envar> directory (Nathan Bossart)
<ulink url="&commit_baseurl;412036c22">&sect;</ulink>
</para>

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

<!--
Author: Fujii Masao <fujii@postgresql.org>
2025-11-07 [0ab208fa5] pgbench: Add - -continue-on-error option.
-->

<listitem>
<para>
Add <link linkend="pgbench"><application>pgbench</application></link> option <option>--continue-on-error</option> to continue after <acronym>SQL</acronym> errors (Rintaro Ikeda, Yugo Nagata, Fujii Masao)
<ulink url="&commit_baseurl;0ab208fa5">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-07-08 [0b096e379] Change pg_test_timing to measure in nanoseconds not micr
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-07-09 [9dcc76414] Minor tweaks for pg_test_timing.
-->

<listitem>
<para>
Improve the usability of <link linkend="pgtesttiming"><application>pg_test_timing</application></link> (Hannu Krosing, Tom Lane)
<ulink url="&commit_baseurl;0b096e379">&sect;</ulink>
<ulink url="&commit_baseurl;9dcc76414">&sect;</ulink>
</para>

<para>
Report nanoseconds instead of microseconds.  In addition to histogram output, output a second table that reports exact timings, with an optional cutoff set by <option>--cutoff</option>.
</para>
</listitem>

     </itemizedlist>

    <sect4 id="release-19-pg-createsubscriber">
     <title><link linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link></title>

     <itemizedlist>
<!--
Author: Amit Kapila <akapila@postgresql.org>
2025-12-17 [85ddcc2f4] Support existing publications in pg_createsubscriber.
-->

<listitem>
<para>
Allow <link linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link> to ignore specified publications that already exist (Shubham Khanna)
<ulink url="&commit_baseurl;85ddcc2f4">&sect;</ulink>
</para>

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

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-01-08 [639352d90] pg_createsubscriber: Improve handling of automated recov
-->

<listitem>
<para>
Change the way <link linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link> stores recovery parameters (Alyona Vinter)
<ulink url="&commit_baseurl;639352d90">&sect;</ulink>
</para>

<para>
Changes are stored in optionally-included <filename>pg_createsubscriber.conf</filename> rather than directly in <filename>postgresql.auto.conf</filename>.
</para>
</listitem>

<!--
Author: Amit Kapila <akapila@postgresql.org>
2026-03-25 [6b5b7eae3] pg_createsubscriber: Add -l/- -logdir option to redirect
-->

<listitem>
<para>
Add <link linkend="app-pgcreatesubscriber"><application>pg_createsubscriber</application></link> option <option>-l</option>/<option>--logdir</option> to redirect output to files (Gyan Sreejith, Hayato Kuroda)
<ulink url="&commit_baseurl;6b5b7eae3">&sect;</ulink>
</para>
</listitem>

     </itemizedlist>

    </sect4>

   </sect3>

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

    <itemizedlist>
<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-02-23 [ecae09725] Cope with AIX's alignment woes by using _Pragma("pack").
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-02-23 [4a1b05caa] Restore AIX support.
-->

<listitem>
<para>
Restore support for <link linkend="installation-notes-aix"><systemitem class="osname">AIX</systemitem></link> (Aditya Kamath, Srirama Kucherlapati, Peter Eisentraut)
<ulink url="&commit_baseurl;ecae09725">&sect;</ulink>
<ulink url="&commit_baseurl;4a1b05caa">&sect;</ulink>
</para>

<para>
This uses <application>gcc</application> and only supports 64-bit builds.
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2026-03-14 [0123ce131] Switch the semaphore API on Solaris to unnamed POSIX.
-->

<listitem>
<para>
Change <link linkend="installation-notes-solaris"><systemitem class="osname">Solaris</systemitem></link> to use unnamed <acronym>POSIX</acronym> semaphores (Tom Lane)
<ulink url="&commit_baseurl;0123ce131">&sect;</ulink>
</para>

<para>
Previously it used System V semaphores.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-07-01 [8fd9bb1d9] Enable MSVC conforming preprocessor
-->

<listitem>
<para>
Require <link linkend="installation-notes-visual-studio"><application>Visual Studio 2019</application></link> or later (Peter Eisentraut)
<ulink url="&commit_baseurl;8fd9bb1d9">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-01-14 [2bc60f862] Enable Python Limited API for PL/Python on MSVC
-->

<listitem>
<para>
Allow <link linkend="installation-notes-visual-studio"><productname>MSVC</productname></link> to create <link linkend="plpython"><application>PL/Python</application></link> using the Python Limited <acronym>API</acronym> (Bryan Green)
<ulink url="&commit_baseurl;2bc60f862">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-01-07 [a516b3f00] MSVC: Support building for AArch64.
-->

<listitem>
<para>
Allow building on AArch64 using <link linkend="installation-notes-visual-studio"><productname>MSVC</productname></link> (Niyas Sait, Greg Burd, Dave Cramer)
<ulink url="&commit_baseurl;a516b3f00">&sect;</ulink>
</para>
</listitem>

<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-02-24 [65707ed9a] Add backtrace support for Windows using DbgHelp API
-->

<listitem>
<para>
Allow execution stack backtraces on <link linkend="installation-notes-visual-studio"><application>Windows</application></link> using <literal>DbgHelp</literal> (Bryan Green)
<ulink url="&commit_baseurl;65707ed9a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-08-26 [f5e0186f8] Raise C requirement to C11
Author: Peter Eisentraut <peter@eisentraut.org>
2025-09-11 [4fbe01514] Remove checks for no longer supported GCC versions
-->

<listitem>
<para>
Change the supported C language version to C11 (Peter Eisentraut)
<ulink url="&commit_baseurl;f5e0186f8">&sect;</ulink>
<ulink url="&commit_baseurl;4fbe01514">&sect;</ulink>
</para>

<para>
Previously C99 was used.
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-04-01 [76f4b92ba] Use standard C23 and C++ attributes if available
-->

<listitem>
<para>
Use standard C23 and C++ attributes if available (Peter Eisentraut)
<ulink url="&commit_baseurl;76f4b92ba">&sect;</ulink>
</para>
</listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2026-04-04 [5e13b0f24] Use AVX2 for calculating page checksums where available
-->

<listitem>
<para>
Use <acronym>AVX2</acronym> <acronym>CPU</acronym> instructions for calculating <link linkend="checksums">page checksums</link> (Matthew Sterrett, Andrew Kim)
<ulink url="&commit_baseurl;5e13b0f24">&sect;</ulink>
</para>
</listitem>

<!--
Author: John Naylor <john.naylor@postgresql.org>
2026-04-04 [fbc57f2bc] Compute CRC32C on ARM using the Crypto Extension where a
-->

<listitem>
<para>
Use <productname>ARM</productname> Crypto Extension to Compute CRC32C (John Naylor)
<ulink url="&commit_baseurl;fbc57f2bc">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2025-10-06 [ec8719ccb] Optimize hex_encode() and hex_decode() using SIMD.
-->

<listitem>
<para>
Change <link linkend="functions-binarystring"><function>hex_encode()</function></link> and <link linkend="functions-binarystring"><function>hex_decode()</function></link> to use <acronym>SIMD</acronym> <acronym>CPU</acronym> instructions (Nathan Bossart, Chiranmoy Bhattacharya)
<ulink url="&commit_baseurl;ec8719ccb">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-07-02 [f039c2244] meson: Increase minimum version to 0.57.2
-->

<listitem>
<para>
Require <link linkend="install-meson"><application>Meson</application></link> version 0.57.2 or later (Peter Eisentraut)
<ulink url="&commit_baseurl;f039c2244">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-02-23 [78727dcba] meson: allow disabling building/installation of static l
-->

<listitem>
<para>
Add <application>Meson</application> option to build both shared and static libraries, or only shared (Peter Eisentraut)
<ulink url="&commit_baseurl;78727dcba">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-20 [57ee39795] Update Unicode data to Unicode 17.0.0
-->

<listitem>
<para>
Update <link linkend="collation-managing-standard">Unicode</link> data to version 17.0.0 (Peter Eisentraut)
<ulink url="&commit_baseurl;57ee39795">&sect;</ulink>
</para>
</listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2025-10-08 [94f3ad396] Add planner_setup_hook and planner_shutdown_hook.
Author: Robert Haas <rhaas@postgresql.org>
2026-01-28 [4020b370f] Allow for plugin control over path generation strategies
-->

<listitem>
<para>
Add hooks <literal>planner_setup_hook</literal>, <literal>planner_shutdown_hook</literal>, <literal>joinrel_setup_hook</literal>, and <literal>join_path_setup_hook</literal> (Robert Haas)
<ulink url="&commit_baseurl;94f3ad396">&sect;</ulink>
<ulink url="&commit_baseurl;4020b370f">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-11-22 [b140c8d7a] Add SupportRequestInlineInFrom planner support request.
-->

<listitem>
<para>
Allow extensions to replace <link linkend="xfunc-sql-functions-returning-set">set-returning functions</link> in the <literal>FROM</literal> clause with <acronym>SQL</acronym> queries (Paul A. Jungwirth)
<ulink url="&commit_baseurl;b140c8d7a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2025-12-09 [bd8d9c9bd] Widen MultiXactOffset to 64 bits
-->

<listitem>
<para>
Make <link linkend="functions-info-snapshot">multixid members</link> 64-bit (Maxim Orlov)
<ulink url="&commit_baseurl;bd8d9c9bd">&sect;</ulink>
</para>
</listitem>

<!--
Author: Nathan Bossart <nathan@postgresql.org>
2026-03-30 [bab2f27ea] Remove bits* typedefs.
-->

<listitem>
<para>
Change function prototypes to use <literal>uint*</literal> instead of <literal>bit*</literal> typedefs (Nathan Bossart)
<ulink url="&commit_baseurl;bab2f27ea">&sect;</ulink>
</para>
</listitem>

<!--
Author: Álvaro Herrera <alvherre@kurilemu.de>
2026-04-07 [0d3dba38c] Allow logical replication snapshots to be database-speci
-->

<listitem>
<para>
Allow <link linkend="logicaldecoding-pgoutput">logical decoding plugins</link> to specify if they do not access shared catalogs (Antonin Houska)
<ulink url="&commit_baseurl;0d3dba38c">&sect;</ulink>
</para>
</listitem>

<!--
Author: Jacob Champion <jchampion@postgresql.org>
2026-04-03 [d438a3659] oauth: Let validators provide failure DETAILs
-->

<listitem>
<para>
Allow OAuth validators to supply failure details (Jacob Champion)
<ulink url="&commit_baseurl;d438a3659">&sect;</ulink>
</para>

<para>
This is done by setting the <link linkend="oauth-validator-callback-validate"><structname>ValidatorModuleResult</structname></link> structure member error_detail.
</para>
</listitem>

<!--
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
2026-04-06 [283e823f9] Introduce a new mechanism for registering shared memory
-->

<listitem>
<para>
Add simplified and improved shared memory registration function <link linkend="xfunc-shared-addin-at-startup"><function>ShmemRequestStruct()</function></link> (Heikki Linnakangas, Ashutosh Bapat)
<ulink url="&commit_baseurl;283e823f9">&sect;</ulink>
</para>

<para>
Functions <link linkend="xfunc-shared-addin-at-startup"><function>ShmemInitStruct()</function></link> and <link linkend="xfunc-shared-addin-at-startup"><function>ShmemInitHash()</function></link> remain for backward compatibility.
</para>
</listitem>

<!--
Author: Daniel Gustafsson <dgustafsson@postgresql.org>
2025-11-26 [b3fe098d3] Add GUC to show EXEC_BACKEND state
-->

<listitem>
<para>
Add server variable <link linkend="guc-debug-exec-backend"><varname>debug_exec_backend</varname></link> to report how parameters are passed to new backends (Daniel Gustafsson)
<ulink url="&commit_baseurl;b3fe098d3">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2025-11-05 [e4d8a2af0] doc: Add section for temporal tables
-->

<listitem>
<para>
Add documentation section about <link linkend="ddl-temporal-tables">temporal tables</link> (Paul A. Jungwirth)
<ulink url="&commit_baseurl;e4d8a2af0">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-12 [02976b0a1] doc: Document variables for path substitution in SQL tes
-->

<listitem>
<para>
Document the environment variables that control the <link linkend="regress-run-path-substitution">regression tests</link> (Michael Paquier)
<ulink url="&commit_baseurl;02976b0a1">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-03-03 [b30656ce0] doc: Add restart on failure to example systemd file
-->

<listitem>
<para>
Update documented <link linkend="server-start">systemd example</link> to include a restart setting (Andrew Jackson)
<ulink url="&commit_baseurl;b30656ce0">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

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

    <itemizedlist>
<!--
Author: Robert Haas <rhaas@postgresql.org>
2026-03-12 [5883ff30b] Add pg_plan_advice contrib module.
Author: Robert Haas <rhaas@postgresql.org>
2026-03-26 [6455e55b0] pg_plan_advice: Invent DO_NOT_SCAN(relation_identifier).
-->

<listitem>
<para>
Add <xref linkend="pgplanadvice"/> module to stabilize and control planner decisions (Robert Haas)
<ulink url="&commit_baseurl;5883ff30b">&sect;</ulink>
<ulink url="&commit_baseurl;6455e55b0">&sect;</ulink>
</para>
</listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2026-04-06 [e8ec19aa3] Add pg_stash_advice contrib module.
Author: Robert Haas <rhaas@postgresql.org>
2026-04-07 [c10edb102] pg_stash_advice: Allow stashed advice to be persisted to
-->

<listitem>
<para>
Add extension <xref linkend="pgstashadvice"/> to allow per-query-id advice to be specified (Robert Haas, Lukas Fittl)
<ulink url="&commit_baseurl;e8ec19aa3">&sect;</ulink>
<ulink url="&commit_baseurl;c10edb102">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-07-02 [bee23ea4d] Show sizes of FETCH queries as constants in pg_stat_stat
-->

<listitem>
<para>
Show sizes of <link linkend="sql-fetch"><command>FETCH</command></link> queries as constants in <xref linkend="pgstatstatements"/> (Sami Imseih)
<ulink url="&commit_baseurl;bee23ea4d">&sect;</ulink>
</para>

<para>
Fetches of different sizes will now be grouped together in <xref linkend="pgstatstatements"/> output.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-07-31 [3357471cf] pg_stat_statements: Add counters for generic and custom
-->

<listitem>
<para>
Add <link linkend="sql-prepare">generic and custom plan</link> counts to <xref linkend="pgstatstatements"/> (Sami Imseih)
<ulink url="&commit_baseurl;3357471cf">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-11-24 [4b203d499] pg_buffercache: Add pg_buffercache_os_pages
-->

<listitem>
<para>
Refactor <xref linkend="pgbuffercache"/> reporting of shared memory mapping (Bertrand Drouvot)
<ulink url="&commit_baseurl;4b203d499">&sect;</ulink>
</para>

<para>
New function <function>pg_buffercache_os_pages()</function> and system view <structname>pg_buffercache_os_pages</structname> allow reporting of shared memory mapping;  the function optionally includes <acronym>NUMA</acronym> details.  Function
<function>pg_buffercache_numa_pages()</function> remains for backward compatibility.
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2025-11-28 [9ccc049df] pg_buffercache: Add pg_buffercache_mark_dirty{,_relation
-->

<listitem>
<para>
Add functions to <xref linkend="pgbuffercache"/> to mark buffers as dirty (Nazir Bilal Yavuz)
<ulink url="&commit_baseurl;9ccc049df">&sect;</ulink>
</para>

<para>
The functions are <function>pg_buffercache_mark_dirty()</function>, <function>pg_buffercache_mark_dirty_relation()</function>, and <function>pg_buffercache_mark_dirty_all()</function>.
</para>
</listitem>

<!--
Author: Alexander Korotkov <akorotkov@postgresql.org>
2025-07-18 [62c3b4cd9] Support for deparsing of ArrayCoerceExpr node in contrib
-->

<listitem>
<para>
Allow pushdown of array comparisons in <link linkend="sql-prepare">prepared statements</link> to <xref linkend="postgres-fdw"/> foreign servers (Alexander Pyhalov)
<ulink url="&commit_baseurl;62c3b4cd9">&sect;</ulink>
</para>
</listitem>

<!--
Author: Etsuro Fujita <efujita@postgresql.org>
2026-04-08 [28972b6fc] Add support for importing statistics from remote servers
-->

<listitem>
<para>
Allow the retrieval of statistics from <link linkend="sql-createforeigndatawrapper">foreign data wrapper servers</link> (Corey Huinker, Etsuro Fujita)
<ulink url="&commit_baseurl;28972b6fc">&sect;</ulink>
</para>

<para>
This is enabled for <xref linkend="postgres-fdw"/> by using the option <literal>restore_stats</literal>.  The default is for <link linkend="sql-analyze"><command>ANALYZE</command></link> to retrieve rows from the remote server to locally generate statistics.
</para>
</listitem>

<!--
Author: Fujii Masao <fujii@postgresql.org>
2026-01-22 [26cb14aea] file_fdw: Support multi-line HEADER option.
-->

<listitem>
<para>
Allow <xref linkend="file-fdw"/> to read files or program output that uses multi-line headers (Shinya Kato)
<ulink url="&commit_baseurl;26cb14aea">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tomas Vondra <tomas.vondra@postgresql.org>
2026-04-07 [61c36a34a] auto_explain: Add new GUC auto_explain.log_io
-->

<listitem>
<para>
Add server variable <varname>auto_explain.log_io</varname> to add IO reporting to <link linkend="auto-explain"><application>auto_explain</application></link> (Tomas Vondra)
<ulink url="&commit_baseurl;61c36a34a">&sect;</ulink>
</para>
</listitem>

<!--
Author: Robert Haas <rhaas@postgresql.org>
2026-04-06 [e972dff6c] auto_explain: Add new GUC, auto_explain.log_extension_op
-->

<listitem>
<para>
Allow <link linkend="auto-explain"><application>auto_explain</application></link> to add extension-specific <link linkend="sql-explain"><command>EXPLAIN</command></link> options via server variable <varname>auto_explain.log_extension_options</varname> (Robert Haas)
<ulink url="&commit_baseurl;e972dff6c">&sect;</ulink>
</para>
</listitem>

<!--
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-07-03 [e2b64fcef] Add cross-type comparisons to contrib/btree_gin.
Author: Tom Lane <tgl@sss.pgh.pa.us>
2025-07-03 [fc896821c] Add more cross-type comparisons to contrib/btree_gin.
-->

<listitem>
<para>
Change <xref linkend="btree-gin"/> to support all btree-supported cross-type comparisons (Tom Lane)
<ulink url="&commit_baseurl;e2b64fcef">&sect;</ulink>
<ulink url="&commit_baseurl;fc896821c">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-11 [4c910f3bb] bloom: Optimize bitmap scan path with streaming read
Author: Michael Paquier <michael@paquier.xyz>
2026-03-12 [d841ca2d1] bloom: Optimize VACUUM and bulk-deletion with streaming
-->

<listitem>
<para>
Improve performance of <xref linkend="bloom"/> indexes by using streaming reads (Xuneng Zhou)
<ulink url="&commit_baseurl;4c910f3bb">&sect;</ulink>
<ulink url="&commit_baseurl;d841ca2d1">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-03-13 [213f0079b] pgstattuple: Optimize btree and hash index functions wit
Author: Michael Paquier <michael@paquier.xyz>
2026-03-14 [ae58189a4] pgstattuple: Optimize pgstattuple_approx() with streamin
-->

<listitem>
<para>
Improve performance of <xref linkend="pgstattuple"/> by using streaming reads (Xuneng Zhou)
<ulink url="&commit_baseurl;213f0079b">&sect;</ulink>
<ulink url="&commit_baseurl;ae58189a4">&sect;</ulink>
</para>
</listitem>

<!--
Author: Peter Eisentraut <peter@eisentraut.org>
2026-01-12 [e39ece034] Make dmetaphone collation-aware
-->

<listitem>
<para>
Allow <xref linkend="fuzzystrmatch"/>'s <function>dmetaphone()</function> to use single-byte encodings beyond <acronym>ASCII</acronym> (Peter Eisentraut)
<ulink url="&commit_baseurl;e39ece034">&sect;</ulink>
</para>
</listitem>

<!--
Author: Michael Paquier <michael@paquier.xyz>
2026-02-05 [3c5ec35de] oid2name: Add relation path to the information provided
-->

<listitem>
<para>
Modify <link linkend="oid2name"><application>oid2name</application></link> <option>--extended</option> to report the relation file path (David Bidoc)
<ulink url="&commit_baseurl;3c5ec35de">&sect;</ulink>
</para>
</listitem>

    </itemizedlist>

   </sect3>

  </sect2>

  <sect2 id="release-19-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><emphasis>fill in later</emphasis></member>
   </simplelist>
  </sect2>

</sect1>
