Release date: 2010-10-04
This release contains a variety of fixes from 8.4.4. For information about new features in the 8.4 major release, see Section E.181.
A dump/restore is not required for those running 8.4.X. However, if you are upgrading from a version earlier than 8.4.2, see Section E.179.
Use a separate interpreter for each calling SQL userid in PL/Perl and PL/Tcl (Tom Lane)
This change prevents security problems that can be
caused by subverting Perl or Tcl code that will be
executed later in the same session under another SQL user
identity (for example, within a
SECURITY DEFINER function). Most
scripting languages offer numerous ways that that might
be done, such as redefining standard functions or
operators called by the target function. Without this
change, any SQL user with Perl or Tcl language usage
rights can do essentially anything with the SQL
privileges of the target function's owner.
The cost of this change is that intentional communication among Perl and Tcl functions becomes more difficult. To provide an escape hatch, PL/PerlU and PL/TclU functions continue to use only one interpreter per session. This is not considered a security issue since all such functions execute at the trust level of a database superuser already.
It is likely that third-party procedural languages that claim to offer trusted execution have similar security issues. We advise contacting the authors of any PL you are depending on for security-critical purposes.
Our thanks to Tim Bunce for pointing out this issue (CVE-2010-3433).
Prevent possible crashes in
pg_get_expr() by disallowing it from
being called with an argument that is not one of the
system catalog columns it's intended to be used with
(Heikki Linnakangas, Tom Lane)
Treat exit code 128 (
ERROR_WAIT_NO_CHILDREN) as non-fatal on
Windows (Magnus Hagander)
Under high load, Windows processes will sometimes fail at startup with this error code. Formerly the postmaster treated this as a panic condition and restarted the whole database, but that seems to be an overreaction.
Fix incorrect placement of placeholder evaluation (Tom Lane)
This bug could result in query outputs being non-null when they should be null, in cases where the inner side of an outer join is a sub-select with non-strict expressions in its output list.
Fix possible duplicate scans of
UNION ALL member relations (Tom
Fix “cannot handle unplanned sub-select” error (Tom Lane)
This occurred when a sub-select contains a join alias reference that expands into an expression containing another sub-select.
Fix mishandling of whole-row Vars that reference a view or sub-select and appear within a nested sub-select (Tom Lane)
Fix mishandling of cross-type
IN comparisons (Tom Lane)
This could result in failures if the planner tried to
IN join with a
Fix computation of
ANALYZE statistics for
tsvector columns (Jan Urbanski)
The original coding could produce incorrect statistics, leading to poor plan choices later.
Improve planner's estimate of memory used by
string_agg(), and similar aggregate
functions (Hitoshi Harada)
The previous drastic underestimate could lead to out-of-memory failures due to inappropriate choice of a hash-aggregation plan.
Fix failure to mark cached plans as transient (Tom Lane)
If a plan is prepared while
CREATE INDEX CONCURRENTLY is in progress
for one of the referenced tables, it is supposed to be
re-planned once the index is ready for use. This was not
Reduce PANIC to ERROR in some occasionally-reported btree failure cases, and provide additional detail in the resulting error messages (Tom Lane)
This should improve the system's robustness with corrupted indexes.
Fix incorrect search logic for partial-match queries with GIN indexes (Tom Lane)
Cases involving AND/OR combination of several GIN index conditions didn't always give the right answer, and were sometimes much slower than necessary.
Prevent show_session_authorization() from crashing within autovacuum processes (Tom Lane)
Defend against functions returning setof record where not all the returned rows are actually of the same rowtype (Tom Lane)
Fix possible corruption of pending trigger event lists during subtransaction rollback (Tom Lane)
This could lead to a crash or incorrect firing of triggers.
Fix possible failure when hashing a pass-by-reference function result (Tao Ma, Tom Lane)
Improve merge join's handling of NULLs in the join columns (Tom Lane)
A merge join can now stop entirely upon reaching the first NULL, if the sort order is such that NULLs sort high.
Take care to fsync the contents of lockfiles (both
postmaster.pid and the
socket lockfile) while writing them (Tom Lane)
This omission could result in corrupted lockfile contents if the machine crashes shortly after postmaster start. That could in turn prevent subsequent attempts to start the postmaster from succeeding, until the lockfile is manually removed.
Avoid recursion while assigning XIDs to heavily-nested subtransactions (Andres Freund, Robert Haas)
The original coding could result in a crash if there was limited stack space.
Avoid holding open old WAL segments in the walwriter process (Magnus Hagander, Heikki Linnakangas)
The previous coding would prevent removal of no-longer-needed segments.
%i escape, which could
produce junk early in backend startup (Tom Lane)
Prevent misinterpretation of partially-specified relation options for TOAST tables (Itagaki Takahiro)
would be read as zero if any other reloption had been set
for the table, leading to serious bloat.
Fix inheritance count tracking in
ALTER TABLE ... ADD CONSTRAINT (Robert
Fix possible data corruption in
ALTER TABLE ... SET TABLESPACE when
archiving is enabled (Jeff Davis)
CREATE DATABASE and
ALTER DATABASE ... SET
TABLESPACE to be interrupted by query-cancel
checking of whether proposed index expressions are
immutable (Tom Lane)
REASSIGN OWNED to
handle operator classes and families (Asko Tiidumaa)
Fix possible core dump when comparing two empty
tsquery values (Tom Lane)
LIKE's handling of
_ (Tom Lane)
We've fixed this before, but there were still some incorrectly-handled cases.
Re-allow input of Julian dates prior to 0001-01-01 AD (Tom Lane)
Input such as
'J100000'::date worked before 8.4, but
was unintentionally broken by added error-checking.
Fix PL/pgSQL to throw an error, not crash, if a cursor
is closed within a
that is iterating over that cursor (Heikki
In PL/Python, defend against null pointer results from
In libpq, fix full
SSL certificate verification for the case where both
hostaddr are specified (Tom Lane)
Make psql recognize
ALL as a command that should not be encased in a
transaction block in autocommit-off mode (Itagaki
Fix some issues in pg_dump's handling of SQL/MED objects (Tom Lane)
Notably, pg_dump would always fail if run by a non-superuser, which was not intended.
Improve pg_dump and pg_restore's handling of non-seekable archive files (Tom Lane, Robert Haas)
This is important for proper functioning of parallel restore.
Improve parallel pg_restore's ability to cope with
selective restore (
option) (Tom Lane)
The original code tended to fail if the
-L file commanded a non-default restore
Fix ecpg to process
correctly (Michael Meskes)
Fix some memory leaks in ecpg (Zoltan Boszormenyi)
handling of tables containing dropped columns (Tom
Fix connection leak after “duplicate connection
name” errors in
contrib/dblink (Itagaki Takahiro)
handle connection names longer than 62 bytes correctly
This function is the recommended substitute for the
operator. It was back-patched so that future-proofed code
can be used with older server versions. Note that the
patch will be effective only after
contrib/hstore is installed or
reinstalled in a particular database. Users might prefer
to execute the
FUNCTION command by hand, instead.
Update build infrastructure and documentation to reflect the source code repository's move from CVS to Git (Magnus Hagander and others)
Update time zone data files to tzdata release 2010l for DST law changes in Egypt and Palestine; also historical corrections for Finland.
This change also adds new names for two Micronesian timezones: Pacific/Chuuk is now preferred over Pacific/Truk (and the preferred abbreviation is CHUT not TRUT) and Pacific/Pohnpei is preferred over Pacific/Ponape.
Make Windows' “N. Central Asia Standard Time” timezone map to Asia/Novosibirsk, not Asia/Almaty (Magnus Hagander)
Microsoft changed the DST behavior of this zone in the timezone update from KB976098. Asia/Novosibirsk is a better match to its new behavior.
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.