Commit 0a04109d authored by Tom Lane's avatar Tom Lane

Second pass at 8.3 release notes: put items in a bit more logical order

where possible, add overview and incompatibilities lists, minor cleanups.
The SGML-ification still leaves much to be desired.
parent a522db7d
<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.510 2007/10/03 22:06:13 neilc Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.511 2007/10/03 23:02:16 tgl Exp $ -->
<!-- <!--
Typical markup: Typical markup:
...@@ -41,20 +41,201 @@ do it for earlier branch release files. ...@@ -41,20 +41,201 @@ do it for earlier branch release files.
<note> <note>
<title>Release date</title> <title>Release date</title>
<simpara>2007-??-??</simpara> <simpara>2007-??-??</simpara>
<para>CURRENT AS OF 2007-10-03</>
</note> </note>
<sect2> <sect2>
<title>Overview</title> <title>Overview</title>
<para> <para>
This release adds many functionality and performance improvements that This release adds many improvements that
were requested by users, including: were requested by users, including:
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
... to be filled in ... Full text search is now a built-in feature
</para>
</listitem>
<listitem>
<para>
XML data type
</para>
</listitem>
<listitem>
<para>
enum data types
</para>
</listitem>
<listitem>
<para>
UUID data type
</para>
</listitem>
<listitem>
<para>
Arrays of composite types
</para>
</listitem>
<listitem>
<para>
ORDER BY ... NULLS FIRST/LAST
</para>
</listitem>
<listitem>
<para>
UPDATE/DELETE WHERE CURRENT OF cursor_name
</para>
</listitem>
<listitem>
<para>
Per-function parameter settings
</para>
</listitem>
<listitem>
<para>
User-defined types can now have type modifiers (parameters)
</para>
<para>
Declarations such as varchar(42) are no longer restricted to use
by built-in data types.
</para>
</listitem>
<listitem>
<para>
Automatic plan invalidation when table definitions change
</para>
<para>
This will particularly ease usage of temporary tables in
PL/PgSQL functions.
</para>
</listitem>
<listitem>
<para>
Numerous improvements in logging and statistics collection
capabilities, including the ability to emit postmaster log messages
in CSV format that can be directly loaded into a database table
for analysis
</para>
</listitem>
<listitem>
<para>
SSPI/GSSAPI authentication support
</para>
</listitem>
<listitem>
<para>
Multiple autovacuum worker processes, and other autovacuum improvements
</para>
<para>
Autovacuum is now considered mature enough to be enabled by default.
</para>
</listitem>
<listitem>
<para>
The entire PostgreSQL system can now be built with Microsoft Visual C++
</para>
<para>
This will improve the ability of Windows-based developers to
contribute to the project. Windows executables made with Visual C++
may also have better stability and performance than those made with
other tool sets.
</para>
</listitem>
</itemizedlist>
Major performance improvements in this release include:
<itemizedlist>
<listitem>
<para>
Asynchronous commit option to allow transactions to be reported
committed before they have actually been flushed to disk
</para>
<para>
This would not, of course, be acceptable if the client takes some
critical external action on the assumption that the transaction
will be remembered; but for many applications, it is an acceptable
risk for some or all transactions to use this mode. Unlike existing
options such as fsync, asynchronous commit does not risk database
corruption; the worst case is that after a crash, the last few
reportedly-committed transactions will not have taken effect.
</para>
</listitem>
<listitem>
<para>
"Distributed" checkpoints to spread out the I/O load of a checkpoint
</para>
</listitem>
<listitem>
<para>
Heap-Only Tuples (HOT) to reduce overhead of updates
</para>
</listitem>
<listitem>
<para>
Just-in-time background writer strategy to improve disk write
efficiency
</para>
</listitem>
<listitem>
<para>
Reduction of on-disk data size through reducing both per-tuple
and per-field overheads
</para>
</listitem>
<listitem>
<para>
Efficiency improvements for large sequential scans, including
prevention of cache flushing and "piggybacking" to let concurrent
scans read the table only once
</para>
</listitem>
<listitem>
<para>
Top-N sorting
</para>
</listitem>
<listitem>
<para>
Lazy XID assignment to reduce the cost of read-only transactions
</para>
<para>
For applications in which there are a large number of read-only
transactions, this helps not only by reducing overhead for the
transactions themselves, but by reducing overhead that's driven
by the rate of XID consumption; notably, reducing contention for
transaction log buffers and reducing the frequency of
anti-wraparound vacuuming.
</para> </para>
</listitem> </listitem>
...@@ -81,7 +262,173 @@ do it for earlier branch release files. ...@@ -81,7 +262,173 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
... to be filled in ... <filename>contrib/tsearch2</> features have been absorbed into
the core, with some syntax changes
</para>
<para>
XXX we need to provide a migration guide, at the very least
</para>
</listitem>
<listitem>
<para>
Casts to text that formerly occurred implicitly may now need to be
written explicitly
</para>
<para>
Data types other than <type>char</> and <type>varchar</> are no
longer implicitly castable to <type>text</>, except in the limited
case of a <literal>||</> (concatenation) operator whose other
input is textual. While this will require explicit casts in a
few queries that didn't need them before, the elimination of
surprising interpretations justifies it.
</para>
</listitem>
<listitem>
<para>
Numerous changes in administrator-only configuration parameters
</para>
<para>
<varname>bgwriter_lru_percent</>,
<varname>bgwriter_all_percent</>,
<varname>bgwriter_all_maxpages</>,
<varname>stats_start_collector</>, and
<varname>stats_reset_on_server_start</> are removed.
<varname>redirect_stderr</> is renamed to
<varname>logging_collector</>.
<varname>stats_command_string</> is renamed to
<varname>track_activities</>.
<varname>stats_block_level</> and <varname>stats_row_level</>
are merged into <varname>track_counts</>.
<varname>archive_command</> changed meaning slightly: you must now set
<varname>archive_mode</> to <literal>on</> as well to enable archiving.
The default autovacuum-related settings changed.
</para>
</listitem>
<listitem>
<para>
Commenting out a parameter in <filename>postgresql.conf</> now
causes it to revert to its default value
</para>
</listitem>
<listitem>
<para>
ARRAY(SELECT ...) now returns an empty array, rather than a NULL,
when the sub-select returns zero rows
</para>
</listitem>
<listitem>
<para>
<literal>ORDER BY ... USING</> <replaceable>operator</>
will now be rejected if the <replaceable>operator</> is not a
less-than or greater-than member of some btree opclass
</para>
<para>
This prevents less-than-sane behavior that formerly ensued
if an operator that doesn't
actually define a proper sort ordering was specified.
</para>
</listitem>
<listitem>
<para>
The array type associated with a type named "foo" is not necessarily
named "_foo" anymore
</para>
<para>
The old naming convention is still honored when possible, but
client code should migrate away from depending on it.
</para>
</listitem>
<listitem>
<para>
By default, non-superuser database owners can now instantiate trusted
procedural languages in their databases
</para>
<para>
While this is reasonably safe, some administrators may wish to
revoke the privilege.
</para>
</listitem>
<listitem>
<para>
SET LOCAL's effects now persist until the end of the
current top transaction, unless rolled back
</para>
<para>
In 8.0 through 8.2, SET LOCAL's
effects disappeared at subtransaction commit, leading to behavior
that made little sense at the SQL level (one would not normally
expect <command>RELEASE</> to do such a thing).
</para>
</listitem>
<listitem>
<para>
Commands that are disallowed in transaction blocks are now disallowed
in multiple-statement query strings, too
</para>
<para>
For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected
even if submitted as a single Query message. This was always quite
unsafe, but the PreventTransactionChain test failed to detect it.
</para>
</listitem>
<listitem>
<para>
Additional checks for invalidly-encoded multibyte strings
</para>
<para>
Some cases that might formerly have allowed invalid data to enter
the database will now be rejected. In particular, the chr()
function changed behavior.
</para>
</listitem>
<listitem>
<para>
convert() family of functions changed behavior
</para>
<para>
Strings that are not in the database's native encoding are now
represented as type bytea rather than type text.
</para>
</listitem>
<listitem>
<para>
Minor security restrictions added to database-size inquiry functions
and some contrib functions
</para>
</listitem>
<listitem>
<para>
C code that manipulates variable-length datums will need changes
</para>
<para>
The new SET_VARSIZE() macro *must* be used to set the length word
of a generated datum. Also, it
may be necessary to "detoast" input varlena datums in cases where
no toasting could have happened before.
</para> </para>
</listitem> </listitem>
...@@ -123,9 +470,10 @@ do it for earlier branch release files. ...@@ -123,9 +470,10 @@ do it for earlier branch release files.
<para> <para>
The I/O needed for a checkpoint is now spread over a fairly long The I/O needed for a checkpoint is now spread over a fairly long
period of time, rather than being spat out in a burst. This happens period of time, rather than being spat out in a burst. (This happens
only for background checkpoints carried out by the bgwriter; other only for background checkpoints carried out by the bgwriter; other
cases, such as a shutdown checkpoint, are still done at full speed. cases, such as a shutdown checkpoint, are still done at full speed.)
This reduces the impact of checkpoints on query processing.
</para> </para>
</listitem> </listitem>
...@@ -146,6 +494,48 @@ do it for earlier branch release files. ...@@ -146,6 +494,48 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Just-in-time background writing strategy (Greg Smith, Itagaki
Takahiro)
</para>
<para>
This patch avoids re-scanning buffers that cannot possibly need to
be cleaned, and estimates how many buffers it should try to clean
based on moving averages of recent allocation requests and density
of reusable buffers.
</para>
</listitem>
<listitem>
<para>
Support varlena fields with single-byte headers and unaligned
storage (Greg Stark)
</para>
<para>
This significantly reduces the on-disk size of short
character-string fields.
</para>
</listitem>
<listitem>
<para>
Combine cmin and cmax fields of HeapTupleHeaders into a single field
(Heikki)
</para>
<para>
We do this by keeping private state in each backend that has
inserted and deleted the same tuple during its current top-level
transaction. This is sufficient since there is no need to be able
to determine the cmin/cmax from any other transaction. This gets us
back down to 23-byte tuple headers, removing a space penalty paid in
8.0 to support subtransactions.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Lazy XID allocation (Florian Pflug) Lazy XID allocation (Florian Pflug)
...@@ -176,82 +566,126 @@ do it for earlier branch release files. ...@@ -176,82 +566,126 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Just-in-time background writing strategy (Greg Smith, Itagaki Improve interlocking between checkpoint start and transaction commit
Takahiro) (Heikki)
</para> </para>
<para> <para>
This patch avoids re-scanning buffers that cannot possibly need to The new method both speeds up commit (less for it to do) and
be cleaned, and estimates how many buffers it should try to clean prevents the problem of checkpoint being delayed indefinitely when
based on moving averages of recent allocation requests and density there's a constant flow of commits.
of reusable buffers.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support varlena fields with single-byte headers and unaligned Create a dedicated "wal writer" process to offload WAL-writing work
storage (Greg Stark) from backends (Simon)
</para> </para>
<para> <para>
This significantly reduces the on-disk size of short This process is also responsible for guaranteeing a maximum delay
character-string fields. before asynchronously-committed transactions will be flushed to
disk.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Combine cmin and cmax fields of HeapTupleHeaders into a single field Skip writing WAL in CLUSTER and COPY in cases where it's not needed
(Heikki) (Simon)
</para> </para>
<para> <para>
We do this by keeping private state in each backend that has If WAL archiving is not enabled, it's possible to ensure
inserted and deleted the same tuple during its current top-level transactional safety by fsync'ing the destination table before
transaction. This is sufficient since there is no need to be able commit, rather than emitting WAL records for all inserted tuples.
to determine the cmin/cmax from any other transaction. This gets us
back down to 23-byte tuple headers, removing a space penalty paid in
8.0 to support subtransactions.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Implement "top N" sorting in ORDER BY ... LIMIT queries (Greg Stark) Avoid rewriting pg_control at every WAL segment switch (Simon)
</para> </para>
</listitem>
<listitem>
<para> <para>
We keep a heap of the current best N tuples and sift-up new tuples Reduce WAL output size for page splits in btree indexes (Heikki)
into it as we scan the input. For M input tuples this means only
about M*log(N) comparisons instead of M*log(M), not to mention a lot
less workspace when N is small &mdash; avoiding spill-to-disk for large
M is actually the most attractive thing about it.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Skip writing WAL in CLUSTER and COPY in cases where it's not needed Avoid unnecessary disk reads during WAL recovery (Heikki)
(Simon)
</para> </para>
<para> <para>
If WAL archiving is not enabled, it's possible to ensure Aside from speeding up recovery, this change eliminates a potential
transactional safety by fsync'ing the destination table before data loss risk when restoring a WAL log that was written with
commit, rather than emitting WAL records for all inserted tuples. full_page_writes off.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Avoid rewriting pg_control at every WAL segment switch (Simon) Make large sequential scans and VACUUMs work in a limited-size
"ring" of buffers (Simon, Heikki, Tom)
</para>
<para>
Aside from avoiding cache spoliation, this fixes the problem that
VACUUM formerly tended to cause a WAL flush for every page it
modified, because we had it hacked to use only a single buffer.
Those flushes will now occur only once per ring-ful.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Reduce WAL output size for page splits in btree indexes (Heikki) Synchronize sequential scans (Jeff Davis)
</para>
<para>
Large sequential scans now synchronize with each other, so that when
multiple backends are scanning the same relation concurrently, each
page is (ideally) read only once. Note that a backend joining such
a scan starts in the middle of the relation and "wraps around" to
cover all blocks; this may affect the order in which rows are
returned.
</para>
</listitem>
<listitem>
<para>
Suppress useless searches for unused line pointers in PageAddItem
(Heikki, improving on an idea from Hiroki Kataoka)
</para>
</listitem>
<listitem>
<para>
Put a rate limit on messages sent by backends to the stats collector
(Tom)
</para>
<para>
This reduces the overhead for short transactions by combining
reports for successive short transactions.
</para>
</listitem>
<listitem>
<para>
Implement "top N" sorting in ORDER BY ... LIMIT queries (Greg Stark)
</para>
<para>
We keep a heap of the current best N tuples and sift-up new tuples
into it as we scan the input. For M input tuples this means only
about M*log(N) comparisons instead of M*log(M), not to mention a lot
less workspace when N is small &mdash; avoiding spill-to-disk for large
M is actually the most attractive thing about it.
</para> </para>
</listitem> </listitem>
...@@ -263,148 +697,135 @@ do it for earlier branch release files. ...@@ -263,148 +697,135 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Avoid computing X^2 at each row in avg(bigint) and avg(numeric) Improve performance of mergejoin with a large sort operation as
(Mark Kirkwood) inner input (Greg Stark)
</para> </para>
</listitem>
<listitem>
<para> <para>
Suppress useless searches for unused line pointers in PageAddItem This change uses a Materialize node between the mergejoin and the
(Heikki, improving on an idea from Hiroki Kataoka) sort to prevent the sort from having to "back up", which allows a
more efficient sort. The Materialize node keeps a circular
buffer of only the prior tuples that the mergejoin may actually
need again, so it usually won't need to spill to disk, resulting
in net I/O savings.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve interlocking between checkpoint start and transaction commit Avoid computing X^2 at each row in avg(bigint) and avg(numeric)
(Heikki) (Mark Kirkwood)
</para>
<para>
The new method both speeds up commit (less for it to do) and
prevents the problem of checkpoint being delayed indefinitely when
there's a constant flow of commits.
</para> </para>
</listitem> </listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Server Changes</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Put a rate limit on messages sent by backends to the stats collector Autovacuum is now enabled by default (Alvaro)
(Tom)
</para> </para>
<para> <para>
This reduces the overhead for short transactions by combining Considerable work was done to make autovacuum less intrusive,
reports for successive short transactions. allowing this to become a reasonable default.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Avoid unnecessary disk reads during WAL recovery (Heikki) Support multiple concurrent autovacuum processes (Alvaro, Itagaki
</para> Takahiro)
<para>
Aside from speeding up recovery, this change eliminates a potential
data loss risk when restoring a WAL log that was written with
full_page_writes off.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve performance of mergejoin with a large sort operation as Set the default autovacuum vacuum_cost_delay value to 20ms, and
inner input (Greg Stark) reduce the default autovacuum vacuum and analyze threshold values to
50 tuples (Alvaro)
</para> </para>
</listitem>
<listitem>
<para> <para>
This change uses a Materialize node between the mergejoin and the Make autovacuum report the start time of its current activity in
sort to prevent the sort from having to "back up", which allows a pg_stat_activity (Tom)
more efficient sort.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make large sequential scans and VACUUMs work in a limited-size Make configuration parameters fall back to their default values when
"ring" of buffers (Simon, Heikki, Tom) they are removed from the configuration file (Joachim Wieland)
</para> </para>
<para> <para>
Aside from avoiding cache spoliation, this fixes the problem that This fixes an ancient gotcha that returning a configuration file
VACUUM formerly tended to cause a WAL flush for every page it line to its original commented-out state did not undo the change.
modified, because we had it hacked to use only a single buffer.
Those flushes will now occur only once per ring-ful.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Synchronize sequential scans (Jeff Davis) Invalidate and rebuild cached plans whenever there is a schema
change or statistics update to referenced relations (Tom)
</para> </para>
<para> <para>
Large sequential scans now synchronize with each other, so that when Aside from improving performance (for example, by being able to make
multiple backends are scanning the same relation concurrently, each use of newly-added indexes), this finally fixes the problem
page is (ideally) read only once. Note that a backend joining such that you couldn't drop and recreate a temp table that's used by a
a scan starts in the middle of the relation and "wraps around" to PL/PgSQL function, unless you used EXECUTE for all references to it.
cover all blocks; this may affect the order in which rows are A statement that depends on a temp table will now be replanned
returned. automatically if the temp table has been recreated.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Create a dedicated "wal writer" process to offload WAL-writing work Add support for GSSAPI authentication (Henry Hotz, Magnus)
from backends (Simon)
</para> </para>
</listitem>
<listitem>
<para> <para>
This process is also responsible for guaranteeing a maximum delay Support SSPI authentication on Windows (Magnus)
before asynchronously-committed transactions will be flushed to
disk.
</para> </para>
</listitem> </listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Server Changes</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Autovacuum is now enabled by default (Alvaro) Support a global SSL configuration file (Victor Wagner)
</para> </para>
</listitem>
<listitem>
<para> <para>
Considerable work was done to make autovacuum less intrusive, Add ssl_ciphers parameter to control allowed ciphers (Victor Wagner)
allowing this to become a reasonable default.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support multiple concurrent autovacuum processes (Alvaro, Itagaki Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004, along with new
Takahiro) conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Set the default autovacuum vacuum_cost_delay value to 20ms, and Make JOHAB encoding client-only (Tatsuo)
reduce the default autovacuum vacuum and analyze threshold values to
50 tuples (Alvaro)
</para> </para>
</listitem>
<listitem>
<para> <para>
Make autovacuum report the start time of its current activity in It was found that JOHAB does not meet the assumptions needed to be
pg_stat_activity (Tom) used safely as a server-side encoding.
</para> </para>
</listitem> </listitem>
...@@ -413,10 +834,6 @@ do it for earlier branch release files. ...@@ -413,10 +834,6 @@ do it for earlier branch release files.
Provide for logfiles in machine readable CSV format (Arul Shaji, Provide for logfiles in machine readable CSV format (Arul Shaji,
Greg Smith, Andrew Dunstan) Greg Smith, Andrew Dunstan)
</para> </para>
<para>
In consequence, rename redirect_stderr to logging_collector.
</para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -446,20 +863,6 @@ do it for earlier branch release files. ...@@ -446,20 +863,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Use our own timezone support for formatting timestamps displayed in
the server log (Tom)
</para>
<para>
This avoids Windows-specific problems with localized time zone names
that are in the wrong encoding. There is a new log_timezone
parameter that controls the timezone used in log messages,
separately from the client-visible timezone parameter.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
%s and %c escapes in log_line_prefix can now be used in all %s and %c escapes in log_line_prefix can now be used in all
...@@ -469,25 +872,29 @@ do it for earlier branch release files. ...@@ -469,25 +872,29 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Support a global SSL configuration file (Victor Wagner) Use our own timezone support for formatting timestamps displayed in
the server log (Tom)
</para> </para>
<para> <para>
Add ssl_ciphers parameter to control allowed ciphers (Victor Wagner) This avoids Windows-specific problems with localized time zone names
that are in the wrong encoding. There is a new log_timezone
parameter that controls the timezone used in log messages,
separately from the client-visible timezone parameter.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Invalidate and rebuild cached plans whenever there is a schema Change the timestamps recorded in transaction commit/abort xlog
change or statistics update to referenced relations (Tom) records from time_t to TimestampTz representation (Tom)
</para> </para>
<para> <para>
Aside from improving performance (for example, by being able to make This provides full gettimeofday() resolution for the timestamps,
use of newly-added indexes), this finally fixes the ancient gotcha which might be useful when attempting to do point-in-time recovery
that you can't drop and recreate a temp table that's used by a &mdash; previously it was not possible to specify the stop point with
PL/PgSQL function, unless you use EXECUTE for all references to it. sub-second resolution.
</para> </para>
</listitem> </listitem>
...@@ -524,6 +931,21 @@ do it for earlier branch release files. ...@@ -524,6 +931,21 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Create a temp_tablespaces parameter to allow selection of the
tablespace(s) in which to store temp tables and temporary files
(Jaime Casanova, Albert Cervera, Bernd Helmle)
</para>
<para>
This is a list to allow spreading the load across multiple
tablespaces; a random list element is chosen each time a temp object
is to be created. Temp files are not stored in per-database
pgsql_tmp/ directories anymore, but in per-tablespace directories.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
New system view pg_stat_bgwriter displays statistics about the New system view pg_stat_bgwriter displays statistics about the
...@@ -557,45 +979,36 @@ do it for earlier branch release files. ...@@ -557,45 +979,36 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Add new encoding EUC_JIS_2004 and SHIFT_JIS_2004, along with new Remove stats_start_collector parameter (Tom)
conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
</para>
</listitem>
<listitem>
<para>
Make JOHAB encoding client-only (Tatsuo)
</para> </para>
<para> <para>
It was found that JOHAB does not meet the assumptions needed to be We now always start the collector process, unless prevented by a
used safely as a server-side encoding. problem with setting up the stats UDP socket.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make configuration parameters fall back to their default values when Remove stats_reset_on_server_start parameter (Tom)
they are removed from the configuration file (Joachim Wieland)
</para> </para>
<para> <para>
This fixes an ancient gotcha that returning a configuration file This seemed useless in view of the availability of pg_stat_reset().
line to its original commented-out state did not undo the change.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Change the timestamps recorded in transaction commit/abort xlog Merge stats_block_level and stats_row_level parameters into a single
records from time_t to TimestampTz representation (Tom) parameter track_counts, which controls all reports sent to the
collector process (Tom)
</para> </para>
</listitem>
<listitem>
<para> <para>
This provides full gettimeofday() resolution for the timestamps, Rename stats_command_string parameter to track_activities (Tom)
which might be useful when attempting to do point-in-time recovery
&mdash; previously it was not possible to specify the stop point with
sub-second resolution.
</para> </para>
</listitem> </listitem>
...@@ -614,21 +1027,6 @@ do it for earlier branch release files. ...@@ -614,21 +1027,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Create a temp_tablespaces parameter to allow selection of the
tablespace(s) in which to store temp tables and temporary files
(Jaime Casanova, Albert Cervera, Bernd Helmle)
</para>
<para>
This is a list to allow spreading the load across multiple
tablespaces; a random list element is chosen each time a temp object
is to be created. Temp files are not stored in per-database
pgsql_tmp/ directories anymore, but in per-tablespace directories.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Arrange to put TOAST tables belonging to temporary tables into Arrange to put TOAST tables belonging to temporary tables into
...@@ -642,21 +1040,6 @@ do it for earlier branch release files. ...@@ -642,21 +1040,6 @@ do it for earlier branch release files.
than shared buffers for access. Aside from obvious performance than shared buffers for access. Aside from obvious performance
benefits, this provides a solution to bug #3483, in which other benefits, this provides a solution to bug #3483, in which other
backends unexpectedly held open file references to temporary tables. backends unexpectedly held open file references to temporary tables.
The scheme preserves the property that TOAST tables are not in any
schema that's normally in the search path, so they don't conflict
with user table names.
</para>
</listitem>
<listitem>
<para>
Add support for GSSAPI authentication (Henry Hotz, Magnus)
</para>
</listitem>
<listitem>
<para>
Support SSPI authentication on Windows (Magnus)
</para> </para>
</listitem> </listitem>
...@@ -675,41 +1058,6 @@ do it for earlier branch release files. ...@@ -675,41 +1058,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Remove stats_start_collector parameter (Tom)
</para>
<para>
We now always start the collector process, unless prevented by a
problem with setting up the stats UDP socket.
</para>
</listitem>
<listitem>
<para>
Remove stats_reset_on_server_start parameter (Tom)
</para>
<para>
This seemed useless in view of the availability of pg_stat_reset().
</para>
</listitem>
<listitem>
<para>
Merge stats_block_level and stats_row_level parameters into a single
parameter track_counts, which controls all reports sent to the
collector process (Tom)
</para>
</listitem>
<listitem>
<para>
Rename stats_command_string parameter to track_activities (Tom)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -722,52 +1070,45 @@ do it for earlier branch release files. ...@@ -722,52 +1070,45 @@ do it for earlier branch release files.
<para> <para>
Text search capability is now in core Postgres (Teodor, Oleg) Text search capability is now in core Postgres (Teodor, Oleg)
</para> </para>
<para>
The features previously provided by contrib/tsearch2 have been
improved and moved into the standard server.
</para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support ORDER BY ... NULLS FIRST/LAST, and add ASC/DESC/NULLS Support ORDER BY ... NULLS FIRST/LAST (Teodor, Tom)
FIRST/NULLS LAST per-column options for btree indexes (Tom, Teodor)
</para> </para>
<para> <para>
Note incompatible change from prior behavior: ORDER BY ... USING Users can now control whether nulls sort before or after
will now be rejected if the operator is not a less-than or other values.
greater-than member of some btree opclass. This prevents
less-than-sane behavior if an operator that doesn't actually define
a proper sort ordering is selected.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support UPDATE/DELETE WHERE CURRENT OF cursor_name (Arul Shaji, Tom) Add ASC/DESC and NULLS FIRST/NULLS LAST per-column options for btree
indexes (Teodor, Tom)
</para> </para>
</listitem>
<listitem>
<para> <para>
Allow FOR UPDATE in cursors (Arul Shaji, Tom) This is primarily useful for customizing multicolumn indexes to match
the ordering needed by a specific query.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add support for cross-type hashing (Tom) Support UPDATE/DELETE WHERE CURRENT OF cursor_name (Arul Shaji, Tom)
</para>
<para>
This allows hash joins, hash indexes, hashed subplans, and hash
aggregation to be used in situations involving cross-data-type
comparisons, if the data types have compatible hash functions. That
is currently the case for smallint/integer/bigint, and also for
float4/float8.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make 'col IS NULL' clauses be btree-indexable conditions (Teodor) Allow FOR UPDATE in cursors (Arul Shaji, Tom)
</para> </para>
</listitem> </listitem>
...@@ -780,7 +1121,11 @@ do it for earlier branch release files. ...@@ -780,7 +1121,11 @@ do it for earlier branch release files.
<para> <para>
This change eliminates a lot of surprising interpretations that the This change eliminates a lot of surprising interpretations that the
parser could formerly make in cases when there was no directly parser could formerly make in cases when there was no directly
applicable operator. applicable operator. The <literal>||</> (concatenation) operator
has been generalized so that it will still accept non-textual
inputs, thus preserving the main useful case for implicit text
coercion. In other cases, if you want something to be treated
as text you'll need to say so.
</para> </para>
</listitem> </listitem>
...@@ -808,29 +1153,24 @@ do it for earlier branch release files. ...@@ -808,29 +1153,24 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Fix some issues with user tables and views that are named similarly Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
to system catalogs (Tom)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Remove the undocumented "not in" operator (!!=) (Tom) Add support for cross-type hashing (Tom)
</para> </para>
<para> <para>
This operator was obsoleted long ago by IN (sub-SELECT) queries. This allows hash joins, hash indexes, hashed subplans, and hash
aggregation to be used in situations involving cross-data-type
comparisons, if the data types have compatible hash functions. That
is currently the case for smallint/integer/bigint, and also for
float4/float8.
</para> </para>
</listitem> </listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Planner Changes</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Improve handling of "equivalence classes" of variables that are Improve handling of "equivalence classes" of variables that are
...@@ -846,14 +1186,14 @@ do it for earlier branch release files. ...@@ -846,14 +1186,14 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Fix problems with selectivity estimation for partial indexes (Tom) Improve performance for planning large inheritance trees that are
mostly excluded by constraints (Tom)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve performance for planning large inheritance trees that are Fix problems with selectivity estimation for partial indexes (Tom)
mostly excluded by constraints (Tom)
</para> </para>
</listitem> </listitem>
...@@ -864,6 +1204,23 @@ do it for earlier branch release files. ...@@ -864,6 +1204,23 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Fix some issues with user tables and views that are named similarly
to system catalogs (Tom)
</para>
</listitem>
<listitem>
<para>
Remove the undocumented <literal>!!=</> (not in) operator (Tom)
</para>
<para>
This operator was obsoleted long ago by IN (SELECT ...) queries.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -935,28 +1292,28 @@ do it for earlier branch release files. ...@@ -935,28 +1292,28 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Invent "operator families" to allow improved handling of Support type modifiers for user-defined types (Teodor, Tom)
cross-data-type operators (Tom)
</para> </para>
<para> <para>
This change allows significantly better planning of queries User-defined types can now use parameters, similar to the maximum
involving cross-data-type comparisons. length and precision parameters used by some built-in types. Any
simple constant (numeric or string) or identifier can be used as a
parameter value. A type-specific function must be provided to
validate this information and pack it into a 32-bit "typmod" value
for storage.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support type modifiers for user-defined types (Teodor, Tom) Invent "operator families" to allow improved handling of
cross-data-type operators (Tom)
</para> </para>
<para> <para>
User-defined types can now use parameters, similar to the maximum This change allows significantly better planning of queries
length and precision parameters used by some built-in types. Any involving cross-data-type comparisons.
simple constant (numeric or string) or identifier can be used as a
parameter value. A type-specific function must be provided to
validate this information and pack it into a 32-bit "typmod" value
for storage.
</para> </para>
</listitem> </listitem>
...@@ -992,14 +1349,18 @@ do it for earlier branch release files. ...@@ -992,14 +1349,18 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE, Allow non-superuser database owners to create procedural languages
ALTER ROLE (Tom) (Jeremy Drake)
</para> </para>
<para> <para>
This provides a convenient way of applying a session's current A database owner is now allowed to create a language in his database
parameter setting as the default for future sessions or function if it's marked "tmpldbacreate" in pg_pltemplate. The factory
calls. default is that this is set for all standard trusted languages, but
of course a superuser may adjust the settings. In service of this,
add the long-foreseen owner column to pg_language; renaming,
dropping, and altering owner of a PL now follow normal ownership
rules instead of being superuser-only.
</para> </para>
</listitem> </listitem>
...@@ -1012,7 +1373,7 @@ do it for earlier branch release files. ...@@ -1012,7 +1373,7 @@ do it for earlier branch release files.
</para> </para>
<para> <para>
This is an INCOMPATIBLE CHANGE: in 8.0 through 8.2, SET LOCAL's This is an incompatible change: in 8.0 through 8.2, SET LOCAL's
effects disappeared at subtransaction commit (leading to behavior effects disappeared at subtransaction commit (leading to behavior
that made little sense at the SQL level). that made little sense at the SQL level).
</para> </para>
...@@ -1020,150 +1381,146 @@ do it for earlier branch release files. ...@@ -1020,150 +1381,146 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Add ALTER VIEW ... RENAME TO and ALTER SEQUENCE ... RENAME TO (David Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE,
Fetter, Neil) ALTER ROLE (Tom)
</para> </para>
<para> <para>
While it has long been possible to perform these operations using ALTER This provides a convenient way of applying a session's current
TABLE, users were often surprised that they couldn't say ALTER VIEW parameter setting as the default for future sessions or function
or ALTER SEQUENCE as appropriate. calls.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Implement CREATE TABLE LIKE ... INCLUDING INDEXES (Trevor Implement new commands DISCARD ALL, DISCARD PLANS, DISCARD TEMP,
Hardcastle, Nikhil S, Neil) CLOSE ALL, and DEALLOCATE ALL (Marko Kreen, Neil)
</para>
<para>
These commands simplify resetting a database session to its initial
state, and are particularly handy for connection-pooling software.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Fix EXPLAIN so it can always print the correct referent of an upper Add ALTER VIEW ... RENAME TO and ALTER SEQUENCE ... RENAME TO (David
plan level expression (Tom) Fetter, Neil)
</para> </para>
<para> <para>
This fix banishes the old hack of showing "?columnN?" when things While it has long been possible to perform these operations using ALTER
got too complicated. TABLE, users were often surprised that they couldn't say ALTER VIEW
or ALTER SEQUENCE as appropriate.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make EXPLAIN ANALYZE show which sort method was used by a Sort node Implement CREATE TABLE LIKE ... INCLUDING INDEXES (Trevor
(Tom) Hardcastle, Nikhil S, Neil)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make PreventTransactionChain reject commands submitted as part of a Make CLUSTER MVCC-safe (Heikki Linnakangas)
multi-statement simple-Query message (Tom)
</para> </para>
<para> <para>
For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected Formerly, a CLUSTER command would discard all tuples that were
even if submitted as a single Query message. This is a potential committed dead, even if there were still transactions that should be
incompatibility since some clients expected such strings to work; able to see them under the MVCC snapshot rules.
but it was always unsafe.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow non-superuser database owners to create procedural languages Support syntax "CLUSTER table USING index", which is more logical
(Jeremy Drake) than the old CLUSTER syntax (Holger Schurig)
</para>
<para>
A database owner is now allowed to create a language in his database
if it's marked "tmpldbacreate" in pg_pltemplate. The factory
default is that this is set for all standard trusted languages, but
of course a superuser may adjust the settings. In service of this,
add the long-foreseen owner column to pg_language; renaming,
dropping, and altering owner of a PL now follow normal ownership
rules instead of being superuser-only.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make NOTIFY/LISTEN/UNLISTEN only accept identifiers without a schema Make CLUSTER freeze tuples where possible (Heikki, Alvaro)
qualifier
(Bruce)
</para> </para>
<para> <para>
Formerly, these commands accepted "schema.relation" but then ignored This is nearly free and may avoid the need for a subsequent VACUUM
the schema part, leading to confusion. of the table.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support syntax "CLUSTER table USING index", which is more logical Make CLUSTER and TRUNCATE advance the table's relfrozenxid to
than the old CLUSTER syntax (Holger Schurig) RecentXmin (Alvaro)
</para>
<para>
This may avoid the need for a subsequent VACUUM of the table. The
table-rewriting variants of ALTER TABLE do it too.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make CLUSTER MVCC-safe (Heikki Linnakangas) Fix EXPLAIN so it can always print the correct referent of an upper
plan level expression (Tom)
</para> </para>
<para> <para>
Formerly, a CLUSTER command would discard all tuples that were This fix banishes the old hack of showing "?columnN?" when things
committed dead, even if there were still transactions that should be got too complicated.
able to see them under the MVCC snapshot rules.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Implement new commands DISCARD ALL, DISCARD PLANS, DISCARD TEMP, Make EXPLAIN ANALYZE show which sort method was used by a Sort node
CLOSE ALL, and DEALLOCATE ALL (Marko Kreen, Neil) (Tom)
</para>
<para>
These commands simplify resetting a database session to its initial
state, and are particularly handy for connection-pooling software.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make CLUSTER freeze tuples where possible (Heikki, Alvaro) Make PreventTransactionChain reject commands submitted as part of a
multi-statement simple-Query message (Tom)
</para> </para>
<para> <para>
This is nearly free and may avoid the need for a subsequent VACUUM For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected
of the table. even if submitted as a single Query message. This is a potential
incompatibility since some clients expected such strings to work;
but it was always unsafe.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make CLUSTER and TRUNCATE advance the table's relfrozenxid to Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other
RecentXmin (Alvaro) backends will exit before failing because of conflicting DB usage
(Tom)
</para> </para>
<para> <para>
This may avoid the need for a subsequent VACUUM of the table. The This helps mask the fact that backend exit takes nonzero time.
table-rewriting variants of ALTER TABLE do it too.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other Make NOTIFY/LISTEN/UNLISTEN only accept identifiers without a schema
backends will exit before failing because of conflicting DB usage qualifier
(Tom) (Bruce)
</para> </para>
<para> <para>
This helps mask the fact that backend exit takes nonzero time. Formerly, these commands accepted "schema.relation" but then ignored
the schema part, leading to confusion.
</para> </para>
</listitem> </listitem>
...@@ -1179,11 +1536,17 @@ do it for earlier branch release files. ...@@ -1179,11 +1536,17 @@ do it for earlier branch release files.
<para> <para>
SQL/XML support (Nikolay Samokhvalov, Peter) SQL/XML support (Nikolay Samokhvalov, Peter)
</para> </para>
<para>
There is now an <type>xml</> data type and standard operations
on it; see <xref linkend="datatype-xml">.
</para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support enum data types (Tom Dunstan) Support enum data types (see <xref linkend="datatype-enum">)
(Tom Dunstan)
</para> </para>
</listitem> </listitem>
...@@ -1202,36 +1565,48 @@ do it for earlier branch release files. ...@@ -1202,36 +1565,48 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Add "isodow" option to EXTRACT() and date_part() (Bruce) Add new regexp functions regexp_matches(), regexp_split_to_array(),
and regexp_split_to_table() (Jeremy Drake, Neil)
</para> </para>
<para> <para>
This is day of the week, with Sunday = 7. These functions provide access to the capture groups resulting from
a POSIX regular expression match, and provide the ability to split a
string on a POSIX regular expression.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Check for overflow when converting far-future date values to Add lo_truncate() function for large object truncation (Kris Jurka)
timestamp (Tom)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make to_timestamp() and to_date() assume "TM" for potentially Implement width_bucket() for the float8 data type (Neil)
variable-width fields (Bruce)
</para> </para>
</listitem>
<listitem>
<para> <para>
This matches Oracle behavior. Add a function pg_stat_clear_snapshot() that discards any statistics
snapshot already collected in the current transaction (Tom)
</para>
<para>
This allows plpgsql functions to watch for stats updates even though
they are confined to a single transaction.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields Add "isodow" option to EXTRACT() and date_part() (Bruce)
(Bruce) </para>
<para>
This is day of the week, with Sunday = 7.
</para> </para>
</listitem> </listitem>
...@@ -1244,56 +1619,44 @@ do it for earlier branch release files. ...@@ -1244,56 +1619,44 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Add lo_truncate() function for large object truncation (Kris Jurka) Check for overflow when converting far-future date values to
timestamp (Tom)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Fix float4/float8 to handle Infinity and Nan consistently (Bruce) Make to_timestamp() and to_date() assume "TM" for potentially
</para> variable-width fields (Bruce)
<para>
The code formerly was not consistent about distinguishing Infinity
symbols from overflow conditions.
</para> </para>
</listitem>
<listitem>
<para> <para>
Implement width_bucket() for the float8 data type (Neil) This matches Oracle behavior.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make setseed() return void, rather than a useless integer value Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields
(Neil) (Bruce)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add a function pg_stat_clear_snapshot() that discards any statistics Fix float4/float8 to handle Infinity and Nan consistently (Bruce)
snapshot already collected in the current transaction (Tom)
</para> </para>
<para> <para>
This allows plpgsql functions to watch for stats updates even though The code formerly was not consistent about distinguishing Infinity
they are confined to a single transaction. symbols from overflow conditions.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add new regexp functions regexp_matches(), regexp_split_to_array(), Make setseed() return void, rather than a useless integer value
and regexp_split_to_table() (Jeremy Drake, Neil) (Neil)
</para>
<para>
These functions provide access to the capture groups resulting from
a POSIX regular expression match, and provide the ability to split a
string on a POSIX regular expression.
</para> </para>
</listitem> </listitem>
...@@ -1322,12 +1685,6 @@ do it for earlier branch release files. ...@@ -1322,12 +1685,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Add explicit casts between boolean and text/varchar (Neil)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Add additional checks for invalidly-encoded data (Andrew) Add additional checks for invalidly-encoded data (Andrew)
...@@ -1638,6 +1995,13 @@ do it for earlier branch release files. ...@@ -1638,6 +1995,13 @@ do it for earlier branch release files.
<title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title> <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
<itemizedlist> <itemizedlist>
<listitem>
<para>
Add --tablespaces-only and --roles-only options to pg_dumpall (Dave
Page)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Add output-file option for pg_dumpall (Dave Page) Add output-file option for pg_dumpall (Dave Page)
...@@ -1656,13 +2020,6 @@ do it for earlier branch release files. ...@@ -1656,13 +2020,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Add --tablespaces-only and --roles-only options to pg_dumpall (Dave
Page)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
In -n and -t switches, always match $ literally, whether quoted or In -n and -t switches, always match $ literally, whether quoted or
...@@ -1744,26 +2101,26 @@ do it for earlier branch release files. ...@@ -1744,26 +2101,26 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Support a global SSL configuration file (Victor Wagner) Interpret the dbName parameter of PQsetdbLogin as a conninfo string
if it contains an = sign (Andrew)
</para> </para>
</listitem>
<listitem>
<para> <para>
Add libpq environment variable PGSSLKEY to control SSL hardware keys This allows use of all the options of conninfo strings through
(Victor Wagner) client programs that still use PQsetdbLogin.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Interpret the dbName parameter of PQsetdbLogin as a conninfo string Support a global SSL configuration file (Victor Wagner)
if it contains an = sign (Andrew)
</para> </para>
</listitem>
<listitem>
<para> <para>
This allows use of all the options of conninfo strings through Add libpq environment variable PGSSLKEY to control SSL hardware keys
client programs that still use PQsetdbLogin. (Victor Wagner)
</para> </para>
</listitem> </listitem>
...@@ -1785,14 +2142,6 @@ do it for earlier branch release files. ...@@ -1785,14 +2142,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Get rid of client-code dependencies on the exact text of the
no-password error message, by using PQconnectionUsedPassword()
instead (Tom)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -1824,6 +2173,13 @@ do it for earlier branch release files. ...@@ -1824,6 +2173,13 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Prevent ecpg libraries from exporting any symbols other than
their intended API (Michael)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -1878,55 +2234,93 @@ do it for earlier branch release files. ...@@ -1878,55 +2234,93 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Improve smgr/md API (Tom) Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
len) (Greg Stark, Tom)
</para> </para>
<para> <para>
This improves error detection and reporting, both for external Third-party C code that manipulates varlena datums *must* convert to
problems and for coding errors inside the backend. Notably, this convention, since the varvarlena patch changes the
disallow mdread() beyond EOF, and enforce that mdwrite() is to be representation of length words on some architectures. Also, it
used for rewriting existing blocks while mdextend() is to be used may be necessary to "detoast" input varlena datums in cases where
for extending the relation EOF. no toasting could have happened before.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support "gmake draft" in doc/src/sgml/Makefile (Bruce) Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
party includes (like tcl) that define DLLIMPORT (Magnus)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow GIN's extractQuery method to signal that nothing can satisfy Remove the prohibition on executing cursor commands through
the query (Teodor) SPI_execute (Tom)
</para> </para>
<para> <para>
This changes prototype of extractQuery method to use int32* instead The macro definition of SPI_ERROR_CURSOR still exists, so as not to
of uint32* for nentries argument. A -1 result means that no search needlessly break any SPI callers that are checking for it, but that
is needed. code will never actually be returned anymore.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not Clean up SPI's API a little bit by declaring SPI plan pointers as
meant to describe the maximum size of index tuples (Tom) "SPIPlanPtr" instead of "void *" (Tom)
</para>
<para>
This does not break any existing code, but switching is recommended
to help catch simple programming mistakes.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Remove the xlog-centric "database system is ready" message and Expose more cursor-related functionality in SPI (Pavel Stehule)
replace it with "database system is ready to accept connections" </para>
<para>
Allow access to the planner's cursor-related planning options, and
provide new FETCH/MOVE routines that allow access to the full power
of those commands.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Provide strlcpy() and strlcat() on all platforms, and replace Add configure --enable-profiling switch to enable code profiling
error-prone uses of strncpy(), strncat(), etc (Peter) (works with gcc only, for now) (Korry Douglas and Nikhil S)
</para>
</listitem>
<listitem>
<para>
Add configure option --with-system-tzdata to use operating system
time zone database (Peter)
</para>
</listitem>
<listitem>
<para>
Support "gmake draft" in doc/src/sgml/Makefile (Bruce)
</para>
</listitem>
<listitem>
<para>
Allow GIN's extractQuery method to signal that nothing can satisfy
the query (Teodor)
</para>
<para>
This changes prototype of extractQuery method to use int32* instead
of uint32* for nentries argument. A -1 result means that no search
is needed.
</para> </para>
</listitem> </listitem>
...@@ -1947,36 +2341,59 @@ do it for earlier branch release files. ...@@ -1947,36 +2341,59 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Restructure planner-to-executor API (Tom) Get rid of client-code dependencies on the exact text of the
no-password error message, by using PQconnectionUsedPassword()
instead (Tom)
</para> </para>
</listitem>
<listitem>
<para> <para>
Notably, the executor no longer sees the Query structure at all, but Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
gets a new node type called PlannedStmt that is more suitable as meant to describe the maximum size of index tuples (Tom)
executor input. This allows us to stop storing mostly-redundant
Query trees in prepared statements, portals, etc. Also, the
rangetable used by the executor is now a flat list with no
unnecessary substructure --- this simplifies many things.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add configure --enable-profiling switch to enable code profiling Remove the xlog-centric "database system is ready" message and
(works with gcc only, for now) (Korry Douglas and Nikhil S) replace it with "database system is ready to accept connections"
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x, Provide strlcpy() and strlcat() on all platforms, and replace
len) (Greg Stark, Tom) error-prone uses of strncpy(), strncat(), etc (Peter)
</para>
</listitem>
<listitem>
<para>
Improve smgr/md API (Tom)
</para> </para>
<para> <para>
Third-party code that manipulates varlena datums *must* convert to This improves error detection and reporting, both for external
this convention, since the varvarlena patch changes the problems and for coding errors inside the backend. Notably,
representation of length words on some architectures. disallow mdread() beyond EOF, and enforce that mdwrite() is to be
used for rewriting existing blocks while mdextend() is to be used
for extending the relation EOF.
</para>
</listitem>
<listitem>
<para>
Restructure planner-to-executor API (Tom)
</para>
<para>
Notably, the executor no longer sees the Query structure at all, but
gets a new node type called PlannedStmt that is more suitable as
executor input. This allows us to stop storing mostly-redundant
Query trees in prepared statements, portals, etc. Also, the
rangetable used by the executor is now a flat list with no
unnecessary substructure &mdash; this simplifies many things.
</para> </para>
</listitem> </listitem>
...@@ -2029,44 +2446,13 @@ do it for earlier branch release files. ...@@ -2029,44 +2446,13 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Remove the prohibition on executing cursor commands through Fix pgstats counting of live and dead tuples to recognize that
SPI_execute (Tom) committed and aborted transactions have different effects (Tom)
</para>
<para>
The macro definition of SPI_ERROR_CURSOR still exists, so as not to
needlessly break any SPI callers that are checking for it, but that
code will never actually be returned anymore.
</para>
</listitem>
<listitem>
<para>
Clean up SPI's API a little bit by declaring SPI plan pointers as
"SPIPlanPtr" instead of "void *" (Tom)
</para>
<para>
This does not break any existing code, but switching is recommended
to help catch simple programming mistakes.
</para>
</listitem>
<listitem>
<para>
Expose more cursor-related functionality in SPI (Pavel Stehule)
</para>
<para>
Allow access to the planner's cursor-related planning options, and
provide new FETCH/MOVE routines that allow access to the full power
of those commands.
</para> </para>
</listitem>
<listitem>
<para> <para>
Add tas() support for Renesas' M32R processor (Kazuhiro Inaoka) This should result in noticeably more accurate tracking of
n_live_tuples and n_dead_tuples.
</para> </para>
</listitem> </listitem>
...@@ -2082,18 +2468,6 @@ do it for earlier branch release files. ...@@ -2082,18 +2468,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Fix pgstats counting of live and dead tuples to recognize that
committed and aborted transactions have different effects (Tom)
</para>
<para>
This should result in noticeably more accurate tracking of
n_live_tuples and n_dead_tuples.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Create hooks to let a loadable plugin monitor (or even replace) the Create hooks to let a loadable plugin monitor (or even replace) the
...@@ -2112,7 +2486,13 @@ do it for earlier branch release files. ...@@ -2112,7 +2486,13 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Downgrade some low-level startup messages to DEBUG1 (Peter) Add tas() support for Renesas' M32R processor (Kazuhiro Inaoka)
</para>
</listitem>
<listitem>
<para>
Downgrade some boring startup messages to DEBUG1 (Peter)
</para> </para>
</listitem> </listitem>
...@@ -2149,13 +2529,6 @@ do it for earlier branch release files. ...@@ -2149,13 +2529,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
party includes (like tcl) that define DLLIMPORT (Magnus)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Adjust the output of MemoryContextStats() so that the line for a Adjust the output of MemoryContextStats() so that the line for a
...@@ -2164,13 +2537,6 @@ do it for earlier branch release files. ...@@ -2164,13 +2537,6 @@ do it for earlier branch release files.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Add configure option --with-system-tzdata to use operating system
time zone database (Peter)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Change on-disk representation of NUMERIC datatype so that the Change on-disk representation of NUMERIC datatype so that the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment