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:
......@@ -41,20 +41,201 @@ do it for earlier branch release files.
<note>
<title>Release date</title>
<simpara>2007-??-??</simpara>
<para>CURRENT AS OF 2007-10-03</>
</note>
<sect2>
<title>Overview</title>
<para>
This release adds many functionality and performance improvements that
This release adds many improvements that
were requested by users, including:
<itemizedlist>
<listitem>
<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>
</listitem>
......@@ -81,7 +262,173 @@ do it for earlier branch release files.
<listitem>
<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>
</listitem>
......@@ -123,9 +470,10 @@ do it for earlier branch release files.
<para>
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
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>
</listitem>
......@@ -146,6 +494,48 @@ do it for earlier branch release files.
</para>
</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>
<para>
Lazy XID allocation (Florian Pflug)
......@@ -176,82 +566,126 @@ do it for earlier branch release files.
<listitem>
<para>
Just-in-time background writing strategy (Greg Smith, Itagaki
Takahiro)
Improve interlocking between checkpoint start and transaction commit
(Heikki)
</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.
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>
</listitem>
<listitem>
<para>
Support varlena fields with single-byte headers and unaligned
storage (Greg Stark)
Create a dedicated "wal writer" process to offload WAL-writing work
from backends (Simon)
</para>
<para>
This significantly reduces the on-disk size of short
character-string fields.
This process is also responsible for guaranteeing a maximum delay
before asynchronously-committed transactions will be flushed to
disk.
</para>
</listitem>
<listitem>
<para>
Combine cmin and cmax fields of HeapTupleHeaders into a single field
(Heikki)
Skip writing WAL in CLUSTER and COPY in cases where it's not needed
(Simon)
</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.
If WAL archiving is not enabled, it's possible to ensure
transactional safety by fsync'ing the destination table before
commit, rather than emitting WAL records for all inserted tuples.
</para>
</listitem>
<listitem>
<para>
Implement "top N" sorting in ORDER BY ... LIMIT queries (Greg Stark)
Avoid rewriting pg_control at every WAL segment switch (Simon)
</para>
</listitem>
<listitem>
<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.
Reduce WAL output size for page splits in btree indexes (Heikki)
</para>
</listitem>
<listitem>
<para>
Skip writing WAL in CLUSTER and COPY in cases where it's not needed
(Simon)
Avoid unnecessary disk reads during WAL recovery (Heikki)
</para>
<para>
If WAL archiving is not enabled, it's possible to ensure
transactional safety by fsync'ing the destination table before
commit, rather than emitting WAL records for all inserted tuples.
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>
</listitem>
<listitem>
<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>
</listitem>
<listitem>
<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>
</listitem>
......@@ -263,148 +697,135 @@ do it for earlier branch release files.
<listitem>
<para>
Avoid computing X^2 at each row in avg(bigint) and avg(numeric)
(Mark Kirkwood)
Improve performance of mergejoin with a large sort operation as
inner input (Greg Stark)
</para>
</listitem>
<listitem>
<para>
Suppress useless searches for unused line pointers in PageAddItem
(Heikki, improving on an idea from Hiroki Kataoka)
This change uses a Materialize node between the mergejoin and the
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>
</listitem>
<listitem>
<para>
Improve interlocking between checkpoint start and transaction commit
(Heikki)
</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.
Avoid computing X^2 at each row in avg(bigint) and avg(numeric)
(Mark Kirkwood)
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Server Changes</title>
<itemizedlist>
<listitem>
<para>
Put a rate limit on messages sent by backends to the stats collector
(Tom)
Autovacuum is now enabled by default (Alvaro)
</para>
<para>
This reduces the overhead for short transactions by combining
reports for successive short transactions.
Considerable work was done to make autovacuum less intrusive,
allowing this to become a reasonable default.
</para>
</listitem>
<listitem>
<para>
Avoid unnecessary disk reads during WAL recovery (Heikki)
</para>
<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.
Support multiple concurrent autovacuum processes (Alvaro, Itagaki
Takahiro)
</para>
</listitem>
<listitem>
<para>
Improve performance of mergejoin with a large sort operation as
inner input (Greg Stark)
Set the default autovacuum vacuum_cost_delay value to 20ms, and
reduce the default autovacuum vacuum and analyze threshold values to
50 tuples (Alvaro)
</para>
</listitem>
<listitem>
<para>
This change uses a Materialize node between the mergejoin and the
sort to prevent the sort from having to "back up", which allows a
more efficient sort.
Make autovacuum report the start time of its current activity in
pg_stat_activity (Tom)
</para>
</listitem>
<listitem>
<para>
Make large sequential scans and VACUUMs work in a limited-size
"ring" of buffers (Simon, Heikki, Tom)
Make configuration parameters fall back to their default values when
they are removed from the configuration file (Joachim Wieland)
</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.
This fixes an ancient gotcha that returning a configuration file
line to its original commented-out state did not undo the change.
</para>
</listitem>
<listitem>
<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>
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.
Aside from improving performance (for example, by being able to make
use of newly-added indexes), this finally fixes the problem
that you couldn't drop and recreate a temp table that's used by a
PL/PgSQL function, unless you used EXECUTE for all references to it.
A statement that depends on a temp table will now be replanned
automatically if the temp table has been recreated.
</para>
</listitem>
<listitem>
<para>
Create a dedicated "wal writer" process to offload WAL-writing work
from backends (Simon)
Add support for GSSAPI authentication (Henry Hotz, Magnus)
</para>
</listitem>
<listitem>
<para>
This process is also responsible for guaranteeing a maximum delay
before asynchronously-committed transactions will be flushed to
disk.
Support SSPI authentication on Windows (Magnus)
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Server Changes</title>
<itemizedlist>
<listitem>
<para>
Autovacuum is now enabled by default (Alvaro)
Support a global SSL configuration file (Victor Wagner)
</para>
</listitem>
<listitem>
<para>
Considerable work was done to make autovacuum less intrusive,
allowing this to become a reasonable default.
Add ssl_ciphers parameter to control allowed ciphers (Victor Wagner)
</para>
</listitem>
<listitem>
<para>
Support multiple concurrent autovacuum processes (Alvaro, Itagaki
Takahiro)
Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004, along with new
conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
</para>
</listitem>
<listitem>
<para>
Set the default autovacuum vacuum_cost_delay value to 20ms, and
reduce the default autovacuum vacuum and analyze threshold values to
50 tuples (Alvaro)
Make JOHAB encoding client-only (Tatsuo)
</para>
</listitem>
<listitem>
<para>
Make autovacuum report the start time of its current activity in
pg_stat_activity (Tom)
It was found that JOHAB does not meet the assumptions needed to be
used safely as a server-side encoding.
</para>
</listitem>
......@@ -413,10 +834,6 @@ do it for earlier branch release files.
Provide for logfiles in machine readable CSV format (Arul Shaji,
Greg Smith, Andrew Dunstan)
</para>
<para>
In consequence, rename redirect_stderr to logging_collector.
</para>
</listitem>
<listitem>
......@@ -446,20 +863,6 @@ do it for earlier branch release files.
</para>
</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>
<para>
%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.
<listitem>
<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>
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>
</listitem>
<listitem>
<para>
Invalidate and rebuild cached plans whenever there is a schema
change or statistics update to referenced relations (Tom)
Change the timestamps recorded in transaction commit/abort xlog
records from time_t to TimestampTz representation (Tom)
</para>
<para>
Aside from improving performance (for example, by being able to make
use of newly-added indexes), this finally fixes the ancient gotcha
that you can't drop and recreate a temp table that's used by a
PL/PgSQL function, unless you use EXECUTE for all references to it.
This provides full gettimeofday() resolution for the timestamps,
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>
</listitem>
......@@ -524,6 +931,21 @@ do it for earlier branch release files.
</para>
</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>
<para>
New system view pg_stat_bgwriter displays statistics about the
......@@ -557,45 +979,36 @@ do it for earlier branch release files.
<listitem>
<para>
Add new encoding EUC_JIS_2004 and SHIFT_JIS_2004, along with new
conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
</para>
</listitem>
<listitem>
<para>
Make JOHAB encoding client-only (Tatsuo)
Remove stats_start_collector parameter (Tom)
</para>
<para>
It was found that JOHAB does not meet the assumptions needed to be
used safely as a server-side encoding.
We now always start the collector process, unless prevented by a
problem with setting up the stats UDP socket.
</para>
</listitem>
<listitem>
<para>
Make configuration parameters fall back to their default values when
they are removed from the configuration file (Joachim Wieland)
Remove stats_reset_on_server_start parameter (Tom)
</para>
<para>
This fixes an ancient gotcha that returning a configuration file
line to its original commented-out state did not undo the change.
This seemed useless in view of the availability of pg_stat_reset().
</para>
</listitem>
<listitem>
<para>
Change the timestamps recorded in transaction commit/abort xlog
records from time_t to TimestampTz representation (Tom)
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>
This provides full gettimeofday() resolution for the timestamps,
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.
Rename stats_command_string parameter to track_activities (Tom)
</para>
</listitem>
......@@ -614,21 +1027,6 @@ do it for earlier branch release files.
</para>
</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>
<para>
Arrange to put TOAST tables belonging to temporary tables into
......@@ -642,21 +1040,6 @@ do it for earlier branch release files.
than shared buffers for access. Aside from obvious performance
benefits, this provides a solution to bug #3483, in which other
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>
</listitem>
......@@ -675,41 +1058,6 @@ do it for earlier branch release files.
</para>
</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>
</sect3>
......@@ -722,52 +1070,45 @@ do it for earlier branch release files.
<para>
Text search capability is now in core Postgres (Teodor, Oleg)
</para>
<para>
The features previously provided by contrib/tsearch2 have been
improved and moved into the standard server.
</para>
</listitem>
<listitem>
<para>
Support ORDER BY ... NULLS FIRST/LAST, and add ASC/DESC/NULLS
FIRST/NULLS LAST per-column options for btree indexes (Tom, Teodor)
Support ORDER BY ... NULLS FIRST/LAST (Teodor, Tom)
</para>
<para>
Note incompatible change from prior behavior: ORDER BY ... USING
will now be rejected if the operator is not a less-than or
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.
Users can now control whether nulls sort before or after
other values.
</para>
</listitem>
<listitem>
<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>
</listitem>
<listitem>
<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>
</listitem>
<listitem>
<para>
Add support for cross-type hashing (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.
Support UPDATE/DELETE WHERE CURRENT OF cursor_name (Arul Shaji, Tom)
</para>
</listitem>
<listitem>
<para>
Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
Allow FOR UPDATE in cursors (Arul Shaji, Tom)
</para>
</listitem>
......@@ -780,7 +1121,11 @@ do it for earlier branch release files.
<para>
This change eliminates a lot of surprising interpretations that the
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>
</listitem>
......@@ -808,29 +1153,24 @@ do it for earlier branch release files.
<listitem>
<para>
Fix some issues with user tables and views that are named similarly
to system catalogs (Tom)
Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
</para>
</listitem>
<listitem>
<para>
Remove the undocumented "not in" operator (!!=) (Tom)
Add support for cross-type hashing (Tom)
</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>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Planner Changes</title>
<itemizedlist>
<listitem>
<para>
Improve handling of "equivalence classes" of variables that are
......@@ -846,14 +1186,14 @@ do it for earlier branch release files.
<listitem>
<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>
</listitem>
<listitem>
<para>
Improve performance for planning large inheritance trees that are
mostly excluded by constraints (Tom)
Fix problems with selectivity estimation for partial indexes (Tom)
</para>
</listitem>
......@@ -864,6 +1204,23 @@ do it for earlier branch release files.
</para>
</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>
</sect3>
......@@ -935,28 +1292,28 @@ do it for earlier branch release files.
<listitem>
<para>
Invent "operator families" to allow improved handling of
cross-data-type operators (Tom)
Support type modifiers for user-defined types (Teodor, Tom)
</para>
<para>
This change allows significantly better planning of queries
involving cross-data-type comparisons.
User-defined types can now use parameters, similar to the maximum
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>
</listitem>
<listitem>
<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>
User-defined types can now use parameters, similar to the maximum
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.
This change allows significantly better planning of queries
involving cross-data-type comparisons.
</para>
</listitem>
......@@ -992,14 +1349,18 @@ do it for earlier branch release files.
<listitem>
<para>
Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE,
ALTER ROLE (Tom)
Allow non-superuser database owners to create procedural languages
(Jeremy Drake)
</para>
<para>
This provides a convenient way of applying a session's current
parameter setting as the default for future sessions or function
calls.
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>
</listitem>
......@@ -1012,7 +1373,7 @@ do it for earlier branch release files.
</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
that made little sense at the SQL level).
</para>
......@@ -1020,150 +1381,146 @@ do it for earlier branch release files.
<listitem>
<para>
Add ALTER VIEW ... RENAME TO and ALTER SEQUENCE ... RENAME TO (David
Fetter, Neil)
Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE,
ALTER ROLE (Tom)
</para>
<para>
While it has long been possible to perform these operations using ALTER
TABLE, users were often surprised that they couldn't say ALTER VIEW
or ALTER SEQUENCE as appropriate.
This provides a convenient way of applying a session's current
parameter setting as the default for future sessions or function
calls.
</para>
</listitem>
<listitem>
<para>
Implement CREATE TABLE LIKE ... INCLUDING INDEXES (Trevor
Hardcastle, Nikhil S, Neil)
Implement new commands DISCARD ALL, DISCARD PLANS, DISCARD TEMP,
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>
</listitem>
<listitem>
<para>
Fix EXPLAIN so it can always print the correct referent of an upper
plan level expression (Tom)
Add ALTER VIEW ... RENAME TO and ALTER SEQUENCE ... RENAME TO (David
Fetter, Neil)
</para>
<para>
This fix banishes the old hack of showing "?columnN?" when things
got too complicated.
While it has long been possible to perform these operations using ALTER
TABLE, users were often surprised that they couldn't say ALTER VIEW
or ALTER SEQUENCE as appropriate.
</para>
</listitem>
<listitem>
<para>
Make EXPLAIN ANALYZE show which sort method was used by a Sort node
(Tom)
Implement CREATE TABLE LIKE ... INCLUDING INDEXES (Trevor
Hardcastle, Nikhil S, Neil)
</para>
</listitem>
<listitem>
<para>
Make PreventTransactionChain reject commands submitted as part of a
multi-statement simple-Query message (Tom)
Make CLUSTER MVCC-safe (Heikki Linnakangas)
</para>
<para>
For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected
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.
Formerly, a CLUSTER command would discard all tuples that were
committed dead, even if there were still transactions that should be
able to see them under the MVCC snapshot rules.
</para>
</listitem>
<listitem>
<para>
Allow non-superuser database owners to create procedural languages
(Jeremy Drake)
</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.
Support syntax "CLUSTER table USING index", which is more logical
than the old CLUSTER syntax (Holger Schurig)
</para>
</listitem>
<listitem>
<para>
Make NOTIFY/LISTEN/UNLISTEN only accept identifiers without a schema
qualifier
(Bruce)
Make CLUSTER freeze tuples where possible (Heikki, Alvaro)
</para>
<para>
Formerly, these commands accepted "schema.relation" but then ignored
the schema part, leading to confusion.
This is nearly free and may avoid the need for a subsequent VACUUM
of the table.
</para>
</listitem>
<listitem>
<para>
Support syntax "CLUSTER table USING index", which is more logical
than the old CLUSTER syntax (Holger Schurig)
Make CLUSTER and TRUNCATE advance the table's relfrozenxid to
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>
</listitem>
<listitem>
<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>
Formerly, a CLUSTER command would discard all tuples that were
committed dead, even if there were still transactions that should be
able to see them under the MVCC snapshot rules.
This fix banishes the old hack of showing "?columnN?" when things
got too complicated.
</para>
</listitem>
<listitem>
<para>
Implement new commands DISCARD ALL, DISCARD PLANS, DISCARD TEMP,
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.
Make EXPLAIN ANALYZE show which sort method was used by a Sort node
(Tom)
</para>
</listitem>
<listitem>
<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>
This is nearly free and may avoid the need for a subsequent VACUUM
of the table.
For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected
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>
</listitem>
<listitem>
<para>
Make CLUSTER and TRUNCATE advance the table's relfrozenxid to
RecentXmin (Alvaro)
Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other
backends will exit before failing because of conflicting DB usage
(Tom)
</para>
<para>
This may avoid the need for a subsequent VACUUM of the table. The
table-rewriting variants of ALTER TABLE do it too.
This helps mask the fact that backend exit takes nonzero time.
</para>
</listitem>
<listitem>
<para>
Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other
backends will exit before failing because of conflicting DB usage
(Tom)
Make NOTIFY/LISTEN/UNLISTEN only accept identifiers without a schema
qualifier
(Bruce)
</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>
</listitem>
......@@ -1179,11 +1536,17 @@ do it for earlier branch release files.
<para>
SQL/XML support (Nikolay Samokhvalov, Peter)
</para>
<para>
There is now an <type>xml</> data type and standard operations
on it; see <xref linkend="datatype-xml">.
</para>
</listitem>
<listitem>
<para>
Support enum data types (Tom Dunstan)
Support enum data types (see <xref linkend="datatype-enum">)
(Tom Dunstan)
</para>
</listitem>
......@@ -1202,36 +1565,48 @@ do it for earlier branch release files.
<listitem>
<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>
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>
</listitem>
<listitem>
<para>
Check for overflow when converting far-future date values to
timestamp (Tom)
Add lo_truncate() function for large object truncation (Kris Jurka)
</para>
</listitem>
<listitem>
<para>
Make to_timestamp() and to_date() assume "TM" for potentially
variable-width fields (Bruce)
Implement width_bucket() for the float8 data type (Neil)
</para>
</listitem>
<listitem>
<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>
</listitem>
<listitem>
<para>
Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields
(Bruce)
Add "isodow" option to EXTRACT() and date_part() (Bruce)
</para>
<para>
This is day of the week, with Sunday = 7.
</para>
</listitem>
......@@ -1244,56 +1619,44 @@ do it for earlier branch release files.
<listitem>
<para>
Add lo_truncate() function for large object truncation (Kris Jurka)
Check for overflow when converting far-future date values to
timestamp (Tom)
</para>
</listitem>
<listitem>
<para>
Fix float4/float8 to handle Infinity and Nan consistently (Bruce)
</para>
<para>
The code formerly was not consistent about distinguishing Infinity
symbols from overflow conditions.
Make to_timestamp() and to_date() assume "TM" for potentially
variable-width fields (Bruce)
</para>
</listitem>
<listitem>
<para>
Implement width_bucket() for the float8 data type (Neil)
This matches Oracle behavior.
</para>
</listitem>
<listitem>
<para>
Make setseed() return void, rather than a useless integer value
(Neil)
Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields
(Bruce)
</para>
</listitem>
<listitem>
<para>
Add a function pg_stat_clear_snapshot() that discards any statistics
snapshot already collected in the current transaction (Tom)
Fix float4/float8 to handle Infinity and Nan consistently (Bruce)
</para>
<para>
This allows plpgsql functions to watch for stats updates even though
they are confined to a single transaction.
The code formerly was not consistent about distinguishing Infinity
symbols from overflow conditions.
</para>
</listitem>
<listitem>
<para>
Add new regexp functions regexp_matches(), regexp_split_to_array(),
and regexp_split_to_table() (Jeremy Drake, 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.
Make setseed() return void, rather than a useless integer value
(Neil)
</para>
</listitem>
......@@ -1322,12 +1685,6 @@ do it for earlier branch release files.
</para>
</listitem>
<listitem>
<para>
Add explicit casts between boolean and text/varchar (Neil)
</para>
</listitem>
<listitem>
<para>
Add additional checks for invalidly-encoded data (Andrew)
......@@ -1638,6 +1995,13 @@ do it for earlier branch release files.
<title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
<itemizedlist>
<listitem>
<para>
Add --tablespaces-only and --roles-only options to pg_dumpall (Dave
Page)
</para>
</listitem>
<listitem>
<para>
Add output-file option for pg_dumpall (Dave Page)
......@@ -1656,13 +2020,6 @@ do it for earlier branch release files.
</para>
</listitem>
<listitem>
<para>
Add --tablespaces-only and --roles-only options to pg_dumpall (Dave
Page)
</para>
</listitem>
<listitem>
<para>
In -n and -t switches, always match $ literally, whether quoted or
......@@ -1744,26 +2101,26 @@ do it for earlier branch release files.
<listitem>
<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>
</listitem>
<listitem>
<para>
Add libpq environment variable PGSSLKEY to control SSL hardware keys
(Victor Wagner)
This allows use of all the options of conninfo strings through
client programs that still use PQsetdbLogin.
</para>
</listitem>
<listitem>
<para>
Interpret the dbName parameter of PQsetdbLogin as a conninfo string
if it contains an = sign (Andrew)
Support a global SSL configuration file (Victor Wagner)
</para>
</listitem>
<listitem>
<para>
This allows use of all the options of conninfo strings through
client programs that still use PQsetdbLogin.
Add libpq environment variable PGSSLKEY to control SSL hardware keys
(Victor Wagner)
</para>
</listitem>
......@@ -1785,14 +2142,6 @@ do it for earlier branch release files.
</para>
</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>
</sect3>
......@@ -1824,6 +2173,13 @@ do it for earlier branch release files.
</para>
</listitem>
<listitem>
<para>
Prevent ecpg libraries from exporting any symbols other than
their intended API (Michael)
</para>
</listitem>
</itemizedlist>
</sect3>
......@@ -1878,55 +2234,93 @@ do it for earlier branch release files.
<listitem>
<para>
Improve smgr/md API (Tom)
Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
len) (Greg Stark, Tom)
</para>
<para>
This improves error detection and reporting, both for external
problems and for coding errors inside the backend. Notably,
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.
Third-party C code that manipulates varlena datums *must* convert to
this convention, since the varvarlena patch changes the
representation of length words on some architectures. Also, it
may be necessary to "detoast" input varlena datums in cases where
no toasting could have happened before.
</para>
</listitem>
<listitem>
<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>
</listitem>
<listitem>
<para>
Allow GIN's extractQuery method to signal that nothing can satisfy
the query (Teodor)
Remove the prohibition on executing cursor commands through
SPI_execute (Tom)
</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.
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>
Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
meant to describe the maximum size of index tuples (Tom)
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>
Remove the xlog-centric "database system is ready" message and
replace it with "database system is ready to accept connections"
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>
</listitem>
<listitem>
<para>
Provide strlcpy() and strlcat() on all platforms, and replace
error-prone uses of strncpy(), strncat(), etc (Peter)
Add configure --enable-profiling switch to enable code profiling
(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>
</listitem>
......@@ -1947,36 +2341,59 @@ do it for earlier branch release files.
<listitem>
<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>
</listitem>
<listitem>
<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 --- this simplifies many things.
Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
meant to describe the maximum size of index tuples (Tom)
</para>
</listitem>
<listitem>
<para>
Add configure --enable-profiling switch to enable code profiling
(works with gcc only, for now) (Korry Douglas and Nikhil S)
Remove the xlog-centric "database system is ready" message and
replace it with "database system is ready to accept connections"
</para>
</listitem>
<listitem>
<para>
Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
len) (Greg Stark, Tom)
Provide strlcpy() and strlcat() on all platforms, and replace
error-prone uses of strncpy(), strncat(), etc (Peter)
</para>
</listitem>
<listitem>
<para>
Improve smgr/md API (Tom)
</para>
<para>
Third-party code that manipulates varlena datums *must* convert to
this convention, since the varvarlena patch changes the
representation of length words on some architectures.
This improves error detection and reporting, both for external
problems and for coding errors inside the backend. Notably,
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>
</listitem>
......@@ -2029,44 +2446,13 @@ do it for earlier branch release files.
<listitem>
<para>
Remove the prohibition on executing cursor commands through
SPI_execute (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.
Fix pgstats counting of live and dead tuples to recognize that
committed and aborted transactions have different effects (Tom)
</para>
</listitem>
<listitem>
<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>
</listitem>
......@@ -2082,18 +2468,6 @@ do it for earlier branch release files.
</para>
</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>
<para>
Create hooks to let a loadable plugin monitor (or even replace) the
......@@ -2112,7 +2486,13 @@ do it for earlier branch release files.
<listitem>
<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>
</listitem>
......@@ -2149,13 +2529,6 @@ do it for earlier branch release files.
</para>
</listitem>
<listitem>
<para>
Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
party includes (like tcl) that define DLLIMPORT (Magnus)
</para>
</listitem>
<listitem>
<para>
Adjust the output of MemoryContextStats() so that the line for a
......@@ -2164,13 +2537,6 @@ do it for earlier branch release files.
</para>
</listitem>
<listitem>
<para>
Add configure option --with-system-tzdata to use operating system
time zone database (Peter)
</para>
</listitem>
<listitem>
<para>
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