Release date: 2017-05-11
This release contains a variety of fixes from 9.4.11. For information about new features in the 9.4 major release, see Section E.53.
A dump/restore is not required for those running 9.4.X.
However, if you use foreign data servers that make use of user passwords for authentication, see the first changelog entry below.
Also, if you are using third-party replication tools that depend on “logical decoding”, see the fourth changelog entry below.
Also, if you are upgrading from a version earlier than 9.4.11, see Section E.42.
Restrict visibility of pg_user_mappings.umoptions, to protect passwords
stored as user mapping options (Michael Paquier, Feike
Steenbergen)
The previous coding allowed the owner of a foreign
server object, or anyone he has granted server
USAGE permission to, to see
the options for all user mappings associated with that
server. This might well include passwords for other
users. Adjust the view definition to match the behavior
of information_schema.user_mapping_options,
namely that these options are visible to the user being
mapped, or if the mapping is for PUBLIC and the current user is the
server owner, or if the current user is a superuser.
(CVE-2017-7486)
By itself, this patch will only fix the behavior in newly initdb'd databases. If you wish to apply this change in an existing database, follow the corrected procedure shown in the changelog entry for CVE-2017-7547, in Section E.40.
Prevent exposure of statistical information via leaky operators (Peter Eisentraut)
Some selectivity estimation functions in the planner
will apply user-defined operators to values obtained from
pg_statistic, such as
most common values and histogram entries. This occurs
before table permissions are checked, so a nefarious user
could exploit the behavior to obtain these values for
table columns he does not have permission to read. To
fix, fall back to a default estimate if the operator's
implementation function is not certified leak-proof and
the calling user does not have permission to read the
table column whose statistics are needed. At least one of
these criteria is satisfied in most cases in practice.
(CVE-2017-7484)
Restore libpq's
recognition of the PGREQUIRESSL environment variable (Daniel
Gustafsson)
Processing of this environment variable was
unintentionally dropped in PostgreSQL 9.3, but its
documentation remained. This creates a security hazard,
since users might be relying on the environment variable
to force SSL-encrypted connections, but that would no
longer be guaranteed. Restore handling of the variable,
but give it lower priority than PGSSLMODE, to avoid breaking
configurations that work correctly with post-9.3 code.
(CVE-2017-7485)
Fix possibly-invalid initial snapshot during logical decoding (Petr Jelinek, Andres Freund)
The initial snapshot created for a logical decoding replication slot was potentially incorrect. This could cause third-party tools that use logical decoding to copy incomplete/inconsistent initial data. This was more likely to happen if the source server was busy at the time of slot creation, or if another logical slot already existed.
If you are using a replication tool that depends on logical decoding, and it should have copied a nonempty data set at the start of replication, it is advisable to recreate the replica after installing this update, or to verify its contents against the source server.
Fix possible corruption of “init forks” of unlogged indexes (Robert Haas, Michael Paquier)
This could result in an unlogged index being set to an invalid state after a crash and restart. Such a problem would persist until the index was dropped and rebuilt.
Fix incorrect reconstruction of pg_subtrans entries when a standby
server replays a prepared but uncommitted two-phase
transaction (Tom Lane)
In most cases this turned out to have no visible ill
effects, but in corner cases it could result in circular
references in pg_subtrans, potentially causing
infinite loops in queries that examine rows modified by
the two-phase transaction.
Avoid possible crash in walsender due to failure to initialize a string buffer (Stas Kelvich, Fujii Masao)
Fix postmaster's handling of fork() failure for a background worker
process (Tom Lane)
Previously, the postmaster updated portions of its state as though the process had been launched successfully, resulting in subsequent confusion.
Ensure parsing of queries in extension scripts sees the results of immediately-preceding DDL (Julien Rouhaud, Tom Lane)
Due to lack of a cache flush step between commands in
an extension script file, non-utility queries might not
see the effects of an immediately preceding catalog
change, such as ALTER TABLE ...
RENAME.
Skip tablespace privilege checks when ALTER TABLE ... ALTER COLUMN TYPE
rebuilds an existing index (Noah Misch)
The command failed if the calling user did not
currently have CREATE
privilege for the tablespace containing the index. That
behavior seems unhelpful, so skip the check, allowing the
index to be rebuilt where it is.
Fix ALTER TABLE ... VALIDATE
CONSTRAINT to not recurse to child tables when the
constraint is marked NO
INHERIT (Amit Langote)
This fix prevents unwanted “constraint does not exist” failures when no matching constraint is present in the child tables.
Fix VACUUM to account
properly for pages that could not be scanned due to
conflicting page pins (Andrew Gierth)
This tended to lead to underestimation of the number
of tuples in the table. In the worst case of a small
heavily-contended table, VACUUM could incorrectly report that the
table contained no tuples, leading to very bad planning
choices.
Ensure that bulk-tuple-transfer loops within a hash join are interruptible by query cancel requests (Tom Lane, Thomas Munro)
Fix integer-overflow problems in interval comparison (Kyotaro Horiguchi, Tom
Lane)
The comparison operators for type interval could yield wrong answers for
intervals larger than about 296000 years. Indexes on
columns containing such large values should be reindexed,
since they may be corrupt.
Fix cursor_to_xml() to
produce valid output with tableforest = false
(Thomas Munro, Peter Eisentraut)
Previously it failed to produce a wrapping
<table> element.
Fix roundoff problems in float8_timestamptz() and make_interval() (Tom Lane)
These functions truncated, rather than rounded, when converting a floating-point value to integer microseconds; that could cause unexpectedly off-by-one results.
Improve performance of pg_timezone_names view (Tom Lane,
David Rowley)
Reduce memory management overhead for contexts containing many large blocks (Tom Lane)
Fix sloppy handling of corner-case errors from
lseek() and close() (Tom Lane)
Neither of these system calls are likely to fail in
typical situations, but if they did, fd.c could get quite confused.
Fix incorrect check for whether postmaster is running as a Windows service (Michael Paquier)
This could result in attempting to write to the event log when that isn't accessible, so that no logging happens at all.
Fix ecpg to support
COMMIT PREPARED and
ROLLBACK PREPARED (Masahiko
Sawada)
Fix a double-free error when processing dollar-quoted string literals in ecpg (Michael Meskes)
In pg_dump, fix incorrect schema and owner marking for comments and security labels of some types of database objects (Giuseppe Broccolo, Tom Lane)
In simple cases this caused no ill effects; but for example, a schema-selective restore might omit comments it should include, because they were not marked as belonging to the schema of their associated object.
Avoid emitting an invalid list file in pg_restore -l when SQL object names
contain newlines (Tom Lane)
Replace newlines by spaces, which is sufficient to
make the output valid for pg_restore -L's purposes.
Fix pg_upgrade to transfer comments and security labels attached to “large objects” (blobs) (Stephen Frost)
Previously, blobs were correctly transferred to the new database, but any comments or security labels attached to them were lost.
Improve error handling in contrib/adminpack's pg_file_write() function (Noah
Misch)
Notably, it failed to detect errors reported by
fclose().
In contrib/dblink, avoid
leaking the previous unnamed connection when establishing
a new unnamed connection (Joe Conway)
Fix contrib/pg_trgm's
extraction of trigrams from regular expressions (Tom
Lane)
In some cases it would produce a broken data structure that could never match anything, leading to GIN or GiST indexscans that use a trigram index not finding any matches to the regular expression.
In contrib/postgres_fdw,
transmit query cancellation requests to the remote server
(Michael Paquier, Etsuro Fujita)
Previously, a local query cancellation request did not cause an already-sent remote query to terminate early. This is a back-patch of work originally done for 9.6.
Support OpenSSL 1.1.0 (Heikki Linnakangas, Andreas Karlsson, Tom Lane)
This is a back-patch of work previously done in newer branches; it's needed since many platforms are adopting newer OpenSSL versions.
Support Tcl 8.6 in MSVC builds (Álvaro Herrera)
Sync our copy of the timezone library with IANA release tzcode2017b (Tom Lane)
This fixes a bug affecting some DST transitions in January 2038.
Update time zone data files to tzdata release 2017b for DST law changes in Chile, Haiti, and Mongolia, plus historical corrections for Ecuador, Kazakhstan, Liberia, and Spain. Switch to numeric abbreviations for numerous time zones in South America, the Pacific and Indian oceans, and some Asian and Middle Eastern countries.
The IANA time zone database previously provided
textual abbreviations for all time zones, sometimes
making up abbreviations that have little or no currency
among the local population. They are in process of
reversing that policy in favor of using numeric UTC
offsets in zones where there is no evidence of real-world
use of an English abbreviation. At least for the time
being, PostgreSQL will
continue to accept such removed abbreviations for
timestamp input. But they will not be shown in the
pg_timezone_names view
nor used for output.
Use correct daylight-savings rules for POSIX-style time zone names in MSVC builds (David Rowley)
The Microsoft MSVC build scripts neglected to install
the posixrules file in the
timezone directory tree. This resulted in the timezone
code falling back to its built-in rule about what DST
behavior to assume for a POSIX-style time zone name. For
historical reasons that still corresponds to the DST
rules the USA was using before 2007 (i.e., change on
first Sunday in April and last Sunday in October). With
this fix, a POSIX-style zone name will use the current
and historical DST transition dates of the US/Eastern zone. If you don't want that,
remove the posixrules file,
or replace it with a copy of some other zone file (see
Section 8.5.3). Note
that due to caching, you may need to restart the server
to get such changes to take effect.
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.