http://developer.postgresql.org/beta-history.txt 의 내용입니다. 7.5가 8.0으로 버전 넘버링이 바뀌었답니다. 이건 히스토리 문서인데 앞으로 릴리즈까지 계속 바뀔수도 있습니다.
Release date: 2004-??-??, current as of 2004-08-06
Major changes in this release:
Win32 Native Server
This is the first PostgreSQL release to natively run on
Microsoft Windows as a server. It can run as a Windows service.
This release supports NT-based Windows releases like NT4,
Win2k, XP, Win2003. Older releases like Windows 95, 98, and ME
are not supported because these operating systems do not have
the infrastructure to support PostgreSQL. A separate installer
project has been created to ease installation on Windows:
Previous releases required the Unix emulation toolkit Cygwin
for Win32 server support. PostgreSQL has always supported
clients on Win32.
Savepoints Improve Transaction Control
Savepoints allow specific parts of a transaction to be aborted
without affecting the remainder of the transaction. Prior
releases had no such capability; there was no way to recover
from a statement failure within a transaction except by
aborting the whole transaction. This feature is valuable for
application writers who require error recovery within a complex
Point-In-Time Recovery Increases Reliability
Though PostgreSQL is very reliable, in previous releases there
was no way to recover from disk drive failure except to restore
from a previous backup or use a standby replication server.
Point-in-time recovery allows continuous backup of the server.
You can recover either to the point of failure or to some
transaction in the past.
Tablespaces Simplify Disk Layout
Tablespaces allow administrators to select the file systems
used for storage of databases, schemas, tables, or indexes.
This improves performance and control over disk space usage.
Prior releases used initlocation and manual symlink management
for such tasks.
Improved Buffer Management, CHECKPOINT, VACUUM
This release has a more intelligent buffer replacement
strategy, which will make better use of available shared
buffers and improve performance. The performance impact of
vacuum and checkpoints is also lessened.
Change Column Types
A column's data type can now be changed with ALTER TABLE.
New Perl Server-Side Language
A new version of the plperl server-side language now supports a
persistent shared storage area, triggers, returning records and
arrays of records, and SPI calls to access the database.
COPY Handles Comma-Separated-Value Files
COPY can now read and write comma-separated-value (CSV) files.
It has the flexibility to interpret non-standard quoting and
separation characters too.
Migration to version 8.0
A dump/restore using pg_dump is required for those wishing to migrate
data from any previous release.
Observe the following incompatibilities:
* Server configuration parameters virtual_host and tcpip_socket have
been replaced with a more general parameter listen_addresses.
Also, the server now listens on localhost by default, which
eliminates the need for the -i postmaster switch in many
* Server configuration parameters SortMem and VacuumMem have been
renamed to work_mem and maintenance_work_mem to better reflect
their use. The original names are still supported in SET and SHOW.
* Server configuration parameters log_pid, log_timestamp, and
log_source_port have been removed now that a more flexible
log_line_prefix has been added.
* Server configuration parameter syslog has been removed and
replaced with a more logical log_destination variable to control
the log output destination.
* Server configuration parameter log_statement has been changed so
it can selectively log just database modification or data
* Server configuration parameter max_expr_depth parameter has been
replaced with max_stack_depth which measures the physical stack
size rather than the expression nesting depth. This helps prevent
session termination due to stack overflow caused by recursive
* The length() function no longer counts trailing spaces in CHAR(n)
* Casting an integer to BIT(N) selects the rightmost N bits of the
integer, not the leftmost N bits as before.
* UPDATE-ing an element or slice of a NULL array value now produces
a non-NULL array result, namely an array containing just the
* The server now warns of empty strings passed to oid/float4/float8
data types. In the next major release, doing this will generate an
* The extract() function (also called date_part) now returns the
proper year for BC dates. It previously returned one less than the
current year. The function now also returns the proper values for
millennium and century.
* psql's \copy command now reads or writes the query stdin/stdout,
rather than psql's stdin/stdout. The previous behavior can be
accessed via new pstdin/pstdout parameters.
* The JDBC client interface has been removed from the core
distribution, and is now hosted at http://jdbc.postgresql.org. The
TCL client interface has also been removed. There are several TCL
interfaces now hosted at http://gborg.postgresql.org.
* The server now uses its own time zone database, rather than the
one supplied by the operating system. This will provide consistent
behavior across all platforms. In most cases, there should be
little noticeable difference in time zone behavior, except that
the time zone names used by SET/SHOW TimeZone may be different
from what your platform provides.
* EXECUTE now returns a completion tag that matches the executed
* configure's threading option no longer requires users to run tests
or edit configuration files; threading options are now detected
* Now that tablespaces have been implemented, initlocation has been
* Syntax checking of array input processing has been tighened up
considerably. Junk that was previously allowed in odd places with
odd results now causes an ERROR. Also changed behavior with
respect to whitespace surrounding array elements; trailing
whitespace is now ignored as well as leading whitespace (which has
always been ignored).
Below you will find a detailed account of the changes between release
8.0 and the previous major release.
* Support cross-data-type index usage (Tom)
Before this change, many queries would not use an index if the
data types did not match exactly. This improvement makes index
usage more intuitive and consistent.
* New buffer replacement strategy that improves caching (Jan)
Prior releases used a least-recently-used (LRU) cache to keep
recently referenced pages in memory. The LRU algorithm did not
consider the number of times a specific cache entry was accessed,
so large table scans could force out useful cache pages. The new
cache algorithm uses four separate lists to track most recently
used and most frequently used cache pages and dynamically optimize
their replacement based on the work load. This should lead to much
more efficient use of the shared buffer cache. Administrators who
have tested shared buffer sizes in the past should retest with
this new cache replacement policy.
* Add subprocess to write dirty buffers periodically to reduce
checkpoint writes (Jan)
In previous releases, the checkpoint process, which runs every few
minutes, would write all dirty buffers to the operating system's
buffer cache then flush all dirty operating system buffers to
disk. This often resulted in a periodic spike in disk usage that
hurt performance. The new code uses a background writer to trickle
disk writes at a steady pace so checkpoints have far fewer dirty
pages to write to disk. Also, the new code does not issue a global
sync() call, but instead fsync()s just the files written since the
last checkpoint. This should improve performance and minimize
degradation during checkpoints.
* Add ability to prolong vacuum to reduce performance impact (Jan)
On busy systems, VACUUM performs many I/O requests which can hurt
performance for other users. This release allows you to slow down
VACUUM to reduce its impact on other users, though this increases
the total duration of VACUUM.
* Improve btree index performance for duplicate keys (Dmitry Tkach,
This improves the way indexes are scanned when many duplicate
values exist in the index.
* Improved index usage with OR clauses (Tom)
This allows the optimizer to use indexes in statements with many
OR clauses that would not have been indexed in the past. It can
also use multi-column indexes where the first column is specified
and the second column is part of an OR clause.
* Improve matching of partial index clauses (Tom)
The server is now smarter about using partial indexes in queries
involving complex WHERE clauses.
* Improve performance of the GEQO optimizer (Tom)
The GEQO optimizer is used to plan queries involving many tables
(by default, twelve or more). This release speeds up the way
queries are analyzed to decrease time spent in optimization.
* Miscellaneous optimizer improvements
There is not room here to list all the minor improvements made,
but numerous special cases work better than in prior releases.
* Improve lookup speed for C functions (Tom)
This release uses a hash table to lookup information for
dynamically loaded C functions. This improves their speed so they
perform nearly as quickly as functions that are built into the
* Add type-specific ANALYZE statistics capability (Mark Cave-Ayland)
This feature allows more flexibility in generating statistics for
non-standard data types.
* Allow collection of ANALYZE statistics for expression indexes
Expression indexes (also called functional indexes) allow users to
index not just columns but the results of expressions and function
calls. With this release, the optimizer can gather and use
statistics about the contents of expression indexes. This will
greatly improve the quality of planning for queries in which an
expression index is relevant.
* New two-stage sampling method for ANALYZE (Manfred Koizar)
This gives better statistics for asymmetric data distributions.
* Speed up TRUNCATE (Tom)
This buys back some of the performance loss observed in 7.4, while
still keeping TRUNCATE transaction-safe.
* Add WAL file archiving and point-in-time recovery (Simon Riggs)
* Add tablespaces so admins can control disk layout (Gavin)
* Add a built-in log rotation program (Andreas Pflug)
It is now possible to log server messages conveniently without
relying on either syslog or an external log rotation program.
* Add new read-only server configuration parameters to query server
compile-time settings: block_size, integer_datetimes,
max_function_args, max_identifier_length, max_index_keys (Joe)
* Make quoting of "sameuser", "samegroup", and "all" remove special
meaning of these terms in pg_hba.conf (Andrew)
* Use clearer IPv6 name ::1/128 for localhost in default pg_hba.conf
* Rename server configuration parameters SortMem and VacuumMem to
work_mem and maintenance_work_mem (Old names still supported)
This change was made to clarify that bulk operations such as index
and foreign key creation use maintenance_work_mem, while work_mem
is for workspaces used during query execution.
* Allow logging of session disconnections using server configuration
* Add new server configuration parameter log_line_prefix to allow
control of information emitted in each log line (Andrew)
Available information includes user name, database name, remote IP
address, and session start time.
* Remove server configuration parameters log_pid, log_timestamp,
log_source_port; functionality superseded by log_line_prefix
* Replace the virtual_host and tcpip_socket parameters with a
unified listen_addresses parameter (Andrew, Tom)
* Listen on localhost by default, which eliminates the need for the
-i postmaster switch in many scenarios (Andrew)
Listening on localhost (127.0.0.1) opens no new security holes but
allows configurations like Win32 and JDBC, which do not support
local sockets, to work without special adjustments.
* Remove syslog server configuration parameter, and add more logical
log_destination variable to control log output location (Magnus)
* Change server configuration parameter log_statement to take values
all, mod, ddl, or none to select which queries are logged (Bruce)
This allows administrators to log only data definition changes or
only data modification statements.
* Allow configuration files to be placed outside the data directory
By default, configuration files sit in the top server directory.
With this addition, configuration files can be placed outside the
data directory, easing administration.
* Plan prepared queries only when first executed so constants can be
used for statistics (Oliver Jowett)
Prepared statements plan queries once and execute them many times.
While prepared queries avoid the overhead of re-planning on each
use, the quality of the plan suffers from not knowing the exact
parameters to be used in the query. In this release, planning of
unnamed prepared statements is delayed until the first execution,
and the actual parameter values of that execution are used as
* Allow DECLARE CURSOR to take parameters (Oliver Jowett)
It is now useful to issue DECLARE CURSOR in a Parse message with
parameters. The parameter values sent at Bind time will be
substituted into the execution of the cursor's query.
* Fix hash joins and aggregates of INET and CIDR data types (Tom)
Release 7.4 handled hashing of mixed INET and CIDR values
incorrectly. (This bug did not exist in prior releases because
they wouldn't try to hash either datatype.)
* Add savepoints (nested transactions) (Alvaro)
* Unsupported isolation levels are now accepted and promoted to the
nearest supported level (Peter)
The SQL specification states that if a database doesn't support a
specific isolation level, it should use the next more restrictive
level. This change complies with that recommendation.
* Allow BEGIN WORK to specify transaction isolation levels like
START TRANSACTION (Bruce)
* Fix table permission checking for cases in which rules generate a
query type different from the originally submitted query (Tom)
* Implement dollar quoting to simplify single-quote usage (Andrew,
Tom, David Fetter)
In previous releases, because single quotes had to be used to
quote a function's body, the use of single quotes inside the
function text required use of two single quotes or other
error-prone notations. With this release we add the ability to use
"dollar quoting" to quote a block of text. The ability to use
different quoting delimiters at different nesting levels greatly
simplifies the task of quoting correctly, especially in complex
functions. Dollar quoting can be used anywhere quoted text is
* Make CASE val WHEN compval1 THEN ... evaluate val only once (Tom)
CASE no longer evaluates the test expression multiple times. This
has benefits when the expression is complex or is volatile.
* Test HAVING before computing target list of an aggregate query
Fixes improper failure of cases such as SELECT SUM(win)/SUM(lose)
... GROUP BY ... HAVING SUM(lose) > 0. This should work but
formerly could fail with divide-by-zero.
* Replace max_expr_depth parameter with max_stack_depth parameter,
measured in kilobytes of stack size (Tom)
This gives us a fairly bulletproof defense against crashing due to
runaway recursive functions. Instead of measuring the depth of
expression nesting, we now directly measure the size of the
* Allow arbitrary row expressions (Tom)
This release allows SQL expressions to contain arbitrary composite
types, that is, row values. It also allows functions to more
easily take rows as arguments and return row values.
* Allow LIKE/ILIKE to be used as the operator in row and subselect
comparisons (Fabien Coelho)
* Avoid locale-specific case conversion of basic ASCII letters in
identifiers and keywords (Tom)
This solves the "Turkish problem" with mangling of words
containing I and i. Folding of characters outside the 7-bit-ASCII
set is still locale-aware.
* Improve syntax error reporting (Fabien, Tom)
Syntax error reports are more useful than before.
* Change EXECUTE to return a completion tag matching the executed
statement (Kris Jurka)
Previous releases return an EXECUTE tag for any EXECUTE call. In
this release, the tag returned will reflect the command executed.
* Avoid emitting NATURAL CROSS JOIN in rule listings (Tom)
Such a clause makes no logical sense, but in some cases the rule
decompiler formerly produced this syntax.
Object Manipulation Changes
* Add COMMENT ON casts, conversions, languages, operator classes,
and large objects (Christopher)
* Add new server configuration parameter default_with_oids to
control whether tables are created with OIDs by default (Neil)
This allows administrators to default all CREATE TABLE commands to
create tables without OID columns.
* Add WITH / WITHOUT OIDS clause to CREATE TABLE AS (Neil)
* Allow ALTER TABLE DROP COLUMN to drop an OID column (ALTER TABLE
SET WITHOUT OIDS still works) (Tom)
* Allow composite types as table columns (Tom)
* Allow ALTER ... ADD COLUMN with defaults and NOT NULL constraints;
works per SQL spec (Rod)
It is now possible for ADD COLUMN to create a column that is not
initially filled with NULLs, but with a specified default value.
* Add ALTER COLUMN TYPE to change column's type (Rod)
It is now possible to alter a column's datatype without dropping
and re-adding the column.
* Allow multiple ALTER actions in a single ALTER TABLE command (Rod)
This is particularly useful for ALTER commands that rewrite the
table (which include ALTER COLUMN TYPE and ADD COLUMN with a
default). By grouping ALTER commands together, the table need be
rewritten only once.
* Allow ALTER TABLE to add SERIAL columns (Tom)
This is related to the new capability of adding defaults for new
* Allow changing the owners of aggregates, conversions, databases,
functions, operators, operator classes, schemas, types, and
tablespaces (Christopher, Euler Taveira de Oliveira)
Previously this required modifying the system tables directly.
* Allow temporary object creation to be limited to SECURITY DEFINER
functions (Sean Chittenden)
* Add ALTER TABLE ... SET WITHOUT CLUSTER (Christopher)
Prior to this release, there was no way to clear an auto-cluster
specification except to modify the system tables.
* Constraint/Index/SERIAL names are now table_column_type with
numbers appended to guarantee uniqueness within the schema (Tom)
The SQL specification states that such names should be unique
within a schema.
* Add pg_get_serial_sequence() to return a serial column's sequence
This allows automated scripts to reliabily find the serial
* Warn when primary/foreign key datatype mismatch requires costly
Utility Command Changes
* Allow CREATE SCHEMA to create triggers, indexes, and sequences
* Add ALSO keyword to CREATE RULE (Fabien Coelho)
This allows ALSO to be added to rule creation to contrast it with
* Add NOWAIT option to LOCK command (Tatsuo)
This allows the LOCK command to fail if it would have to wait for
the requested lock.
* Allow COPY to read and write comma-separated-value (CSV) files
* Generate error if the COPY delimiter and NULL string conflict
* GRANT/REVOKE behavior follows the SQL spec more closely
* Avoid locking conflict between CREATE INDEX and CHECKPOINT (Tom)
In 7.3 and 7.4, a long-running btree index build could block
concurrent CHECKPOINTs from completing, thereby causing WAL bloat
because the WAL log could not be recycled.
* Database-wide ANALYZE does not hold locks across tables (Tom)
This reduces the potential for deadlocks against other backends
that want exclusive locks on tables. To get the benefit of this
change, do not execute database-wide ANALYZE inside a transaction
block (BEGIN block); it must be able to commit and start a new
transaction for each table.
* Erase MD5 user passwords when a user is renamed (Bruce)
PostgreSQL uses the user name as salt when encrypting passwords
via MD5. When a user name is changed, their salt no longer matches
the stored MD5 password, so the stored password becomes useless.
In this release a notice is generated and the password is cleared.
A new password must then be assigned.
* New pg_ctl kill option for Win32 (Andrew)
Win32 does not have a kill command to send signals to backends so
this capability was added to pg_ctl.
* Information schema improvements
* Add --pwfile option to initdb so the initial password can be set
by GUI tools (Magnus)
* Detect locale/encoding mismatch in initdb (Peter)
Data Type and Function Changes
* More complete support for composite types (row types) (Tom)
Composite values can be used in many places where only scalar
values worked before.
* Reject non-rectangular array literals as erroneous (Joe)
Formerly, array_in would silently build a surprising result.
* Syntax checking of array input processing considerably tighened up
Junk that was previously allowed in odd places with odd results
now causes an ERROR.
* Array element trailing whitespace is now ignored (Joe)
Formerly leading whitespace was ignored, but trailing whitespace
between an element and the delimiter or right brace was
significant. Now trailing whitespace is also ignored.
* Emit array literals with explicit array bounds when lower bound is
not one (Joe)
* Accept YYYY-monthname-DD as a date string (Tom)
* Make netmask() and hostmask() functions return maximum-length
* Change factorial function to return NUMERIC (Gavin)
Returning NUMERIC allows the factorial function to work for a
wider range of input values.
* to_char/to_date date conversion improvements (Kurt Roeckx)
* Make length() disregard trailing spaces in CHAR(n) (Gavin)
This change was made to improve consistency: trailing spaces are
semantically insignificant in CHAR(n) data, so they should not be
counted by length().
* Warn of empty string being passed to oid/float4/float8 data types
8.1 will throw an error instead.
* Allow int2/int4/int8/float4/float8 input routines to have leading
or trailing whitespace (Neil)
* Better support for IEEE Infinity and NaN values in float4, float8
These should now work on all platforms that support IEEE-compliant
floating point arithmetic.
* Add "week" to date_trunc options (Robert Creager)
* Fix to_char for 1 BC (previously it returned 1 AD) (Bruce)
* Fix to_char(year) for BC dates (previously it returned one less
than the correct year) (Bruce)
* Fix date_part() to return the proper millennium and century
In previous versions, the century and millennium results had a
wrong number and started in the wrong year, as compared to
standard reckoning of such things.
* Add ceiling() as an alias for ceil(), and power() as an alias for
pow() for standards compliance (Neil)
* Change ln(), log(), power(), and sqrt() to emit the correct
SQLSTATE error codes for certain error conditions, as specified by
* Add width_bucket() function as defined by SQL2003 (Neil)
* Add generate_series() functions to simplify working with numeric
* Fix upper/lower/initcap functions to work with multibyte encodings
* Add boolean and bitwise integer AND/OR aggregates (Fabien Coelho)
* New session information functions to return network addresses for
client and server (Sean Chittenden)
* Add function to determine the area of a closed path (Sean
* Add function to send cancel request to other backends (Magnus)
* Add interval plus datetime operators (Tom)
The reverse ordering, datetime plus interval, was already
supported, but both are required by the SQL standard.
* Casting an integer to BIT(N) selects the rightmost N bits of the
In prior releases, the leftmost N bits were selected, but this was
deemed unhelpful, not to mention inconsistent with casting from
bit to int.
Server-Side Language Changes
* Allow function parameters to be declared with names (Dennis
This allows better documentation of functions. Whether the names
actually do anything depends on the specific function language
* Allow plpgsql parameter names to be referenced in the function
This basically creates an automatic alias for each named
* Do minimal syntax checking of plpgsql functions at creation time
This allows us to catch simple syntax errors sooner.
* More support for composite types (row and record variables) in
For example, it now works to pass a rowtype variable to another
function as a single variable.
* Default values for plpgsql variables can now reference previously
* Improve parsing of plpgsql FOR loops (Tom)
Parsing is now driven by presence of ".." rather than datatype of
FOR variable. This makes no difference for correct functions, but
should result in more understandable error messages when a mistake
* New plperl server-side language (Command Prompt, Andrew Dunstan)
* Improve psql information display about database objects
* Allow psql to display group membership in \du and \dg (Markus
* Prevent psql \dn from showing temporary schemas (Bruce)
* Allow psql to handle tilde user expansion for file names (Zach
* Allow psql to display fancy prompts, including color, via readline
(Reece Hart, Chet Ramey)
* Make psql \copy match COPY command syntax fully (Tom)
* Show the location of syntax errors (Fabien Coelho, Tom)
* Add CLUSTER information to psql \d display (Bruce)
* Change psql \copy stdin/stdout to read from command input/output
* Add pstdin/pstdout to read from psql's stdin/stdout (Mark Feit)
* Add global psql config file, psqlrc.sample (Bruce)
This allows a central file where global psql startup commands can
* Have psql \d+ indicate if the table has an OID column (Neil)
* On Windows, use binary mode in psql when reading files so
control-Z is not seen as end-of-file
* Have \dn+ show permissions and description for schemas (Dennis
* Use dependency information to improve the reliability of pg_dump
* Have pg_dump output objects in alphabetical order if possible
This should make it easier to identify changes between dump files.
* Allow pg_restore to ignore some SQL errors (Fabien Coelho)
This makes pg_restore's behavior similar to the results of feeding
a pg_dump output script to psql. In most cases, ignoring errors
and plowing ahead is the most useful thing to do.
* New start/stop of dump markers in pg_dump (Bruce)
* Add start/stop times for pg_dump/pg_dumpall in verbose mode
* Allow most pg_dump options in pg_dumpall (Christopher)
* Have pg_dump use ALTER OWNER rather than SET SESSION AUTHORIZATION
by default (Christopher)
* Make libpq SIGPIPE thread-safe (Bruce)
* Add PQmbdsplen() which returns the "display length" of a character
* Add thread locking to SSL and Kerberos connections (Manfred
* Allow PQoidValue(), PQcmdTuples(), and PQoidStatus() to work on
EXECUTE commands (Neil)
Source Code Changes
* Allow the database server to run natively on Win32 (Claudio,
* Shell script commands converted to C versions for Win32 support
* Create an extension makefile framework (Fabien Coelho, Peter)
This simplifies the task of building extensions outside the
original source tree.
* Support relocatable installations (Bruce)
Directory paths for installed files (such as the /share directory)
are now computed relative to the actual location of the
executables, so that an installation tree can be moved to another
place without reconfiguring and rebuilding.
* Use --with-docdir to choose installation location of
documentation; also allow --infodir (Peter)
* Add --without-docdir to prevent installation of documentation
* Upgrade to DocBook V4.2 SGML (Peter)
* New "PostgreSQL" CVS tag (Marc)
This was done to make it easier for organizations to manage their
own copies of the PostgreSQL CVS repository. File version stamps
from the master repository will not get munged by checking into or
out of a copied repository.
* Clarify locking code (Manfred Koizar)
* Buffer manager cleanup (Neil)
* Decouple platform tests from cpu spinlock code (Bruce, Tom)
* Add inlined test-and-set code on PA-RISC for gcc (ViSolve, Tom)
* Improve i386 spinlock code (Manfred Spraul)
* Clean up spinlock assembly code to avoid warnings from newer gcc
* Remove JDBC from source tree; now a separate project
* Remove the libpgtcl client interface; now a separate project
* More accurately estimate memory and file descriptor usage (Tom)
* Improvements to the MAC OS-X startup scripts (Ray A.)
* New fsync test program (Bruce)
* Major documentation improvements (Neil, Peter)
* Remove pg_encoding; not needed anymore
* Remove pg_id; not needed anymore
* Remove initlocation; not needed anymore
* Auto detect thread flags (no more manual testing) (Bruce)
* Use Olson's public domain timezone library (Magnus)
* With threading enabled, use thread flags on Unixware for backend
executables too (Bruce)
Unixware can not mix threaded and non-threaded object files in the
same executable, so everything must be compiled as threaded.
* psql now uses a flex-generated lexical analyzer to process command
* New linked list data structure implementation (Neil)
This improves performance by allowing list append operations to be
* Allow dynamically loaded modules to create their own server
configuration parameters (Thomas Hallgren)
* New Brazilian version of FAQ (Euler Taveira de Oliveira)
* Add French FAQ (Guillaume Lelarge)
* New pgevent for Win32 logging
* Make libpq and ecpg build as proper shared libraries on OS X (Tom)
* Many ecpg fixes, including SET DESCRIPTOR (Michael)
* Overhaul of /contrib/dblink (Joe)
* /contrib/dbmirror improvements
* New /contrib/xml2 (John Gray, Torchbox)
* Update /contrib/mysql
* New version of /contrib/btree_gist (Teodor)
* New /contrib/trgm, trigram matching for PostgreSQL (Teodor)
* Many /contrib/tsearch2 improvements (Teodor)
* Add double metaphone to /contrib/fuzzystrmatch (Andrew)