The replication issue affects some users of PostgreSQL binary replication, and can cause minor data loss between the master and the standby. While not all users are affected, it is difficult to predict when the bug will occur, so we urge all users of replication and continuous backup (PITR) to update immediately. Additionally, users who had replication running under PostgreSQL minor versions 9.3.0, 9.3.1, 9.2.5, 9.1.10, or 9.0.14 should plan to take a fresh base backup of each standby after update, in order to ensure no prior data corruption already exists.
This release also fixes two timing issues with VACUUM, which can cause old, overwritten or deleted rows to re-appear at a later date under some circumstances. Users with very high transaction rates, particularly those who experience "transaction ID wraparound" every few weeks or less, are the most at risk for this issue. Those users should set vacuum_freeze_table_age to 0, and run a database-wide VACUUM after the update. The second of the two VACUUM issues affects only 9.3, making it expecially important for 9.3 users to update.
Guarantee transmission of all WAL files before replica failover
Prevent downcasing of non-ASCII identifiers
Fix several minor memory leaks
Correct overcommit behavior when using more than 24GB of work memory
Improve planner cost estimates for choosing generic plans
Fix estimates of NULL rows in boolean columns
Make UNION ALL and inheritance query plans recheck parameterized paths
Correct pg_dump bugs for foreign tables, views, and extensions
Prevent a parallel pg_restore failure on certain indexes
Make REINDEX revalidate constraints
Prevent two deadlock issues in SP-GIST and REINDEX CONCURRENTLY
Prevent GiST index lookup crash
Fix several regular expression failures
Allow ALTER DEFAULT PRIVILEGES to work on all schemas
Loosen restrictions on keywords
Allow various spellings of infinity
Expand ability to compare rows to records and arrays
Prevent psql client crash on bad PSQLRC file
Add spinlock support for ARM64
A major security issue fixed in this release, CVE-2013-1899, makes it possible for a connection request containing a database name that begins with "-" to be crafted that can damage or destroy files within a server's data directory. Anyone with access to the port the PostgreSQL server listens on can initiate this request.
Two lesser security fixes are also included in this release: CVE-2013-1900, wherein random numbers generated by contrib/pgcrypto functions may be easy for another database user to guess, and CVE-2013-1901, which mistakenly allows an unprivileged user to run commands that could interfere with in-progress backups. Finally, this release fixes two security issues with the graphical installers for Linux and Mac OS X: insecure passing of superuser passwords to a script, CVE-2013-1903 and the use of predictable filenames in /tmp CVE-2013-1902.
The security issue fixed in this release, CVE-2013-0255, allows a previously authenticated user to crash the server by calling an internal function with invalid arguments. This issue was discovered by independent security researcher Sumit Soni this week and reported via Secunia SVCRP, and we are grateful for their efforts in making PostgreSQL more secure.
Today's update also fixes a performance regression which caused a decrease in throughput when using dynamic queries in stored procedures in version 9.2. Applications which use PL/pgSQL's EXECUTE are strongly affected by this regression and should be updated. Additionally, we have fixed intermittent crashes caused by CREATE/DROP INDEX CONCURRENTLY, and multiple minor issues with replication.
This release is expected to be the final update for version 8.3, which is now End-of-Life (EOL). Users of version 8.3 should plan to upgrade to a later version of PostgreSQL immediately. For more information, see our Versioning Policy.
This update release also contains fixes for many minor issues discovered and patched by the PostgreSQL community in the last two months, including:
* Prevent unnecessary table scans during vacuuming
* Prevent spurious cached plan error in PL/pgSQL
* Allow sub-SELECTs to be subscripted
* Prevent DROP OWNED from dropping databases or tablespaces
* Make ECPG use translated messages
* Allow PL/Python to use multi-table trigger functions (again) in 9.1 and 9.2
* Fix several activity log management issues on Windows
* Prevent autovacuum file truncation from being cancelled by deadlock_timeout
* Make extensions build with the .exe suffix automatically on Windows
* Fix concurrency issues with CREATE/DROP DATABASE
* Reject out-of-range values in to_date() conversion function
* Revert cost estimation for large indexes back to pre-9.2 behavior
* Make pg_basebackup tolerate timeline switches
* Cleanup leftover temp table entries during crash recovery
* Prevent infinite loop when COPY inserts a large tuple into a table with a large fillfactor
* Prevent integer overflow in dynahash creation
* Make pg_upgrade work with INVALID indexes
* Fix bugs in TYPE privileges
* Allow Contrib installchecks to run in their own databases
* Many documentation updates
* Add new timezone "FET".
Changes:
* Fix incorrect password transformation in contrib/pgcrypto's DES crypt()
function (Solar Designer)
* Ignore SECURITY DEFINER and SET attributes for a procedural language's call
handler (Tom Lane)
* Allow numeric timezone offsets in timestamp input to be up to 16 hours away
from UTC (Tom Lane)
* Fix timestamp conversion to cope when the given time is exactly the last DST
transition time for the current timezone (Tom Lane)
* Fix text to name and char to name casts to perform string truncation
correctly in multibyte encodings (Karl Schnaitter)
* Fix memory copying bug in to_tsquery() (Heikki Linnakangas)
* Ensure txid_current() reports the correct epoch when executed in hot standby
(Simon Riggs)
* Fix planner's handling of outer PlaceHolderVars within subqueries (Tom Lane)
* Fix slow session startup when pg_attribute is very large (Tom Lane)
* Ensure sequential scans check for query cancel reasonably often (Merlin
Moncure)
* Ensure the Windows implementation of PGSemaphoreLock() clears
ImmediateInterruptOK before returning (Tom Lane)
* Show whole-row variables safely when printing views or rules (Abbas Butt, Tom
Lane)
* Fix COPY FROM to properly handle null marker strings that correspond to
invalid encoding (Tom Lane)
* Ensure autovacuum worker processes perform stack depth checking properly
(Heikki Linnakangas)
* Fix logging collector to not lose log coherency under high load (Andrew
Dunstan)
* Fix logging collector to ensure it will restart file rotation after receiving
SIGHUP (Tom Lane)
* Fix WAL replay logic for GIN indexes to not fail if the index was
subsequently dropped (Tom Lane)
* Fix memory leak in PL/pgSQL's RETURN NEXT command (Joe Conway)
* Fix PL/pgSQL's GET DIAGNOSTICS command when the target is the function's
first variable (Tom Lane)
* Fix potential access off the end of memory in psql's expanded display (\x)
mode (Peter Eisentraut)
* Fix several performance problems in pg_dump when the database contains many
*bjects (Jeff Janes, Tom Lane)
* Fix pg_upgrade for the case that a database stored in a non-default
tablespace contains a table in the cluster's default tablespace (Bruce Momjian)
* In ecpg, fix rare memory leaks and possible overwrite of one byte after the
sqlca_t structure (Peter Eisentraut)
* Fix contrib/dblink's dblink_exec() to not leak temporary database connections
upon error (Tom Lane)
* Fix contrib/dblink to report the correct connection name in error messages
(Kyotaro Horiguchi)
* Fix contrib/vacuumlo to use multiple transactions when dropping many large
*bjects (Tim Lewis, Robert Haas, Tom Lane)
* Update time zone data files to tzdata release 2012c for DST law changes in
Antarctica, Armenia, Chile, Cuba, Falkland Islands, Gaza, Haiti, Hebron,
Morocco, Syria, and Tokelau Islands;
* Fix btree index corruption from insertions concurrent with vacuuming
* Recover from errors occurring during WAL replay of DROP TABLESPACE
* Fix transient zeroing of shared buffers during WAL replay
* Fix postmaster to attempt restart after a hot-standby crash
* Fix corner case in SSI transaction cleanup
* Update per-column permissions, not only per-table permissions, when changing
table owner
* Fix handling of data-modifying WITH subplans in READ COMMITTED rechecking
* Fix for "could not find plan for CTE" failures
* Fix unsupported node type error caused by COLLATE in an INSERT expression
* Avoid crashing when we have problems deleting table files post-commit
* Fix recently-introduced memory leak in processing of inet/cidr
* Fix GIN cost estimation to handle column IN (...) index conditions
* Fix I/O-conversion-related memory leaks in plpgsql
* Teach pg_upgrade to handle renaming of plpython's shared library (affecting
upgrades to 9.1)
* Fix bugs in information_schema.referential_constraints view
* Correct collations for citext columns and indexes
* Prevent possible crash when joining to a scalar function
* Prevent transitory data corruption of GIN indexes after a crash
* Prevent data corruption on TOAST columns when copying data
* Fix failures during hot standby startup
* Correct another "variable not found in subplan target list" bug
* Fix bug with sorting on aggregate expressions in windowing functions
* Multiple bug fixes for pg_upgrade
* Change Foreign Key creation order to better support self-referential keys
* Multiple bug fixes to CREATE EXTENSION
* Ensure that function return type and data returned from PL/perl agree
* Ensure that PL/perl strings are always UTF-8
* Assorted bug fixes for various Extensions
* Updates to the time zone database, particularly to CST6
* Fix catalog cache invalidation after a "VACUUM FULL" or "CLUSTER"
on a system catalog
* Fix incorrect order of operations during sinval reset processing,
and ensure that TOAST OIDs are preserved in system catalogs
* Fix bugs in indexing of in-doubt HOT-updated tuples
* Fix multiple bugs in GiST index page split processing
* Fix possible buffer overrun in tsvector_concat()
* Fix crash in xml_recv when processing a "standalone" parameter
* Make pg_options_to_table return NULL for an option with no value
* Avoid possibly accessing off the end of memory in "ANALYZE" and in
SJIS-2004 encoding conversion
* Protect pg_stat_reset_shared() against NULL input
* Fix possible failure when a recovery conflict deadlock is detected
within a sub-transaction
* Avoid spurious conflicts while recycling btree index pages during
hot standby
* Shut down WAL receiver if it's still running at end of recovery
* Fix race condition in relcache init file invalidation
* Fix memory leak at end of a GiST index scan
* Fix memory leak when encoding conversion has to be done on incoming
command strings and "LISTEN" is active
* Fix incorrect memory accounting (leading to possible memory bloat)
in tuplestores supporting holdable cursors and plpgsql's RETURN
NEXT command
* Fix trigger WHEN conditions when both BEFORE and AFTER triggers exist
* more...
* fix build issues on HP-UX and Itanium
* update time zone files for recent time zone changes
* change SQLSTATE for Hot Standby warnings
* prevent bgwriter hang during recovery
* prevent recursive composite type creation
* disallow dropping tables whose triggers are still pending
* allow use of "replication" as a user name
* prevent a crash during GEQO planning
* improve join plans for tables with missing statistics
* fix error with SELECT FOR UPDATE in a subselect
* close PL/python array slice memory leak
* allow SSL connections for users with no home directory
* allow building PostgreSQL 9.0 with 64-bit MinGW
* Before exiting walreceiver, ensure all the received WAL is fsync'd to disk
* Avoid excess fsync activity in walreceiver
* Make "ALTER TABLE" revalidate uniqueness and exclusion constraints when needed
* Fix EvalPlanQual for "UPDATE" of an inheritance tree in which the tables are
not all alike
* Avoid failures when "EXPLAIN" tries to display a simple-form CASE expression
* Fix assignment to an array slice that is before the existing range of
subscripts
* Avoid unexpected conversion overflow in planner for very distant date values
* Fix PL/Python crash when an array contains null entries
* Remove ecpg's fixed length limit for constants defining an array dimension
* Fix erroneous parsing of tsquery values containing ... &
!(subexpression) | ...
* Fix buffer overrun in "contrib/intarray"'s input function for the query_int
type
* Fix bug in "contrib/seg"'s GiST picksplit algorithm
* Force the default wal_sync_method to be fdatasync on Linux
* Fix "too many KnownAssignedXids" error during Hot Standby replay
* Fix race condition in lock acquisition during Hot Standby
* Avoid unnecessary conflicts during Hot Standby
* Fix assorted bugs in WAL replay logic for GIN indexes
* Fix recovery from base backup when the starting checkpoint WAL
record is not in the same WAL segment as its redo point
* Fix corner-case bug when streaming replication is enabled
immediately after creating the master database cluster
* Fix persistent slowdown of autovacuum workers when multiple workers
remain active for a long time
* Fix long-term memory leak in autovacuum launcher
* Avoid failure when trying to report an impending transaction
wraparound condition from outside a transaction
* Add support for detecting register-stack overrun on IA64
* Add a check for stack overflow in copyObject()
* Fix detection of page splits in temporary GiST indexes
* Fix error checking during early connection processing
* Improve efficiency of window functions
* Avoid memory leakage while "ANALYZE"'ing complex index expressions
* Ensure an index that uses a whole-row Var still depends on its table
* Add missing support in "DROP OWNED BY" for removing foreign data
wrapper/server privileges belonging to a user
* Do not "inline" a SQL function with multiple OUT parameters
* Fix crash when inline-ing a set-returning function whose argument
list contains a reference to an inline-able user function
* Behave correctly if ORDER BY, LIMIT, FOR UPDATE, or WITH is
attached to the VALUES part of INSERT ... VALUES
* Make the OFF keyword unreserved
This prevents problems with using off as a variable name in
PL/pgSQL. That worked before 9.0, but was now broken because
PL/pgSQL now treats all core reserved words as reserved.
* Fix constant-folding of COALESCE() expressions
9.0 includes more major features than any release before it, including:
* Hot standby
* Streaming replication
* In-place upgrades
* 64-bit Windows builds
* Easy mass permissions management
* Anonymous blocks and named parameter calls for stored procedures
* New windowing functions and ordered aggregates
... and many more. For details on the over 200 additions and improvements in
this version, developed by over a hundred contributors, please see the release
notes.