Release 9.0Release date2010-??-??Overview
Based on overwhelming user demand, this release of
PostgreSQL> adds features that have been requested
for years, like easy-to-use replication, a mass permission
facility, and anonymous blocks. While past major releases have
been quite conservative in their scope, this release shows a
bold new desire to provide facilities that every new and existing
user of PostgreSQL> will embrace. This has all
been done with few incompatibilities. The major areas of
enhancement are:
Built-in, binary, log-based replication. This advance consists of two features:
Hot Standby allows continuous archive standby database servers to accept read-only
queries, and Streaming Replication allows continuous archive (WAL>) files
to be streamed over a network port to a standby database server.
Easier database object permissions management. GRANT>/REVOKE
IN SCHEMA> supports mass permissions changes, and
the ALTER
DEFAULT PRIVILEGES> command controls privileges
of all newly-created objects. Large object permissions now
support GRANT>/REVOKE> as well.
Broadly enhanced stored procedure support.
The DO> statement permits
ad-hoc or anonymous code blocks. Functions can now be called using named
parameters. PL/pgSQL is now installed by default, and PL/Perl and PL/Python
have been enhanced in several ways, including support for Python3.
Triggers now support two new features,
SQL-compliant per-column triggers, and
conditional trigger execution.
Deferrable
unique constraints, now permit mass updates to unique keys.
Exclusion constraints let database designers define uniqueness
based on complex criteria, including for non-scalar data such
as time periods, ranges and arrays.
The LISTEN>/NOTIFY>
feature has been overhauled to make it into
a high-performance event queuing system. It now stores
events in a memory-based queue, and it now allows delivery
of a string payload to listeners with each event.
As part of our decade-long effort to eliminate the pain of VACUUM,
VACUUM FULL> is now substantially faster by
rewriting the entire table and
indexes, rather than moving around single rows to compact space.
Add support for compiling on 64-bit
Windows> and running in 64-bit
mode.
Add /contrib/pg_upgrade>
to support in-place upgrades from 8.3 or 8.4 to 9.0.
The above items are explained in more detail in the sections below.
Migration to Version 9.0CURRENT AS OF 2010-06-03
A dump/restore using pg_dump
or use of pg_upgrade is required
for those wishing to migrate data from any previous
release.
Version 9.0 contains a number of changes which selectively break backwards compatibility
in order to support new features and code quality improvements. Particularly, users
who make extensive use of PL/pgSQL and/or PITR and Warm Standby should test their
solutions for breakage. Observe the following incompatibilities:
Server Settings
Remove server variable add_missing_from>, which was
defaulted to off for many years (Tom Lane)
Remove server variable regex_flavor>, which
was defaulted to advanced>
(e.g. Perl-regex compatible) for many years. (Tom Lane)
It is now necessary to set wal_level> to
archive> to do continuous archiving.
(Heikki Linnakangas)
Queries
When querying a parent table,
do not do additional permission checks on child tables
returned as part of the query (Peter Eisentraut)
The SQL standard specifies this behavior.
Have fractional seconds conversion truncate rather than
round when using float-based dates/times (Tom Lane)
String Handling
Improve standards compliance of SIMILAR TO>
patterns and SQL-style substring()> patterns (Tom Lane)
This includes treating ?> and {...}> as
pattern metacharacters, while they were simple literal characters
before; that corresponds to new features added in SQL:2008.
Also, ^> and $> are now treated as simple
literal characters; formerly they were treated as metacharacters,
as if the pattern were following POSIX rather than SQL rules.
Also, in SQL-standard substring()>, use of parentheses
for nesting no longer interferes with capturing of a substring.
Also, processing of bracket expressions (character classes) is
now more standards-compliant.
Reject negative length values in 3-parameter substring()>
for bit strings, per the SQL standard (Tom Lane)
Object Renaming
Tighten enforcement of column renaming when a child table inherits
the renamed column from an unrelated parent (KaiGai Kohei)
No longer rename index names and index column names when table
columns are renamed (Tom Lane)
Administrators still can rename such columns manually. This change
will require an update of the JDBC driver and possibly other drivers
so that unique indexes are correctly recognized.
No longer change function input variable names via
REPLACE FUNCTION(Pavel Stehule).
In order to support names parameter calls, it is
no longer possible to change the aliases for input variables
in the function declaration in place. You now have to DROP
and recreate the function.
PL/pgSQL Variables
Have PL/pgSQL throw an error if a variable name conflicts with a
column name used in a query (Tom Lane)
This behavior can be changed via the server variable plpgsql.variable_conflict>,
or by the per-function option #variable_conflict>.
The former behavior was to bind to variable names over
column names, but not consistently. Stored procedures
with naming conflicts will probably need to be refactored.
Remove PL/pgSQL's RENAME> declaration option (Tom Lane)
Instead, use ALIAS>,
which can now alias any variable, not just dollar sign
variables, e.g. $1>.
PL/pgSQL no longer allows unquoted variables names that match SQL
reserved words (Tom Lane)
Variables can be double-quoted to avoid this restriction.
Other Incompatibilities
Remove support for platforms that don't have a working 64-bit
integer data types (Tom Lane)
It is believed all supported platforms have working 64-bit integer
data types.
Changes
Version 9.0 has an unprecedented number of new major features,
and over 200 enhancements, improvements, new commands,
new functions, and other changes.
ServerContinuous Archiving and Binary Replication
PostgreSQL's native standby capability has been expanded both to
support read-only queries on standby slaves and to greatly reduce
the lag between master and standby servers. For many users, this
will be a useful and low-administration form of replication, either
for high availability or for horizontal scalability.
Allow continuous archive standby systems to accept read-only queries
(Simon Riggs, Heikki Linnakangas)
This feature is called Hot Standby. There are new
postgresql.conf> and recovery.conf>
settings to enable this feature, as well as extensive
documentation.
Allow continuous archive (WAL>) files to be streamed to a
standby system (Fujii Masao, Heikki Linnakangas)
This feature is called Streaming Replication.
Previously WAL> files could be sent to standby systems only
as 16 megabytes files; this allows master changes to be sent to the
standby with very little delay. There are new postgresql.conf>
and recovery.conf> settings to enable this
feature, as well as extensive documentation.
Add pg_last_xlog_receive_location()>
and pg_last_xlog_replay_location()>, which
can be used to monitor standby server WAL>
activity (Simon Riggs, Fujii Masao, Heikki Linnakangas)
Performance
Version 9.0 also contains several performance and optimizer enhancements to
improve specific uses of PostgreSQL and remedy certain poor-performing cases.
Improve performance of finding inherited child tables (Tom Lane)
Allow per-tablespace sequential and random page cost variables
(seq_page_cost>/random_page_cost>) via
ALTER TABLESPACE
... SET/RESET> (Robert Haas)
Improve performance of TRUNCATE> when
used in the same transaction as table creation (Tom Lane)
Optimizer
Remove unnecessary outer
joins (Robert Haas)
Outer joins where the inner side is unique and not referenced in
the query are unnecessary and are therefore now removed. This will
accelerate many automatically generated queries, such as those created
by object-relational mappers.
Allow IS NOT NULL> restrictions to use indexes (Tom Lane)
This is particularly useful for finding
MAX()>/MIN()> values in indexes that also
contain NULLs.
Improve optimizer equivalence detection of <> boolean>
tests (Tom Lane)
GEQO
Use the same random seed everytime GEQO plans a query (Andres
Freund)
While the Genetic Query Optimizer (GEQO) still selects
random plans, it now selects the same random plans for
identical queries. You can modify geqo_seed to randomize
the starting value of the random plan generator.
This gives GEQO query response times and resource usage
repeatability and predictability.
Improve GEQO plan selection (Tom Lane).
This avoids the rare error, "failed to make a valid plan".
Optimizer Statistics
Improve ANALYZE>
to support inheritance-tree statistics (Tom Lane)
This is particularly useful for partitioned tables.
Improve autovacuum
detection of when re-analyze is necessary (Tom Lane)
Improve optimizer statistics for greater/less-than comparisons
(Tom Lane)
When looking up optimizer statistics for greater/less-than comparisons,
if the comparison value is in the first or last histogram bucket,
use an index to generate the actual statistics. This is particularly
useful for columns that are always increasing, and hence often have
inaccurate statistics.
Allow setting of distinct statistics using ALTER TABLE>
(Robert Haas)
This allows user-override of the number or percentage of distinct
values for a column and optionally its child tables. This value
is normally computed by ANALYZE>. Database administrators
can use this feature to fix some poor statistics, especially on
tables with millions or billions of rows.
Authentication
Version 9.0 further extends PostgreSQL's support for multiple
authentication methods, including RADIUS and improved LDAP support.
Add support for RADIUS> (Remote
Authentication Dial In User Service) authentication
(Magnus Hagander)
Allow LDAP>
(Lightweight Directory Access Protocol) authentication
to operate in "search/bind" mode (Robert Fleming, Magnus)
This allows the user to be looked up first, then the system uses
the DN> (Distinguished Name) returned for that user.
Add samehost>
and samenet> designations to
pg_hba.conf> (Stef Walter)
These match the server's IP> address and network address
respectively.
Pass trusted SSL root certificate names to the client so the client
can return an appropriate client certificate (Craig Ringer)
Monitoring
With increased use of PostgreSQL in high-end production systems,
users need increased monitoring. PostgresSQL 9.0 continues to add
more ways to monitor PostgreSQL applications.
Add the ability for clients to set an application
name, which is displayed in
pg_stat_activity> (Dave Page)
This allows DBAs to characterize database traffic
and troubleshoot problems by source application.
Add an SQL state option (%e>) to log_line_prefix>
(Guillaume Smet)
This allows users to compile statistics on errors and messages
by type.
Write to the Windows event log in UTF16> encoding
(Itagaki Takahiro)
Now there is true multi-lingual support for PostgreSQL log messages
on Windows.
Statistics Counters
Add pg_stat_reset_shared('bgwriter')>
to reset the cluster-wide shared statistics of the
bgwriter (Greg Smith)
Add pg_stat_reset_single_table_counters()>
and pg_stat_reset_single_function_counters()>
to allow the reseting of statistics counters for individual
tables and indexes (Magnus Hagander)
Server Settings
Allow setting of configuration variables based on database/role
combinations (Alvaro Herrera)
Previously only per-database and per-role setting were possible,
not combinations. All role and database settings are now stored
in the new pg_db_role_setting> system table. A new
psql> \drds> command shows these settings.
Backwards-compatible system views do not show this information.
The primary use of this feature is setting schema
search_path.
Add boolean variable bonjour>, which
controls whether a Bonjour-enabled binary advertises
itself via Bonjour> (Tom Lane)
The default is off, meaning it does not advertise.
Add boolean variable enable_material>, which
controls the use of materialize nodes in the optimizer
(Robert Haas)
The default is on.
Log changed parameter values when postgresql.conf> is
reloaded (Peter Eisentraut)
This lets DBAs and security staff to audit when database settings
were changed.
Add proper permissions for custom variables (Tom Lane)
Custom variables can now only be created by super-users,
but can be modified by ordinary users if variable
permissions allow it. This makes custom variables
appropriate for security settings. Previously, any user
could create or modify custom variables.
Queries
Do SELECT
FOR UPDATE>/SHARE> processing after
applying LIMIT>, so the number of rows returned
is always predictable (Tom Lane)
Previously, concurrent transactions could potentially cause
SELECT> to return fewer rows than specified by
LIMIT>. FOR UPDATE> can still affect
ORDER BY> ordering, but this can be corrected by using
FOR UPDATE> in a subquery.
Allow mixing of traditional and SQL-standard LIMIT>/OFFSET>
syntax in the same query (Tom Lane)
Increase the supported frame options in window functions (Hitoshi
Harada)
This allows frames (RANGE> or ROWS>) to start
with CURRENT ROW>, and to use the ROWS n
PRECEDING>/FOLLOWING> clause.
Have SELECT> and CREATE TABLE AS> return
row counts to the client
(Boszormenyi Zoltan)
For drivers which support this feature, this saves an entire
round-trip to the client, allowing result counts and pagination
to be calculated without a second COUNT query.
psql> does not display these counts.
Unicode Strings
Add Unicode surrogate pair (dual 16-bit) support to
U&>
strings and identifiers (Peter Eisentraut)
Allow Unicode escapes in E'...'>
strings (Marko Kreen)
Object Manipulation
Speed up CREATE
DATABASE> by deferring flushes to disk (Andres
Freund, Greg Stark)
Allow comments on
columns only of tables, views, and composite types, not other
objects like indexes and TOAST> tables (Tom Lane)
Allow the creation of enumerate types with
no labels (Bruce Momjian)
This is useful for supporting binary upgrades.
Have columns defined with storage type MAIN> remain on
the main heap page unless it cannot fit (Kevin Grittner)
Previously MAIN> values were forced to TOAST>
tables until the row size was one-quarter of the page size.
ALTER>
Add ALTER
DEFAULT PRIVILEGES> command to control privileges
of all newly-created objects (Petr Jelinek)
This greatly simplifies the assignment of object priveleges in
a complex database application. Defaults currently support tables
views, sequences, and functions. Defaults may be assigned on a
per-schema basis or database-wide.
Implement IF EXISTS> for DROP COLUMN> and
DROP CONSTRAINT > (Andres Freund)
Allow ALTER TABLE> commands which rewrite tables to skip
WAL> logging (Itagaki Takahiro)
Such operations either complete fully or are rolled back, so
WAL> archiving can be skipped, unless running in continuous
archiving mode. This reduces I/O overhead and improves performance.
CREATE TABLE>
Add support for copying COMMENTS> and STORAGE>
to the CREATE TABLE ... LIKE INCLUDING> command (Itagaki
Takahiro)
Add support for copying all attributes to the CREATE
TABLE LIKE INCLUDING> command (Itagaki Takahiro)
Add the SQL-standard CREATE TABLE ... OF type> command
(Peter Eisentraut)
This allows the creation of a table to match an existing composite
type. Additional constraints and defaults can be specified in the
command.
Constraints
Add deferrable
unique constraints (Dean Rasheed)
This allows UPDATE tab SET col = col + 1> to work on
columns that have a unique indexes or are marked as primary keys,
but DEFERRABLE INITIALLY DEFERRED> must be used to mark
the constraint as deferred.
Generalize uniqueness constraints by allowing arbitrary operator
comparisons, not just equality (Jeff Davis)
This is enabled with the CREATE
TABLE CONSTRAINT ... EXCLUDE> clause. While
uniqueness checks could be specified using this syntax,
the real value of this feature is in using complex
operators that do not have built-in constraints.
The primary use of exclusion constraints is to allow defining
non-overlapping uniqueness, such as for time periods, arrays
or ranges of values. This supports data integrity at the
table level for calendaring, time-management, and scientific
applications.
Improve the constraint violation error message to report the values
causing the failure (Itagaki Takahiro)
For example, a uniqueness constraint violation now reports Key
(x)=(2) already exists>.
Object Permissions
Add the ability to make mass permission changes per
schema using the new GRANT>/REVOKE
IN SCHEMA> clause (Petr Jelinek)
This simplifies the assignment of object permissions
and makes it easier to utilize database roles for application
data security.
Add the ability to control large object permissions with
GRANT>/REVOKE> (KaiGai Kohei)
Utility Operations
Have LISTEN>/NOTIFY> store events
in a memory queue, rather than a system table (Joachim
Wieland)
LISTEN/NOTIFY may now be used as a full-featured, high-performance
event queue system for PostgreSQL, with transactional support
and guaranteed delivery.
Allow NOTIFY>
to pass an optional string to listeners (Joachim Wieland)
Allow CLUSTER>
on all system tables (Tom Lane)
Global system tables still cannot be clustered.
COPY>
Allow *> as a parameter in FORCE QUOTE> for
COPY CSV> (Itagaki Takahiro)
This forces quotes for all CSV> output columns.
Add new COPY> syntax that allows parameters to be
specified in parentheses (Robert Haas, Emmanuel Cecchet)
This allows greater flexibility for future COPY> options.
The old syntax is still supported.
EXPLAIN>
Allow EXPLAIN> output in XML>, JSON>,
and YAML> formats (Robert Haas, Greg Sabino Mullane)
The new output formats will support the development of new tools
for analysis of EXPLAIN output.
Add new EXPLAIN (BUFFERS)> to report query buffer
activity (Itagaki Takahiro)
This allows better query profiling for individual queries.
log_*_stats log output, e.g. log_statement_stats,
no longer shows this information.
Add hash usage information to EXPLAIN> output (Robert
Haas)
Allow EXPLAIN> options to be specified inside parentheses
(Robert Haas)
This allows for the expansion of EXPLAIN> options. The
old syntax is still supported.
VACUUM>
Change VACUUM FULL> to rewrite the entire table and
indexes, rather than moving around single rows to compact space
(Itagaki Takahiro, Tom Lane)
The previous method was usually slower and caused index bloat.
Note that the new method may use more disk space during VACUUM
FULL.
Add new VACUUM> syntax that allows parameters to be
specified in parentheses (Itagaki Takahiro)
This allows greater flexibility for future VACUUM>
options. The old syntax is still supported.
Indexes
Allow an index to be auto-named by not supplying an index name to
CREATE INDEX> (Tom Lane)
Allow REINDEX>
on system indexes (Tom Lane)
WAS THIS POSSIBLE ON ANY SYSTEM TABLE BEFORE? NON-HARDWIRED ONES?
Add point_ops> opclass for GiST (Teodor Sigaev)
This feature supports GiST indexing of point operations on polygons,
circles, and other points, such as "point is in polygon". Previously
indexing only worked for bounding boxes. This should make many
PostGIS queries faster.
Use red-black trees for GIN> index creation
(Teodor Sigaev)
Red-black trees are self-balanced. This means much faster
GIN index creation.
Data Types
Allow hex values to be specified in bytea> strings
(Peter Eisentraut)
The variable bytea_output controls
if hex (default) or octal escapes are used for bytea>
output. (SWITCH DEFAULT FOR BETA? PETER) Libpq's
PQescapeByteaConn()> now uses the hex format
for PostgreSQL> 9.0 servers.
The new hex format will be directly compatible with more applications
which use binary data, allowing them to store and retrieve
it without conversion.
Allow extra_float_digits
to be increased to 3> (Tom Lane)
The previous maximum extra_float_digits> was 2>.
Full Text Search
Add prefix support for the full text search synonym dictionary
(Teodor Sigaev)
Add full text search filtering dictionaries (Teodor Sigaev)
Filtering dictionaries allow tokens to be modified and passed to
subsequent dictionaries.
Allow underscores in full text email addresses (Teodor Sigaev)
Use more standards-compliant rules for URL>
parsing (Tom Lane)
Functions
Allow case-insensitive regular expression
matching with UTF-8> server encodings.
Previously, only ASCII> characters and single-byte
encodings worked properly. Other multi-byte, non-UTF-8>
encodings are still broken for case-insensitive regular expression
matching.
Allow function calls to supply parameter names and match them to named
parameters in the function definition (Pavel Stehule)
For example, if a function is defined to take parameters a>
and b>, it can be called with func(a := 7, b
:= 12)> or func(b := 12, a := 7)>.
Add support for to_char()>
scientific notation output ('EEEE'>)
(Pavel Stehule, Brendan Jurd)
Have to_char()> honor 'FM'>
(fill mode) in 'Y'>, 'YY'>, and
'YYY'> specifications (Bruce Momjian, Tom Lane)
It was already honored by 'YYYY'>.
Fix to_char()> to output the proper localized
numeric and monetary characters on Windows>
(Hiroshi Inoue, Itagaki Takahir, Bruce Momjian)
Correct calculations of "overlap"
and "contains" operations over polygons (Teodor Sigaev)
Aggregates
Allow aggregate functions to use ORDER BY> (Andrew
Gierth)
For example, this is now supported, array_agg(a ORDER BY
b)>. This is useful for aggregates where the order of values is
significant, and eliminates the need to have a subquery for
the ordering.
Add the string_agg()>
aggregate function which aggregates values into a single
string (Pavel Stehule)
An optional second argument allows specification of a delimiter.
Aggregate functions that are called with DISTINCT> are
now passed NULL values if the aggregate transition function is
not marked as STRICT> (Andrew Gierth)
For example, agg(DISTINCT x)> might pass NULL x>
values to agg()>.
Bit Strings
Add get_bit()>
and set_bit()> functions for bit>
strings, mirroring those for bytea> (Leonardo
F)
Implement OVERLAY()>
(replace) for bit> strings and bytea>
(Leonardo F)
Object Information Functions
Add pg_table_size()>
and pg_indexes_size()> to provide a more
user-friendly interface to the pg_relation_size()>
function (Bernd Helmle)
Add has_sequence_privilege()>
for sequence permission checking (Abhijit Menon-Sen)
Have information
schema properly display date type octet lengths
(Peter Eisentraut)
The reported length is now the maximum octet length; previously,
a huge value was reported.
Speed up information schema privilege views (Joachim Wieland)
Function and Trigger Creation
Implement anonymous functions using the DO> statement (Petr
Jelinek, Joshua Tolley, Hannu Valtonen)
This allows execution of server-side code without the need to create
a new function and execute it.
Allow SQL-compliant per-column triggers
(Itagaki Takahiro)
Such triggers are fired only if the specified columns are affected
by the query, e.g. in UPDATE>'s SET> list.
information_schema now also shows this information.
Add WHEN> clause to CREATE TRIGGER>
to allow control over whether a trigger is fired (Takahiro
Itagaki)
While a check can be performed inside the trigger, doing it in an
external WHEN> clause has performance benefits.
Server-Side Languages
Add the OR REPLACE> clause to CREATE LANGUAGE>
(Tom Lane)
This is helpful to optionally install a language if it does not
already exist, and is particularly helpful now that PL/pgSQL is
installed by default.
PL/PgSQL Server-Side
Language
Install server-side language PL/pgSQL by default (Bruce Momjian)
Allow PL/pgSQL to handle row types with dropped columns (Pavel Stehule)
Allow IN> parameters to be assigned values within
PL/pgSQL functions (Steve Prentice)
Improve error location reporting in PL/pgSQL (Tom Lane)
Have PL/pgSQL use the main lexer, rather than a custom version (Tom Lane)
PL/pgSQL Cursors
Add count and ALL> options to MOVE
FORWARD>/BACKWARD> in PL/pgSQL (Pavel Stehule)
Allow PL/pgSQL's WHERE CURRENT OF> to use a cursor
variable (Tom Lane)
Add PL/pgSQL's OPEN cursor FOR EXECUTE> to use parameters
(Pavel Stehule, Itagaki Takahiro)
This is accomplished with a new USING> clause.
PL/Perl Server-Side Language
Add new PL/Perl functions: quote_literal()>,
quote_nullable()>, quote_ident()>,
encode_bytea()>, decode_bytea()>,
looks_like_number()>,
encode_array_literal()>,
encode_array_constructor()> (Tim Bunce)
Add server variable plperl.on_init to
specify a PL/Perl Perl initialization function (Tim
Bunce)
plperl.on_plperl_init
and plperl.on_plperlu_init> are also available
for trusted/untrusted-specific initialization.
Improve error context support in PL/Perl (Alexey Klyukin)
Support END> blocks in PL/Perl (Tim Bunce)
END> blocks do not currently allow database access.
Allow use strict> in PL/Perl (Tim Bunce)
This can be enabled with the server variable plperl.use_strict.
Allow require> in PL/Perl (Tim Bunce)
This basically tests to see if the module is loaded, and if not,
generates an error.
Allow use feature> in PL/Perl if Perl version 5.10 or
later is used (Tim Bunce)
Verify that PL/Perl return values are valid in the server encoding
(Andrew Dunstan)
Improve PL/Perl code structure (Tim Bunce)
PL/Python Server-Side Language
Add Unicode support in PL/Python (Peter Eisentraut)
Strings are automatically converted from/to the server encoding as
necessary.
Improve bytea> support in PL/Python (Caleb Welton)
Bytea> values passed into PL/Python now are represented as
binary, rather than the Postgres bytea> text format. Null
bytes are now also output properly from PL/Python. Boolean>
and numeric> value passing in PL/Python was also improved.
Add array parameter/return
support to PL/Python (Peter Eisentraut)
Improve mapping of domains to Python base types in PL/Python (Peter Eisentraut)
Add Python> 3 support to PL/Python (Peter Eisentraut)
The new server-side language is called plpython3u>.
Improve error location and exception reporting in PL/Python (Peter Eisentraut)
Client Applications
Add vacuumdb>
psql>
Properly escape psql> variables and
identifiers (Pavel Stehule, Robert Haas)
For example, :'var'> will be escaped as a literal string, and
:"var"> will be escaped as an SQL identifier.
Ignore leading UTF-8-encoded Unicode byte-order marker in
psql> (Itagaki Takahiro)
This is enabled when the client encoding is UTF-8>.
Fix psql --file -> to properly honor
Prevent overwriting of psql>'s command-line history
if two psql> sessions are run simultaneously (Tom Lane)
Improve psql>'s tab completion support (Itagaki
Takahiro)
psql> Display
Allow psql> to use fancy Unicode line-drawing
characters via \pset linestyle unicode> (Roger Leigh)
Improve display of wrapped columns in psql> (Roger
Leigh)
The previous format is available by using \pset linestyle
old-ascii>.
psql> \d>
Commands
Have \d> show child tables that inherit from the specified
parent (Damien Clochard)
\d> shows only the number of child tables, while
\d+> shows the names of all child tables.
Show definition of indexes in \d index_name> (Khee Chin)
The definition is useful for expression indexes.
In psql>, show the view definition only with \d+>,
not with \d> (Peter Eisentraut)
pg_dump>
Have pg_dump>/pg_restore>
Fix pg_dump> to properly dump large objects if
standard_conforming_strings is enabled (Tom Lane)
Large objects dumps now use hex format for output. (SWITCH DEFAULT
FOR BETA? TOM)
Allow pg_dump> to dump comments attached to columns
of composite types (Taro Minowa (Higepon))
Have pg_dump>
These were already present in custom output mode.
pg_ctl>
Allow pg_ctl> to be safely used to start the
postmaster> at boot-time (Tom Lane)
Previously the pg_ctl> process could have been mistakenly
identified as a running postmaster> based on a stale
postmaster> lock file.
Give pg_ctl> the ability to initialize the database
(like initdb>) (Zdenek Kotala)
Development Tools>libpq>
Add new libpq> functions
PQconnectdbParams()>
and PQconnectStartParams()> (Guillaume
Lelarge)
These functions are similar to PQconnectdb()> and
PQconnectStart()> except they allow a null-terminated
array of connection options, rather than requiring all options to
be sent in a single string.
Add libpq> functions PQescapeLiteral()>
and PQescapeIdentifier()> (Robert Haas)
These functions return appropriately quoted and escaped literal
strings and identifiers. The caller is not required to pre-allocate
the string result, as is required by PQescapeStringConn()>.
Add checking for a per-user service file (.pg_service.conf>),
which is checked before the site-wide service file
(Peter Eisentraut)
The file .pg_service.conf> is assumed to be in the
user's home directory.
Properly report an error if the specified libpq> service
cannot be found (Peter Eisentraut)
Issue a warning if the .pgpass>-retrieved
password fails (Bruce Momjian)
Load SSL certificate chain (Tom Lane)
This improves handling of indirectly-signed SSL client
certificates.
ecpg>
Add SQLDA>
(SQL Descriptor Area) support to ecpg>
(Boszormenyi Zoltan)
Add the DESCRIBE>
[OUTPUT>] statement to ecpg>
(Boszormenyi Zoltan)
Add an ecpg> function to return the
current transaction status (Bernd Helmle)
Add the string> data type in ecpg>
Informix-compatibility mode (Zoltan Boszormenyi)
Allow ecpg> to use new> and old>
variable names without restriction (Michael Meskes)
Allow ecpg> to use variable names in
free()>(Michael Meskes)
Have ecpg> return zero for non-SQL3 data types
(Michael Meskes))
Previously it returned the negative of the data type oid>.
Support long long> types on platforms that already have 64-bit
long>s (Michael Meskes))
ecpg> Cursors
Add ecpg> out-of-scope cursor support in native mode
(Boszormenyi Zoltan)
This allows DECLARE> to use variables that are not in
scope when OPEN> is called. This facility already existed
in ecpg> Informix-compatibility mode.
Allow dynamic ecpg> cursor names (Boszormenyi Zoltan)
Allow ecpg> to use noise words FROM> and
IN> in FETCH> and MOVE> (Zoltan
Boszormenyi)
Build Options
Enable client thread safety by default (Bruce Momjian)
Thread-safe builds can be disabled with configure>
Add a compile-time option to allow the Linux out-of-memory killer
to kill backends (Alex Hunsaker, Tom Lane)
Now that /proc/self/oom_adj> allows disabling
of the Linux> out-of-memory (OOM>)
killer for the postmaster and its children, the new
compile-time option -DLINUX_OOM_ADJ=0>
allows the killer to be enabled for postmaster>
children. pg_config> shows if this flag
was used during compilation.
Use DocBook> XSL> stylesheets for man page
building (Peter Eisentraut)
Makefiles
New Makefile> targets world>,
install-world>, and installcheck-world>
(Andrew Dunstan)
These are similar to the existing all>, install>,
and installcheck> targets, but they build HTML>
documentation, build and test /contrib>, and test
server-side languages and ecpg>.
Add data and documentation location control to PGXS> Makefiles
(Mark Cave-Ayland)
Restructure the HTML> documentation build
Makefile> rules (Peter Eisentraut)
New Requirements
Require Autoconf> 2.63 for building from source (Peter Eisentraut)
Require Flex> 2.5.31 or later to build from source
(Tom Lane)
Require Perl> version 5.8 or greater to build the server
from a CVS> copy (John Naylor, Andrew)
Windows
Add support for compiling on 64-bit
Windows> and running in 64-bit
mode (Tsutomu Yamada, Magnus)
This allows for large shared memory sizes on Windows>.
Allow server builds using Visual Studio
2008> (Magnus Hagander)
Allow multi-processor compilation using Microsoft Visual
C> (Magnus Hagander)
Source Code
Distribute documentation in a proper directory tree, rather than
as tar archive files inside the main distribution tarball (Peter Eisentraut)
For example, the HTML> documentation is now in
doc/src/sgml/html>; the manual pages are packaged
similarly.
Enable the server lexer to be reentrant (Tom Lane)
This was needed for use of the lexer by PL/pgSQL.
Improve speed of memory allocation (Tom Lane, Greg Stark)
Add system columns to better document the use of indexes for constraint
enforcement (Tom Lane)
Allow multiple actions to be communicated using the same operating
system signal (Fujii Masao)
This allows improved backend communication as new features are
added.
Improve source code test coverage, including /contrib, PL/Python,
and PL/Perl (Peter Eisentraut, Andrew Dustan)
Remove the use of flat files for system table bootstrapping
(Tom Lane, Alvaro Herrera)
This also improves performance when using millions of users and
databases.
Improve the ability to translate psql> strings
(Peter Eisentraut)
Reduce the length of some file names so file paths are less than
100 characters (Tom Lane)
Some decompression programs have problems with long file names.
Tighten input requirements for int2> vector input (Caleb
Welton)
Add a new ERRCODE_INVALID_PASSWORD>
SQLSTATE> error code (Bruce Momjian)
Properly remove the few remaining personal source code copyright
entries (Bruce Momjian)
The personal copyright notices were insignificant but the community
occasionally had to answer questions about them.
Feature Support
Use a more modern API> for Bonjour> (Tom Lane)
Bonjour now requires OS X> 10.3 or later.
Add processor test-and-test lock support for the SuperH>
architecture (Nobuhiro Iwamatsu)
Allow non-GCC> compilers to use inline functions if
they support them (Kurt Harriman)
Remove support for platforms that don't have a working 64-bit
integer data types (Tom Lane)
It is believed all supported platforms have working 64-bit integer
data types.
Server Programming
Simplify use of C++> functions in backend code (Kurt
Harriman, Peter Eisentraut)
While this removes keyword conflicts that previously made
C++> usage difficult in backend code, there are
still other complexities when using C++> for backend
functions. extern "C" { }> is still necessary in
appropriate places.
Add AggCheckCallContext()>
for use in detecting if a C> function is
being called as an aggregate (Hitoshi Harada)
Require fastgetattr()> and heap_getattr()>
backend macros to use a non-NULL fourth argument (Robert Haas)
KEEP?
Server Hooks
Add parser hooks to access column and parameter references in
queries (Tom Lane)
Add a hook so loadable modules can control utility commands (Itagaki
Takahiro)
Allow the calling of parser hooks from SPI> and cached
plans (Tom Lane)
Binary Upgrade Support
Add /contrib/pg_upgrade>
to support in-place upgrades (Bruce)
This avoids the requirement of dumping/reloading the database when
upgrading to a new major release of PostgreSQL and speeds up offline
upgrades by orders of magnitude. It supports upgrades to 9.0
from PostgreSQL 8.3 and 8.4.
Add support for preservation of all relfilenodes>,
for use during binary upgrades (Bruce Momjian)
Add support for binary upgrades to preserve pg_type>
and pg_enum> oids> (Bruce Momjian)
This is needed to allow binary upgrades of user-defined composite
types, arrays, and enums (enumerated types).
Move tablespace data directories into their own
PostgreSQL> version-specific subdirectory (Bruce Momjian)
This simplifies binary upgrades.
Contrib
Add multi-threaded option (
This allows multiple CPU>s to be used for pgbench tests.
Add \shell> and \setshell> meta
commands to /contrib/pgbench>
(Michael Paquier)
New features for /contrib/dict_xsyn>
(Sergey Karpov)
The new options are matchorig>, matchsynonyms>,
and keepsynonyms>.
Add full text dictionary /contrib/unaccent>
(Teodor Sigaev)
This filter dictionary removes accents from tokens, and
makes full-text searches over multiple languages much
easier.
Add dblink_get_notify()>
to /contrib/dblink> (Marcus Kempe)
This allows async notifications in dblink>.
Greatly increase /contrib/hstore>'s
length limit and add btree and hash abilities so GROUP
BY> and DISTINCT> operations are possible
(Andrew Gierth)
New functions and operators were also added. These improvements
make HStore a full-functional key-value store embedded in PostgreSQL.
Add /contrib/passwordcheck>
which can check the strength of assigned passwords (Laurenz
Albe)
The source code of this module should be modified to implement
site-specific password policies.
Add query text to /contrib/auto_explain>
output (Andrew Dunstan)
Add buffer access counters to /contrib/pg_stat_statements>
(Itagaki Takahiro)
Update /contrib/start-scripts/linux>
to use /proc/self/oom_adj> to disable the
Linux>
out-of-memory (OOM>) killer (Alex
Hunsaker, Tom Lane)