-<!-- $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:
<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>
<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>
<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>
</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)
<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 — 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 — avoiding spill-to-disk for large
+ M is actually the most attractive thing about it.
</para>
</listitem>
<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>
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>
</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
<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>
</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
<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>
</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
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>
</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>
<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>
<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>
<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
<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>
</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>
<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>
<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>
</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>
<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>
<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>
<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>
<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>
</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)
<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)
</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
<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>
</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>
</para>
</listitem>
+ <listitem>
+ <para>
+ Prevent ecpg libraries from exporting any symbols other than
+ their intended API (Michael)
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<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>
<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 — this simplifies many things.
</para>
</listitem>
<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>
</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
<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>
</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
</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