Release 11.2Release date:2019-02-14
This release contains a variety of fixes from 11.1.
For information about new features in major release 11, see
.
Migration to Version 11.2
A dump/restore is not required for those running 11.X.
Changes
By default, panic instead of retrying
after fsync() failure, to avoid possible data
corruption (Craig Ringer, Thomas Munro)
Some popular operating systems discard kernel data buffers when
unable to write them out, reporting this
as fsync() failure. If we reissue
the fsync() request it will succeed, but in
fact the data has been lost, so continuing risks database
corruption. By raising a panic condition instead, we can replay
from WAL, which may contain the only remaining copy of the data in
such a situation. While this is surely ugly and inefficient, there
are few alternatives, and fortunately the case happens very rarely.
A new server parameter
has been added to control this; if you are certain that your
kernel does not discard dirty data buffers in such scenarios,
you can set data_sync_retry
to on to restore the old behavior.
Include each major release branch's release notes in the
documentation for only that branch, rather than that branch and all
later ones (Tom Lane)
The duplication induced by the previous policy was getting out of
hand. Our plan is to provide a full archive of release notes on
the project's web site, but not duplicate it within each release.
Fix handling of unique indexes with INCLUDE
columns on partitioned tables (Álvaro Herrera)
The uniqueness condition was not checked properly in such cases.
Ensure that NOT NULL constraints of a partitioned
table are honored within its partitions
(Álvaro Herrera, Amit Langote)
Update catalog state correctly for partition table constraints when
detaching their partition (Amit Langote, Álvaro Herrera)
Previously, the pg_constraint.conislocal
field for such a constraint might improperly be left
as false, rendering it undroppable.
A dump/restore or pg_upgrade would cure the problem, but
if necessary, the catalog field can be adjusted manually.
Create or delete foreign key enforcement triggers correctly when
attaching or detaching a partition in a partitioned table that
has a foreign-key constraint (Amit Langote, Álvaro Herrera)
Avoid useless creation of duplicate foreign key constraints
in partitioned tables (Álvaro Herrera)
When an index is created on a partitioned table
using ONLY, and there are no partitions yet, mark
it valid immediately (Álvaro Herrera)
Otherwise there is no way to make it become valid.
Use a safe table lock level when detaching a partition
(Álvaro Herrera)
The previous locking level was too weak and might allow
concurrent DDL on the table, with bad results.
Fix problems with applying ON COMMIT DROP
and ON COMMIT DELETE ROWS to partitioned tables
and tables with inheritance children (Michael Paquier)
Disallow COPY FREEZE on partitioned tables
(David Rowley)
This should eventually be made to work, but it may require a patch
that's too complicated to risk back-patching.
Fix possible index corruption when the indexed column has
a fast default (that is, it was added
by ALTER TABLE ADD COLUMN with a constant non-NULL
default value specified, after the table already contained some rows)
(Andres Freund)
Correctly adjust fast default values
during ALTER TABLE ... ALTER COLUMN TYPE
(Andrew Dunstan)
Avoid possible deadlock when acquiring multiple buffer locks
(Nishant Fnu)
Avoid deadlock between GIN vacuuming and concurrent index insertions
(Alexander Korotkov, Andrey Borodin, Peter Geoghegan)
This change partially reverts a performance improvement, introduced
in version 10.0, that attempted to reduce the number of index pages
locked during deletion of a GIN posting tree page. That's now been
found to lead to deadlocks, so we've removed it pending closer
analysis.
Avoid deadlock between hot-standby queries and replay of GIN index
page deletion (Alexander Korotkov)
Fix possible crashes in logical replication when index expressions
or predicates are in use (Peter Eisentraut)
Avoid useless and expensive logical decoding of TOAST data during a
table rewrite (Tomas Vondra)
Fix logic for stopping a subset of WAL senders when synchronous
replication is enabled (Paul Guo, Michael Paquier)
Avoid possibly writing an incorrect replica identity field in a
tuple deletion WAL record (Stas Kelvich)
Prevent incorrect use of WAL-skipping optimization
during COPY to a view or foreign table
(Amit Langote, Michael Paquier)
Make the archiver prioritize WAL history files over WAL data files
while choosing which file to archive next (David Steele)
Fix possible crash in UPDATE with a
multiple SET clause using a
sub-SELECT as source (Tom Lane)
Fix crash when zero rows are fed
to json[b]_populate_recordset()
or json[b]_to_recordset() (Tom Lane)
Avoid crash if libxml2 returns a null
error message (Sergio Conde Gómez)
Fix incorrect JIT tuple deforming code for tables with
many columns (more than approximately 800) (Andres Freund)
Fix performance and memory leakage issues in hash-based grouping
(Andres Freund)
Fix spurious grouping-related parser errors caused by inconsistent
handling of collation assignment (Andrew Gierth)
In some cases, expressions that should be considered to match
were not seen as matching, if they included operations on collatable
data types.
Fix parsing of collation-sensitive expressions in the arguments of
a CALL statement (Peter Eisentraut)
Ensure proper cleanup after detecting an error in the argument list
of a CALL statement (Tom Lane)
Check whether the comparison function
underlying LEAST()
or GREATEST() is leakproof, rather than just
assuming it is (Tom Lane)
Actual information leaks from btree comparison functions are
typically hard to provoke, but in principle they could happen.
Fix incorrect planning of queries involving nested loops both above
and below a Gather plan node (Tom Lane)
If both levels of nestloop needed to pass the same variable into
their right-hand sides, an incorrect plan would be generated.
Fix incorrect planning of queries in which a lateral reference must
be evaluated at a foreign table scan (Tom Lane)
Fix planner failure when the first column of a row comparison
matches an index column, but later column(s) do not, and the index
has included (non-key) columns (Tom Lane)
Fix corner-case underestimation of the cost of a merge join (Tom Lane)
The planner could prefer a merge join when the outer key range is
much smaller than the inner key range, even if there are so many
duplicate keys on the inner side that this is a poor choice.
Avoid O(N^2) planning time growth when a query contains many
thousand indexable clauses (Tom Lane)
Improve planning speed for large inheritance or partitioning table
groups (Amit Langote, Etsuro Fujita)
Improve ANALYZE's handling of
concurrently-updated rows (Jeff Janes, Tom Lane)
Previously, rows deleted by an in-progress transaction were omitted
from ANALYZE's sample, but this has been found to
lead to more inconsistency than including them would do. In effect,
the sample now corresponds to an MVCC snapshot as
of ANALYZE's start time.
Make TRUNCATE ignore inheritance child tables
that are temporary tables of other sessions (Amit Langote, Michael
Paquier)
This brings TRUNCATE into line with the behavior
of other commands. Previously, such cases usually ended in failure.
Fix TRUNCATE to update the statistics counters
for the right table (Tom Lane)
If the truncated table had a TOAST table, that table's counters were
reset instead.
Process ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
correctly (Greg Stark)
Allow UNLISTEN in hot-standby mode
(Shay Rojansky)
This is necessarily a no-op, because LISTEN
isn't allowed in hot-standby mode; but allowing the dummy operation
simplifies session-state-reset logic in clients.
Fix missing role dependencies in some schema and data type
permissions lists (Tom Lane)
In some cases it was possible to drop a role to which permissions
had been granted. This caused no immediate problem, but a
subsequent dump/reload or upgrade would fail, with symptoms
involving attempts to grant privileges to all-numeric role names.
Prevent use of a session's temporary schema within a two-phase
transaction (Michael Paquier)
Accessing a temporary table within such a transaction has been
forbidden for a long time, but it was still possible to cause
problems with other operations on temporary objects.
Ensure relation caches are updated properly after adding or removing
foreign key constraints (Álvaro Herrera)
This oversight could result in existing sessions failing to enforce
a newly-created constraint, or continuing to enforce a dropped one.
Ensure relation caches are updated properly after renaming
constraints (Amit Langote)
Fix replay of GiST index micro-vacuum operations so that concurrent
hot-standby queries do not see inconsistent state (Alexander
Korotkov)
Prevent empty GIN index pages from being reclaimed too quickly,
causing failures of concurrent searches
(Andrey Borodin, Alexander Korotkov)
Fix edge-case failures in float-to-integer coercions (Andrew
Gierth, Tom Lane)
Values very slightly above the maximum valid integer value might not
be rejected, and then would overflow, producing the minimum valid
integer instead. Also, values that should round to the minimum or
maximum integer value might be incorrectly rejected.
Fix parsing of space-separated lists of host names in
the ldapserver parameter of LDAP authentication
entries in pg_hba.conf (Thomas Munro)
When making a PAM authentication request, don't set
the PAM_RHOST variable if the connection is via
a Unix socket (Thomas Munro)
Previously that variable would be set to [local],
which is at best unhelpful, since it's supposed to be a host name.
Disallow setting client_min_messages higher
than ERROR (Jonah Harris, Tom Lane)
Previously, it was possible to set this variable
to FATAL or PANIC, which had
the effect of suppressing transmission of ordinary error messages to
the client. However, that's contrary to guarantees that are given
in the PostgreSQL wire protocol
specification, and it caused some clients to become very confused.
In released branches, fix this by silently treating such settings as
meaning ERROR instead. Version 12 and later will
reject those alternatives altogether.
Fix ecpglib to
use uselocale()
or _configthreadlocale() in preference
to setlocale() (Michael Meskes, Tom Lane)
Since setlocale() is not thread-local, and
might not even be thread-safe, the previous coding caused problems
in multi-threaded ecpg applications.
Fix incorrect results for numeric data passed through
an ecpg SQLDA
(SQL Descriptor Area) (Daisuke Higuchi)
Values with leading zeroes were not copied correctly.
Fix psql's \gtarget meta-command to work
with COPY TO STDOUT
(Daniel Vérité)
Previously, the target option was
ignored, so that the copy data always went to the current query
output target.
Make psql's LaTeX output formats render
special characters properly (Tom Lane)
Backslash and some other ASCII punctuation characters were not
rendered correctly, leading to document syntax errors or wrong
characters in the output.
Make pgbench's random number generation
fully deterministic and platform-independent
when is
specified (Fabien Coelho, Tom Lane)
On any specific platform, the sequence obtained with a particular
value of N will probably be different
from what it was before this patch.
Fix pg_basebackup
and pg_verify_checksums to ignore
temporary files appropriately (Michael Banck, Michael Paquier)
Fix pg_dump's handling of materialized
views with indirect dependencies on primary keys (Tom Lane)
This led to mis-labeling of such views' dump archive entries,
causing harmless warnings about archive items not in correct
section order; less harmlessly, selective-restore options
depending on those labels, such as , might
misbehave.
Make pg_dump include ALTER INDEX
SET STATISTICS commands (Michael Paquier)
When the ability to attach statistics targets to index expressions
was added, we forgot to teach pg_dump
about it, so that such settings were lost in dump/reload.
Fix pg_dump's dumping of tables that have
OIDs (Peter Eisentraut)
The WITH OIDS clause was omitted if it needed to
be applied to the first table to be dumped.
Avoid null-pointer-dereference crash on some platforms
when pg_dump
or pg_restore tries to report an error
(Tom Lane)
Prevent false index-corruption reports
from contrib/amcheck caused by
inline-compressed data (Peter Geoghegan)
Properly disregard SIGPIPE errors if COPY
FROM PROGRAM stops reading the program's output early
(Tom Lane)
This case isn't actually reachable directly
with COPY, but it can happen when
using contrib/file_fdw.
Fix contrib/hstore to calculate correct hash
values for empty hstore values that were created in
version 8.4 or before (Andrew Gierth)
The previous coding did not give the same result as for an
empty hstore value created by a newer version, thus
potentially causing wrong results in hash joins or hash
aggregation. It is advisable to reindex any hash indexes
built on hstore columns, if the table might contain
data that was originally stored as far back as 8.4 and was never
dumped/reloaded since then.
Avoid crashes and excessive runtime with large inputs
to contrib/intarray's gist__int_ops
index support (Andrew Gierth)
In configure, look
for python3 and then python2
if python isn't found (Peter Eisentraut)
This allows PL/Python to be configured without explicitly
specifying PYTHON on platforms that no longer
provide an unversioned python executable.
Include JIT-related headers in the installed set of header files
(Donald Dong)
Support new Makefile
variables PG_CFLAGS, PG_CXXFLAGS,
and PG_LDFLAGS in pgxs
builds (Christoph Berg)
This simplifies customization of extension build processes.
Fix Perl-coded build scripts to not
assume . is in the search path,
since recent Perl versions don't include that (Andrew Dunstan)
Fix server command-line option parsing problems on OpenBSD (Tom Lane)
Relocate call of set_rel_pathlist_hook so that
extensions can use it to supply partial paths for parallel queries
(KaiGai Kohei)
This is not expected to affect existing use-cases.
Update time zone data files to tzdata
release 2018i for DST law changes in Kazakhstan, Metlakatla, and Sao
Tome and Principe. Kazakhstan's Qyzylorda zone is split in two,
creating a new zone Asia/Qostanay, as some areas did not change UTC
offset. Historical corrections for Hong Kong and numerous Pacific
islands.
Release 11.1Release date:2018-11-08
This release contains a variety of fixes from 11.0.
For information about new features in major release 11, see
.
Migration to Version 11.1
A dump/restore is not required for those running 11.X.
However, if you use the pg_stat_statements extension,
see the changelog entry below about that.
Changes
Ensure proper quoting of transition table names
when pg_dump emits CREATE TRIGGER
... REFERENCING commands (Tom Lane)
This oversight could be exploited by an unprivileged user to gain
superuser privileges during the next dump/reload
or pg_upgrade run. (CVE-2018-16850)
Apply the tablespace specified for a partitioned index when creating a
child index (Álvaro Herrera)
Previously, child indexes were always created in the default
tablespace.
Fix NULL handling in parallel hashed multi-batch left joins (Andrew
Gierth, Thomas Munro)
Outer-relation rows with null values of the hash key were omitted from
the join result.
Fix incorrect processing of an array-type coercion expression
appearing within a CASE clause that has a constant
test expression (Tom Lane)
Fix incorrect expansion of tuples lacking recently-added columns
(Andrew Dunstan, Amit Langote)
This is known to lead to crashes in triggers on tables with
recently-added columns, and could have other symptoms as well.
Fix bugs with named or defaulted arguments in CALL
argument lists (Tom Lane, Pavel Stehule)
Fix strictness check for strict aggregates with ORDER
BY columns (Andrew Gierth, Andres Freund)
The strictness logic incorrectly ignored rows for which
the ORDER BY value(s) were null.
Disable recheck_on_update optimization (Tom Lane)
This new-in-v11 feature turns out not to have been ready for prime
time. Disable it until something can be done about it.
Prevent creation of a partition in a trigger attached to its parent
table (Amit Langote)
Ideally we'd allow that, but for the moment it has to be blocked to
avoid crashes.
Fix problems with applying ON COMMIT DELETE ROWS to
a partitioned temporary table (Amit Langote)
Fix character-class checks to not fail on Windows for Unicode
characters above U+FFFF (Tom Lane, Kenji Uno)
This bug affected full-text-search operations, as well
as contrib/ltree
and contrib/pg_trgm.
Ensure that the server will process
already-received NOTIFY
and SIGTERM interrupts before waiting for client
input (Jeff Janes, Tom Lane)
Fix memory leak in repeated SP-GiST index scans (Tom Lane)
This is only known to amount to anything significant in cases where
an exclusion constraint using SP-GiST receives many new index entries
in a single command.
Prevent starting the server with wal_level set
to too low a value to support an existing replication slot (Andres
Freund)
Fix psql, as well as documentation
examples, to call PQconsumeInput() before
each PQnotifies() call (Tom Lane)
This fixes cases in which psql would not
report receipt of a NOTIFY message until after the
next command.
Fix pg_verify_checksums's determination of
which files to check the checksums of (Michael Paquier)
In some cases it complained about files that are not expected to have
checksums.
In contrib/pg_stat_statements, disallow
the pg_read_all_stats role from
executing pg_stat_statements_reset()
(Haribabu Kommi)
pg_read_all_stats is only meant to grant permission
to read statistics, not to change them, so this grant was incorrect.
To cause this change to take effect, run ALTER EXTENSION
pg_stat_statements UPDATE in each database
where pg_stat_statements has been installed.
(A database freshly created in 11.0 should not need this, but a
database upgraded from a previous release probably still contains
the old version of pg_stat_statements. The
UPDATE command is harmless if the module was
already updated.)
Rename red-black tree support functions to use rbt
prefix not rb prefix (Tom Lane)
This avoids name collisions with Ruby functions, which broke
PL/Ruby. It's hoped that there are no other affected extensions.
Fix build problems on macOS 10.14 (Mojave) (Tom Lane)
Adjust configure to add
an switch to CPPFLAGS;
without this, PL/Perl and PL/Tcl fail to configure or build on macOS
10.14. The specific sysroot used can be overridden at configure time
or build time by setting the PG_SYSROOT variable in
the arguments of configure
or make.
It is now recommended that Perl-related extensions
write $(perl_includespec) rather
than -I$(perl_archlibexp)/CORE in their compiler
flags. The latter continues to work on most platforms, but not recent
macOS.
Also, it should no longer be necessary to
specify manually to get PL/Tcl to
build on recent macOS releases.
Fix MSVC build and regression-test scripts to work on recent Perl
versions (Andrew Dunstan)
Perl no longer includes the current directory in its search path
by default; work around that.
On Windows, allow the regression tests to be run by an Administrator
account (Andrew Dunstan)
To do this safely, pg_regress now gives up
any such privileges at startup.
Update time zone data files to tzdata
release 2018g for DST law changes in Chile, Fiji, Morocco, and Russia
(Volgograd), plus historical corrections for China, Hawaii, Japan,
Macau, and North Korea.
Release 11Release date:2018-10-18Overview
Major enhancements in PostgreSQL 11 include:
Improvements to partitioning functionality, including:
Add support for partitioning by a hash key
Add support for PRIMARY KEY, FOREIGN
KEY, indexes, and triggers on partitioned tables
Allow creation of a default partition for storing
data that does not match any of the remaining partitions
UPDATE statements that change a partition key
column now cause affected rows to be moved to the appropriate
partitions
Improve SELECT performance through enhanced
partition elimination strategies during query planning and execution
Improvements to parallelism, including:
CREATE INDEX can now use parallel processing
while building a B-tree index
Parallelization is now possible in CREATE TABLE
... AS,
CREATE MATERIALIZED VIEW, and certain
queries using UNION
Parallelized hash joins and parallelized sequential scans now
perform better
SQL stored procedures that support embedded transactions
Optional Just-in-Time (JIT) compilation for some SQL code, speeding
evaluation of expressions
Window functions now support all framing options shown in the SQL:2011
standard, including RANGE distance
PRECEDING/FOLLOWING, GROUPS mode, and
frame exclusion options
Covering indexes can now be created, using the
INCLUDE clause of CREATE INDEX
Many other useful performance improvements, including the ability to
avoid a table rewrite for ALTER TABLE ... ADD COLUMN
with a non-null column default
The above items are explained in more detail in the sections below.
Migration to Version 11
A dump/restore using , or use of , is required for those wishing to migrate data
from any previous release.
Version 11 contains a number of changes that may affect compatibility
with previous releases. Observe the following incompatibilities:
Make pg_dump
dump the properties of a database, not just its contents
(Haribabu Kommi)
Previously, attributes of the database itself, such as database-level
GRANT/REVOKE permissions and
ALTER DATABASE SET variable settings, were only
dumped by pg_dumpall.
Now pg_dump --create and
pg_restore --create will restore these database
properties in addition to the objects within the
database. pg_dumpall -g now only dumps role-
and tablespace-related attributes.
pg_dumpall's complete output (without
) is unchanged.
pg_dump and
pg_restore, without
, no longer dump/restore database-level
comments and security labels; those are now treated as properties of
the database.
pg_dumpall's output script will now always
create databases with their original locale and encoding, and hence
will fail if the locale or encoding name is unknown to the
destination system. Previously, CREATE DATABASE
would be emitted without these specifications if the database locale
and encoding matched the old cluster's defaults.
pg_dumpall --clean now restores the original
locale and encoding settings of the postgres
and template1 databases, as well as those of
user-created databases.
Consider syntactic form when disambiguating function versus column
references (Tom Lane)
When x is a table name or composite
column, PostgreSQL has traditionally
considered the syntactic
forms f(x)
and x.f
to be equivalent, allowing tricks such as writing a function and
then using it as though it were a computed-on-demand column.
However, if both interpretations are feasible, the column
interpretation was always chosen, leading to surprising results if
the user intended the function interpretation. Now, if there is
ambiguity, the interpretation that matches the syntactic form is
chosen.
Fully enforce uniqueness of table and domain constraint names
(Tom Lane)
PostgreSQL expects the names of a table's
constraints to be distinct, and likewise for the names of a domain's
constraints. However, there was not rigid enforcement of this, and
previously there were corner cases where duplicate names could be
created.
Make power(numeric, numeric)
and power(float8, float8)
handle NaN inputs according to the POSIX standard
(Tom Lane, Dang Minh Huong)
POSIX says that NaN ^ 0 = 1 and 1 ^ NaN
= 1, but all other cases with NaN
input(s) should return NaN.
power(numeric, numeric) just
returned NaN in all such cases; now it honors the
two exceptions. power(float8, float8) followed
the standard if the C library does; but on some old Unix platforms
the library doesn't, and there were also problems on some versions
of Windows.
Prevent to_number()
from consuming characters when the template separator does not
match (Oliver Ford)
Specifically, SELECT to_number('1234', '9,999')
used to return 134. It will now
return 1234. L and
TH now only consume characters that are not
digits, positive/negative signs, decimal points, or commas.
Fix to_date(),
to_number(), and
to_timestamp() to skip a character for each
template character (Tom Lane)
Previously, they skipped one byte for each byte
of template character, resulting in strange behavior if either string
contained multibyte characters.
Adjust the handling of backslashes inside double-quotes in
template strings for to_char(),
to_number(), and
to_timestamp().
Such a backslash now escapes the character after it, particularly
a double-quote or another backslash.
Correctly handle relative path expressions
in xmltable(), xpath(),
and other XML-handling functions (Markus Winand)
Per the SQL standard, relative paths start from the document node of
the XML input document, not the root node as these functions
previously did.
In the extended query
protocol,
make statement_timeout
apply to each Execute message separately, not to all commands before
Sync (Tatsuo Ishii, Andres Freund)
Remove the relhaspkey column from system
catalog pg_class (Peter Eisentraut)
Applications needing to check for a primary key should consult
pg_index.
Replace system catalog pg_proc's
proisagg and
proiswindow columns with
prokind (Peter Eisentraut)
This new column more clearly distinguishes functions, procedures,
aggregates, and window functions.
Correct information schema column tables.table_type
to return FOREIGN instead of FOREIGN
TABLE (Peter Eisentraut)
This new output matches the SQL standard.
Change the ps process display
labels for background workers to match the pg_stat_activity.backend_type
labels (Peter Eisentraut)
Cause large object permission checks
to happen during large object open, lo_open(), not
when a read or write is attempted (Tom Lane, Michael Paquier)
If write access is requested and not available, an error will now be
thrown even if the large object is never written to.
Prevent non-superusers from reindexing shared catalogs
(Michael Paquier, Robert Haas)
Previously, database owners were also allowed to do this, but
now it is considered outside the bounds of their privileges.
Remove deprecated adminpack functions
pg_file_read(),
pg_file_length(), and
pg_logfile_rotate() (Stephen Frost)
Equivalent functionality is now present in the core backend.
Existing adminpack installs will continue to have
access to these functions until they are updated via ALTER
EXTENSION ... UPDATE.
Honor the capitalization of double-quoted command options
(Daniel Gustafsson)
Previously, option names in certain SQL commands were forcibly
lower-cased even if entered with double quotes; thus for example
"FillFactor" would be accepted as an index storage
option, though properly its name is lower-case. Such cases will now
generate an error.
Remove server parameter replacement_sort_tuples
(Peter Geoghegan)
Replacement sorts were determined to be no longer useful.
Remove WITH clause in CREATE
FUNCTION (Michael Paquier)
PostgreSQL has long supported a more
standard-compliant syntax for this capability.
In PL/pgSQL trigger functions, the OLD
and NEW variables now read as NULL when not
assigned (Tom Lane)
Previously, references to these variables could be parsed but not
executed.
Changes
Below you will find a detailed account of the changes between
PostgreSQL 11 and the previous major
release.
ServerPartitioning
Allow the creation of partitions based on hashing a key column
(Amul Sul)
Support indexes on partitioned tables (Álvaro Herrera,
Amit Langote)
An index on a partitioned table is not a physical
index across the whole partitioned table, but rather a template for
automatically creating similar indexes on each partition of the
table.
If the partition key is part of the index's column set, a
partitioned index may be declared UNIQUE.
It will represent a valid uniqueness constraint across the whole
partitioned table, even though each physical index only enforces
uniqueness within its own partition.
The new command ALTER
INDEX ATTACH PARTITION causes an existing index on
a partition to be associated with a matching index template for its
partitioned table. This provides flexibility in setting up a new
partitioned index for an existing partitioned table.
Allow foreign keys on partitioned tables (Álvaro Herrera)
Allow FOR EACH ROW triggers on partitioned
tables (Álvaro Herrera)
Creation of a trigger on a partitioned table automatically creates
triggers on all existing and future partitions.
This also allows deferred unique constraints on partitioned tables.
Allow partitioned tables to have a default partition (Jeevan Ladhe,
Beena Emerson, Ashutosh Bapat, Rahila Syed, Robert Haas)
The default partition will store rows that don't match any of the
other defined partitions, and is searched accordingly.
UPDATE statements that change a partition key
column now cause affected rows to be moved to the appropriate
partitions (Amit Khandekar)
Allow INSERT, UPDATE, and
COPY on partitioned tables to properly route
rows to foreign partitions (Etsuro Fujita, Amit Langote)
This is supported by postgres_fdw
foreign tables.
Allow faster partition elimination during query processing (Amit
Langote, David Rowley, Dilip Kumar)
This speeds access to partitioned tables with many partitions.
Allow partition elimination during query execution (David Rowley,
Beena Emerson)
Previously, partition elimination only happened at planning
time, meaning many joins and prepared queries could not use
partition elimination.
In an equality join between partitioned tables, allow matching
partitions to be joined directly (Ashutosh Bapat)
This feature is disabled by default
but can be enabled by changing enable_partitionwise_join.
Allow aggregate functions on partitioned tables to be evaluated
separately for each partition, subsequently merging the results
(Jeevan Chalke, Ashutosh Bapat, Robert Haas)
This feature is disabled by default
but can be enabled by changing enable_partitionwise_aggregate.
Allow postgres_fdw
to push down aggregates to foreign tables that are partitions
(Jeevan Chalke)
Parallel Queries
Allow parallel building of a btree index (Peter Geoghegan,
Rushabh Lathia, Heikki Linnakangas)
Allow hash joins to be performed in parallel using a shared hash
table (Thomas Munro)
Allow UNION to run each
SELECT in parallel if the individual
SELECTs cannot be parallelized (Amit Khandekar,
Robert Haas, Amul Sul)
Allow partition scans to more efficiently use parallel workers
(Amit Khandekar, Robert Haas, Amul Sul)
Allow LIMIT to be passed to parallel workers
(Robert Haas, Tom Lane)
This allows workers to reduce returned results and use targeted
index scans.
Allow single-evaluation queries, e.g. WHERE
clause aggregate queries, and functions in the target list to be
parallelized (Amit Kapila, Robert Haas)
Add server parameter parallel_leader_participation
to control whether the leader also executes subplans (Thomas Munro)
The default is enabled, meaning the leader will execute subplans.
Allow parallelization of commands CREATE TABLE
... AS, SELECT INTO, and
CREATE MATERIALIZED VIEW (Haribabu Kommi)
Improve performance of sequential scans with many parallel workers
(David Rowley)
Add reporting of parallel workers' sort activity in
EXPLAIN (Robert Haas, Tom Lane)
Indexes
Allow B-tree indexes to include columns that are not part of the
search key or unique constraint, but are available to be read by
index-only scans (Anastasia Lubennikova, Alexander Korotkov, Teodor
Sigaev)
This is enabled by the new INCLUDE clause of CREATE INDEX.
It facilitates building covering indexes that optimize
specific types of queries. Columns can be included even if their
data types don't have B-tree support.
Improve performance of monotonically increasing index additions
(Pavan Deolasee, Peter Geoghegan)
Improve performance of hash index scans (Ashutosh Sharma)
Add predicate locking for hash, GiST and GIN indexes (Shubham
Barai)
This reduces the likelihood of serialization conflicts in
serializable-mode transactions.
SP-Gist
Add prefix-match
operator text^@text,
which is supported by SP-GiST (Ildus Kurbangaliev)
This is similar to using varLIKE
'word%' with a btree index, but it is more efficient.
Allow polygons to be indexed with SP-GiST (Nikita Glukhov,
Alexander Korotkov)
Allow SP-GiST to use lossy representation of leaf keys (Teodor Sigaev,
Heikki Linnakangas, Alexander Korotkov, Nikita Glukhov)
Optimizer
Improve selection of the most common values for statistics
(Jeff Janes, Dean Rasheed)
Previously, the most common values (MCVs) were
identified based on their frequency compared to all column
values. Now, MCVs are chosen based on their
frequency compared to the non-MCV values.
This improves the robustness of the algorithm for both uniform and
non-uniform distributions.
Improve selectivity estimates for >=
and <= (Tom Lane)
Previously, such cases used the same selectivity estimates
as > and <, respectively,
unless the comparison constants are MCVs.
This change is particularly helpful for queries
involving BETWEEN with small ranges.
Reduce var=var
to varIS NOT NULL
where equivalent (Tom Lane)
This leads to better selectivity estimates.
Improve optimizer's row count estimates for EXISTS
and NOT EXISTS queries (Tom Lane)
Make the optimizer account for evaluation costs and selectivity
of HAVING clauses (Tom Lane)
General Performance
Add Just-in-Time
(JIT) compilation of some parts of query plans
to improve execution speed (Andres Freund)
This feature requires LLVM to be
available. It is not currently enabled by default, even in
builds that support it.
Allow bitmap scans to perform index-only scans when possible
(Alexander Kuzmenkov)
Update the free space map during VACUUM
(Claudio Freire)
This allows free space to be reused more quickly.
Allow VACUUM to avoid unnecessary index scans
(Masahiko Sawada, Alexander Korotkov)
Improve performance of committing multiple concurrent transactions
(Amit Kapila)
Reduce memory usage for queries using set-returning functions in
their target lists (Andres Freund)
Improve the speed of aggregate computations (Andres Freund)
Allow postgres_fdw
to push UPDATEs and DELETEs
using joins to foreign servers (Etsuro Fujita)
Previously, only non-join UPDATEs and
DELETEs were pushed.
Add support for large pages on Windows
(Takayuki Tsunakawa, Thomas Munro)
This is controlled by the huge_pages configuration
parameter.
Monitoring
Show memory usage in output from log_statement_stats,
log_parser_stats,
log_planner_stats, and
log_executor_stats (Justin Pryzby, Peter
Eisentraut)
Add column pg_stat_activity.backend_type
to show the type of a background worker (Peter Eisentraut)
The type is also visible in ps output.
Make log_autovacuum_min_duration
log skipped tables that are concurrently being dropped (Nathan
Bossart)
Information Schema
Add information_schema columns related to table
constraints and triggers (Peter Eisentraut)
Specifically,
triggers.action_order,
triggers.action_reference_old_table,
and
triggers.action_reference_new_table
are now populated, where before they were always null. Also,
table_constraints.enforced
now exists but is not yet usefully populated.
Authentication
Allow the server to specify more complex LDAP specifications
in search+bind mode (Thomas Munro)
Specifically, ldapsearchfilter allows pattern matching using
combinations of LDAP attributes.
Allow LDAP authentication to use
encrypted LDAP (Thomas Munro)
We already supported LDAP over
TLS by using ldaptls=1.
This new TLS LDAP method for
encrypted LDAP is enabled
with ldapscheme=ldaps
or ldapurl=ldaps://.
Improve logging of LDAP errors (Thomas Munro)
Permissions
Add default roles that
enable file system access (Stephen Frost)
Specifically, the new roles are:
pg_read_server_files,
pg_write_server_files, and
pg_execute_server_program. These roles now also
control who can use server-side COPY and the file_fdw extension.
Previously, only superusers could use these functions, and that
is still the default behavior.
Allow access to file system functions to be controlled by
GRANT/REVOKE permissions,
rather than superuser checks (Stephen Frost)
Specifically, these functions were modified: pg_ls_dir(),
pg_read_file(),
pg_read_binary_file(),
pg_stat_file().
Use GRANT/REVOKE
to control access to lo_import()
and lo_export() (Michael Paquier, Tom Lane)
Previously, only superusers were granted access to these functions.
The compile-time option ALLOW_DANGEROUS_LO_FUNCTIONS
has been removed.
Use view owner not session owner when
preventing non-password access to postgres_fdw
tables (Robert Haas)
PostgreSQL only allows superusers to
access postgres_fdw tables without
passwords, e.g. via peer. Previously, the
session owner had to be a superuser to allow such access; now
the view owner is checked instead.
Fix invalid locking permission check in SELECT FOR
UPDATE on views (Tom Lane)
Server Configuration
Add server setting ssl_passphrase_command
to allow supplying of the passphrase for SSL
key files (Peter Eisentraut)
Also add ssl_passphrase_command_supports_reload
to specify whether the SSL configuration
should be reloaded and ssl_passphrase_command
called during a server configuration reload.
Add storage parameter toast_tuple_target
to control the minimum tuple length before TOAST
storage will be considered (Simon Riggs)
The default TOAST threshold has not been
changed.
Allow server options related to memory and file sizes to be
specified in units of bytes (Beena Emerson)
The new unit suffix is B. This is in addition to the
existing units kB, MB, GB
and TB.
Write-Ahead Log (WAL)
Allow the WAL file size to be set
during initdb (Beena Emerson)
Previously, the 16MB default could only be changed at compile time.
Retain WAL data for only a single checkpoint
(Simon Riggs)
Previously, WAL was retained for two checkpoints.
Fill the unused portion of force-switched WAL
segment files with zeros for improved compressibility (Chapman
Flack)
Base Backup and Streaming Replication
Replicate TRUNCATE activity when using logical
replication (Simon Riggs, Marco Nenciarini, Peter Eisentraut)
Pass prepared transaction information to logical replication
subscribers (Nikhil Sontakke, Stas Kelvich)
Exclude unlogged tables, temporary tables, and
pg_internal.init files from streaming base
backups (David Steele)
There is no need to copy such files.
Allow checksums of heap pages to be verified during streaming base
backup (Michael Banck)
Allow replication slots to be advanced programmatically, rather
than be consumed by subscribers (Petr Jelinek)
This allows efficient advancement of replication slots when the
contents do not need to be consumed. This is performed by
pg_replication_slot_advance().
Add timeline information to the backup_label
file (Michael Paquier)
Also add a check that the WAL timeline matches
the backup_label file's timeline.
Add host and port connection information to the
pg_stat_wal_receiver system view
(Haribabu Kommi)
Utility Commands
Allow ALTER TABLE to add a column with
a non-null default without doing a table rewrite (Andrew Dunstan,
Serge Rielau)
This is enabled when the default value is a constant.
Allow views to be locked by locking the underlying tables
(Yugo Nagata)
Allow ALTER INDEX to set statistics-gathering
targets for expression indexes (Alexander Korotkov, Adrien Nayrat)
In psql, \d+ now shows
the statistics target for indexes.
Allow multiple tables to be specified in one
VACUUM or ANALYZE command
(Nathan Bossart)
Also, if any table mentioned in VACUUM uses
a column list, then the ANALYZE keyword must be
supplied; previously, ANALYZE was implied in
such cases.
Add parenthesized options syntax to ANALYZE
(Nathan Bossart)
This is similar to the syntax supported by
VACUUM.
Add CREATE AGGREGATE option to specify the
behavior of the aggregate's finalization function (Tom Lane)
This is helpful for allowing user-defined aggregate functions to be
optimized and to work as window functions.
Data Types
Allow the creation of arrays of domains (Tom Lane)
This also allows array_agg() to be used
on domains.
Support domains over composite types (Tom Lane)
Also allow PL/Perl, PL/Python, and PL/Tcl to handle
composite-domain function arguments and results. Also improve
PL/Python domain handling.
Add casts from JSONB scalars to numeric and boolean data
types (Anastasia Lubennikova)
Functions
Add all window function framing
options specified by SQL:2011 (Oliver Ford, Tom Lane)
Specifically, allow RANGE mode to use
PRECEDING and FOLLOWING to
select rows having grouping values within plus or minus the
specified offset. Add GROUPS mode to include plus
or minus the number of peer groups. Frame exclusion syntax was also
added.
Add SHA-2 family of hash functions (Peter
Eisentraut)
Specifically, sha224(),
sha256(), sha384(),
sha512() were added.
Add support for 64-bit non-cryptographic hash functions (Robert
Haas, Amul Sul)
Allow to_char() and
to_timestamp() to specify the time zone's
offset from UTC in hours and minutes
(Nikita Glukhov, Andrew Dunstan)
This is done with format specifications TZH
and TZM.
Add text search function websearch_to_tsquery()
that supports a query syntax similar to that used by web search
engines (Victor Drobny, Dmitry Ivanov)
Add functions json(b)_to_tsvector()
to create a text search query for matching
JSON/JSONB values (Dmitry Dolgov)
Server-Side Languages
Add SQL-level procedures, which can start and commit their own
transactions (Peter Eisentraut)
They are created with the new CREATE
PROCEDURE command and invoked via CALL.
The new ALTER/DROP ROUTINE
commands allow altering/dropping of all routine-like objects,
including procedures, functions, and aggregates.
Also, writing FUNCTION is now preferred
over writing PROCEDURE in CREATE
OPERATOR and CREATE TRIGGER, because the
referenced object must be a function not a procedure. However, the
old syntax is still accepted for compatibility.
Add transaction control to PL/pgSQL, PL/Perl, PL/Python, PL/Tcl,
and SPI server-side languages (Peter Eisentraut)
Transaction control is only available within top-transaction-level
procedures and nested DO and
CALL blocks that only contain other
DO and CALL blocks.
Add the ability to define PL/pgSQL composite-type variables as not
null, constant, or with initial values (Tom Lane)
Allow PL/pgSQL to handle changes to composite types (e.g. record,
row) that happen between the first and later function executions
in the same session (Tom Lane)
Previously, such circumstances generated errors.
Add extension jsonb_plpython to
transform JSONB to/from PL/Python types (Anthony
Bykov)
Add extension jsonb_plperl to transform
JSONB to/from PL/Perl types (Anthony Bykov)
Client Interfaces
Change libpq to disable compression by default (Peter Eisentraut)
Compression is already disabled in modern OpenSSL versions, so that
the libpq setting had no effect with such libraries.
Add DO CONTINUE option
to ecpg's WHENEVER
statement (Vinayak Pokale)
This generates a C continue statement, causing a
return to the top of the contained loop when the specified condition
occurs.
Add an ecpg mode to enable Oracle
Pro*C-style handling of char arrays.
This mode is enabled with .
Client Applications
Add psql command \gdesc
to display the names and types of the columns in a query result
(Pavel Stehule)
Add psql variables to report query
activity and errors (Fabien Coelho)
Specifically, the new variables are ERROR,
SQLSTATE, ROW_COUNT,
LAST_ERROR_MESSAGE, and
LAST_ERROR_SQLSTATE.
Allow psql to test for the existence
of a variable (Fabien Coelho)
Specifically, the syntax :{?variable_name} allows
a variable's existence to be tested in an \if
statement.
Allow environment variable PSQL_PAGER to control
psql's pager (Pavel Stehule)
This allows psql's default pager to
be specified as a separate environment variable from the pager
for other applications. PAGER is still honored
if PSQL_PAGER is not set.
Make psql's \d+ command always show the table's
partitioning information (Amit Langote, Ashutosh Bapat)
Previously, partition information would not be displayed for a
partitioned table if it had no partitions. Also indicate which
partitions are themselves partitioned.
Ensure that psql reports the proper user
name when prompting for a password (Tom Lane)
Previously, combinations of and a user name
embedded in a URI caused incorrect reporting.
Also suppress the user name before the password prompt when
is specified.
Allow quit and exit to
exit psql when given with no prior input
(Bruce Momjian)
Also print hints about how to exit when quit and
exit are used alone on a line while the input
buffer is not empty. Add a similar hint for help.
Make psql hint at using control-D
when \q is entered alone on a line but ignored
(Bruce Momjian)
For example, \q does not exit when supplied
in character strings.
Improve tab completion for ALTER INDEX
RESET/SET (Masahiko Sawada)
Add infrastructure to allow psql
to adapt its tab completion queries based on the server version
(Tom Lane)
Previously, tab completion queries could fail against older servers.
pgbench
Add pgbench expression support for
NULLs, booleans, and some functions and operators (Fabien Coelho)
Add \if conditional support to
pgbench (Fabien Coelho)
Allow the use of non-ASCII characters in
pgbench variable names (Fabien Coelho)
Add pgbench option
to control the initialization steps
performed (Masahiko Sawada)
Add an approximately Zipfian-distributed random generator to
pgbench (Alik Khilazhev)
Allow the random seed to be set in
pgbench (Fabien Coelho)
Allow pgbench to do exponentiation
with pow() and power()
(Raúl Marín Rodríguez)
Add hashing functions to pgbench
(Ildar Musin)
Make pgbench statistics more
accurate when using and
(Fabien Coelho)
Server Applications
Add an option to pg_basebackup
that creates a named replication slot (Michael Banck)
The option creates
the named replication slot ()
when the WAL streaming method
() is used.
Allow initdb
to set group read access to the data directory (David Steele)
This is accomplished with the new initdb option
. Administrators
can also set group permissions on the empty data
directory before running initdb. Server variable data_directory_mode
allows reading of data directory group permissions.
Add pg_verify_checksums
tool to verify database checksums while offline (Magnus Hagander)
Allow pg_resetwal
to change the WAL segment size via
(Nathan Bossart)
Add long options to pg_resetwal
and pg_controldata (Nathan Bossart,
Peter Eisentraut)
Add pg_receivewal
option to prevent synchronous
WAL writes, for testing (Michael Paquier)
Add pg_receivewal option
to specify when WAL
receiving should stop (Michael Paquier)
Allow pg_ctl
to send the SIGKILL signal to processes
(Andres Freund)
This was previously unsupported due to concerns over possible misuse.
Reduce the number of files copied by pg_rewind
(Michael Paquier)
Prevent pg_rewind from running as
root (Michael Paquier)
pg_dump,
pg_dumpall,
pg_restore
Add pg_dumpall option
to control output encoding
(Michael Paquier)
pg_dump already had this option.
Add pg_dump option
to force loading of
data into the partition's root table, rather than the original
partition (Rushabh Lathia)
This is useful if the system to be loaded to has different collation
definitions or endianness, possibly requiring rows to be stored in
different partitions than previously.
Add an option to suppress dumping and restoring database object
comments (Robins Tharakan)
The new pg_dump,
pg_dumpall, and
pg_restore option is
.
Source Code
Add PGXS support for installing include
files (Andrew Gierth)
This supports creating extension modules that depend on other
modules. Formerly there was no easy way for the dependent module to
find the referenced one's include files. Several
existing contrib modules that define data types
have been adjusted to install relevant files. Also, PL/Perl and
PL/Python now install their include files, to support creation of
transform modules for those languages.
Install errcodes.txt to allow extensions to access
the list of error codes known to PostgreSQL
(Thomas Munro)
Convert documentation to DocBook XML (Peter
Eisentraut, Alexander Lakhin, Jürgen Purtz)
The file names still use an sgml extension
for compatibility with back branches.
Use stdbool.h to define type bool
on platforms where it's suitable, which is most (Peter Eisentraut)
This eliminates a coding hazard for extension modules that need
to include stdbool.h.
Overhaul the way that initial system catalog contents are defined
(John Naylor)
The initial data is now represented in Perl data structures, making
it much easier to manipulate mechanically.
Prevent extensions from creating custom server parameters that
take a quoted list of values (Tom Lane)
This cannot be supported at present because knowledge of the
parameter's property would be required even before the extension is
loaded.
Add ability to use channel binding when using SCRAM
authentication (Michael Paquier)
Channel binding is intended to prevent man-in-the-middle attacks, but
SCRAM cannot prevent them unless it can be forced
to be active. Unfortunately, there is no way to do that in libpq.
Support for it is expected in future versions of libpq and in
interfaces not built using libpq, e.g. JDBC.
Allow background workers to attach to databases that normally
disallow connections (Magnus Hagander)
Add support for hardware CRC calculations
on ARMv8 (Yuqi Gu, Heikki Linnakangas,
Thomas Munro)
Speed up lookups of built-in functions by OID (Andres Freund)
The previous binary search has been replaced by a lookup array.
Speed up construction of query results (Andres Freund)
Improve speed of access to system caches (Andres Freund)
Add a generational memory allocator which is optimized for serial
allocation/deallocation (Tomas Vondra)
This reduces memory usage for logical decoding.
Make the computation of
pg_class.reltuples
by VACUUM consistent with its computation
by ANALYZE (Tomas Vondra)
Update to use perltidy version
20170521 (Tom Lane, Peter Eisentraut)
Additional Modules
Allow extension pg_prewarm
to restore the previous shared buffer contents on startup (Mithun
Cy, Robert Haas)
This is accomplished by having pg_prewarm store
the shared buffers' relation and block number data to disk
occasionally during server operation, and at shutdown.
Add pg_trgm
function strict_word_similarity() to compute
the similarity of whole words (Alexander Korotkov)
The function word_similarity() already
existed for this purpose, but it was designed to find similar
parts of words, while strict_word_similarity()
computes the similarity to whole words.
Allow creation of indexes that can be used by LIKE
comparisons
on citext columns
(Alexey Chernyshov)
To do this, the index must be created using the
citext_pattern_ops operator class.
Allow btree_gin
to index bool, bpchar, name
and uuid data types (Matheus Oliveira)
Allow cube
and seg
extensions to perform index-only scans using GiST indexes
(Andrey Borodin)
Allow retrieval of negative cube coordinates using
the ~> operator (Alexander Korotkov)
This is useful for KNN-GiST searches when looking for coordinates in
descending order.
Add Vietnamese letter handling to the unaccent
extension (Dang Minh Huong, Michael Paquier)
Enhance amcheck
to check that each heap tuple has an index entry (Peter Geoghegan)
Have adminpack
use the new default file system access roles (Stephen Frost)
Previously, only superusers could call adminpack
functions; now role permissions are checked.
Widen pg_stat_statement's query ID
to 64 bits (Robert Haas)
This greatly reduces the chance of query ID hash collisions.
The query ID can now potentially display as a negative value.
Remove the contrib/start-scripts/osx scripts
since they are no longer recommended
(use contrib/start-scripts/macos instead)
(Tom Lane)
Remove the chkpass extension (Peter Eisentraut)
This extension is no longer considered to be a usable security tool
or example of how to write an extension.
Acknowledgments
The following individuals (in alphabetical order) have contributed to this
release as patch authors, committers, reviewers, testers, or reporters of
issues.
Abhijit Menon-SenAdam BielanskiAdam BrightwellAdam BrusselbackAditya ToshniwalAdrián EscomsAdrien NayratAkos VandraAleksander AlekseevAleksandr ParfenovAlexander KorotkovAlexander KukushkinAlexander KuzmenkovAlexander LakhinAlexandre GarciaAlexey BashtanovAlexey ChernyshovAlexey KryuchkovAlik KhilazhevÁlvaro HerreraAmit KapilaAmit KhandekarAmit LangoteAmul SulAnastasia LubennikovaAndreas Joseph KroghAndreas KarlssonAndreas SeltenreichAndré HänselAndrei GoritaAndres FreundAndrew DunstanAndrew FletcherAndrew GierthAndrew GrossmanAndrew KrasichkovAndrey BorodinAndrey LizenkoAndy AbelistoAnthony BykovAntoine ScemamaAnton DignösAntonin HouskaArseniy SharoglazovArseny SherArthur ZakirovAshutosh BapatAshutosh SharmaAshwin AgrawalAsim PraveenAtsushi TorikoshiBadrul ChowdhuryBalazs SzilfaiBasil BourqueBeena EmersonBen ChobotBenjamin CoutuBernd HelmleBlaz MerelaBrad DeJongBrent DearthBrian CloutierBruce MomjianCatalin IacobChad TrabantChapman FlackChristian DutaChristian UllrichChristoph BergChristoph DreisChristophe CourtoisChristopher JonesClaudio FreireClayton SalemCraig RingerDagfinn Ilmari MannsåkerDan VianelloDan WatsonDang Minh HuongDaniel GustafssonDaniel VéritéDaniel WestermannDaniel WoodDarafei PraliaskouskiDave CramerDave PageDavid BindermanDavid CarlierDavid FetterDavid G. JohnstonDavid GouldDavid HinkleDavid Pereiro LagaresDavid RaderDavid RowleyDavid SteeleDavy MachadoDean RasheedDian FayDilip KumarDmitriy SarafannikovDmitry DolgovDmitry IvanovDmitry ShalashovDon SeilerDoug DooleDoug RadyEdmund HornerEiji SekiElvis PranskevichusEmre HasegeliErik RijkersErwin BrandstetterEtsuro FujitaEuler TaveiraEveraldo CanutoFabien CoelhoFabrízio de Royes MelloFeike SteenbergenFrits JalvinghFujii MasaoGao ZengqiGianni CiolliGreg StarkGunnlaugur Thor BriemGuo Xiang TanHadi MoshayediHailong LiHaribabu KommiHeath LordHeikki LinnakangasHugo MercierIgor KorotIgor NeymanIldar MusinIldus KurbangalievIoseph KimJacob ChampionJaime CasanovaJakob EggerJean-Pierre PelletierJeevan ChalkeJeevan LadheJeff DavisJeff JanesJeremy EvansJeremy FinzelJeremy SchneiderJesper PedersenJim NasbyJimmy YihJing WangJobin AugustineJoe ConwayJohn GormanJohn NaylorJon NelsonJon WolskiJonathan AllenJonathan S. KatzJulien RouhaudJürgen PurtzJustin PryzbyKaiGai KoheiKaiting ChenKarl LehenbauerKeith FiskeKevin BlochKha NguyenKim Rose CarlsenKonstantin KnizhnikKuntal GhoshKyle SamsonKyotaro HoriguchiLætitia AvrotLars KanisLaurenz AlbeLeonardo CecchiLiudmila MantrovaLixian ZouLloyd AlbinLuca FerrariLucas FairchildLukas EderLukas FittlMagnus HaganderMai PengMaksim MilyutinMaksym BogukMansur GalievMarc DilgerMarco NenciariniMarina PolyakovaMario de Frutos DieguezMark Cave-AylandMark DilgerMark WoodMarko TiikkajaMarkus WinandMartín MarquésMasahiko SawadaMatheus OliveiraMatthew StickneyMetin DosluMichael BanckMichael MeskesMichael PaquierMichail NikolaevMike BlackwellMinh-Quan TranMithun CyMorgan OwensNathan BossartNathan WagnerNeil ConwayNick BarnesNicolas ThauvinNikhil SontakkeNikita GlukhovNikolay ShaplovNoah MischNoriyoshi ShinodaOleg BartunovOleg SamoilovOliver FordPan BianPascal LegrandPatrick HemmerPatrick KreckerPaul BonaudPaul GuoPaul RamseyPavan DeolaseePavan MaddamsettiPavel GolubPavel StehulePeter EisentrautPeter GeogheganPetr JelínekPetru-Florin MihanceaPhil FlorentPhilippe BeaudoinPierre DucroquetPiotr StefaniakPrabhat SahuPu QunQL ZhuoRafia SabihRahila SyedRainer OrthRajkumar RaghuwanshiRaúl Marín RodríguezRegina ObeRichard YenRobert HaasRobins TharakanRod TaylorRushabh LathiaRyan MurphySahap AsciSamuel HorwitzScott UreSean JohnstonShao BretShay RojanskyShubham BaraiSimon RiggsSimone GottiSivasubramanian RamasubramanianStas KelvichStefan KaltenbrunnerStephen FroehlichStephen FrostSteve SingerSteven WinfieldSven KunzeTaiki KondoTakayuki TsunakawaTakeshi IderihaTatsuo IshiiTatsuro YamadaTeodor SigaevThom BrownThomas KellererThomas MunroThomas ReissTobias BussmannTodd A. CookTom KazimiersTom LaneTomas VondraTomonari KatsumataTorsten GrustTushar AhujaVaishnavi PrabakaranVasundhar BoddapatiVictor DrobnyVictor WagnerVictor YegorovVik FearingVinayak PokaleVincent LachenalVitaliy GarnashevichVitaly BurovoyVladimir BaranoffXin ZhangYi Wen WongYorick PeterseYugo NagataYuqi GuYura SokolovYves GoergenZhou Digoal