| Server IP : 104.21.25.180 / Your IP : 162.159.115.42 Web Server : Apache/2.4.37 System : Linux almalinux.duckdns.org 4.18.0-553.111.1.el8_10.x86_64 #1 SMP Sun Mar 8 20:06:07 EDT 2026 x86_64 User : ricodeal ( 1046) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/postgresql-docs/html/ |
Upload File : |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>E.24. Release 10</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="[email protected]" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="release-10-1.html" title="E.23. Release 10.1" /><link rel="next" href="release-prior.html" title="E.25. Prior Releases" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">E.24. Release 10</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="release-10-1.html" title="E.23. Release 10.1">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="release.html" title="Appendix E. Release Notes">Up</a></td><th width="60%" align="center">Appendix E. Release Notes</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 10.23 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="release-prior.html" title="E.25. Prior Releases">Next</a></td></tr></table><hr></hr></div><div class="sect1" id="RELEASE-10"><div class="titlepage"><div><div><h2 class="title" style="clear: both">E.24. Release 10</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="release-10.html#id-1.11.6.28.3">E.24.1. Overview</a></span></dt><dt><span class="sect2"><a href="release-10.html#id-1.11.6.28.4">E.24.2. Migration to Version 10</a></span></dt><dt><span class="sect2"><a href="release-10.html#id-1.11.6.28.5">E.24.3. Changes</a></span></dt><dt><span class="sect2"><a href="release-10.html#RELEASE-10-ACKNOWLEDGEMENTS">E.24.4. Acknowledgments</a></span></dt></dl></div><p><strong>Release date: </strong>2017-10-05</p><div class="sect2" id="id-1.11.6.28.3"><div class="titlepage"><div><div><h3 class="title">E.24.1. Overview</h3></div></div></div><p> Major enhancements in <span class="productname">PostgreSQL</span> 10 include:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Logical replication using publish/subscribe</p></li><li class="listitem"><p>Declarative table partitioning</p></li><li class="listitem"><p>Improved query parallelism</p></li><li class="listitem"><p>Significant general performance improvements</p></li><li class="listitem"><p>Stronger password authentication based on SCRAM-SHA-256</p></li><li class="listitem"><p>Improved monitoring and control</p></li></ul></div><p> The above items are explained in more detail in the sections below.
</p></div><div class="sect2" id="id-1.11.6.28.4"><div class="titlepage"><div><div><h3 class="title">E.24.2. Migration to Version 10</h3></div></div></div><p> A dump/restore using <a class="xref" href="app-pg-dumpall.html" title="pg_dumpall"><span class="refentrytitle"><span class="application">pg_dumpall</span></span></a> or use of <a class="xref" href="pgupgrade.html" title="pg_upgrade"><span class="refentrytitle"><span class="application">pg_upgrade</span></span></a> or logical replication is required for those
wishing to migrate data from any previous release. See <a class="xref" href="upgrading.html" title="18.6. Upgrading a PostgreSQL Cluster">Section 18.6</a> for general information on migrating to new major
releases.
</p><p> Version 10 contains a number of changes that may affect compatibility
with previous releases. Observe the following incompatibilities:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Hash indexes must be rebuilt after <span class="application">pg_upgrade</span>-ing
from any previous major <span class="productname">PostgreSQL</span> version (Mithun
Cy, Robert Haas, Amit Kapila)
</p><p> Major hash index improvements necessitated this requirement.
<span class="application">pg_upgrade</span> will create a script to assist with this.
</p></li><li class="listitem"><p> Rename write-ahead log directory <code class="filename">pg_xlog</code>
to <a class="link" href="wal.html" title="Chapter 30. Reliability and the Write-Ahead Log"><code class="filename">pg_wal</code></a>, and rename transaction
status directory <code class="filename">pg_clog</code> to <code class="filename">pg_xact</code>
(Michael Paquier)
</p><p> Users have occasionally thought that these directories contained only
inessential log files, and proceeded to remove write-ahead log files
or transaction status files manually, causing irrecoverable data
loss. These name changes are intended to discourage such errors in
future.
</p></li><li class="listitem"><p> Rename <acronym class="acronym">SQL</acronym> functions, tools, and options that reference
<span class="quote">“<span class="quote">xlog</span>”</span> to <span class="quote">“<span class="quote">wal</span>”</span> (Robert Haas)
</p><p> For example, <code class="function">pg_switch_xlog()</code> becomes
<code class="function">pg_switch_wal()</code>, <span class="application">pg_receivexlog</span>
becomes <span class="application">pg_receivewal</span>, and <code class="option">--xlogdir</code>
becomes <code class="option">--waldir</code>. This is for consistency with the
change of the <code class="filename">pg_xlog</code> directory name; in general,
the <span class="quote">“<span class="quote">xlog</span>”</span> terminology is no longer used in any user-facing
places.
</p></li><li class="listitem"><p> Rename <acronym class="acronym">WAL</acronym>-related functions and views to use <code class="literal">lsn</code>
instead of <code class="literal">location</code> (David Rowley)
</p><p> There was previously an inconsistent mixture of the two terminologies.
</p></li><li class="listitem"><p> Change the implementation of set-returning functions appearing in
a query's <code class="literal">SELECT</code> list (Andres Freund)
</p><p> Set-returning functions are now evaluated before evaluation of scalar
expressions in the <code class="literal">SELECT</code> list, much as though they had
been placed in a <code class="literal">LATERAL FROM</code>-clause item. This allows
saner semantics for cases where multiple set-returning functions are
present. If they return different numbers of rows, the shorter results
are extended to match the longest result by adding nulls. Previously
the results were cycled until they all terminated at the same time,
producing a number of rows equal to the least common multiple of the
functions' periods. In addition, set-returning functions are now
disallowed within <code class="literal">CASE</code> and <code class="literal">COALESCE</code> constructs.
For more information
see <a class="xref" href="xfunc-sql.html#XFUNC-SQL-FUNCTIONS-RETURNING-SET" title="37.4.8. SQL Functions Returning Sets">Section 37.4.8</a>.
</p></li><li class="listitem"><p> Use standard row constructor syntax in <code class="literal">UPDATE ... SET
(<em class="replaceable"><code>column_list</code></em>) = <em class="replaceable"><code>row_constructor</code></em></code>
(Tom Lane)
</p><p> The <em class="replaceable"><code>row_constructor</code></em> can now begin with the
keyword <code class="literal">ROW</code>; previously that had to be omitted.
If just one column name appears in
the <em class="replaceable"><code>column_list</code></em>, then
the <em class="replaceable"><code>row_constructor</code></em> now must use
the <code class="literal">ROW</code> keyword, since otherwise it is not a valid
row constructor but just a parenthesized expression.
Also, an occurrence
of <code class="literal"><em class="replaceable"><code>table_name</code></em>.*</code> within
the <em class="replaceable"><code>row_constructor</code></em> is now expanded into
multiple columns, as occurs in other uses
of <em class="replaceable"><code>row_constructor</code></em>s.
</p></li><li class="listitem"><p> When <code class="command">ALTER TABLE ... ADD PRIMARY KEY</code> marks
columns <code class="literal">NOT NULL</code>, that change now propagates to
inheritance child tables as well (Michael Paquier)
</p></li><li class="listitem"><p> Prevent statement-level triggers from firing more than once per
statement (Tom Lane)
</p><p> Cases involving writable CTEs updating the same table updated by the
containing statement, or by another writable CTE, fired <code class="literal">BEFORE
STATEMENT</code> or <code class="literal">AFTER STATEMENT</code> triggers more than once.
Also, if there were statement-level triggers on a table affected by a
foreign key enforcement action (such as <code class="literal">ON DELETE CASCADE</code>),
they could fire more than once per outer SQL statement. This is
contrary to the SQL standard, so change it.
</p></li><li class="listitem"><p> Move sequences' metadata fields into a new <a class="link" href="catalog-pg-sequence.html" title="51.46. pg_sequence"><code class="structname">pg_sequence</code></a>
system catalog (Peter Eisentraut)
</p><p> A sequence relation now stores only the fields that can be modified
by <code class="function">nextval()</code>, that
is <code class="structfield">last_value</code>, <code class="structfield">log_cnt</code>,
and <code class="structfield">is_called</code>. Other sequence properties, such as
the starting value and increment, are kept in a corresponding row of
the <code class="structname">pg_sequence</code> catalog.
<code class="command">ALTER SEQUENCE</code> updates are now fully transactional,
implying that the sequence is locked until commit.
The <code class="function">nextval()</code> and <code class="function">setval()</code> functions
remain nontransactional.
</p><p> The main incompatibility introduced by this change is that selecting
from a sequence relation now returns only the three fields named
above. To obtain the sequence's other properties, applications must
look into <code class="structname">pg_sequence</code>. The new system
view <a class="link" href="view-pg-sequences.html" title="51.84. pg_sequences"><code class="structname">pg_sequences</code></a>
can also be used for this purpose; it provides column names that are
more compatible with existing code.
</p><p> Also, sequences created for <code class="literal">SERIAL</code> columns now generate
positive 32-bit wide values, whereas previous versions generated 64-bit
wide values. This has no visible effect if the values are only stored in
a column.
</p><p> The output of <span class="application">psql</span>'s <code class="command">\d</code> command for a
sequence has been redesigned, too.
</p></li><li class="listitem"><p> Make <span class="application"><a class="xref" href="app-pgbasebackup.html" title="pg_basebackup"><span class="refentrytitle">pg_basebackup</span></a></span> stream the
<acronym class="acronym">WAL</acronym> needed to restore the backup by default (Magnus
Hagander)
</p><p> This changes <span class="application">pg_basebackup</span>'s
<code class="option">-X</code>/<code class="option">--wal-method</code> default to <code class="literal">stream</code>.
An option value <code class="literal">none</code> has been added to reproduce the old
behavior. The <span class="application">pg_basebackup</span> option <code class="option">-x</code>
has been removed (instead, use <code class="literal">-X fetch</code>).
</p></li><li class="listitem"><p> Change how logical replication
uses <a class="link" href="auth-pg-hba-conf.html" title="20.1. The pg_hba.conf File"><code class="filename">pg_hba.conf</code></a>
(Peter Eisentraut)
</p><p> In previous releases, a logical replication connection required
the <code class="literal">replication</code> keyword in the database column. As
of this release, logical replication matches a normal entry with a
database name or keywords such as <code class="literal">all</code>. Physical
replication continues to use the <code class="literal">replication</code> keyword.
Since built-in logical replication is new in this release, this
change only affects users of third-party logical replication plugins.
</p></li><li class="listitem"><p> Make all <span class="application"><a class="xref" href="app-pg-ctl.html" title="pg_ctl"><span class="refentrytitle"><span class="application">pg_ctl</span></span></a></span> actions wait
for completion by default (Peter Eisentraut)
</p><p> Previously some <span class="application">pg_ctl</span> actions didn't wait for
completion, and required the use of <code class="option">-w</code> to do so.
</p></li><li class="listitem"><p> Change the default value of the <a class="xref" href="runtime-config-logging.html#GUC-LOG-DIRECTORY">log_directory</a>
server parameter from <code class="filename">pg_log</code> to <code class="filename">log</code>
(Andreas Karlsson)
</p></li><li class="listitem"><p> Add configuration option <a class="xref" href="runtime-config-connection.html#GUC-SSL-DH-PARAMS-FILE">ssl_dh_params_file</a> to
specify file name for custom OpenSSL DH parameters (Heikki Linnakangas)
</p><p> This replaces the hardcoded, undocumented file
name <code class="filename">dh1024.pem</code>. Note that <code class="filename">dh1024.pem</code> is
no longer examined by default; you must set this option if you want
to use custom DH parameters.
</p></li><li class="listitem"><p> Increase the size of the default DH parameters used for OpenSSL
ephemeral DH ciphers to 2048 bits (Heikki Linnakangas)
</p><p> The size of the compiled-in DH parameters has been increased from
1024 to 2048 bits, making DH key exchange more resistant to
brute-force attacks. However, some old SSL implementations, notably
some revisions of Java Runtime Environment version 6, will not accept
DH parameters longer than 1024 bits, and hence will not be able to
connect over SSL. If it's necessary to support such old clients, you
can use custom 1024-bit DH parameters instead of the compiled-in
defaults. See <a class="xref" href="runtime-config-connection.html#GUC-SSL-DH-PARAMS-FILE">ssl_dh_params_file</a>.
</p></li><li class="listitem"><p> Remove the ability to store unencrypted passwords on the server
(Heikki Linnakangas)
</p><p> The <a class="xref" href="runtime-config-connection.html#GUC-PASSWORD-ENCRYPTION">password_encryption</a> server parameter
no longer supports <code class="literal">off</code> or <code class="literal">plain</code>.
The <code class="literal">UNENCRYPTED</code> option is no longer supported in
<code class="command">CREATE/ALTER USER ... PASSWORD</code>. Similarly, the
<code class="option">--unencrypted</code> option has been removed
from <span class="application">createuser</span>. Unencrypted passwords migrated from
older versions will be stored encrypted in this release. The default
setting for <code class="varname">password_encryption</code> is still
<code class="literal">md5</code>.
</p></li><li class="listitem"><p> Add <a class="xref" href="runtime-config-query.html#GUC-MIN-PARALLEL-TABLE-SCAN-SIZE">min_parallel_table_scan_size</a>
and <a class="xref" href="runtime-config-query.html#GUC-MIN-PARALLEL-INDEX-SCAN-SIZE">min_parallel_index_scan_size</a> server
parameters to control parallel queries (Amit Kapila, Robert Haas)
</p><p> These replace <code class="varname">min_parallel_relation_size</code>, which was
found to be too generic.
</p></li><li class="listitem"><p> Don't downcase unquoted text
within <a class="xref" href="runtime-config-client.html#GUC-SHARED-PRELOAD-LIBRARIES">shared_preload_libraries</a> and related
server parameters (QL Zhuo)
</p><p> These settings are really lists of file names, but they were
previously treated as lists of SQL identifiers, which have different
parsing rules.
</p></li><li class="listitem"><p> Remove <code class="varname">sql_inheritance</code> server parameter (Robert Haas)
</p><p> Changing this setting from the default value caused queries referencing
parent tables to not include child tables. The <acronym class="acronym">SQL</acronym>
standard requires them to be included, however, and this has been the
default since <span class="productname">PostgreSQL</span> 7.1.
</p></li><li class="listitem"><p> Allow multi-dimensional arrays to be passed into PL/Python functions,
and returned as nested Python lists (Alexey Grishchenko, Dave Cramer,
Heikki Linnakangas)
</p><p> This feature requires a backwards-incompatible change to the handling
of arrays of composite types in PL/Python. Previously, you could
return an array of composite values by writing, e.g., <code class="literal">[[col1,
col2], [col1, col2]]</code>; but now that is interpreted as a
two-dimensional array. Composite types in arrays must now be written
as Python tuples, not lists, to resolve the ambiguity; that is,
write <code class="literal">[(col1, col2), (col1, col2)]</code> instead.
</p></li><li class="listitem"><p> Remove PL/Tcl's <span class="quote">“<span class="quote">module</span>”</span> auto-loading facility (Tom Lane)
</p><p> This functionality has been replaced by new server
parameters <a class="xref" href="pltcl-config.html#GUC-PLTCL-START-PROC">pltcl.start_proc</a>
and <a class="xref" href="pltcl-config.html#GUC-PLTCLU-START-PROC">pltclu.start_proc</a>, which are easier to use
and more similar to features available in other PLs.
</p></li><li class="listitem"><p> Remove <span class="application">pg_dump</span>/<span class="application">pg_dumpall</span> support
for dumping from pre-8.0 servers (Tom Lane)
</p><p> Users needing to dump from pre-8.0 servers will need to use dump
programs from <span class="productname">PostgreSQL</span> 9.6 or earlier. The
resulting output should still load successfully into newer servers.
</p></li><li class="listitem"><p> Remove support for floating-point timestamps and intervals (Tom Lane)
</p><p> This removes configure's <code class="option">--disable-integer-datetimes</code>
option. Floating-point timestamps have few advantages and have not
been the default since <span class="productname">PostgreSQL</span> 8.3.
</p></li><li class="listitem"><p> Remove server support for client/server protocol version 1.0 (Tom Lane)
</p><p> This protocol hasn't had client support
since <span class="productname">PostgreSQL</span> 6.3.
</p></li><li class="listitem"><p> Remove <code class="filename">contrib/tsearch2</code> module (Robert Haas)
</p><p> This module provided compatibility with the version of full text
search that shipped in pre-8.3 <span class="productname">PostgreSQL</span> releases.
</p></li><li class="listitem"><p> Remove <span class="application">createlang</span> and <span class="application">droplang</span>
command-line applications (Peter Eisentraut)
</p><p> These had been deprecated since <span class="productname">PostgreSQL</span> 9.1.
Instead, use <code class="command">CREATE EXTENSION</code> and <code class="command">DROP
EXTENSION</code> directly.
</p></li><li class="listitem"><p> Remove support for version-0 function calling conventions (Andres
Freund)
</p><p> Extensions providing C-coded functions must now conform to version 1
calling conventions. Version 0 has been deprecated since 2001.
</p></li></ul></div></div><div class="sect2" id="id-1.11.6.28.5"><div class="titlepage"><div><div><h3 class="title">E.24.3. Changes</h3></div></div></div><p> Below you will find a detailed account of the changes between
<span class="productname">PostgreSQL</span> 10 and the previous major
release.
</p><div class="sect3" id="id-1.11.6.28.5.3"><div class="titlepage"><div><div><h4 class="title">E.24.3.1. Server</h4></div></div></div><div class="sect4" id="id-1.11.6.28.5.3.2"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.1. Parallel Queries</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Support parallel B-tree index scans (Rahila Syed, Amit Kapila,
Robert Haas, Rafia Sabih)
</p><p> This change allows B-tree index pages to be searched by separate
parallel workers.
</p></li><li class="listitem"><p> Support parallel bitmap heap scans (Dilip Kumar)
</p><p> This allows a single index scan to dispatch parallel workers to
process different areas of the heap.
</p></li><li class="listitem"><p> Allow merge joins to be performed in parallel (Dilip Kumar)
</p></li><li class="listitem"><p> Allow non-correlated subqueries to be run in parallel (Amit Kapila)
</p></li><li class="listitem"><p> Improve ability of parallel workers to return pre-sorted data
(Rushabh Lathia)
</p></li><li class="listitem"><p> Increase parallel query usage in procedural language functions
(Robert Haas, Rafia Sabih)
</p></li><li class="listitem"><p> Add <a class="xref" href="runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS">max_parallel_workers</a> server parameter
to limit the number of worker processes that can be used for
query parallelism (Julien Rouhaud)
</p><p> This parameter can be set lower than <a class="xref" href="runtime-config-resource.html#GUC-MAX-WORKER-PROCESSES">max_worker_processes</a> to reserve worker processes
for purposes other than parallel queries.
</p></li><li class="listitem"><p> Enable parallelism by default by changing the default setting
of <a class="xref" href="runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS-PER-GATHER">max_parallel_workers_per_gather</a> to
<code class="literal">2</code>.
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.3"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.2. Indexes</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add write-ahead logging support to hash indexes (Amit Kapila)
</p><p> This makes hash indexes crash-safe and replicatable.
The former warning message about their use is removed.
</p></li><li class="listitem"><p> Improve hash index performance (Amit Kapila, Mithun Cy, Ashutosh
Sharma)
</p></li><li class="listitem"><p> Add <acronym class="acronym">SP-GiST</acronym> index support for <code class="type">INET</code> and
<code class="type">CIDR</code> data types (Emre Hasegeli)
</p></li><li class="listitem"><p> Add option to allow <acronym class="acronym">BRIN</acronym> index summarization to happen
more aggressively (Álvaro Herrera)
</p><p> A new <a class="link" href="sql-createindex.html" title="CREATE INDEX"><code class="command">CREATE
INDEX</code></a> option enables auto-summarization of the
previous <acronym class="acronym">BRIN</acronym> page range when a new page
range is created.
</p></li><li class="listitem"><p> Add functions to remove and re-add <acronym class="acronym">BRIN</acronym>
summarization for <acronym class="acronym">BRIN</acronym> index ranges (Álvaro
Herrera)
</p><p> The new <acronym class="acronym">SQL</acronym> function <a class="link" href="functions-admin.html#FUNCTIONS-ADMIN-INDEX-TABLE" title="Table 9.87. Index Maintenance Functions"><code class="function">brin_summarize_range()</code></a>
updates <acronym class="acronym">BRIN</acronym> index summarization for a specified
range and <code class="function">brin_desummarize_range()</code> removes it.
This is helpful to update summarization of a range that is now
smaller due to <code class="command">UPDATE</code>s and <code class="command">DELETE</code>s.
</p></li><li class="listitem"><p> Improve accuracy in determining if a <acronym class="acronym">BRIN</acronym> index scan
is beneficial (David Rowley, Emre Hasegeli)
</p></li><li class="listitem"><p> Allow faster <acronym class="acronym">GiST</acronym> inserts and updates by reusing
index space more efficiently (Andrey Borodin)
</p></li><li class="listitem"><p> Reduce page locking during vacuuming of <acronym class="acronym">GIN</acronym> indexes
(Andrey Borodin)
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.4"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.3. Locking</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Reduce locking required to change table parameters (Simon Riggs,
Fabrízio Mello)
</p><p> For example, changing a table's <a class="xref" href="runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY">effective_io_concurrency</a> setting can now be done
with a more lightweight lock.
</p></li><li class="listitem"><p> Allow tuning of predicate lock promotion thresholds (Dagfinn
Ilmari Mannsåker)
</p><p> Lock promotion can now be controlled through two new server
parameters, <a class="xref" href="runtime-config-locks.html#GUC-MAX-PRED-LOCKS-PER-RELATION">max_pred_locks_per_relation</a> and
<a class="xref" href="runtime-config-locks.html#GUC-MAX-PRED-LOCKS-PER-PAGE">max_pred_locks_per_page</a>.
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.5"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.4. Optimizer</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add multi-column optimizer statistics to compute the correlation
ratio and number of distinct values (Tomas Vondra, David Rowley,
Álvaro Herrera)
</p><p> New commands are <a class="link" href="sql-createstatistics.html" title="CREATE STATISTICS"><code class="command">CREATE STATISTICS</code></a>,
<a class="link" href="sql-alterstatistics.html" title="ALTER STATISTICS"><code class="command">ALTER STATISTICS</code></a>, and
<a class="link" href="sql-dropstatistics.html" title="DROP STATISTICS"><code class="command">DROP STATISTICS</code></a>.
This feature is helpful in estimating query memory usage and when
combining the statistics from individual columns.
</p></li><li class="listitem"><p> Improve performance of queries affected by row-level security
restrictions (Tom Lane)
</p><p> The optimizer now has more knowledge about where it can place RLS
filter conditions, allowing better plans to be generated while still
enforcing the RLS conditions safely.
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.6"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.5. General Performance</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Speed up aggregate functions that calculate a running sum
using <code class="type">numeric</code>-type arithmetic, including some variants
of <code class="function">SUM()</code>, <code class="function">AVG()</code>,
and <code class="function">STDDEV()</code> (Heikki Linnakangas)
</p></li><li class="listitem"><p> Improve performance of character encoding conversions by
using radix trees (Kyotaro Horiguchi, Heikki Linnakangas)
</p></li><li class="listitem"><p> Reduce expression evaluation overhead during query execution,
as well as plan node calling overhead (Andres Freund)
</p><p> This is particularly helpful for queries that process many rows.
</p></li><li class="listitem"><p> Allow hashed aggregation to be used with grouping sets (Andrew
Gierth)
</p></li><li class="listitem"><p> Use uniqueness guarantees to optimize certain join types (David
Rowley)
</p></li><li class="listitem"><p> Improve sort performance of the <code class="type">macaddr</code> data type (Brandur Leach)
</p></li><li class="listitem"><p> Reduce statistics tracking overhead in sessions that reference
many thousands of relations (Aleksander Alekseev)
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.7"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.6. Monitoring</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow explicit control
over <a class="link" href="sql-explain.html" title="EXPLAIN"><code class="command">EXPLAIN</code></a>'s display
of planning and execution time (Ashutosh Bapat)
</p><p> By default planning and execution time are displayed by
<code class="command">EXPLAIN ANALYZE</code> and are not displayed in other cases.
The new <code class="command">EXPLAIN</code> option <code class="literal">SUMMARY</code> allows
explicit control of this.
</p></li><li class="listitem"><p> Add default monitoring roles (Dave Page)
</p><p> New roles <code class="literal">pg_monitor</code>, <code class="literal">pg_read_all_settings</code>,
<code class="literal">pg_read_all_stats</code>, and <code class="literal">pg_stat_scan_tables</code>
allow simplified permission configuration.
</p></li><li class="listitem"><p> Properly update the statistics collector during <a class="link" href="sql-refreshmaterializedview.html" title="REFRESH MATERIALIZED VIEW"><code class="command">REFRESH MATERIALIZED
VIEW</code></a> (Jim Mlodgenski)
</p></li></ul></div><div class="sect5" id="id-1.11.6.28.5.3.7.3"><div class="titlepage"><div><div><h6 class="title">E.24.3.1.6.1. Logging</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Change the default value of <a class="xref" href="runtime-config-logging.html#GUC-LOG-LINE-PREFIX">log_line_prefix</a>
to include current timestamp (with milliseconds) and the process ID
in each line of postmaster log output (Christoph Berg)
</p><p> The previous default was an empty prefix.
</p></li><li class="listitem"><p> Add functions to return the log and <acronym class="acronym">WAL</acronym> directory
contents (Dave Page)
</p><p> The new functions
are <a class="link" href="functions-admin.html#FUNCTIONS-ADMIN-GENFILE-TABLE" title="Table 9.88. Generic File Access Functions"><code class="function">pg_ls_logdir()</code></a>
and <a class="link" href="functions-admin.html#FUNCTIONS-ADMIN-GENFILE-TABLE" title="Table 9.88. Generic File Access Functions"><code class="function">pg_ls_waldir()</code></a>
and can be executed by non-superusers with the proper
permissions.
</p></li><li class="listitem"><p> Add function <a class="link" href="functions-info.html#FUNCTIONS-INFO-SESSION-TABLE" title="Table 9.60. Session Information Functions"><code class="function">pg_current_logfile()</code></a>
to read logging collector's current stderr and csvlog output file names
(Gilles Darold)
</p></li><li class="listitem"><p> Report the address and port number of each listening socket
in the server log during postmaster startup (Tom Lane)
</p><p> Also, when logging failure to bind a listening socket, include
the specific address we attempted to bind to.
</p></li><li class="listitem"><p> Reduce log chatter about the starting and stopping of launcher
subprocesses (Tom Lane)
</p><p> These are now <code class="literal">DEBUG1</code>-level messages.
</p></li><li class="listitem"><p> Reduce message verbosity of lower-numbered debug levels
controlled by
<a class="xref" href="runtime-config-logging.html#GUC-LOG-MIN-MESSAGES">log_min_messages</a> (Robert Haas)
</p><p> This also changes the verbosity of <a class="xref" href="runtime-config-client.html#GUC-CLIENT-MIN-MESSAGES">client_min_messages</a> debug levels.
</p></li></ul></div></div><div class="sect5" id="id-1.11.6.28.5.3.7.4"><div class="titlepage"><div><div><h6 class="title">E.24.3.1.6.2. <a class="link" href="monitoring-stats.html#PG-STAT-ACTIVITY-VIEW" title="Table 28.3. pg_stat_activity View"><code class="structname">pg_stat_activity</code></a></h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add <code class="structname">pg_stat_activity</code> reporting of low-level wait
states (Michael Paquier, Robert Haas, Rushabh Lathia)
</p><p> This change enables reporting of numerous low-level wait conditions,
including latch waits, file reads/writes/fsyncs, client reads/writes,
and synchronous replication.
</p></li><li class="listitem"><p> Show auxiliary processes, background workers, and walsender
processes in <code class="structname">pg_stat_activity</code> (Kuntal Ghosh,
Michael Paquier)
</p><p> This simplifies monitoring. A new
column <code class="structfield">backend_type</code> identifies the process type.
</p></li><li class="listitem"><p> Allow <code class="structname">pg_stat_activity</code> to show the SQL query
being executed by parallel workers (Rafia Sabih)
</p></li><li class="listitem"><p> Rename
<code class="structname">pg_stat_activity</code>.<code class="structfield">wait_event_type</code>
values <code class="literal">LWLockTranche</code> and
<code class="literal">LWLockNamed</code> to <code class="literal">LWLock</code> (Robert Haas)
</p><p> This makes the output more consistent.
</p></li></ul></div></div></div><div class="sect4" id="id-1.11.6.28.5.3.8"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.7. <acronym class="acronym">Authentication</acronym></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add <a class="link" href="auth-methods.html#AUTH-PASSWORD" title="20.3.2. Password Authentication">SCRAM-SHA-256</a>
support for password negotiation and storage (Michael Paquier,
Heikki Linnakangas)
</p><p> This provides better security than the existing <code class="literal">md5</code>
negotiation and storage method.
</p></li><li class="listitem"><p> Change the <a class="xref" href="runtime-config-connection.html#GUC-PASSWORD-ENCRYPTION">password_encryption</a> server parameter
from <code class="type">boolean</code> to <code class="type">enum</code> (Michael Paquier)
</p><p> This was necessary to support additional password hashing options.
</p></li><li class="listitem"><p> Add view <a class="link" href="view-pg-hba-file-rules.html" title="51.71. pg_hba_file_rules"><code class="structname">pg_hba_file_rules</code></a>
to display the contents of <code class="filename">pg_hba.conf</code> (Haribabu
Kommi)
</p><p> This shows the file contents, not the currently active settings.
</p></li><li class="listitem"><p> Support multiple <acronym class="acronym">RADIUS</acronym> servers (Magnus Hagander)
</p><p> All the <acronym class="acronym">RADIUS</acronym> related parameters are now plural and
support a comma-separated list of servers.
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.9"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.8. Server Configuration</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow <acronym class="acronym">SSL</acronym> configuration to be updated during
configuration reload (Andreas Karlsson, Tom Lane)
</p><p> This allows <acronym class="acronym">SSL</acronym> to be reconfigured without a server
restart, by using <code class="command">pg_ctl reload</code>, <code class="command">SELECT
pg_reload_conf()</code>, or sending a <code class="literal">SIGHUP</code> signal.
However, reloading the <acronym class="acronym">SSL</acronym> configuration does not work
if the server's <acronym class="acronym">SSL</acronym> key requires a passphrase, as there
is no way to re-prompt for the passphrase. The original
configuration will apply for the life of the postmaster in that
case.
</p></li><li class="listitem"><p> Make the maximum value of <a class="xref" href="runtime-config-resource.html#GUC-BGWRITER-LRU-MAXPAGES">bgwriter_lru_maxpages</a> effectively unlimited
(Jim Nasby)
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.3.10"><div class="titlepage"><div><div><h5 class="title">E.24.3.1.9. Reliability</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> After creating or unlinking files, perform an fsync on their parent
directory (Michael Paquier)
</p><p> This reduces the risk of data loss after a power failure.
</p></li></ul></div><div class="sect5" id="id-1.11.6.28.5.3.10.3"><div class="titlepage"><div><div><h6 class="title">E.24.3.1.9.1. <a class="link" href="wal.html" title="Chapter 30. Reliability and the Write-Ahead Log">Write-Ahead Log</a> (<acronym class="acronym">WAL</acronym>)</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Prevent unnecessary checkpoints and <acronym class="acronym">WAL</acronym> archiving on
otherwise-idle systems (Michael Paquier)
</p></li><li class="listitem"><p> Add <a class="xref" href="runtime-config-developer.html#GUC-WAL-CONSISTENCY-CHECKING">wal_consistency_checking</a> server parameter
to add details to <acronym class="acronym">WAL</acronym> that can be sanity-checked on
the standby (Kuntal Ghosh, Robert Haas)
</p><p> Any sanity-check failure generates a fatal error on the standby.
</p></li><li class="listitem"><p> Increase the maximum configurable <acronym class="acronym">WAL</acronym> segment size
to one gigabyte (Beena Emerson)
</p><p> A larger <acronym class="acronym">WAL</acronym> segment size allows for fewer
<a class="xref" href="runtime-config-wal.html#GUC-ARCHIVE-COMMAND">archive_command</a> invocations and fewer
<acronym class="acronym">WAL</acronym> files to manage.
</p></li></ul></div></div></div></div><div class="sect3" id="id-1.11.6.28.5.4"><div class="titlepage"><div><div><h4 class="title">E.24.3.2. Replication and Recovery</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add the ability to <a class="link" href="logical-replication.html" title="Chapter 31. Logical Replication">logically
replicate</a> tables to standby servers (Petr Jelinek)
</p><p> Logical replication allows more flexibility than physical
replication does, including replication between different major
versions of <span class="productname">PostgreSQL</span> and selective
replication.
</p></li><li class="listitem"><p> Allow waiting for commit acknowledgment from standby
servers irrespective of the order they appear in <a class="xref" href="runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES">synchronous_standby_names</a> (Masahiko Sawada)
</p><p> Previously the server always waited for the active standbys that
appeared first in <code class="varname">synchronous_standby_names</code>. The new
<code class="varname">synchronous_standby_names</code> keyword <code class="literal">ANY</code> allows
waiting for any number of standbys irrespective of their ordering.
This is known as quorum commit.
</p></li><li class="listitem"><p> Reduce configuration changes necessary to perform streaming backup
and replication (Magnus Hagander, Dang Minh Huong)
</p><p> Specifically, the defaults were changed for <a class="xref" href="runtime-config-wal.html#GUC-WAL-LEVEL">wal_level</a>, <a class="xref" href="runtime-config-replication.html#GUC-MAX-WAL-SENDERS">max_wal_senders</a>,
<a class="xref" href="runtime-config-replication.html#GUC-MAX-REPLICATION-SLOTS">max_replication_slots</a>, and <a class="xref" href="runtime-config-replication.html#GUC-HOT-STANDBY">hot_standby</a> to make them suitable for these usages
out-of-the-box.
</p></li><li class="listitem"><p> Enable replication from localhost connections by default in
<a class="link" href="auth-pg-hba-conf.html" title="20.1. The pg_hba.conf File"><code class="filename">pg_hba.conf</code></a>
(Michael Paquier)
</p><p> Previously <code class="filename">pg_hba.conf</code>'s replication connection
lines were commented out by default. This is particularly useful for
<span class="application"><a class="xref" href="app-pgbasebackup.html" title="pg_basebackup"><span class="refentrytitle">pg_basebackup</span></a></span>.
</p></li><li class="listitem"><p> Add columns to <a class="link" href="monitoring-stats.html#PG-STAT-REPLICATION-VIEW" title="Table 28.5. pg_stat_replication View"><code class="structname">pg_stat_replication</code></a>
to report replication delay times (Thomas Munro)
</p><p> The new columns are <code class="structfield">write_lag</code>,
<code class="structfield">flush_lag</code>, and <code class="structfield">replay_lag</code>.
</p></li><li class="listitem"><p> Allow specification of the recovery stopping point by Log Sequence
Number (<acronym class="acronym">LSN</acronym>) in
<a class="link" href="recovery-config.html" title="Chapter 27. Recovery Configuration"><code class="filename">recovery.conf</code></a>
(Michael Paquier)
</p><p> Previously the stopping point could only be selected by timestamp or
XID.
</p></li><li class="listitem"><p> Allow users to disable <a class="link" href="functions-admin.html" title="9.26. System Administration Functions"><code class="function">pg_stop_backup()</code></a>'s
waiting for all <acronym class="acronym">WAL</acronym> to be archived (David Steele)
</p><p> An optional second argument to <code class="function">pg_stop_backup()</code>
controls that behavior.
</p></li><li class="listitem"><p> Allow creation of <a class="link" href="functions-admin.html#FUNCTIONS-REPLICATION-TABLE" title="Table 9.83. Replication SQL Functions">temporary replication slots</a>
(Petr Jelinek)
</p><p> Temporary slots are automatically removed on session exit or error.
</p></li><li class="listitem"><p> Improve performance of hot standby replay with better tracking of
Access Exclusive locks (Simon Riggs, David Rowley)
</p></li><li class="listitem"><p> Speed up two-phase commit recovery performance (Stas Kelvich,
Nikhil Sontakke, Michael Paquier)
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.5"><div class="titlepage"><div><div><h4 class="title">E.24.3.3. Queries</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add <a class="link" href="functions-xml.html#FUNCTIONS-XML-PROCESSING-XMLTABLE" title="9.14.3.3. xmltable"><code class="function">XMLTABLE</code></a>
function that converts <code class="type">XML</code>-formatted data into a row set
(Pavel Stehule, Álvaro Herrera)
</p></li><li class="listitem"><p> Fix regular expressions' character class handling for large character
codes, particularly Unicode characters above <code class="literal">U+7FF</code>
(Tom Lane)
</p><p> Previously, such characters were never recognized as belonging to
locale-dependent character classes such as <code class="literal">[[:alpha:]]</code>.
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.6"><div class="titlepage"><div><div><h4 class="title">E.24.3.4. Utility Commands</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add table <a class="link" href="sql-createtable.html#SQL-CREATETABLE-PARTITION">partitioning
syntax</a> that automatically creates partition constraints and
handles routing of tuple insertions and updates (Amit Langote)
</p><p> The syntax supports range and list partitioning.
</p></li><li class="listitem"><p> Add <a class="link" href="sql-createtrigger.html" title="CREATE TRIGGER"><code class="literal">AFTER</code> trigger</a>
transition tables to record changed rows (Kevin Grittner, Thomas
Munro)
</p><p> Transition tables are accessible from triggers written in
server-side languages.
</p></li><li class="listitem"><p> Allow <a class="link" href="sql-createpolicy.html" title="CREATE POLICY">restrictive row-level
security policies</a> (Stephen Frost)
</p><p> Previously all security policies were permissive, meaning that any
matching policy allowed access. A restrictive policy must
match for access to be granted. These policy types can be combined.
</p></li><li class="listitem"><p> When creating a foreign-key constraint, check
for <code class="literal">REFERENCES</code> permission on only the referenced table
(Tom Lane)
</p><p> Previously <code class="literal">REFERENCES</code> permission on the referencing
table was also required. This appears to have stemmed from a
misreading of the SQL standard. Since creating a foreign key (or
any other type of) constraint requires ownership privilege on the
constrained table, additionally requiring <code class="literal">REFERENCES</code>
permission seems rather pointless.
</p></li><li class="listitem"><p> Allow <a class="link" href="sql-alterdefaultprivileges.html" title="ALTER DEFAULT PRIVILEGES">default
permissions</a> on schemas (Matheus Oliveira)
</p><p> This is done using the <code class="literal">ALTER DEFAULT PRIVILEGES</code> command.
</p></li><li class="listitem"><p> Add <a class="link" href="sql-createsequence.html" title="CREATE SEQUENCE"><code class="command">CREATE SEQUENCE
AS</code></a> command to create a sequence matching an integer data type
(Peter Eisentraut)
</p><p> This simplifies the creation of sequences matching the range of
base columns.
</p></li><li class="listitem"><p> Allow <code class="literal">COPY <em class="replaceable"><code>view</code></em>
FROM <em class="replaceable"><code>source</code></em></code> on views with <code class="literal">INSTEAD
INSERT</code> triggers (Haribabu Kommi)
</p><p> The triggers are fed the data rows read by <code class="command">COPY</code>.
</p></li><li class="listitem"><p> Allow the specification of a function name without arguments in
<acronym class="acronym">DDL</acronym> commands, if it is unique (Peter Eisentraut)
</p><p> For example, allow <a class="link" href="sql-dropfunction.html" title="DROP FUNCTION"><code class="command">DROP
FUNCTION</code></a> on a function name without arguments if there
is only one function with that name. This behavior is required by the
<acronym class="acronym">SQL</acronym> standard.
</p></li><li class="listitem"><p> Allow multiple functions, operators, and aggregates to be dropped
with a single <code class="command">DROP</code> command (Peter Eisentraut)
</p></li><li class="listitem"><p> Support <code class="literal">IF NOT EXISTS</code>
in <a class="link" href="sql-createserver.html" title="CREATE SERVER"><code class="command">CREATE SERVER</code></a>,
<a class="link" href="sql-createusermapping.html" title="CREATE USER MAPPING"><code class="command">CREATE USER MAPPING</code></a>,
and <a class="link" href="sql-createcollation.html" title="CREATE COLLATION"><code class="command">CREATE COLLATION</code></a>
(Anastasia Lubennikova, Peter Eisentraut)
</p></li><li class="listitem"><p> Make <a class="link" href="sql-vacuum.html" title="VACUUM"><code class="command">VACUUM VERBOSE</code></a> report
the number of skipped frozen pages and oldest xmin (Masahiko
Sawada, Simon Riggs)
</p><p> This information is also included in <a class="xref" href="runtime-config-autovacuum.html#GUC-LOG-AUTOVACUUM-MIN-DURATION">log_autovacuum_min_duration</a> output.
</p></li><li class="listitem"><p> Improve speed of <code class="command">VACUUM</code>'s removal of trailing empty
heap pages (Claudio Freire, Álvaro Herrera)
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.7"><div class="titlepage"><div><div><h4 class="title">E.24.3.5. Data Types</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add full text search support for <code class="type">JSON</code> and <code class="type">JSONB</code>
(Dmitry Dolgov)
</p><p> The functions <code class="function">ts_headline()</code> and
<code class="function">to_tsvector()</code> can now be used on these data types.
</p></li><li class="listitem"><p> Add support for <acronym class="acronym">EUI-64</acronym> <acronym class="acronym">MAC</acronym> addresses, as a
new data type <a class="link" href="datatype-net-types.html#DATATYPE-MACADDR8" title="8.9.5. macaddr8"><code class="type">macaddr8</code></a>
(Haribabu Kommi)
</p><p> This complements the existing support
for <acronym class="acronym">EUI-48</acronym> <acronym class="acronym">MAC</acronym> addresses
(type <code class="type">macaddr</code>).
</p></li><li class="listitem"><p> Add <a class="link" href="sql-createtable.html" title="CREATE TABLE">identity columns</a> for
assigning a numeric value to columns on insert (Peter Eisentraut)
</p><p> These are similar to <code class="type">SERIAL</code> columns, but are
<acronym class="acronym">SQL</acronym> standard compliant.
</p></li><li class="listitem"><p> Allow <a class="link" href="datatype-enum.html" title="8.7. Enumerated Types"><code class="type">ENUM</code></a> values to be
renamed (Dagfinn Ilmari Mannsåker)
</p><p> This uses the syntax <a class="link" href="sql-altertype.html" title="ALTER TYPE"><code class="command">ALTER
TYPE ... RENAME VALUE</code></a>.
</p></li><li class="listitem"><p> Properly treat array pseudotypes
(<code class="type">anyarray</code>) as arrays in <a class="link" href="functions-json.html#FUNCTIONS-JSON-CREATION-TABLE" title="Table 9.45. JSON Creation Functions"><code class="function">to_json()</code></a>
and <code class="function">to_jsonb()</code> (Andrew Dunstan)
</p><p> Previously columns declared as <code class="type">anyarray</code> (particularly those
in the <code class="structname">pg_stats</code> view) were converted to <code class="type">JSON</code>
strings rather than arrays.
</p></li><li class="listitem"><p> Add operators for multiplication and division
of <a class="link" href="datatype-money.html" title="8.2. Monetary Types"><code class="type">money</code></a> values
with <code class="type">int8</code> values (Peter Eisentraut)
</p><p> Previously such cases would result in converting the <code class="type">int8</code>
values to <code class="type">float8</code> and then using
the <code class="type">money</code>-and-<code class="type">float8</code> operators. The new behavior
avoids possible precision loss. But note that division
of <code class="type">money</code> by <code class="type">int8</code> now truncates the quotient, like
other integer-division cases, while the previous behavior would have
rounded.
</p></li><li class="listitem"><p> Check for overflow in the <code class="type">money</code> type's input function
(Peter Eisentraut)
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.8"><div class="titlepage"><div><div><h4 class="title">E.24.3.6. Functions</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add simplified <a class="link" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions"><code class="function">regexp_match()</code></a>
function (Emre Hasegeli)
</p><p> This is similar to <code class="function">regexp_matches()</code>, but it only
returns results from the first match so it does not need to return a
set, making it easier to use for simple cases.
</p></li><li class="listitem"><p> Add a version of <code class="type">jsonb</code>'s <a class="link" href="functions-json.html#FUNCTIONS-JSONB-OP-TABLE" title="Table 9.44. Additional jsonb Operators">delete operator</a> that takes
an array of keys to delete (Magnus Hagander)
</p></li><li class="listitem"><p> Make <a class="link" href="functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE" title="Table 9.46. JSON Processing Functions"><code class="function">json_populate_record()</code></a>
and related functions process JSON arrays and objects recursively
(Nikita Glukhov)
</p><p> With this change, array-type fields in the destination SQL type are
properly converted from JSON arrays, and composite-type fields are
properly converted from JSON objects. Previously, such cases would
fail because the text representation of the JSON value would be fed
to <code class="function">array_in()</code> or <code class="function">record_in()</code>, and its
syntax would not match what those input functions expect.
</p></li><li class="listitem"><p> Add function <a class="link" href="functions-info.html#FUNCTIONS-TXID-SNAPSHOT" title="Table 9.69. Transaction IDs and Snapshots"><code class="function">txid_current_if_assigned()</code></a>
to return the current transaction ID or <code class="literal">NULL</code> if no
transaction ID has been assigned (Craig Ringer)
</p><p> This is different from <a class="link" href="functions-info.html#FUNCTIONS-TXID-SNAPSHOT" title="Table 9.69. Transaction IDs and Snapshots"><code class="function">txid_current()</code></a>,
which always returns a transaction ID, assigning one if necessary.
Unlike that function, this function can be run on standby servers.
</p></li><li class="listitem"><p> Add function <a class="link" href="functions-info.html#FUNCTIONS-TXID-SNAPSHOT" title="Table 9.69. Transaction IDs and Snapshots"><code class="function">txid_status()</code></a>
to check if a transaction was committed (Craig Ringer)
</p><p> This is useful for checking after an abrupt disconnection whether
your previous transaction committed and you just didn't receive
the acknowledgment.
</p></li><li class="listitem"><p> Allow <a class="link" href="functions-datetime.html#FUNCTIONS-DATETIME-TABLE" title="Table 9.30. Date/Time Functions"><code class="function">make_date()</code></a>
to interpret negative years as <acronym class="acronym">BC</acronym> years (Álvaro
Herrera)
</p></li><li class="listitem"><p> Make <a class="link" href="functions-formatting.html#FUNCTIONS-FORMATTING-TABLE" title="Table 9.23. Formatting Functions"><code class="function">to_timestamp()</code></a>
and <code class="function">to_date()</code> reject
out-of-range input fields (Artur Zakirov)
</p><p> For example,
previously <code class="literal">to_date('2009-06-40','YYYY-MM-DD')</code> was
accepted and returned <code class="literal">2009-07-10</code>. It will now generate
an error.
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.9"><div class="titlepage"><div><div><h4 class="title">E.24.3.7. Server-Side Languages</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow PL/Python's <code class="function">cursor()</code> and <code class="function">execute()</code>
functions to be called as methods of their plan-object arguments
(Peter Eisentraut)
</p><p> This allows a more object-oriented programming style.
</p></li><li class="listitem"><p> Allow PL/pgSQL's <code class="command">GET DIAGNOSTICS</code> statement to retrieve
values into array elements (Tom Lane)
</p><p> Previously, a syntactic restriction prevented the target variable
from being an array element.
</p></li></ul></div><div class="sect4" id="id-1.11.6.28.5.9.3"><div class="titlepage"><div><div><h5 class="title">E.24.3.7.1. <a class="link" href="pltcl.html" title="Chapter 43. PL/Tcl - Tcl Procedural Language">PL/Tcl</a></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow PL/Tcl functions to return composite types and sets
(Karl Lehenbauer)
</p></li><li class="listitem"><p> Add a subtransaction command to PL/Tcl (Victor Wagner)
</p><p> This allows PL/Tcl queries to fail without aborting the entire
function.
</p></li><li class="listitem"><p> Add server parameters <a class="xref" href="pltcl-config.html#GUC-PLTCL-START-PROC">pltcl.start_proc</a>
and <a class="xref" href="pltcl-config.html#GUC-PLTCLU-START-PROC">pltclu.start_proc</a>, to allow initialization
functions to be called on PL/Tcl startup (Tom Lane)
</p></li></ul></div></div></div><div class="sect3" id="id-1.11.6.28.5.10"><div class="titlepage"><div><div><h4 class="title">E.24.3.8. Client Interfaces</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow specification of <a class="link" href="libpq-connect.html#LIBPQ-CONNECT-HOST">multiple
host names or addresses</a> in libpq connection strings and URIs
(Robert Haas, Heikki Linnakangas)
</p><p> libpq will connect to the first responsive server in the list.
</p></li><li class="listitem"><p> Allow libpq connection strings and URIs to request a <a class="link" href="libpq-connect.html#LIBPQ-CONNECT-TARGET-SESSION-ATTRS">read/write host</a>,
that is a master server rather than a standby server
(Victor Wagner, Mithun Cy)
</p><p> This is useful when multiple host names are
specified. It is controlled by libpq connection parameter
<code class="option">target_session_attrs</code>.
</p></li><li class="listitem"><p> Allow the <a class="link" href="libpq-connect.html#LIBPQ-CONNECT-PASSFILE">password file name</a>
to be specified as a libpq connection parameter (Julian Markwort)
</p><p> Previously this could only be specified via an environment variable.
</p></li><li class="listitem"><p> Add function <a class="link" href="libpq-misc.html#LIBPQ-PQENCRYPTPASSWORDCONN"><code class="function">PQencryptPasswordConn()</code></a>
to allow creation of more types of encrypted passwords on the
client side (Michael Paquier, Heikki Linnakangas)
</p><p> Previously only <code class="literal">MD5</code>-encrypted passwords could be created
using <a class="link" href="libpq-misc.html#LIBPQ-PQENCRYPTPASSWORD"><code class="function">PQencryptPassword()</code></a>.
This new function can also create <a class="link" href="auth-pg-hba-conf.html" title="20.1. The pg_hba.conf File"><code class="literal">SCRAM-SHA-256</code></a>-encrypted
passwords.
</p></li><li class="listitem"><p> Change <span class="application">ecpg</span> preprocessor version from 4.12 to 10
(Tom Lane)
</p><p> Henceforth the <span class="application">ecpg</span> version will match
the <span class="productname">PostgreSQL</span> distribution version number.
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.11"><div class="titlepage"><div><div><h4 class="title">E.24.3.9. Client Applications</h4></div></div></div><div class="sect4" id="id-1.11.6.28.5.11.2"><div class="titlepage"><div><div><h5 class="title">E.24.3.9.1. <a class="xref" href="app-psql.html" title="psql"><span class="refentrytitle"><span class="application">psql</span></span></a></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add conditional branch support to <span class="application">psql</span> (Corey
Huinker)
</p><p> This feature adds <span class="application">psql</span>
meta-commands <code class="command">\if</code>, <code class="command">\elif</code>, <code class="command">\else</code>,
and <code class="command">\endif</code>. This is primarily helpful for scripting.
</p></li><li class="listitem"><p> Add <span class="application">psql</span> <code class="command">\gx</code> meta-command to execute
(<code class="command">\g</code>) a query in expanded mode (<code class="command">\x</code>)
(Christoph Berg)
</p></li><li class="listitem"><p> Expand <span class="application">psql</span> variable references in
backtick-executed strings (Tom Lane)
</p><p> This is particularly useful in the new <span class="application">psql</span>
conditional branch commands.
</p></li><li class="listitem"><p> Prevent <span class="application">psql</span>'s special variables from being set to
invalid values (Daniel Vérité, Tom Lane)
</p><p> Previously, setting one of <span class="application">psql</span>'s special variables
to an invalid value silently resulted in the default behavior.
<code class="command">\set</code> on a special variable now fails if the proposed
new value is invalid. As a special exception, <code class="command">\set</code>
with an empty or omitted new value, on a boolean-valued special
variable, still has the effect of setting the variable
to <code class="literal">on</code>; but now it actually acquires that value rather
than an empty string. <code class="command">\unset</code> on a special variable now
explicitly sets the variable to its default value, which is also
the value it acquires at startup. In sum, a control variable now
always has a displayable value that reflects
what <span class="application">psql</span> is actually doing.
</p></li><li class="listitem"><p> Add variables showing server version and <span class="application">psql</span> version
(Fabien Coelho)
</p></li><li class="listitem"><p> Improve <span class="application">psql</span>'s <code class="command">\d</code> (display relation)
and <code class="command">\dD</code> (display domain) commands to show collation,
nullable, and default properties in separate columns (Peter
Eisentraut)
</p><p> Previously they were shown in a single <span class="quote">“<span class="quote">Modifiers</span>”</span> column.
</p></li><li class="listitem"><p> Make the various <code class="command">\d</code> commands handle no-matching-object
cases more consistently (Daniel Gustafsson)
</p><p> They now all print the message about that to stderr, not stdout,
and the message wording is more consistent.
</p></li><li class="listitem"><p> Improve <span class="application">psql</span>'s tab completion (Jeff Janes,
Ian Barwick, Andreas Karlsson, Sehrope Sarkuni, Thomas Munro,
Kevin Grittner, Dagfinn Ilmari Mannsåker)
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.11.3"><div class="titlepage"><div><div><h5 class="title">E.24.3.9.2. <a class="xref" href="pgbench.html" title="pgbench"><span class="refentrytitle"><span class="application">pgbench</span></span></a></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add <span class="application">pgbench</span> option <code class="option">--log-prefix</code> to
control the log file prefix (Masahiko Sawada)
</p></li><li class="listitem"><p> Allow <span class="application">pgbench</span>'s meta-commands to span multiple
lines (Fabien Coelho)
</p><p> A meta-command can now be continued onto the next line by writing
backslash-return.
</p></li><li class="listitem"><p> Remove restriction on placement of <code class="option">-M</code> option relative to
other command line options (Tom Lane)
</p></li></ul></div></div></div><div class="sect3" id="id-1.11.6.28.5.12"><div class="titlepage"><div><div><h4 class="title">E.24.3.10. Server Applications</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add <a class="link" href="app-pgreceivewal.html" title="pg_receivewal"><span class="application">pg_receivewal</span></a>
option <code class="option">-Z</code>/<code class="option">--compress</code> to specify compression
(Michael Paquier)
</p></li><li class="listitem"><p> Add <a class="link" href="app-pgrecvlogical.html" title="pg_recvlogical"><span class="application">pg_recvlogical</span></a> option
<code class="option">--endpos</code> to specify the ending position (Craig Ringer)
</p><p> This complements the existing <code class="option">--startpos</code> option.
</p></li><li class="listitem"><p> Rename <a class="link" href="app-initdb.html" title="initdb"><span class="application">initdb</span></a>
options <code class="option">--noclean</code> and <code class="option">--nosync</code> to be spelled
<code class="option">--no-clean</code> and <code class="option">--no-sync</code> (Vik Fearing,
Peter Eisentraut)
</p><p> The old spellings are still supported.
</p></li></ul></div><div class="sect4" id="id-1.11.6.28.5.12.3"><div class="titlepage"><div><div><h5 class="title">E.24.3.10.1. <a class="link" href="app-pgdump.html" title="pg_dump"><span class="application">pg_dump</span></a>,
<a class="link" href="app-pg-dumpall.html" title="pg_dumpall"><span class="application">pg_dumpall</span></a>,
<a class="link" href="app-pgrestore.html" title="pg_restore"><span class="application">pg_restore</span></a></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow <span class="application">pg_restore</span> to exclude schemas (Michael Banck)
</p><p> This adds a new <code class="option">-N</code>/<code class="option">--exclude-schema</code> option.
</p></li><li class="listitem"><p> Add <code class="option">--no-blobs</code> option to
<span class="application">pg_dump</span> (Guillaume Lelarge)
</p><p> This suppresses dumping of large objects.
</p></li><li class="listitem"><p> Add <span class="application">pg_dumpall</span> option
<code class="option">--no-role-passwords</code> to omit role passwords
(Robins Tharakan, Simon Riggs)
</p><p> This allows use of <span class="application">pg_dumpall</span> by non-superusers;
without this option, it fails due to inability to read passwords.
</p></li><li class="listitem"><p> Support using synchronized snapshots when dumping from a standby
server (Petr Jelinek)
</p></li><li class="listitem"><p> Issue <code class="function">fsync()</code> on the output files generated by
<span class="application">pg_dump</span> and
<span class="application">pg_dumpall</span> (Michael Paquier)
</p><p> This provides more security that the output is safely stored on
disk before the program exits. This can be disabled with
the new <code class="option">--no-sync</code> option.
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.12.4"><div class="titlepage"><div><div><h5 class="title">E.24.3.10.2. <a class="xref" href="app-pgbasebackup.html" title="pg_basebackup"><span class="refentrytitle">pg_basebackup</span></a></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow <span class="application">pg_basebackup</span> to stream write-ahead log in
tar mode (Magnus Hagander)
</p><p> The <acronym class="acronym">WAL</acronym> will be stored in a separate tar file from
the base backup.
</p></li><li class="listitem"><p> Make <span class="application">pg_basebackup</span> use temporary replication slots
(Magnus Hagander)
</p><p> Temporary replication slots will be used by default when
<span class="application">pg_basebackup</span> uses WAL streaming with default
options.
</p></li><li class="listitem"><p> Be more careful about fsync'ing in all required places
in <span class="application">pg_basebackup</span> and
<span class="application">pg_receivewal</span> (Michael Paquier)
</p></li><li class="listitem"><p> Add <span class="application">pg_basebackup</span> option <code class="option">--no-sync</code> to
disable fsync (Michael Paquier)
</p></li><li class="listitem"><p> Improve <span class="application">pg_basebackup</span>'s handling of which
directories to skip (David Steele)
</p></li></ul></div></div><div class="sect4" id="id-1.11.6.28.5.12.5"><div class="titlepage"><div><div><h5 class="title">E.24.3.10.3. <span class="application"><a class="xref" href="app-pg-ctl.html" title="pg_ctl"><span class="refentrytitle"><span class="application">pg_ctl</span></span></a></span></h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Add wait option for <span class="application"><a class="xref" href="app-pg-ctl.html" title="pg_ctl"><span class="refentrytitle"><span class="application">pg_ctl</span></span></a></span>'s
promote operation (Peter Eisentraut)
</p></li><li class="listitem"><p> Add long options for <span class="application">pg_ctl</span> wait (<code class="option">--wait</code>)
and no-wait (<code class="option">--no-wait</code>) (Vik Fearing)
</p></li><li class="listitem"><p> Add long option for <span class="application">pg_ctl</span> server options
(<code class="option">--options</code>) (Peter Eisentraut)
</p></li><li class="listitem"><p> Make <code class="literal">pg_ctl start --wait</code> detect server-ready by
watching <code class="filename">postmaster.pid</code>, not by attempting connections
(Tom Lane)
</p><p> The postmaster has been changed to report its ready-for-connections
status in <code class="filename">postmaster.pid</code>, and <span class="application">pg_ctl</span>
now examines that file to detect whether startup is complete.
This is more efficient and reliable than the old method, and it
eliminates postmaster log entries about rejected connection
attempts during startup.
</p></li><li class="listitem"><p> Reduce <span class="application">pg_ctl</span>'s reaction time when waiting for
postmaster start/stop (Tom Lane)
</p><p> <span class="application">pg_ctl</span> now probes ten times per second when waiting
for a postmaster state change, rather than once per second.
</p></li><li class="listitem"><p> Ensure that <span class="application">pg_ctl</span> exits with nonzero status if an
operation being waited for does not complete within the timeout
(Peter Eisentraut)
</p><p> The <code class="literal">start</code> and <code class="literal">promote</code> operations now return
exit status 1, not 0, in such cases. The <code class="literal">stop</code> operation
has always done that.
</p></li></ul></div></div></div><div class="sect3" id="id-1.11.6.28.5.13"><div class="titlepage"><div><div><h4 class="title">E.24.3.11. Source Code</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Change to two-part release version numbering (Peter Eisentraut, Tom
Lane)
</p><p> Release numbers will now have two parts (e.g., <code class="literal">10.1</code>)
rather than three (e.g., <code class="literal">9.6.3</code>).
Major versions will now increase just the first number, and minor
releases will increase just the second number.
Release branches will be referred to by single numbers
(e.g., <code class="literal">10</code> rather than <code class="literal">9.6</code>).
This change is intended to reduce user confusion about what is a
major or minor release of <span class="productname">PostgreSQL</span>.
</p></li><li class="listitem"><p> Improve behavior of <span class="application">pgindent</span>
(Piotr Stefaniak, Tom Lane)
</p><p> We have switched to a new version of <span class="application">pg_bsd_indent</span>
based on recent improvements made by the FreeBSD project. This
fixes numerous small bugs that led to odd C code formatting
decisions. Most notably, lines within parentheses (such as in a
multi-line function call) are now uniformly indented to match the
opening paren, even if that would result in code extending past the
right margin.
</p></li><li class="listitem"><p> Allow the <a class="link" href="install-procedure.html#CONFIGURE" title="Configuration"><acronym class="acronym">ICU</acronym></a> library to
optionally be used for collation support (Peter Eisentraut)
</p><p> The <acronym class="acronym">ICU</acronym> library has versioning that allows detection
of collation changes between versions. It is enabled via configure
option <code class="option">--with-icu</code>. The default still uses the operating
system's native collation library.
</p></li><li class="listitem"><p> Automatically mark all <a class="link" href="xfunc-c.html" title="37.9. C-Language Functions"><code class="function">PG_FUNCTION_INFO_V1</code></a> functions
as <code class="literal">DLLEXPORT</code>-ed on
<span class="systemitem">Windows</span> (Laurenz Albe)
</p><p> If third-party code is using <code class="literal">extern</code> function
declarations, they should also add <code class="literal">DLLEXPORT</code> markers
to those declarations.
</p></li><li class="listitem"><p> Remove <acronym class="acronym">SPI</acronym> functions <code class="function">SPI_push()</code>,
<code class="function">SPI_pop()</code>, <code class="function">SPI_push_conditional()</code>,
<code class="function">SPI_pop_conditional()</code>,
and <code class="function">SPI_restore_connection()</code> as unnecessary (Tom Lane)
</p><p> Their functionality now happens automatically. There are now no-op
macros by these names so that external modules don't need to be
updated immediately, but eventually such calls should be removed.
</p><p> A side effect of this change is that <code class="function">SPI_palloc()</code> and
allied functions now require an active SPI connection; they do not
degenerate to simple <code class="function">palloc()</code> if there is none. That
previous behavior was not very useful and posed risks of unexpected
memory leaks.
</p></li><li class="listitem"><p> Allow shared memory to be dynamically allocated (Thomas Munro,
Robert Haas)
</p></li><li class="listitem"><p> Add slab-like memory allocator for efficient fixed-size allocations
(Tomas Vondra)
</p></li><li class="listitem"><p> Use <acronym class="acronym">POSIX</acronym> semaphores rather than SysV semaphores
on <span class="systemitem">Linux</span> and <span class="systemitem">FreeBSD</span> (Tom Lane)
</p><p> This avoids platform-specific limits on SysV semaphore usage.
</p></li><li class="listitem"><p> Improve support for 64-bit atomics (Andres Freund)
</p></li><li class="listitem"><p> Enable 64-bit atomic operations on <acronym class="acronym">ARM64</acronym> (Roman
Shaposhnik)
</p></li><li class="listitem"><p> Switch to using <code class="function">clock_gettime()</code>, if available, for
duration measurements (Tom Lane)
</p><p> <code class="function">gettimeofday()</code> is still used
if <code class="function">clock_gettime()</code> is not available.
</p></li><li class="listitem"><p> Add more robust random number generators to be used for
cryptographically secure uses (Magnus Hagander, Michael Paquier,
Heikki Linnakangas)
</p><p> If no strong random number generator can be
found, <a class="link" href="install-procedure.html#CONFIGURE" title="Configuration">configure</a> will fail unless
the <code class="option">--disable-strong-random</code> option is used. However, with
this option, <a class="link" href="pgcrypto.html" title="F.26. pgcrypto"><span class="application">pgcrypto</span></a>
functions requiring a strong random number generator will be disabled.
</p></li><li class="listitem"><p> Allow <code class="function">WaitLatchOrSocket()</code> to wait for socket
connection on Windows (Andres Freund)
</p></li><li class="listitem"><p> <code class="filename">tupconvert.c</code> functions no longer convert tuples just to
embed a different composite-type OID in them (Ashutosh Bapat, Tom Lane)
</p><p> The majority of callers don't care about the composite-type OID;
but if the result tuple is to be used as a composite Datum, steps
should be taken to make sure the correct OID is inserted in it.
</p></li><li class="listitem"><p> Remove <span class="systemitem">SCO</span> and <span class="systemitem">Unixware</span> ports (Tom Lane)
</p></li><li class="listitem"><p> Overhaul documentation <a class="link" href="docguide-toolsets.html" title="J.2. Tool Sets">build
process</a> (Alexander Lakhin)
</p></li><li class="listitem"><p> Use <acronym class="acronym">XSLT</acronym> to build the <span class="productname">PostgreSQL</span>
documentation (Peter Eisentraut)
</p><p> Previously <span class="application">Jade</span>, <acronym class="acronym">DSSSL</acronym>, and
<span class="application">JadeTex</span> were used.
</p></li><li class="listitem"><p> Build <acronym class="acronym">HTML</acronym> documentation using <acronym class="acronym">XSLT</acronym>
stylesheets by default (Peter Eisentraut)
</p></li></ul></div></div><div class="sect3" id="id-1.11.6.28.5.14"><div class="titlepage"><div><div><h4 class="title">E.24.3.12. Additional Modules</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> Allow <a class="link" href="file-fdw.html" title="F.15. file_fdw"><span class="application">file_fdw</span></a> to read
from program output as well as files (Corey Huinker, Adam Gomaa)
</p></li><li class="listitem"><p> In <a class="link" href="postgres-fdw.html" title="F.34. postgres_fdw"><span class="application">postgres_fdw</span></a>,
push aggregate functions to the remote server, when possible
(Jeevan Chalke, Ashutosh Bapat)
</p><p> This reduces the amount of data that must be passed from the remote
server, and offloads aggregate computation from the requesting server.
</p></li><li class="listitem"><p> In <span class="application">postgres_fdw</span>, push joins to the remote server in
more cases (David Rowley, Ashutosh Bapat, Etsuro Fujita)
</p></li><li class="listitem"><p> Properly support <code class="type">OID</code> columns in
<span class="application">postgres_fdw</span> tables (Etsuro Fujita)
</p><p> Previously <code class="type">OID</code> columns always returned zeros.
</p></li><li class="listitem"><p> Allow <a class="link" href="btree-gist.html" title="F.7. btree_gist"><span class="application">btree_gist</span></a>
and <a class="link" href="btree-gin.html" title="F.6. btree_gin"><span class="application">btree_gin</span></a> to
index enum types (Andrew Dunstan)
</p><p> This allows enums to be used in exclusion constraints.
</p></li><li class="listitem"><p> Add indexing support to <span class="application">btree_gist</span> for the
<code class="type">UUID</code> data type (Paul Jungwirth)
</p></li><li class="listitem"><p> Add <a class="link" href="amcheck.html" title="F.2. amcheck"><span class="application">amcheck</span></a> which can
check the validity of B-tree indexes (Peter Geoghegan)
</p></li><li class="listitem"><p> Show ignored constants as <code class="literal">$N</code> rather than <code class="literal">?</code>
in
<a class="link" href="pgstatstatements.html" title="F.30. pg_stat_statements"><span class="application">pg_stat_statements</span></a>
(Lukas Fittl)
</p></li><li class="listitem"><p> Improve <a class="link" href="cube.html" title="F.10. cube"><span class="application">cube</span></a>'s handling
of zero-dimensional cubes (Tom Lane)
</p><p> This also improves handling of <code class="literal">infinite</code> and
<code class="literal">NaN</code> values.
</p></li><li class="listitem"><p> Allow <a class="link" href="pgbuffercache.html" title="F.25. pg_buffercache"><span class="application">pg_buffercache</span></a> to run
with fewer locks (Ivan Kartyshov)
</p><p> This makes it less disruptive when run on production systems.
</p></li><li class="listitem"><p> Add <a class="link" href="pgstattuple.html" title="F.31. pgstattuple"><span class="application">pgstattuple</span></a>
function <code class="function">pgstathashindex()</code> to view hash index
statistics (Ashutosh Sharma)
</p></li><li class="listitem"><p> Use <code class="command">GRANT</code> permissions to
control <span class="application">pgstattuple</span> function usage (Stephen Frost)
</p><p> This allows DBAs to allow non-superusers to run these functions.
</p></li><li class="listitem"><p> Reduce locking when <span class="application">pgstattuple</span> examines hash
indexes (Amit Kapila)
</p></li><li class="listitem"><p> Add <a class="link" href="pageinspect.html" title="F.23. pageinspect"><span class="application">pageinspect</span></a>
function <code class="function">page_checksum()</code> to show a page's checksum
(Tomas Vondra)
</p></li><li class="listitem"><p> Add <span class="application">pageinspect</span>
function <code class="function">bt_page_items()</code> to print page items from a
page image (Tomas Vondra)
</p></li><li class="listitem"><p> Add hash index support to <span class="application">pageinspect</span> (Jesper
Pedersen, Ashutosh Sharma)
</p></li></ul></div></div></div><div class="sect2" id="RELEASE-10-ACKNOWLEDGEMENTS"><div class="titlepage"><div><div><h3 class="title">E.24.4. Acknowledgments</h3></div></div></div><p> The following individuals (in alphabetical order) have contributed to this
release as patch authors, committers, reviewers, testers, or reporters of
issues.
</p><table border="0" summary="Simple list" class="simplelist"><tr><td>Adam Brightwell</td></tr><tr><td>Adam Brusselback</td></tr><tr><td>Adam Gomaa</td></tr><tr><td>Adam Sah</td></tr><tr><td>Adrian Klaver</td></tr><tr><td>Aidan Van Dyk</td></tr><tr><td>Aleksander Alekseev</td></tr><tr><td>Alexander Korotkov</td></tr><tr><td>Alexander Lakhin</td></tr><tr><td>Alexander Sosna</td></tr><tr><td>Alexey Bashtanov</td></tr><tr><td>Alexey Grishchenko</td></tr><tr><td>Alexey Isayko</td></tr><tr><td>Álvaro Hernández Tortosa</td></tr><tr><td>Álvaro Herrera</td></tr><tr><td>Amit Kapila</td></tr><tr><td>Amit Khandekar</td></tr><tr><td>Amit Langote</td></tr><tr><td>Amul Sul</td></tr><tr><td>Anastasia Lubennikova</td></tr><tr><td>Andreas Joseph Krogh</td></tr><tr><td>Andreas Karlsson</td></tr><tr><td>Andreas Scherbaum</td></tr><tr><td>Andreas Seltenreich</td></tr><tr><td>Andres Freund</td></tr><tr><td>Andrew Dunstan</td></tr><tr><td>Andrew Gierth</td></tr><tr><td>Andrew Wheelwright</td></tr><tr><td>Andrey Borodin</td></tr><tr><td>Andrey Lizenko</td></tr><tr><td>Andy Abelisto</td></tr><tr><td>Antonin Houska</td></tr><tr><td>Ants Aasma</td></tr><tr><td>Arjen Nienhuis</td></tr><tr><td>Arseny Sher</td></tr><tr><td>Artur Zakirov</td></tr><tr><td>Ashutosh Bapat</td></tr><tr><td>Ashutosh Sharma</td></tr><tr><td>Ashwin Agrawal</td></tr><tr><td>Atsushi Torikoshi</td></tr><tr><td>Ayumi Ishii</td></tr><tr><td>Basil Bourque</td></tr><tr><td>Beena Emerson</td></tr><tr><td>Ben de Graaff</td></tr><tr><td>Benedikt Grundmann</td></tr><tr><td>Bernd Helmle</td></tr><tr><td>Brad DeJong</td></tr><tr><td>Brandur Leach</td></tr><tr><td>Breen Hagan</td></tr><tr><td>Bruce Momjian</td></tr><tr><td>Bruno Wolff III</td></tr><tr><td>Catalin Iacob</td></tr><tr><td>Chapman Flack</td></tr><tr><td>Chen Huajun</td></tr><tr><td>Choi Doo-Won</td></tr><tr><td>Chris Bandy</td></tr><tr><td>Chris Richards</td></tr><tr><td>Chris Ruprecht</td></tr><tr><td>Christian Ullrich</td></tr><tr><td>Christoph Berg</td></tr><tr><td>Chuanting Wang</td></tr><tr><td>Claudio Freire</td></tr><tr><td>Clinton Adams</td></tr><tr><td>Const Zhang</td></tr><tr><td>Constantin Pan</td></tr><tr><td>Corey Huinker</td></tr><tr><td>Craig Ringer</td></tr><tr><td>Cynthia Shang</td></tr><tr><td>Dagfinn Ilmari Mannsåker</td></tr><tr><td>Daisuke Higuchi</td></tr><tr><td>Damian Quiroga</td></tr><tr><td>Dan Wood</td></tr><tr><td>Dang Minh Huong</td></tr><tr><td>Daniel Gustafsson</td></tr><tr><td>Daniel Vérité</td></tr><tr><td>Daniel Westermann</td></tr><tr><td>Daniele Varrazzo</td></tr><tr><td>Danylo Hlynskyi</td></tr><tr><td>Darko Prelec</td></tr><tr><td>Dave Cramer</td></tr><tr><td>Dave Page</td></tr><tr><td>David Christensen</td></tr><tr><td>David Fetter</td></tr><tr><td>David Johnston</td></tr><tr><td>David Rader</td></tr><tr><td>David Rowley</td></tr><tr><td>David Steele</td></tr><tr><td>Dean Rasheed</td></tr><tr><td>Denis Smirnov</td></tr><tr><td>Denish Patel</td></tr><tr><td>Dennis Björklund</td></tr><tr><td>Devrim Gündüz</td></tr><tr><td>Dilip Kumar</td></tr><tr><td>Dilyan Palauzov</td></tr><tr><td>Dima Pavlov</td></tr><tr><td>Dimitry Ivanov</td></tr><tr><td>Dmitriy Sarafannikov</td></tr><tr><td>Dmitry Dolgov</td></tr><tr><td>Dmitry Fedin</td></tr><tr><td>Don Morrison</td></tr><tr><td>Egor Rogov</td></tr><tr><td>Eiji Seki</td></tr><tr><td>Emil Iggland</td></tr><tr><td>Emre Hasegeli</td></tr><tr><td>Enrique Meneses</td></tr><tr><td>Erik Nordström</td></tr><tr><td>Erik Rijkers</td></tr><tr><td>Erwin Brandstetter</td></tr><tr><td>Etsuro Fujita</td></tr><tr><td>Eugen Konkov</td></tr><tr><td>Eugene Kazakov</td></tr><tr><td>Euler Taveira</td></tr><tr><td>Fabien Coelho</td></tr><tr><td>Fabrízio de Royes Mello</td></tr><tr><td>Feike Steenbergen</td></tr><tr><td>Felix Gerzaguet</td></tr><tr><td>Filip Jirsák</td></tr><tr><td>Fujii Masao</td></tr><tr><td>Gabriele Bartolini</td></tr><tr><td>Gabrielle Roth</td></tr><tr><td>Gao Zengqi</td></tr><tr><td>Gerdan Santos</td></tr><tr><td>Gianni Ciolli</td></tr><tr><td>Gilles Darold</td></tr><tr><td>Giuseppe Broccolo</td></tr><tr><td>Graham Dutton</td></tr><tr><td>Greg Atkins</td></tr><tr><td>Greg Burek</td></tr><tr><td>Grigory Smolkin</td></tr><tr><td>Guillaume Lelarge</td></tr><tr><td>Hans Buschmann</td></tr><tr><td>Haribabu Kommi</td></tr><tr><td>Heikki Linnakangas</td></tr><tr><td>Henry Boehlert</td></tr><tr><td>Huan Ruan</td></tr><tr><td>Ian Barwick</td></tr><tr><td>Igor Korot</td></tr><tr><td>Ildus Kurbangaliev</td></tr><tr><td>Ivan Kartyshov</td></tr><tr><td>Jaime Casanova</td></tr><tr><td>Jakob Egger</td></tr><tr><td>James Parks</td></tr><tr><td>Jarred Ward</td></tr><tr><td>Jason Li</td></tr><tr><td>Jason O'Donnell</td></tr><tr><td>Jason Petersen</td></tr><tr><td>Jeevan Chalke</td></tr><tr><td>Jeevan Ladhe</td></tr><tr><td>Jeff Dafoe</td></tr><tr><td>Jeff Davis</td></tr><tr><td>Jeff Janes</td></tr><tr><td>Jelte Fennema</td></tr><tr><td>Jeremy Finzel</td></tr><tr><td>Jeremy Schneider</td></tr><tr><td>Jeroen van der Ham</td></tr><tr><td>Jesper Pedersen</td></tr><tr><td>Jim Mlodgenski</td></tr><tr><td>Jim Nasby</td></tr><tr><td>Jinyu Zhang</td></tr><tr><td>Joe Conway</td></tr><tr><td>Joel Jacobson</td></tr><tr><td>John Harvey</td></tr><tr><td>Jon Nelson</td></tr><tr><td>Jordan Gigov</td></tr><tr><td>Josh Berkus</td></tr><tr><td>Josh Soref</td></tr><tr><td>Julian Markwort</td></tr><tr><td>Julien Rouhaud</td></tr><tr><td>Junseok Yang</td></tr><tr><td>Justin Muise</td></tr><tr><td>Justin Pryzby</td></tr><tr><td>Kacper Zuk</td></tr><tr><td>KaiGai Kohei</td></tr><tr><td>Karen Huddleston</td></tr><tr><td>Karl Lehenbauer</td></tr><tr><td>Karl O. Pinc</td></tr><tr><td>Keith Fiske</td></tr><tr><td>Kevin Grittner</td></tr><tr><td>Kim Rose Carlsen</td></tr><tr><td>Konstantin Evteev</td></tr><tr><td>Konstantin Knizhnik</td></tr><tr><td>Kuntal Ghosh</td></tr><tr><td>Kurt Kartaltepe</td></tr><tr><td>Kyle Conroy</td></tr><tr><td>Kyotaro Horiguchi</td></tr><tr><td>Laurenz Albe</td></tr><tr><td>Leonardo Cecchi</td></tr><tr><td>Ludovic Vaugeois-Pepin</td></tr><tr><td>Lukas Fittl</td></tr><tr><td>Magnus Hagander</td></tr><tr><td>Maksim Milyutin</td></tr><tr><td>Maksym Sobolyev</td></tr><tr><td>Marc Rassbach</td></tr><tr><td>Marc-Olaf Jaschke</td></tr><tr><td>Marcos Castedo</td></tr><tr><td>Marek Cvoren</td></tr><tr><td>Mark Dilger</td></tr><tr><td>Mark Kirkwood</td></tr><tr><td>Mark Pether</td></tr><tr><td>Marko Tiikkaja</td></tr><tr><td>Markus Winand</td></tr><tr><td>Marllius Ribeiro</td></tr><tr><td>Marti Raudsepp</td></tr><tr><td>Martín Marqués</td></tr><tr><td>Masahiko Sawada</td></tr><tr><td>Matheus Oliveira</td></tr><tr><td>Mathieu Fenniak</td></tr><tr><td>Merlin Moncure</td></tr><tr><td>Michael Banck</td></tr><tr><td>Michael Day</td></tr><tr><td>Michael Meskes</td></tr><tr><td>Michael Overmeyer</td></tr><tr><td>Michael Paquier</td></tr><tr><td>Mike Palmiotto</td></tr><tr><td>Milos Urbanek</td></tr><tr><td>Mithun Cy</td></tr><tr><td>Moshe Jacobson</td></tr><tr><td>Murtuza Zabuawala</td></tr><tr><td>Naoki Okano</td></tr><tr><td>Nathan Bossart</td></tr><tr><td>Nathan Wagner</td></tr><tr><td>Neha Khatri</td></tr><tr><td>Neha Sharma</td></tr><tr><td>Neil Anderson</td></tr><tr><td>Nicolas Baccelli</td></tr><tr><td>Nicolas Guini</td></tr><tr><td>Nicolas Thauvin</td></tr><tr><td>Nikhil Sontakke</td></tr><tr><td>Nikita Glukhov</td></tr><tr><td>Nikolaus Thiel</td></tr><tr><td>Nikolay Nikitin</td></tr><tr><td>Nikolay Shaplov</td></tr><tr><td>Noah Misch</td></tr><tr><td>Noriyoshi Shinoda</td></tr><tr><td>Olaf Gawenda</td></tr><tr><td>Oleg Bartunov</td></tr><tr><td>Oskari Saarenmaa</td></tr><tr><td>Otar Shavadze</td></tr><tr><td>Paresh More</td></tr><tr><td>Paul Jungwirth</td></tr><tr><td>Paul Ramsey</td></tr><tr><td>Pavan Deolasee</td></tr><tr><td>Pavel Golub</td></tr><tr><td>Pavel Hanák</td></tr><tr><td>Pavel Raiskup</td></tr><tr><td>Pavel Stehule</td></tr><tr><td>Peng Sun</td></tr><tr><td>Peter Eisentraut</td></tr><tr><td>Peter Geoghegan</td></tr><tr><td>Petr Jelínek</td></tr><tr><td>Philippe Beaudoin</td></tr><tr><td>Pierre-Emmanuel André</td></tr><tr><td>Piotr Stefaniak</td></tr><tr><td>Prabhat Sahu</td></tr><tr><td>QL Zhuo</td></tr><tr><td>Radek Slupik</td></tr><tr><td>Rafa de la Torre</td></tr><tr><td>Rafia Sabih</td></tr><tr><td>Ragnar Ouchterlony</td></tr><tr><td>Rahila Syed</td></tr><tr><td>Rajkumar Raghuwanshi</td></tr><tr><td>Regina Obe</td></tr><tr><td>Richard Pistole</td></tr><tr><td>Robert Haas</td></tr><tr><td>Robins Tharakan</td></tr><tr><td>Rod Taylor</td></tr><tr><td>Roman Shaposhnik</td></tr><tr><td>Rushabh Lathia</td></tr><tr><td>Ryan Murphy</td></tr><tr><td>Sandeep Thakkar</td></tr><tr><td>Scott Milliken</td></tr><tr><td>Sean Farrell</td></tr><tr><td>Sebastian Luque</td></tr><tr><td>Sehrope Sarkuni</td></tr><tr><td>Sergey Burladyan</td></tr><tr><td>Sergey Koposov</td></tr><tr><td>Shay Rojansky</td></tr><tr><td>Shinichi Matsuda</td></tr><tr><td>Sho Kato</td></tr><tr><td>Simon Riggs</td></tr><tr><td>Simone Gotti</td></tr><tr><td>Spencer Thomason</td></tr><tr><td>Stas Kelvich</td></tr><tr><td>Stepan Pesternikov</td></tr><tr><td>Stephen Frost</td></tr><tr><td>Steve Randall</td></tr><tr><td>Steve Singer</td></tr><tr><td>Steven Fackler</td></tr><tr><td>Steven Winfield</td></tr><tr><td>Suraj Kharage</td></tr><tr><td>Sveinn Sveinsson</td></tr><tr><td>Sven R. Kunze</td></tr><tr><td>Tahir Fakhroutdinov</td></tr><tr><td>Taiki Kondo</td></tr><tr><td>Takayuki Tsunakawa</td></tr><tr><td>Takeshi Ideriha</td></tr><tr><td>Tatsuo Ishii</td></tr><tr><td>Tatsuro Yamada</td></tr><tr><td>Teodor Sigaev</td></tr><tr><td>Thom Brown</td></tr><tr><td>Thomas Kellerer</td></tr><tr><td>Thomas Munro</td></tr><tr><td>Tim Goodaire</td></tr><tr><td>Tobias Bussmann</td></tr><tr><td>Tom Dunstan</td></tr><tr><td>Tom Lane</td></tr><tr><td>Tom van Tilburg</td></tr><tr><td>Tomas Vondra</td></tr><tr><td>Tomonari Katsumata</td></tr><tr><td>Tushar Ahuja</td></tr><tr><td>Vaishnavi Prabakaran</td></tr><tr><td>Venkata Balaji Nagothi</td></tr><tr><td>Vicky Vergara</td></tr><tr><td>Victor Wagner</td></tr><tr><td>Vik Fearing</td></tr><tr><td>Vinayak Pokale</td></tr><tr><td>Viren Negi</td></tr><tr><td>Vitaly Burovoy</td></tr><tr><td>Vladimir Kunshchikov</td></tr><tr><td>Vladimir Rusinov</td></tr><tr><td>Yi Wen Wong</td></tr><tr><td>Yugo Nagata</td></tr><tr><td>Zhen Ming Yang</td></tr><tr><td>Zhou Digoal</td></tr></table></div></div><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navfooter"><hr></hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="release-10-1.html" title="E.23. Release 10.1">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="release.html" title="Appendix E. Release Notes">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="release-prior.html" title="E.25. Prior Releases">Next</a></td></tr><tr><td width="40%" align="left" valign="top">E.23. Release 10.1 </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 10.23 Documentation">Home</a></td><td width="40%" align="right" valign="top"> E.25. Prior Releases</td></tr></table></div></body></html>