diff options
-rw-r--r-- | doc/src/sgml/release.sgml | 1310 |
1 files changed, 838 insertions, 472 deletions
diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index b935ead4d82..d3857de5388 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -1,4 +1,4 @@ -<!-- $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> @@ -148,34 +496,6 @@ do it for earlier branch release files. <listitem> <para> - Lazy XID allocation (Florian Pflug) - </para> - - <para> - Formerly, every transaction obtained a transaction ID (XID). Now, - transactions that do not modify any database rows will typically - never obtain an XID at all. We already did things this way for - subtransactions, but this patch extends the concept to top-level - transactions. In applications where there are lots of short - read-only transactions, this should improve performance noticeably; - not so much from removal of the actual XID-assignments, as from - reduction of overhead that's driven by the rate of XID consumption. - We add a concept of a "virtual transaction ID" so that active - transactions can be uniquely identified even if they don't have a - regular XID. This is a much lighter-weight concept: uniqueness of - VXIDs is only guaranteed over the short term, and no on-disk record - is made about them. - </para> - </listitem> - - <listitem> - <para> - Reduce contention for the ProcArrayLock (Florian Pflug, Heikki) - </para> - </listitem> - - <listitem> - <para> Just-in-time background writing strategy (Greg Smith, Itagaki Takahiro) </para> @@ -218,85 +538,80 @@ do it for earlier branch release files. <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 — avoiding spill-to-disk for large - M is actually the most attractive thing about it. - </para> - </listitem> - - <listitem> - <para> - Skip writing WAL in CLUSTER and COPY in cases where it's not needed - (Simon) + Lazy XID allocation (Florian Pflug) </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. + Formerly, every transaction obtained a transaction ID (XID). Now, + transactions that do not modify any database rows will typically + never obtain an XID at all. We already did things this way for + subtransactions, but this patch extends the concept to top-level + transactions. In applications where there are lots of short + read-only transactions, this should improve performance noticeably; + not so much from removal of the actual XID-assignments, as from + reduction of overhead that's driven by the rate of XID consumption. + We add a concept of a "virtual transaction ID" so that active + transactions can be uniquely identified even if they don't have a + regular XID. This is a much lighter-weight concept: uniqueness of + VXIDs is only guaranteed over the short term, and no on-disk record + is made about them. </para> </listitem> <listitem> <para> - Avoid rewriting pg_control at every WAL segment switch (Simon) + Reduce contention for the ProcArrayLock (Florian Pflug, Heikki) </para> </listitem> <listitem> <para> - Reduce WAL output size for page splits in btree indexes (Heikki) + Improve interlocking between checkpoint start and transaction commit + (Heikki) </para> - </listitem> - <listitem> <para> - Improve hash join for cases with many input NULLs (Tom) + 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> - Avoid computing X^2 at each row in avg(bigint) and avg(numeric) - (Mark Kirkwood) + Create a dedicated "wal writer" process to offload WAL-writing work + from backends (Simon) </para> - </listitem> - <listitem> <para> - Suppress useless searches for unused line pointers in PageAddItem - (Heikki, improving on an idea from Hiroki Kataoka) + This process is also responsible for guaranteeing a maximum delay + before asynchronously-committed transactions will be flushed to + disk. </para> </listitem> <listitem> <para> - Improve interlocking between checkpoint start and transaction commit - (Heikki) + Skip writing WAL in CLUSTER and COPY in cases where it's not needed + (Simon) </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. + 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> - Put a rate limit on messages sent by backends to the stats collector - (Tom) + Avoid rewriting pg_control at every WAL segment switch (Simon) </para> + </listitem> + <listitem> <para> - This reduces the overhead for short transactions by combining - reports for successive short transactions. + Reduce WAL output size for page splits in btree indexes (Heikki) </para> </listitem> @@ -314,19 +629,6 @@ do it for earlier branch release files. <listitem> <para> - Improve performance of mergejoin with a large sort operation as - inner input (Greg Stark) - </para> - - <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. - </para> - </listitem> - - <listitem> - <para> Make large sequential scans and VACUUMs work in a limited-size "ring" of buffers (Simon, Heikki, Tom) </para> @@ -356,14 +658,63 @@ do it for earlier branch release files. <listitem> <para> - Create a dedicated "wal writer" process to offload WAL-writing work - from backends (Simon) + Suppress useless searches for unused line pointers in PageAddItem + (Heikki, improving on an idea from Hiroki Kataoka) </para> + </listitem> + <listitem> <para> - This process is also responsible for guaranteeing a maximum delay - before asynchronously-committed transactions will be flushed to - disk. + 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 — avoiding spill-to-disk for large + M is actually the most attractive thing about it. + </para> + </listitem> + + <listitem> + <para> + Improve hash join for cases with many input NULLs (Tom) + </para> + </listitem> + + <listitem> + <para> + Improve performance of mergejoin with a large sort operation as + inner input (Greg Stark) + </para> + + <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. 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> + Avoid computing X^2 at each row in avg(bigint) and avg(numeric) + (Mark Kirkwood) </para> </listitem> @@ -410,53 +761,105 @@ do it for earlier branch release files. <listitem> <para> - Provide for logfiles in machine readable CSV format (Arul Shaji, - Greg Smith, Andrew Dunstan) + Make configuration parameters fall back to their default values when + they are removed from the configuration file (Joachim Wieland) </para> <para> - In consequence, rename redirect_stderr to logging_collector. + 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> - Add log_autovacuum_min_duration parameter to support configurable - logging of autovacuum actions (Simon, Alvaro) + Invalidate and rebuild cached plans whenever there is a schema + change or statistics update to referenced relations (Tom) + </para> + + <para> + 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> - Add log_lock_waits parameter to log long wait times (Simon) + Add support for GSSAPI authentication (Henry Hotz, Magnus) </para> </listitem> <listitem> <para> - Add log_temp_files parameter to log usage of temporary files (Bill - Moran) + Support SSPI authentication on Windows (Magnus) </para> </listitem> <listitem> <para> - Add log_checkpoints parameter to improve logging of checkpoints - (Greg Smith, Heikki) + Support a global SSL configuration file (Victor Wagner) </para> </listitem> <listitem> <para> - Use our own timezone support for formatting timestamps displayed in - the server log (Tom) + Add ssl_ciphers parameter to control allowed ciphers (Victor Wagner) </para> + </listitem> + <listitem> <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. + 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> + Make JOHAB encoding client-only (Tatsuo) + </para> + + <para> + It was found that JOHAB does not meet the assumptions needed to be + used safely as a server-side encoding. + </para> + </listitem> + + <listitem> + <para> + Provide for logfiles in machine readable CSV format (Arul Shaji, + Greg Smith, Andrew Dunstan) + </para> + </listitem> + + <listitem> + <para> + Add log_autovacuum_min_duration parameter to support configurable + logging of autovacuum actions (Simon, Alvaro) + </para> + </listitem> + + <listitem> + <para> + Add log_lock_waits parameter to log long wait times (Simon) + </para> + </listitem> + + <listitem> + <para> + Add log_temp_files parameter to log usage of temporary files (Bill + Moran) + </para> + </listitem> + + <listitem> + <para> + Add log_checkpoints parameter to improve logging of checkpoints + (Greg Smith, Heikki) </para> </listitem> @@ -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 + — previously it was not possible to specify the stop point with + sub-second resolution. </para> </listitem> @@ -526,6 +933,21 @@ do it for earlier branch release files. <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 background writer process's performance (Magnus) </para> @@ -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 - — 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> @@ -616,21 +1029,6 @@ do it for earlier branch release files. <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 special schemas named pg_toast_temp_nnn (Tom) </para> @@ -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> @@ -1324,12 +1687,6 @@ do it for earlier branch release files. <listitem> <para> - Add explicit casts between boolean and text/varchar (Neil) - </para> - </listitem> - - <listitem> - <para> Add additional checks for invalidly-encoded data (Andrew) </para> @@ -1640,6 +1997,13 @@ do it for earlier branch release files. <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) </para> @@ -1658,13 +2022,6 @@ do it for earlier branch release files. <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 not (Tom) </para> @@ -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> - 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. + Improve smgr/md API (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. + </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 — 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> @@ -2084,18 +2470,6 @@ do it for earlier branch release files. <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 planner and/or create plans for hypothetical situations (Gurjeet Singh, Tom) @@ -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> @@ -2151,13 +2531,6 @@ do it for earlier branch release files. <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 child memory context is indented two spaces to the right of its parent context (Neil) @@ -2166,13 +2539,6 @@ do it for earlier branch release files. <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 sign_dscale word comes before the weight instead of after (Tom) </para> |