Release date: 2018-11-08
This release contains a variety of fixes from 9.4.19. For information about new features in the 9.4 major release, see Section E.58.
A dump/restore is not required for those running 9.4.X.
However, if you are upgrading from a version earlier than 9.4.18, see Section E.40.
Fix corner-case failures in
family of functions (Tom Lane)
Return NULL rather than throwing an error when an
invalid object OID is provided. Some of these functions
got that right already, but not all.
has_column_privilege() was additionally
capable of crashing on some platforms.
Avoid O(N^2) slowdown in regular expression match/split functions on long strings (Andrew Gierth)
Avoid O(N^3) slowdown in lexer for long strings of
- characters (Andrew Gierth)
Fix mis-execution of SubPlans when the outer query is being scanned backwards (Andrew Gierth)
Fix failure of
WHERE CURRENT OF ... after rewinding the
referenced cursor (Tom Lane)
A cursor that scans multiple relations (particularly an inheritance tree) could produce wrong behavior if rewound to an earlier relation.
handle conditionally-executed InitPlans properly (Andrew
Gierth, Tom Lane)
This resulted in hard-to-reproduce crashes or wrong
answers in concurrent updates, if they contained code
such as an uncorrelated sub-
SELECT inside a
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
Ensure that sequences owned by a foreign table are
ALTER OWNER on
the table (Peter Eisentraut)
The ownership change should propagate to such sequences as well, but this was missed for foreign tables.
Fix over-allocation of space for
array_out()'s result string (Keiichi
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.
ApplyLogicalMappingFile() closes the
mapping file when done with it (Tomas Vondra)
Previously, the file descriptor was leaked, eventually resulting in failures during logical decoding.
Fix logical decoding to handle cases where a mapped
catalog table is repeatedly rewritten, e.g. by
VACUUM FULL (Andres
Prevent starting the server with
wal_level set to too low a value to
support an existing replication slot (Andres Freund)
Avoid crash if a utility command causes infinite recursion (Tom Lane)
When initializing a hot standby, cope with duplicate XIDs caused by two-phase transactions on the master (Michael Paquier, Konstantin Knizhnik)
seed in bootstrap and standalone backends, and in
initdb (Noah Misch)
The main practical effect of this change is that it avoids a scenario where initdb might mistakenly conclude that POSIX shared memory is not available, due to name collisions caused by always using the same random seed.
Allow DSM allocation to be interrupted (Chris Travers)
Avoid possible buffer overrun when replaying GIN page recompression from WAL (Alexander Korotkov, Sivasubramanian Ramasubramanian)
Fix missed fsync of a replication slot's directory (Konstantin Knizhnik, Michael Paquier)
Fix unexpected timeouts when using
wal_sender_timeout on a slow server
Ensure that hot standby processes use the correct WAL consistency point (Alexander Kukushkin, Michael Paquier)
This prevents possible misbehavior just after a standby server has reached a consistent database state during WAL replay.
Don't run atexit callbacks when servicing
SIGQUIT (Heikki Linnakangas)
Don't record foreign-server user mappings as members of extensions (Tom Lane)
CREATE USER MAPPING is
executed in an extension script, an extension dependency
was created for the user mapping, which is unexpected.
Roles can't be extension members, so user mappings
shouldn't be either.
Make syslogger more robust against failures in opening CSV log files (Tom Lane)
Fix possible inconsistency in pg_dump's sorting of dissimilar object names (Jacob Champion)
Ensure that pg_restore will schema-qualify the
table name when emitting
TRIGGER commands (Tom Lane)
This avoids failures due to the new policy of running restores with restrictive search path.
Fix pg_upgrade to handle event triggers in extensions correctly (Haribabu Kommi)
pg_upgrade failed to preserve an event trigger's extension-membership status.
Fix pg_upgrade's cluster state check to work correctly on a standby server (Bruce Momjian)
dimension limit in all
contrib/cube functions (Andrey
Previously, some cube-related functions could
construct values that would be rejected by
cube_in(), leading to dump/reload
unaccent() function to use
unaccent text search
dictionary that is in the same schema as the function
Previously it tried to look up the dictionary using the search path, which could fail if the search path has a restrictive value.
Fix build problems on macOS 10.14 (Mojave) (Tom Lane)
Adjust configure to
-isysroot 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
It is now recommended that Perl-related extensions
-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
--with-tclconfig 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.
Support building on Windows with Visual Studio 2015 or Visual Studio 2017 (Michael Paquier, Haribabu Kommi)
Allow btree comparison functions to return
INT_MIN (Tom Lane)
Up to now, we've forbidden datatype-specific
comparison functions from returning
INT_MIN, which allows callers to invert
the sort order just by negating the comparison result.
However, this was never safe for comparison functions
that directly return the result of
strcmp(), etc, as POSIX doesn't place
any such restriction on those functions. At least some
recent versions of
incorrect sort ordering. Hence, we've removed this
restriction. Callers must now use the
INVERT_COMPARE_RESULT() macro if they
wish to invert the sort order.
Fix recursion hazard in shared-invalidation message processing (Tom Lane)
This error could, for example, result in failure to
access a system catalog or index that had just been
This change adds a new result code for
LockAcquire, which might possibly
affect external callers of that function, though only
very unusual usage patterns would have an issue with it.
The API of
LockAcquireExtended is also
Save and restore SPI's global variables during
Flack, Tom Lane)
This prevents possible interference when one SPI-using function calls another.
ALLOCSET_DEFAULT_SIZES and sibling
macros in back branches (Tom Lane)
These macros have existed since 9.6, but there were requests to add them to older branches to allow extensions to rely on them without branch-specific coding.
Avoid using potentially-under-aligned page buffers (Tom Lane)
Invent new union types
PGAlignedXLogBlock, and use these in place
of plain char arrays, ensuring that the compiler can't
place the buffer at a misaligned start address. This
fixes potential core dumps on alignment-picky platforms,
and may improve performance even on platforms that allow
follow the C99 standard's definition of
snprintf()'s result value (Tom
On platforms where this code is used (mostly Windows), its pre-C99 behavior could lead to failure to detect buffer overrun, if the calling code assumed C99 semantics.
When building on i386 with the clang compiler, require
-msse2 to be used (Andres Freund)
This avoids problems with missed floating point overflow checks.
detection of the result type of
strerror_r() (Tom Lane)
The previous coding got the wrong answer when building with icc on Linux (and perhaps in other cases), leading to libpq not returning useful error messages for system-reported errors.
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.
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.