Release date: 2019-05-09
This release contains a variety of fixes from 11.2. For information about new features in major release 11, see Section E.6.
A dump/restore is not required for those running 11.X.
However, if you are upgrading from a version earlier than 11.1, see Section E.5.
Prevent row-level security policies from being bypassed via selectivity estimators (Dean Rasheed)
Some of the planner's selectivity estimators apply user-defined
operators to values found in pg_statistic
(e.g., most-common values). A leaky operator therefore can disclose
some of the entries in a data column, even if the calling user lacks
permission to read that column. In CVE-2017-7484 we added
restrictions to forestall that, but we failed to consider the
effects of row-level security. A user who has SQL permission to
read a column, but who is forbidden to see certain rows due to RLS
policy, might still learn something about those rows' contents via a
leaky operator. This patch further tightens the rules, allowing
leaky operators to be applied to statistics data only when there is
no relevant RLS policy. (CVE-2019-10130)
Avoid access to already-freed memory during partition routing error reports (Michael Paquier)
This mistake could lead to a crash, and in principle it might be possible to use it to disclose server memory contents. (CVE-2019-10129)
Avoid catalog corruption when an ALTER TABLE
on a
partitioned table finds that a partitioned index is reusable (Amit
Langote, Tom Lane)
This occurs, for example, when ALTER COLUMN TYPE
finds that no physical table rewrite is required.
Avoid catalog corruption when a temporary table with ON
COMMIT DROP
and an identity column is created in a
single-statement transaction (Peter Eisentraut)
This hazard was overlooked because the case is not actually useful, since the temporary table would be dropped immediately after creation.
Fix failure in ALTER INDEX ... ATTACH PARTITION
if the partitioned table contains more dropped columns than its
partition does (Álvaro Herrera)
Fix failure to attach a partition's existing index to a newly-created partitioned index in some cases (Amit Langote, Álvaro Herrera)
This would lead to errors such as “index ... not found in partition” in subsequent DDL that uses the partitioned index.
Avoid crash when an EPQ recheck is performed for a partitioned query result relation (Amit Langote)
This occurs when using READ COMMITTED
isolation
level and another session has concurrently updated some of the
target row(s).
Fix tuple routing in multi-level partitioned tables that have dropped attributes (Amit Langote, Michael Paquier)
Fix failure when the slow path of foreign key constraint initial validation is applied to partitioned tables (Hadi Moshayedi, Tom Lane, Andres Freund)
This didn't manifest except in the uncommon cases where the fast path can't be used (such as permissions problems).
Fix behavior for an UPDATE
or DELETE
on an inheritance tree or partitioned
table in which every table can be excluded (Amit Langote, Tom Lane)
In such cases, the query did not report the correct set of output
columns when a RETURNING
clause was present, and
if there were any statement-level triggers that should be fired, it
didn't fire them.
When accessing a partition directly,
and constraint_exclusion
is set
to on
, use the partition's partition constraint
as well as any CHECK
constraints for exclusion
checking (Amit Langote, Tom Lane)
This change restores the behavior to what it was in v10.
Avoid server crash when an error occurs while trying to persist a cursor query across a transaction commit (Tom Lane)
If a procedure attempts to commit while it has an open explicit or
implicit cursor (for example, a PL/pgSQL FOR
-loop
query), the cursor must be executed to completion and its results
saved before the transaction commit can be performed. An error
occurring during such execution led to a crash.
Avoid throwing incorrect errors for updates of temporary tables and
unlogged tables when a FOR ALL TABLES
publication
exists (Peter Eisentraut)
Such tables should be ignored for publication purposes, but some parts of the code failed to do so.
Fix handling of explicit DEFAULT
items in
an INSERT ... VALUES
command with
multiple VALUES
rows, if the target relation is
an updatable view (Amit Langote, Dean Rasheed)
When the updatable view has no default for the column but its
underlying table has one, a single-row INSERT
... VALUES
will use the underlying table's default.
In the multi-row case, however, NULL was always used. Correct it to
act like the single-row case.
Fix CREATE VIEW
to allow zero-column views
(Ashutosh Sharma)
We should allow this for consistency with allowing zero-column tables. Since a table can be converted to a view, zero-column views could be created even with the restriction in place, leading to dump/reload failures.
Add missing support for CREATE TABLE IF NOT EXISTS ... AS
EXECUTE ...
(Andreas Karlsson)
The combination of IF NOT EXISTS
and EXECUTE
should work, but the grammar omitted
it.
Ensure that sub-SELECT
s appearing in
row-level-security policy expressions are executed with the correct
user's permissions (Dean Rasheed)
Previously, if the table having the RLS policy was accessed via a view, such checks might be executed as the user calling the view, not as the view owner as they should be.
Accept XML documents as valid values of type xml
when xmloption
is set
to content
, as required by SQL:2006 and later
(Chapman Flack)
Previously PostgreSQL followed the
SQL:2003 definition, which doesn't allow this. But that creates a
serious problem for dump/restore: there is no setting
of xmloption
that will accept all valid XML data.
Hence, switch to the 2006 definition.
pg_dump is also modified to emit
SET xmloption = content
while restoring data,
ensuring that dump/restore works even if the prevailing
setting is document
.
Improve server's startup-time checks for whether a pre-existing shared memory segment is still in use (Noah Misch)
The postmaster is now more likely to detect that there are still
active processes from a previous postmaster incarnation, even if
the postmaster.pid
file has been removed.
Avoid possible division-by-zero in btree index vacuum logic (Piotr Stefaniak, Alexander Korotkov)
This could lead to incorrect decisions about whether index cleanup is needed.
Avoid counting parallel workers' transactions as separate transactions (Haribabu Kommi)
Fix incompatibility of GIN-index WAL records (Alexander Korotkov)
A fix applied in February's minor releases was not sufficiently careful about backwards compatibility, leading to problems if a standby server of that vintage reads GIN page-deletion WAL records generated by a primary server of a previous minor release.
Fix possible crash while executing a SHOW
command
in a replication connection (Michael Paquier)
Avoid server memory leak when fetching rows from a portal one at a time (Tom Lane)
Avoid memory leak when a partition's relation cache entry is rebuilt (Amit Langote, Tom Lane)
Tolerate EINVAL
and ENOSYS
error results, where appropriate, for fsync
and sync_file_range
calls
(Thomas Munro, James Sewell)
The previous change to panic on file synchronization failures turns out to have been excessively paranoid for certain cases where a failure is predictable and essentially means “operation not supported”.
Report correct relation name in
autovacuum's pg_stat_activity
display
during BRIN summarize operations (Álvaro Herrera)
Avoid crash when trying to plan a partition-wise join when GEQO is active (Tom Lane)
Fix “failed to build any N
-way
joins” planner failures with lateral references leading out
of FULL
outer joins (Tom Lane)
Fix misplanning of queries in which a set-returning function is applied to a relation that is provably empty (Tom Lane, Julien Rouhaud)
In v10, this oversight only led to slightly inefficient plans, but in v11 it could cause “set-valued function called in context that cannot accept a set” errors.
Check the appropriate user's permissions when enforcing rules about
letting a leaky operator see pg_statistic
data (Dean Rasheed)
When an underlying table is being accessed via a view, consider the privileges of the view owner while deciding whether leaky operators may be applied to the table's statistics data, rather than the privileges of the user making the query. This makes the planner's rules about what data is visible match up with the executor's, avoiding unnecessarily-poor plans.
Fix planner's parallel-safety assessment for grouped queries (Etsuro Fujita)
Previously, target-list evaluation work that could have been parallelized might not be.
Fix mishandling of “included” index columns in planner's unique-index logic (Tom Lane)
This could result in failing to recognize that a unique index with included columns proves uniqueness of a query result, leading to a poor plan.
Fix incorrect strictness check for array coercion expressions (Tom Lane)
This might allow, for example, incorrect inlining of a strict SQL function, leading to non-enforcement of the strictness condition.
Speed up planning when there are many equality conditions and many potentially-relevant foreign key constraints (David Rowley)
Avoid O(N^2) performance issue when rolling back a transaction that created many tables (Tomas Vondra)
Fix corner-case server crashes in dynamic shared memory allocation (Thomas Munro, Robert Haas)
Fix race conditions in management of dynamic shared memory (Thomas Munro)
These could lead to “dsa_area could not attach to segment” or “cannot unpin a segment that is not pinned” errors.
Fix race condition in which a hot-standby postmaster could fail to shut down after receiving a smart-shutdown request (Tom Lane)
Fix possible crash
when pg_identify_object_as_address()
is given
invalid input (Álvaro Herrera)
Fix possible “could not access status of transaction”
failures in txid_status()
(Thomas Munro)
Fix authentication failure when attempting to use SCRAM authentication with mixed OpenSSL library versions (Michael Paquier, Peter Eisentraut)
If libpq is using OpenSSL 1.0.1 or older while the server is using OpenSSL 1.0.2 or newer, the negotiation of which SASL mechanism to use went wrong, leading to a confusing “channel binding not supported by this build” error message.
Tighten validation of encoded SCRAM-SHA-256 and MD5 passwords (Jonathan Katz)
A password string that had the right initial characters could be mistaken for one that is correctly hashed into SCRAM-SHA-256 or MD5 format. The password would be accepted but would be unusable later.
Fix handling of lc_time
settings that imply an
encoding different from the database's encoding (Juan José
Santamaría Flecha, Tom Lane)
Localized month or day names that include non-ASCII characters previously caused unexpected errors or wrong output in such locales.
Create the current_logfiles
file with the same
permissions as other files in the server's data directory
(Haribabu Kommi)
Previously it used the permissions specified
by log_file_mode
, but that can cause problems for
backup utilities.
Fix incorrect operator_precedence_warning
checks
involving unary minus operators (Rikard Falkeborn)
Disallow NaN
as a value for floating-point server
parameters (Tom Lane)
Rearrange REINDEX
processing to avoid assertion
failures when reindexing individual indexes
of pg_class
(Andres Freund, Tom Lane)
Fix planner assertion failure for parameterized dummy paths (Tom Lane)
Insert correct test function in the result
of SnapBuildInitialSnapshot()
(Antonin Houska)
No core code cares about this, but some extensions do.
Fix intermittent “could not reattach to shared memory” session startup failures on Windows (Noah Misch)
A previously unrecognized source of these failures is creation of thread stacks for a process's default thread pool. Arrange for such stacks to be allocated in a different memory region.
Fix error detection in directory scanning on Windows (Konstantin Knizhnik)
Errors, such as lack of permissions to read the directory, were not detected or reported correctly; instead the code silently acted as though the directory were empty.
Fix grammar problems in ecpg (Tom Lane)
A missing semicolon led to mistranslation
of SET
(but
not variable
=
DEFAULTSET
) in ecpg programs,
producing syntactically invalid output that the server would reject.
Additionally, in a variable
TO
DEFAULTDROP TYPE
or DROP
DOMAIN
command that listed multiple type names, only the
first type name was actually processed.
Sync ecpg's syntax for CREATE
TABLE AS
with the server's (Daisuke Higuchi)
Fix possible buffer overruns in ecpg's processing of include filenames (Liu Huailing, Fei Wu)
Fix pg_rewind failures due to failure to remove some transient files in the target data directory (Michael Paquier)
Make pg_verify_checksums verify that the data directory it's pointed at is of the right PostgreSQL version (Michael Paquier)
Avoid crash in contrib/postgres_fdw
when a
query using remote grouping or aggregation has
a SELECT
-list item that is an uncorrelated
sub-select, outer reference, or parameter symbol (Tom Lane)
Change contrib/postgres_fdw
to report an error
when a remote partition chosen to insert a routed row into is
also an UPDATE
subplan target that will be
updated later in the same command (Amit Langote, Etsuro Fujita)
Previously, such situations led to server crashes or incorrect
results of the UPDATE
. Allowing such cases to
work correctly is a matter for future work.
In contrib/pg_prewarm
, avoid indefinitely
respawning background worker processes if prewarming fails for some
reason (Mithun Cy)
Avoid crash in contrib/vacuumlo
if
an lo_unlink()
call failed (Tom Lane)
Sync our copy of the timezone library with IANA tzcode release 2019a (Tom Lane)
This corrects a small bug in zic that
caused it to output an incorrect year-2440 transition in
the Africa/Casablanca
zone, and adds support
for zic's new -r
option.
Update time zone data files to tzdata release 2019a for DST law changes in Palestine and Metlakatla, plus historical corrections for Israel.
Etc/UCT
is now a backward-compatibility link
to Etc/UTC
, instead of being a separate zone that
generates the abbreviation UCT
, which nowadays is
typically a typo. PostgreSQL will still
accept UCT
as an input zone abbreviation, but it
won't output it.