<!--
-$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.343 2005/08/23 12:46:35 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.375 2005/09/24 20:35:21 tgl Exp $
+
+Typical markup:
+
+[A-Z][A-Z ]+[A-Z] <command>
+[A-Za-z_][A-Za-z0-9_]+() <function>
+[A-Za-z_]/[A-Za-z_]+ <filename>
+PostgreSQL <productname>
+pg_[A-Za-z0-9_] <application>
+[A-Z][A-Z] <type>, <envar>, <literal>
+&<> use &
-->
<appendix id="release">
<note>
<title>Release date</title>
- <simpara>2005-1?-??, Current as of 2005-08-16</simpara>
+ <simpara>2005-1?-??, Current as of 2005-09-15</simpara>
</note>
-
+
<sect2>
<title>Overview</title>
<listitem>
<para>
- This was accomplished by eliminating global locks and using a clock
- sweep algorithm to find free buffers.
- </para>
+ Access to the shared buffer cache was identified as a
+ significant scalability problem, particularly on multi-CPU
+ systems. In this release, the way that locking is done in the
+ buffer manager has been overhauled to reduce lock contention
+ and improve scalability. The buffer manager has also been
+ changed to use a <quote>clock sweep</quote> replacement
+ policy.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Allow indexes to be used for MIN/MAX (Tom)
+ Allow index scans to use an intermediate in-memory bitmap (Tom)
</term>
-
+
<listitem>
<para>
- In previous releases, the only way to use index for MIN/MAX was to rewrite
- the query as SELECT col FROM tab ORDER BY col LIMIT 1. This now happens
- automatically.
- </para>
+ In previous releases, only a single index could be used to do
+ lookups on a table. With this feature, if a query has
+ <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
+ no multicolumn index on <literal>col1</> and <literal>col2</>,
+ but there is an index on <literal>col1</> and another on
+ <literal>col2</>, it is possible to search both indexes and
+ combine the results in memory, then do heap fetches for only
+ the rows matching both the <literal>col1</> and
+ <literal>col2</> restrictions. This is very useful in
+ environments that have a lot of unstructured queries where it
+ is impossible to create indexes that match all possible access
+ conditions. Bitmap scans are useful even with a single index,
+ as they reduce the amount of random access needed; a bitmap
+ index scan is efficient for retrieving fairly large fractions
+ of the complete table, whereas plain index scans are not.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
+ </term>
+
+ <listitem>
+ <para>
+ Two-phase commit allows transactions to be "prepared" on several
+ computers, and once all computers have successfully prepared
+ their transactions (none failed), all transactions can be
+ committed. Even if a machine crashes after a prepare, the
+ prepared transaction can be committed after the machine is
+ restarted. New syntax includes <command>PREPARE TRANSACTION</> and
+ <command>COMMIT/ROLLBACK PREPARED</>. A new system view
+ <literal>pg_prepared_xacts</> has also been added.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Add in-memory bitmaps which allows multiple indexes to be merged in a
- single query (Tom)
+ Create a new role system that replaces users and groups
+ (Stephen Frost)
</term>
<listitem>
<para>
- This allows multiple indexes to be combined to access a single
- table.
+ Roles are a combination of users and groups. Like users, they
+ can have login capability, and like groups, a role can have
+ other roles as members. Roles basically remove the distinction
+ between users and groups. For example, a role can:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Have login capability (optionally)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Own objects
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Hold access permissions for database objects
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Inherit permissions from other roles it is a member of
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ <para>
+ Once a user logs into a role, she obtains capabilities of
+ the login role plus any inherited roles, and can use
+ <command>SET ROLE</> to switch to other roles she is a member of.
+ This feature is a generalization of the SQL standard's concept of
+ roles.
+ This change also replaces <structname>pg_shadow</> and
+ <structname>pg_group</> by new role-capable catalogs
+ <structname>pg_authid</> and <structname>pg_auth_members</>. The old
+ tables are redefined as read-only views on the new role tables.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
+ Automatically use indexes for <function>MIN()</> and
+ <function>MAX()</> (Tom)
</term>
-
+
<listitem>
<para>
- Two-phase commit allows transactions to be "prepared" on several
- computers, and once all computers have successfully prepared their
- transactions (and can not be rolled back) all transactions can be
- committed. Even if a machine crashes after a prepare, the prepared
- transaction can be committed after it is restarted. New syntax
- includes PREPARE TRANSACTION and COMMIT/ROLLBACK PREPARED. A new
- system view pg_prepared_xacts has also been added.
+ In previous releases, the only way to use an index for
+ <function>MIN()</> or <function>MAX()</> was to rewrite the
+ query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
+ Index usage now happens automatically.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Move <filename>/contrib/pg_autovacuum</> into the main server
+ (Alvaro)
+ </term>
+
+ <listitem>
+ <para>
+ Integrating autovacuum into the server allows it to be
+ automatically started and stopped in sync with the database
+ server, and allows autovacuum to be configured from
+ <filename>postgresql.conf</>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Replace pg_shadow and pg_group by new role-capable catalogs pg_authid
- and pg_auth_members.
+ Add shared row level locks using <command>SELECT ... FOR SHARE</>
+ (Alvaro)
</term>
<listitem>
<para>
- Add SET ROLE (Stephen Frost)
+ While <productname>PostgreSQL</productname>'s MVCC locking
+ allows <command>SELECT</> to never be blocked by writers and
+ therefore does not need shared row locks for typical operations,
+ shared locks are useful for applications that require shared row
+ locking. In particular this reduces the locking requirements
+ imposed by referential integrity checks.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Move /contrib/pgautovacuum into the main server (Alvaro Herrera)
+ Add dependencies on shared objects, specifically roles
+ (Alvaro)
</term>
<listitem>
<para>
- Add SET ROLE (Stephen Frost)
+ This extension of the dependency mechanism prevents roles from
+ being dropped while there are still database objects they own.
+ Formerly it was possible to accidentally <quote>orphan</> objects by
+ deleting their owner. While this could be recovered from, it
+ was messy and unpleasant.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- Add shared row level locks using SELECT ... FOR SHARE (Alvaro)
+ Improve performance for partitioned tables (Simon)
</term>
<listitem>
<para>
- While PostgreSQL's MVCC locking allows SELECT to never be blocked by writers
- and therefore does not need shared row locks for typical operations,
- shared locks are useful for applications that require shared row locking,
- and to reduce the locking requirements to maintain referential integrity.
+ The new <varname>constraint_exclusion</varname> configuration
+ parameter avoids lookups on child tables where constraints indicate
+ that no matching rows exist in the child table.
+ </para>
+ <para>
+ This allows for a basic type of table partitioning. If child tables
+ store separate key ranges and this is enforced using appropriate
+ <command>CHECK</> constraints, the optimizer will skip child
+ table accesses when the constraint guarantees no matching rows
+ exist in the child table.
</para>
</listitem>
</varlistentry>
<title>Migration to version 8.1</title>
<para>
- A dump/restore using <application>pg_dump</application> is
- required for those wishing to migrate data from any previous
- release.
+ A dump/restore using <application>pg_dump</application> is required
+ for those wishing to migrate data from any previous release.
</para>
<para>
The 8.0 release announced that the <function>to_char()</> function
- for intervals would be removed in 8.1. However, since no better API has been
- suggested, to_char(interval) has been enhanced in 8.1 and will remain in the
- server.
+ for intervals would be removed in 8.1. However, since no better API
+ has been suggested, <function>to_char(interval)</> has been enhanced in
+ 8.1 and will remain in the server.
</para>
<para>
<listitem>
<para>
- Change add_missing_from to 'false'
+ <varname>add_missing_from</> is now false by default (Neil)
</para>
<para>
- Generate an error if a table used in a query without a FROM reference (Neil)
- No more SELECT pg_class.*;
+ By default, we now generate an error if a table is used in a query
+ without a <command>FROM</> reference. The old behavior is still
+ available, but the parameter must be set to 'true' to obtain it.
</para>
</listitem>
<listitem>
<para>
- Cause input of a zero-length string ('') for float4/float8/oid to throw
- an error, rather than treat it as a zero (Neil)
+ Cause input of a zero-length string ('') for float4/float8/oid
+ to throw an error, rather than treating it as a zero (Neil)
</para>
<para>
- This change is consistent with the current handling of zero-length
- strings for integers. The schedule for this change was announced in 8.0.
+ This change is consistent with the current handling of
+ zero-length strings for integers. The schedule for this change
+ was announced in 8.0.
</para>
</listitem>
<listitem>
<para>
- Make default_with_oids default to false (Neil)
+ <varname>default_with_oids</> is now false by default (Neil)
</para>
<para>
- With this option set to false, user-created tables no
- have an the usually-invisible OID column unless WITH OIDS
- is specified in CREATE TABLE. Though OIDs have existed in all previous
- releases of PostgreSQL, their use is limited because they are only four
- bytes long and the counter is unique across all installed databases.
- The preferred way of uniquely identifying rows is via sequences and
- SERIAL, which has been supported since PostgreSQL 6.4.
+ With this option set to false, user-created tables no longer
+ have an OID column unless <command>WITH OIDS</> is specified in
+ <command>CREATE TABLE</>. Though OIDs have existed in all
+ releases of <productname>PostgreSQL</>, their use is limited
+ because they are only four bytes long and the counter is shared
+ across all installed databases. The preferred way of uniquely
+ identifying rows is via sequences and the <type>SERIAL</> type,
+ which have been supported since <productname>PostgreSQL</> 6.4.
</para>
</listitem>
<listitem>
<para>
- Add E'' syntax so eventually normal strings can treat backslashes
- literally (Bruce)
+ Add <literal>E''</> syntax so eventually ordinary strings can
+ treat backslashes literally (Bruce)
+ </para>
+ <para>
+ Currently <productname>PostgreSQL</productname> processes a
+ backslash in a string literal as introducing a special escape sequence,
+ e.g. <literal>\n</> or <literal>\010</>.
+ While this allows easy entry of special values, it is
+ non-standard and makes porting of applications from other
+ databases more difficult. For this reason, the
+ <productname>PostgreSQL</productname> project is planning to
+ remove the special meaning of backslashes in strings. For
+ backward compatibility and for users who want special backslash
+ processing, a new string syntax has been created. This new string
+ syntax is formed by writing an <literal>E</> immediately preceding the
+ single quote that starts the string, e.g. <literal>E'hi\n'</>. While
+ this release does not change the handling of backslashes in strings, it
+ does add new configuration parameters to help users migrate applications
+ for future releases:
+ </para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <varname>standard_conforming_strings</> — does this release
+ treat backslashes literally in ordinary strings?
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <varname>escape_string_warning</> — warn about backslashes in
+ ordinary (non-E) strings
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>
+ The <varname>standard_conforming_strings</> value is read-only.
+ Applications can retrieve the value to know how backslashes are
+ processed. (Presence of the parameter can also be taken as an
+ indication that <literal>E''</> string syntax is supported.)
+ In a future release, <varname>standard_conforming_strings</>
+ will be true, meaning backslashes will be treated literally in
+ non-E strings. To prepare for this change, use <literal>E''</>
+ strings in places that need special backslash processing, and
+ turn on <varname>escape_string_warning</> to find additional
+ strings that need to be converted to use <literal>E''</>.
+ Also, use two single-quotes (<literal>''</>) to embed a literal
+ single-quote in a string, rather than the
+ <productname>PostgreSQL</productname>-supported syntax of
+ backslash single-quote (<literal>\'</>). The former is
+ standards-conforming and does not require the use of the
+ <literal>E''</> string syntax. You can also use the
+ <literal>$$</> string syntax, which does not treat backslashes
+ specially.
</para>
+ </listitem>
+
+ <listitem>
<para>
- Currently PostgreSQL considers a backslash to be a special character
- so the character after the backslash is treated specially. While this
- allows easy entry of special values, it is non-standard and makes
- porting of application from other databases more difficult. For this
- reason, the PostgreSQL project is moving to remove the special meaning
- of backslashes in strings, and allow only an E preceeding a string to
- turn on the special handling of backslashes. For this reason, this
- release adds several new GUC variables related to backslash
- processing:
-
- escape_string_warning - warn about backslashes in non-E strings
- escape_string_syntax - does this release support the E'' syntax?
- standard_conforming_strings - does this release treat backslashes
- literally in non-E strings
+ Make <command>REINDEX DATABASE</> reindex all indexes in the
+ database (Tom)
</para>
<para>
- The last two values are read-only and should assist in the porting of
- applications. Applications can retrieve these values to know how
- backslashes are processed. In a later release,
- standard_conforming_strings will be true, meaning backslashes will be
- treated literally in non-E strings. To prepare for this change, use
- E'' strings in places that need special backslash processing, and turn
- on escape_string_warning to find additional strings that need to be
- converted to use E''.
+ Formerly, <command>REINDEX DATABASE</> reindexed only
+ system tables. This new behavior seems more intuitive. A new
+ command <command>REINDEX SYSTEM</> provides the old functionality
+ of reindexing just the system tables.
</para>
</listitem>
<listitem>
<para>
- Make REINDEX DATABASE reindex all indexes in the database (Tom)
+ Read-only large object descriptors now obey MVCC snapshot semantics
</para>
<para>
- The old behavior of REINDEX database reindexed only system tables.
- This new behavior seems more intuitive. A new command REINDEX SYSTEM
- allows for reindexing just the system tables.
+ When a large object is opened with <literal>INV_READ</> (and not
+ <literal>INV_WRITE</>), the data read from the descriptor will now
+ reflect a <quote>snapshot</> of the large object's state at the
+ time of the transaction snapshot in use by the query that called
+ <function>lo_open()</>. To obtain the old behavior of always
+ returning the latest committed data, include <literal>INV_WRITE</>
+ in the mode flags for <function>lo_open()</>.
</para>
</listitem>
<listitem>
<para>
- In psql, treat unquoted \{digit}+ sequences as octal (Bruce)
+ In <application>psql</application>, treat unquoted
+ <literal>\{digit}+</> sequences as octal (Bruce)
</para>
<para>
- In previous releases, \{digit}+ sequences were treated as
- decimal, and only \0{digit}+ were treated as octal. This
- change was made for consistency.
+ In previous releases, <literal>\{digit}+</> sequences were
+ treated as decimal, and only <literal>\0{digit}+</> were treated
+ as octal. This change was made for consistency.
</para>
</listitem>
<listitem>
<para>
- Remove grammar productions for prefix and postfix % and ^ operators
+ Remove grammar productions for prefix and postfix <literal>%</>
+ and <literal>^</> operators
(Tom)
</para>
<para>
- These have never been documented and complicated the use of modulus
- (%) with negative numbers.
+ These have never been documented and complicated the use of the
+ modulus operator (<literal>%</>) with negative numbers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <literal>&<</> and <literal>&></> for polygons
+ consistent with the box "over" operators (Tom)
</para>
</listitem>
<listitem>
<para>
- Make "&<" and "&>" for polygons consistent with the box
- "over" operators (Tom)
+ <command>CREATE LANGUAGE</> may ignore the provided arguments
+ in favor of information from <structname>pg_pltemplate</>
+ (Tom)
+ </para>
+ <para>
+ A new system catalog <structname>pg_pltemplate</> has been defined
+ to carry information about the preferred definitions of procedural
+ languages (such as whether they have validator functions). When
+ an entry exists in this catalog for the language being created,
+ <command>CREATE LANGUAGE</> will ignore all its parameters except the
+ language name and instead use the catalog information. This measure
+ was taken because of increasing problems with obsolete language
+ definitions being loaded by old dump files. As of 8.1,
+ <application>pg_dump</> will dump procedural language definitions as
+ just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
+ on a template entry to exist at load time. We expect this will be a
+ more future-proof representation.
</para>
</listitem>
+ <listitem>
+ <para>
+ Make <function>pg_cancel_backend(int)</function> return a
+ <type>boolean</type> rather than an <type>integer</type> (Neil)
+ </para>
+ </listitem>
</itemizedlist>
</sect2>
<sect2>
- <title>Changes</title>
+ <title>Additional Changes</title>
<para>
- Below you will find a detailed account of the changes between
- release 8.1 and the previous major release.
+ Below you will find a detailed account of the additional changes
+ between <productname>PostgreSQL</productname> 8.1 and the
+ previous major release.
</para>
<sect3>
<title>Performance Improvements</title>
<itemizedlist>
-
+
<listitem>
<para>
- Improve rtree index capabilities and performance (Neil)
- Replaced by contrib?
+ Improve GiST and rtree index performance (Neil)
</para>
</listitem>
<listitem>
<para>
- Improve the optimizer, including auto-resizing of hash joins (Tom)
+ Improve the optimizer, including auto-resizing of hash joins
+ (Tom)
</para>
</listitem>
<listitem>
<para>
- Overhaul internal API in several areas to improve performance
+ Overhaul internal API in several areas
</para>
</listitem>
<listitem>
<para>
- Change WAL CRC records from 64bit to 32bit to improve performance
- (Tom)
+ Change WAL record CRCs from 64-bit to 32-bit (Tom)
+ </para>
+ <para>
+ We determined that the extra cost of computing 64-bit CRCs was
+ significant, and the gain in reliability too marginal to justify it.
</para>
</listitem>
<listitem>
<para>
- Allow non-consecutive index columns to be used in a multi-column index
- (Tom)
+ Allow non-consecutive index columns to be used in a multi-column
+ index (Tom)
</para>
<para>
- For example, this allows an index on columns a,b,c to be used in a
- query with WHERE a = 4 and c = 10
+ For example, this allows an index on columns a,b,c to be used in
+ a query with <command>WHERE a = 4 and c = 10</>.
</para>
</listitem>
<listitem>
<para>
- Skip WAL logging for CREATE TABLE AS / SELECT INTO (Simon)
+ Skip WAL logging for <command>CREATE TABLE AS</> /
+ <command>SELECT INTO</> (Simon)
</para>
<para>
- Since a crash during CREATE TABLE would cause the table to be dropped
- during recovery, there is no reason to WAL log as the table is loaded.
+ Since a crash during <command>CREATE TABLE AS</> would cause the
+ table to be dropped during recovery, there is no reason to WAL
+ log as the table is loaded. (Logging still happens if WAL
+ archiving is enabled, however.)
</para>
</listitem>
<listitem>
<para>
- Allow concurrent GIST index access, greatly improving performance
- (Teodor, Oleg)
+ Allow concurrent GIST index access (Teodor, Oleg)
</para>
</listitem>
<listitem>
<para>
- Add GUC full_page_writes to control writing full pages to WAL (Bruce)
+ Add configuration parameter <varname>full_page_writes</> to
+ control writing full pages to WAL (Bruce)
</para>
<para>
To prevent partial disk writes from corrupting the database,
- PostgreSQL writes a complete copy of each database disk page to WAL
- the first time it is modified after a checkpoint. This turns off that
- functionality for users with battery-backed disk caches where partial
- page writes can not happen.
+ <productname>PostgreSQL</productname> writes a complete copy of
+ each database disk page to WAL the first time it is modified
+ after a checkpoint. This option turns off that functionality for more
+ speed. This is safe to use with battery-backed disk caches where
+ partial page writes cannot happen.
</para>
</listitem>
<listitem>
<para>
- Add constraint_exclusion to restrict child table lookups based on
- table constraints (Simon)
+ Use <literal>O_DIRECT</> if available when using
+ <literal>O_SYNC</> for <varname>wal_sync_method</varname>
+ (Itagaki Takahiro)
</para>
<para>
- This allows for a type of table partitioning. If child table placed
- in a different tablespaces using appropriate CHECK constraints, the
- optimizer will skip child table accesses if the constraint guarantees
- no matching rows exist in the child table.
+ <literal>O_DIRECT</> causes disk writes to bypass the kernel
+ cache, and for WAL writes, this improves performance.
</para>
</listitem>
<listitem>
<para>
- Use O_DIRECT if available when using O_SYNC for wal_sync_method (ITAGAKI
- Takahiro)
+ Improve <command>COPY FROM</> performance (Alon Goldshuv)
</para>
<para>
- O_DIRECT causes disk writes to bypass the kernel cache, and for WAL
- writes, this improves performance.
+ This was accomplished by reading <command>COPY</> input in
+ larger chunks, rather than character by character.
</para>
</listitem>
<listitem>
<para>
- Improve COPY FROM performance (Alon Goldshuv)
- </para>
- <para>
- This was accomplished by reading COPY input in larger chunks, rather
- than character by character.
+ Improve the performance of <function>COUNT()</function>,
+ <function>SUM</function>, <function>AVG()</function>,
+ <function>STDDEV()</function>, and
+ <function>VARIANCE()</function> (Neil, Tom)
</para>
</listitem>
-
</itemizedlist>
</sect3>
-
-
+
<sect3>
<title>Server Changes</title>
<itemizedlist>
-
+
<listitem>
<para>
- Prevent problems due to transaction ID wraparound (Tom)
+ Prevent problems due to transaction ID (XID) wraparound (Tom)
</para>
<para>
- This was accomplished by warning the transaction counter is
- near the the earliest transaction id determined by the
- database whose last vacuum is the oldest. If the limit is
- reached, the server will no longer accept queries.
+ The server will now warn when the transaction counter approaches
+ the wraparound point. If the counter becomes too close to wraparound,
+ the server will stop accepting queries. This ensures that data is
+ not lost before needed vacuuming is performed.
</para>
</listitem>
<listitem>
<para>
- Fix problem of OID wraparound conflicting with existing system objects
- (Tom)
+ Fix problems with object IDs (OIDs) conflicting with existing system
+ objects after the OID counter has wrapped around (Tom)
</para>
</listitem>
<listitem>
<para>
- Add warning about the need to increase "max_fsm_relations" and
- "max_fsm_pages" during VACUUM (Ron Mayer)
+ Add warning about the need to increase
+ <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
+ during <command>VACUUM</> (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <varname>temp_buffers</> configuration parameter to allow
+ users to determine the size of the local buffer area for
+ temporary table access (Tom)
</para>
</listitem>
<listitem>
<para>
- Add temp_buffers GUC variable to allow users to determine the size
- of the local buffer area for temporary table access (Tom)
+ Add session start time and client IP address to
+ <literal>pg_stat_activity</> (Magnus)
</para>
</listitem>
<listitem>
<para>
- Add session start time and client IP address to pg_stat_activity (Magnus)
+ Enhance <literal>pg_locks</> display (Tom)
</para>
</listitem>
<listitem>
<para>
- Enhance pg_locks display (Tom)
+ Log queries for client-side <command>PREPARE</> and
+ <command>EXECUTE</> (Simon)
</para>
</listitem>
<listitem>
<para>
- Log queries for client-side PREPARE and EXECUTE (Simon)
+ Allow Kerberos name and user name case sensitivity to be
+ specified in <filename>postgresql.conf</> (Magnus)
</para>
</listitem>
<listitem>
<para>
- Allow Kerberos name and user name case sensitivity to be specified from
- postgresql.conf (Magnus)
+ Add configuration parameter <varname>krb_server_hostname</> so
+ that the server hostname can be specified as part of service
+ principal (Todd Kover)
+ </para>
+ <para>
+ If not set, any service principal matching an entry in the
+ keytab can be used. This is new Kerberos matching behavior in
+ this release.
</para>
</listitem>
<listitem>
<para>
- Add log_line_prefix options for millisecond timestamps (%m) and
- remote host (%h) (Ed L.)
+ Add <varname>log_line_prefix</> options for millisecond
+ timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
+ L.)
</para>
</listitem>
Add WAL logging for GIST indexes (Teodor, Oleg)
</para>
<para>
- GIST indexes now work for online backup and crash recovery
+ GIST indexes are now safe for crash and point-in-time recovery.
</para>
</listitem>
<listitem>
<para>
- Add GUC krb_server_hostname so the server hostname can be specified as
- part of service principal (Todd Kover)
+ Remove old <filename>*.backup</> files when we do
+ <function>pg_stop_backup()</> (Bruce)
</para>
<para>
- If not set, any service principal matching an entry in the keytab
- can be used. This is new Kerberos matching behavior in this release.
+ This prevents a large number of <filename>*.backup</> files from
+ existing in <filename>/pg_xlog</>.
</para>
</listitem>
<listitem>
<para>
- Remove old *.backup files when we do pg_stop_backup() (Bruce)
+ Add configuration parameters to control TCP/IP keep-alive
+ times for idle, interval, and count (Oliver Jowett)
</para>
+
<para>
- This prevents a large number of *.backup files from existing in
- pg_xlog/.
+ These values can be changed to allow more rapid detection of
+ lost client connections.
</para>
</listitem>
<listitem>
<para>
- Add GUC variables to control keep-alive times for idle, interval, and
- count (Oliver Jowett)
+ Add per-user and per-database connection limits (Petr Jelinek)
+ </para>
+ <para>
+ Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
+ limits can now be enforced on the maximum number of sessions that
+ can concurrently connect as a specific user or to a specific database.
+ Setting the limit to zero disables user or database connections.
</para>
</listitem>
<listitem>
<para>
- Add per-user and per-database connection limits (Petr Jelinek)
+ Allow more than two gigabytes of shared memory and per-backend
+ work memory on 64-bit machines (Koichi Suzuki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New system catalog <structname>pg_pltemplate</> allows overriding
+ obsolete procedural-language definitions in dump files (Tom)
</para>
</listitem>
<listitem>
<para>
- Add temporary views (Koju Iijima)
+ Add temporary views (Koju Iijima, Neil)
</para>
</listitem>
<listitem>
<para>
- Fix HAVING without aggregate functions and no GROUP BY to behave
- as if the main query returns a single group (Tom)
+ Fix <command>HAVING</> without any aggregate functions or
+ <command>GROUP BY</> so that the query returns a single group (Tom)
+ </para>
+ <para>
+ Previously, such a case would treat the <command>HAVING</>
+ clause the same as a <command>WHERE</> clause. This was not per spec.
</para>
</listitem>
<listitem>
<para>
- Add USING clause to allow additional tables to be specified to DELETE
- (Euler Taveira de Oliveira)
+ Add <command>USING</> clause to allow additional tables to be
+ specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
+ </para>
+ <para>
+ In prior releases, there was no clear method for specifying
+ additional tables to be used for joins in a <command>DELETE</>
+ statement. <command>UPDATE</> already has a <literal>FROM</>
+ clause for this purpose.
</para>
</listitem>
<listitem>
<para>
- Add support for \x hex escapes in backend and ecpg strings (Bruce)
+ Add support for <literal>\x</> hex escapes in backend and ecpg
+ strings (Bruce)
</para>
<para>
- This supports the typical C standard \x escape. Octal was already
- supported.
+ This is just like the standard C <literal>\x</> escape syntax.
+ Octal escapes were already supported.
</para>
</listitem>
<listitem>
<para>
- Add BETWEEN SYMMETRIC query syntax (Pavel Stehule)
+ Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
</para>
<para>
- This feature allows BETWEEN comparisons without requiring the first
- value to be less than the second. For example, 2 BETWEEN [ASYMMETRIC] 3 AND 1
- returns false, while 2 BETWEEN SYMMETRIC 3 AND 1 returns true. BETWEEN
- ASYMMETRIC was already supported.
+ This feature allows <command>BETWEEN</> comparisons without
+ requiring the first value to be less than the second. For
+ example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
+ false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
+ true. <command>BETWEEN ASYMMETRIC</> was already supported.
</para>
</listitem>
<listitem>
<para>
- Add NOWAIT option to SELECT ... FOR UPDATE/SHARE (Hans-Juergen Schoenig)
+ Add <command>NOWAIT</> option to <command>SELECT ... FOR
+ UPDATE/SHARE</> (Hans-Juergen Schoenig)
</para>
<para>
- While SET statement_timeout allows a query taking over a certain
- amount of time to be cancelled, the NO WAIT option allows a query to
- be canceled as soon as a SELECT ... FOR UPDATE/SHARE can not
- immediately acquire a row lock.
+ While the <varname>statement_timeout</> configuration
+ parameter allows a query taking more than a certain amount of
+ time to be cancelled, the <command>NOWAIT</> option allows a
+ query to be canceled as soon as a <command>SELECT ... FOR
+ UPDATE/SHARE</> command cannot immediately acquire a row lock.
</para>
</listitem>
-
</itemizedlist>
</sect3>
Track dependencies of shared objects (Alvaro)
</para>
<para>
- PostgreSQL allows global tables (users, databases, tablespaces) to
- reference information in multiple databases. This addition adds
- dependency information for global tables, so, for example, user
- ownership can be tracked across databases, so a user who owns
- something in any database can no longer be removed. Dependency
- tracking already existed for database-local objects.
+ <productname>PostgreSQL</productname> allows global tables
+ (users, databases, tablespaces) to reference information in
+ multiple databases. This addition adds dependency information
+ for global tables, so, for example, user ownership can be
+ tracked across databases, so a user who owns something in any
+ database can no longer be removed. Dependency tracking already
+ existed for database-local objects.
</para>
</listitem>
<listitem>
<para>
- Allow ALTER OWNER commands to be performed by the object owner as
- well as the superuser (Stephen Frost)
+ Allow limited <command>ALTER OWNER</> commands to be performed
+ by the object owner (Stephen Frost)
</para>
<para>
- Prior releases only allowed super-user to change object owners, even
- if the current owner was executing the command and the new owner
- have permission to create objects of that type.
+ Prior releases allowed only superusers to change object owners.
+ Now, ownership can be transferred if the user executing the command
+ owns the object and would be able to create it as the new owner
+ (that is, the user is a member of the new owning role and that role
+ has the CREATE permission that would be needed to create the object
+ afresh).
</para>
</listitem>
<listitem>
<para>
- Add ALTER object SET SCHEMA capability for some object types
- (tables, functions, types) (Bernd Helmle)
+ Add <command>ALTER</> object <command>SET SCHEMA</> capability
+ for some object types (tables, functions, types) (Bernd Helmle)
</para>
<para>
This allows objects to be moved to different schemas.
</para>
</listitem>
+ <listitem>
+ <para>
+ Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
+ disable triggers (Satoshi Nagayasu)
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<listitem>
<para>
- Allow TRUNCATE to truncate multiple files in a single command (Alvaro)
+ Allow <command>TRUNCATE</> to truncate multiple tables in a
+ single command (Alvaro)
</para>
<para>
- Because of referential integrity checks, it is impossible to truncate
- a table that is part of a referential integrity constraint. Using this
- new functionality, TRUNCATE can be used to truncate all tables
- involved in referential integrity if they are truncated in a
- single TRUNCATE command.
+ Because of referential integrity checks, it is not allowed to
+ truncate a table that is part of a referential integrity
+ constraint. Using this new functionality, <command>TRUNCATE</>
+ can be used to truncate such tables, if both tables involved in
+ a referential integrity constraint are truncated in a single
+ <command>TRUNCATE</> command.
</para>
</listitem>
<listitem>
<para>
- Properly process carriage returns and line feeds in COPY CSV mode
- (Andrew Dunstan)
+ Properly process carriage returns and line feeds in
+ <command>COPY CSV</> mode (Andrew)
</para>
<para>
- In release 8.0, carriage returns and line feeds in CSV COPY TO were
- processed in an inconsistent manner. (This was documented on the TODO
- list.)
+ In release 8.0, carriage returns and line feeds in <command>CSV
+ COPY TO</> were processed in an inconsistent manner. (This was
+ documented on the TODO list.)
</para>
</listitem>
<listitem>
<para>
-
- Add COPY WITH CSV HEADER to allow a heading line as the first line in
- COPY (Andrew)
+ Add <command>COPY WITH CSV HEADER</> to allow a header line as
+ the first line in <command>COPY</> (Andrew)
</para>
<para>
- This allows handling of the common CSV usage of placing the column
- names on the first line of the data file. For COPY TO, the first line
- contains the column names, and for COPY FROM, the first line is
- ignored.
+ This allows handling of the common <command>CSV</> usage of
+ placing the column names on the first line of the data file. For
+ <command>COPY TO</>, the first line contains the column names,
+ and for <command>COPY FROM</>, the first line is ignored.
</para>
</listitem>
<listitem>
<para>
- On Win32, display better sub-second precision in EXPLAIN ANALYZE (Magnus)
+ On Windows, display better sub-second precision in
+ <command>EXPLAIN ANALYZE</> (Magnus)
</para>
</listitem>
<listitem>
<para>
- Add trigger duration display to EXPLAIN ANALYZE (Tom)
+ Add trigger duration display to <command>EXPLAIN ANALYZE</>
+ (Tom)
</para>
<para>
- Prior releases lumped trigger execution time into the total execution
- time.
+ Prior releases included trigger execution time as part of the
+ total execution time, but did not show it separately. It is now
+ possible to see how much time is spent in each trigger.
</para>
</listitem>
<listitem>
<para>
- Add support for \x hex escapes in COPY (Sergey Ten)
+ Add support for <literal>\x</> hex escapes in <command>COPY</>
+ (Sergey Ten)
</para>
<para>
Previous releases only supported octal escapes.
<listitem>
<para>
- Have SHOW ALL include variable descriptions (Matthias Schmidt)
+ Make <command>SHOW ALL</> include variable descriptions
+ (Matthias Schmidt)
</para>
<para>
- SHOW varname still only displays the variable's value and does not
- include the description.
+ <command>SHOW</> varname still only displays the variable's
+ value and does not include the description.
</para>
</listitem>
<listitem>
<para>
- Have initdb create new standard database called "postgres" and
- convert utilities to use "postgres" rather than "template1" for
+ Make <application>initdb</application> create a new standard
+ database called <literal>postgres</>, and convert utilities to
+ use <literal>postgres</> rather than <literal>template1</> for
standard lookups (Dave)
</para>
<para>
- In prior releases, template1 was used both as a default
- connection for utilities like createuser, and as a template for
- new databases. This caused CREATE DATABASE to sometimes fail
- because a new database cannot be created if anyone else is in
- the template database. With this change, the default connection
- database is now 'postgres', meaning it is much less likely
- someone will be using template1 during CREATE DATABASE.
+ In prior releases, <literal>template1</> was used both as a
+ default connection for utilities like
+ <application>createuser</application>, and as a template for
+ new databases. This caused <command>CREATE DATABASE</> to
+ sometimes fail, because a new database cannot be created if
+ anyone else is in the template database. With this change, the
+ default connection database is now <literal>postgres</>,
+ meaning it is much less likely someone will be using
+ <literal>template1</> during <command>CREATE DATABASE</>.
</para>
</listitem>
<listitem>
<para>
- Create new reindexdb command-line utility by moving /contrib/reindexdb
- into the server (Euler Taveira de Oliveira)
+ Create new <application>reindexdb</application> command-line
+ utility by moving <filename>/contrib/reindexdb</> into the
+ server (Euler Taveira de Oliveira)
</para>
</listitem>
<listitem>
<para>
- Add MAX() and MIN() aggregates for array types (Koju Iijima)
- </para>
- <para>
- How does this work?
+ Add <function>MAX()</> and <function>MIN()</> aggregates for
+ array types (Koju Iijima)
</para>
</listitem>
<listitem>
<para>
- Fix to_date() and to_timestamp() to behave reasonably when
- CC and YY fields are both used (Karel Zak)
+ Fix <function>to_date()</> and <function>to_timestamp()</> to
+ behave reasonably when <literal>CC</> and <literal>YY</> fields
+ are both used (Karel Zak)
</para>
<para>
- If the format specification contains CC and a year specification is
- YYY or longer, ignore the CC. If the year specification is
- YY or shorter, interpret CC as the previous century. ?
+ If the format specification contains <literal>CC</> and a year
+ specification is <literal>YYY</> or longer, ignore the
+ <literal>CC</>. If the year specification is <literal>YY</> or
+ shorter, interpret <literal>CC</> as the previous century.
</para>
</listitem>
<listitem>
<para>
- Add md5(bytea) (Abhijit Menon-Sen)
+ Add <function>md5(bytea)</> (Abhijit Menon-Sen)
</para>
<para>
- md5(text) already existed.
+ <function>md5(text)</> already existed.
</para>
</listitem>
<listitem>
<para>
- Fix CHAR() to properly pad out to the specified length when
- using a multiple-byte character set (Yoshiyuki Asaba)
+ Fix <type>CHAR()</> to properly pad spaces to the specified
+ length when using a multiple-byte character set (Yoshiyuki
+ Asaba)
</para>
<para>
- In prior releases, the padding of CHAR() was incorrect because it only
- padded to the specified number of bytes without considering how many
- characters were stored.
+ In prior releases, the padding of <type>CHAR()</> was incorrect
+ because it only padded to the specified number of bytes without
+ considering how many characters were stored.
</para>
</listitem>
<listitem>
<para>
- Add support for NUMERIC ^ NUMERIC based on power(numeric, numeric)
+ Add support for <command>numeric ^ numeric</> based on
+ <function>power(numeric, numeric)</>
</para>
<para>
- The function already existed, but there was no operator assigned to
- it.
+ The function already existed, but there was no operator assigned
+ to it.
</para>
</listitem>
<listitem>
<para>
- Fix NUMERIC modulus by properly truncating the quotient during
- computation (Bruce)
+ Fix <type>NUMERIC</> modulus by properly truncating the quotient
+ during computation (Bruce)
</para>
<para>
- In previous releases, modulus for large values sometimes returned
- negative results due to the rounding of the quotient.
+ In previous releases, modulus for large values sometimes
+ returned negative results due to rounding of the quotient.
</para>
</listitem>
<listitem>
<para>
- Add a function lastval(), which returns the value returned by the
- last nextval() or setval() performed by the current session. (Dennis
- Björklund)
+ Add a function <function>lastval()</>(Dennis Björklund)
</para>
<para>
- lastval() is a simplified version of currval(). It automatically
- determines the proper sequence name based on the most recent
- nextval() call.
+ <function>lastval()</> is a simplified version of
+ <function>currval()</>. It automatically determines the proper
+ sequence name based on the most recent <function>nextval()</> or
+ <function>setval()</> call performed by the current session.
</para>
</listitem>
<listitem>
<para>
- Add to_timestamp(double precision)
+ Add <function>to_timestamp(DOUBLE PRECISION)</>
</para>
<para>
- Converts Unix seconds since 1970 to a timestamp with timezone.
+ Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
+ TIMEZONE</>.
</para>
</listitem>
<listitem>
<para>
- Add pg_postmaster_start_time() function (Euler Taveira de Oliveira,
- Matthias Schmidt)
+ Add <function>pg_postmaster_start_time()</> function (Euler
+ Taveira de Oliveira, Matthias Schmidt)
</para>
</listitem>
<listitem>
<para>
- Allow the full use of time zone names in "AT TIME ZONE", not just
- the short list previously available (Magnus)
- </para>
- <para>
- Previously, only a predefined list of time zone names were supported
- by AT TIME ZONE. Now any supported time zone name can be used, e.g.:
+ Allow the full use of time zone names in <command>AT TIME
+ ZONE</>, not just the short list previously available (Magnus)
</para>
<para>
+ Previously, only a predefined list of time zone names were
+ supported by <command>AT TIME ZONE</>. Now any supported time
+ zone name can be used, e.g.:
+ <programlisting>
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
-
- In the above query, the daylight savings time rules were in effect on
- that date are used.
+ </programlisting>
+ In the above query, the time zone used is adjusted based on the
+ daylight savings time rules that were in effect on the supplied
+ date.
</para>
</listitem>
<listitem>
<para>
-
- Add Oracle-compatible GREATEST and LEAST functions (Pavel Stehule)
+ Add <function>GREATEST()</> and <function>LEAST()</> variadic
+ functions (Pavel Stehule)
</para>
<para>
- These functions take a variable number of arguments and return the
- greatest or least value.
+ These functions take a variable number of arguments and return
+ the greatest or least value among the arguments.
</para>
</listitem>
<listitem>
<para>
- Add pg_column_size() to return storage size of a column, including
- possible compression (Mark Kirkwood)
+ Add <function>pg_column_size()</> (Mark Kirkwood)
+ </para>
+ <para>
+ This returns storage size of a column, including any
+ compression used.
</para>
</listitem>
<listitem>
<para>
- Add regexp_replace() (Atsushi Ogawa)
+ Add <function>regexp_replace()</> (Atsushi Ogawa)
</para>
<para>
- This allows regular expression replacement, like sed. A four-argument
- version also allows for global (replace all) and case-insensitive
- modes.
+ This allows regular expression replacement, like sed. An optional
+ flag argument allows selection of global (replace all) and
+ case-insensitive modes.
</para>
</listitem>
Fix interval division and multiplication (Bruce)
</para>
<para>
- Previous versions sometimes returned unjustified results, like
- '4 months'::interval / 5 returning '1 mon -6 days'.
+ Previous versions sometimes returned unjustified results, like
+ <command>'4 months'::interval / 5</> returning <command>'1 mon
+ -6 days'</>.
</para>
</listitem>
<listitem>
<para>
- Add internal 'day' field to INTERVAL so a 1 day interval can be
- distinguished from a 24 hour interval (Michael Glaesemann)
+ Add an internal day field to <type>INTERVAL</> so a one day
+ interval can be distinguished from a 24 hour interval (Michael
+ Glaesemann)
</para>
<para>
- Days that contain a daylight savings time adjustment are not 24 hours,
- but typically 23 or 25 hours. This change allows days (not fixed
- 24-hour periods) to be added to dates who's result includes a daylight
- savings time adjustment period. Therefore, while in previous releases
- '1 day' and '24 hours' where interchangeable interval periods, in this
- release they are treated differently, e.g.
+ Days that contain a daylight savings time adjustment are not 24
+ hours, but typically 23 or 25 hours. This change allows days
+ (not fixed 24-hour periods) to be added to dates who's result
+ includes a daylight savings time adjustment period. Therefore,
+ while in previous releases <literal>1 day</> and <literal>24
+ hours</> were interchangeable interval values, in this release
+ they are treated differently, e.g.
+ <programlisting>
+ '2005-05-03 00:00:00 EST' + '1 day' = '2005-05-04 00:00:00-04'
+ '2005-05-03 00:00:00 EST' + '24 hours' = '2005-05-04 01:00:00-04'
+ </programlisting>
</para>
</listitem>
<listitem>
<para>
- '2005-05-03 00:00:00 EST' + '1 day' = '2005-05-04 00:00:00-04'
+ Add <function>justify_days()</> and <function>justify_hours()</>
+ (Michael Glaesemann)
</para>
- </listitem>
-
- <listitem>
<para>
- '2005-05-03 00:00:00 EST' + '24 hours' = '2005-05-04 01:00:00-04'
+ These functions, respectively, adjust days to an appropriate
+ number of full months and days, and adjust hours to an
+ appropriate number of full days and hours.
</para>
</listitem>
<listitem>
<para>
- Move /contrib/dbsize into the backend, and rename some of the functions
- (Dave Page, Andreas Pflug)
+ Move <filename>/contrib/dbsize</> into the backend, and rename
+ some of the functions (Dave Page, Andreas Pflug)
</para>
<para>
- The new functions are:
- pg_tablespace_size()
- pg_database_size()
- pg_relation_size()
- pg_complete_relation_size()
- pg_size_pretty()
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <function>pg_tablespace_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_database_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_relation_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_total_relation_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_size_pretty()</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
</para>
<para>
- complete_relation_size() includes indexes and TOAST tables.
+ <function>pg_total_relation_size()</> includes indexes and TOAST
+ tables.
</para>
</listitem>
<listitem>
<para>
- Add justify_days() and justify_hours (Michael Glaesemann)
+ Add functions for read-only file access to the cluster directory
+ (Dave Page, Andreas Pflug)
</para>
<para>
- These functions, respectively, adjust days to an appropriate number of
- full months and dayss, and adjust hours to an appropriate number
- of full days and hours.
- </para>
- </listitem>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <function>pg_stat_file()</>
+ </para>
+ </listitem>
- <listitem>
- <para>
- Add files to do read-only I/O on the cluster directory (Dave Page,
- Andreas Pflug)
-
- pg_stat_file()
- pg_read_file()
- pg_ls_dir()
+ <listitem>
+ <para>
+ <function>pg_read_file()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_ls_dir()</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
</para>
</listitem>
-
+
<listitem>
<para>
- Add pg_reload_conf() to force reloading of the configuration files (Dave Page,
- Andreas Pflug)
+ Add <function>pg_reload_conf()</> to force reloading of the
+ configuration files (Dave Page, Andreas Pflug)
</para>
</listitem>
<listitem>
<para>
- Add pg_rotate_logfile() to force rotation of the server log file (Dave Page,
+ Add <function>pg_rotate_logfile()</> to force rotation of the
+ server log file (Dave Page, Andreas Pflug)
</para>
</listitem>
<listitem>
<para>
- Change pg_stat_* views to show TOAST tables (Tom)
+ Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
</para>
</listitem>
<listitem>
<para>
- Rename some encodings to be more consistent and to follow international
- standards(Bruce)
+ Rename some encodings to be more consistent and to follow
+ international standards (Bruce)
</para>
<para>
- Encoding name changes were:
- UNICODE is now UTF8
- ALT is now WIN866
- WIN is now WIN1251
- TCVN is now WIN1258
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <literal>UNICODE</> is now <literal>UTF8</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>ALT</> is now <literal>WIN866</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>WIN</> is now <literal>WIN1251</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>TCVN</> is now <literal>WIN1258</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
</para>
+
<para>
The original names still work.
</para>
<listitem>
<para>
- Add support for Win1252 encoding (Roland Volkmann)
+ Add support for <literal>WIN1252</> encoding (Roland Volkmann)
</para>
</listitem>
<listitem>
<para>
- Add support for 3 and 4-byte UTF8 characters (John Hansen)
+ Add support for 3 and 4-byte <literal>UTF8</> characters (John
+ Hansen)
</para>
<para>
- Previously only one and two-byte UTF8 characters were supported.
- This is particularly important for support for some Chinese character.
+ Previously only one and two-byte <literal>UTF8</> characters
+ were supported. This is particularly important for support for
+ some Chinese characters.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow direct conversion between <literal>EUC_JP</> and
+ <literal>SJIS</> to improve performance (Atsushi Ogawa)
</para>
</listitem>
<listitem>
<para>
- Allow direct conversion between EUC_JP and SJIS to improve performance (Atsushi
- Ogawa)
+ Allow the UTF8 encoding to work on Windows (Magnus)
+ </para>
+ <para>
+ This is done by mapping UTF8 to the Windows-native UTF16
+ implementation.
</para>
</listitem>
<listitem>
<para>
- Fix ALTER LANGUAGE RENAME (Sergey Yatskevich)
+ Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
</para>
</listitem>
<listitem>
<para>
Allow function characteristics, like strictness and volatility,
- to be modified via ALTER FUNCTION (Neil)
+ to be modified via <command>ALTER FUNCTION</> (Neil)
</para>
</listitem>
<listitem>
<para>
- Allow SQL, plperl, PL/PgSQL functions to use OUT and INOUT parameters (Tom)
+ Allow SQL and PL/PgSQL functions to use <command>OUT</> and
+ <command>INOUT</> parameters (Tom)
+ </para>
+ <para>
+ <command>OUT</> is an alternate way for a function to return
+ values. Instead of using <command>RETURN</>, values can be
+ returned by assigning to parameters declared as <command>OUT</> or
+ <command>INOUT</>. This is notationally simpler in some cases,
+ particularly so when multiple values need to be returned.
+ While returning multiple values from a function
+ was possible in previous releases, this greatly simplifies the
+ process. (The feature will be extended to other server-side
+ languages in future releases.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Move language handler functions into the <literal>pg_catalog</> schema
+ </para>
+ <para>
+ This makes it easier to drop the public schema if desired.
</para>
+ </listitem>
+
+ <listitem>
<para>
- OUT is an alternate way for a function to return values. Instead of
- using RETURNS, the function's parameters can be specified as OUT or
- INOUT, allowing multiple values to be returned by the function. While
- returning multiple values from a function was possible in previous
- releases, this greatly simplifies the process.
+ Add <function>SPI_getnspname()</function> to SPI (Neil)
</para>
</listitem>
<listitem>
<para>
- Reduce memory usage of PL/PgSQL functions (Neil)
+ Overhaul the memory management of PL/PgSQL functions (Neil)
</para>
<para>
- Each function now has its own memory context that can be freed when
- the function exits.
+ The parsetree of each function is now stored in a separate
+ memory context. This allows this memory to be easily reclaimed
+ when it is no longer needed.
</para>
</listitem>
<listitem>
<para>
- Check function syntax as CREATE FUNCTION time, rather than at runtime
- (Neil)
+ Check function syntax at <command>CREATE FUNCTION</> time,
+ rather than at runtime (Neil)
</para>
<para>
- Previously, syntax errors were reported only when the function was
- executed.
+ Previously, most syntax errors were reported only when the
+ function was executed.
</para>
</listitem>
<listitem>
<para>
- Allow OPEN to open non-SELECT queries like EXPLAIN and SHOW (Tom)
+ Allow <command>OPEN</> to open non-<command>SELECT</> queries
+ like <command>EXPLAIN</> and <command>SHOW</> (Tom)
</para>
</listitem>
<listitem>
<para>
- No longer require functions to issue a RETURN statement (Tom)
+ No longer require functions to issue a <command>RETURN</>
+ statement (Tom)
</para>
<para>
- This is a byproduct of the newly added OUT and INOUT functionality.
+ This is a byproduct of the newly added <command>OUT</> and
+ <command>INOUT</> functionality. <command>RETURN</> can
+ be omitted when it is not needed to provide the function's
+ return value.
</para>
</listitem>
<listitem>
<para>
- Add support for an optional INTO clause to PL/PgSQL's EXECUTE command
- (Pavel Stehule)
+ Add support for an optional <command>INTO</> clause to
+ PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
</para>
</listitem>
<listitem>
<para>
- Make CREATE TABLE AS set ROW_COUNT (Tom)
+ Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
</para>
</listitem>
<listitem>
<para>
- Define SQLSTATE and SQLERRM to return the SQLSTATE and
- error message of the current exception (Pavel Stehule)
+ Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
+ the <literal>SQLSTATE</> and error message of the current
+ exception (Pavel Stehule, Neil)
</para>
<para>
- These variables are only accessable inside exception blocks.
+ These variables are only defined inside exception blocks.
</para>
</listitem>
<listitem>
<para>
- Allow the parameters to the RAISE statement to be expressions
- (Pavel Stehule)
+ Allow the parameters to the <command>RAISE</> statement to be
+ expressions (Pavel Stehule, Neil)
</para>
</listitem>
<listitem>
<para>
- Add a loop CONTINUE statement (Pavel Stehule)
+ Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
</para>
</listitem>
<listitem>
<para>
- Allow large result sets to be returned efficiently (Abhijit Menon-Sen)
+ Allow large result sets to be returned efficiently (Abhijit
+ Menon-Sen)
</para>
<para>
- This allows functions to use return_next() to avoid building
- the entire result set in memory.
+ This allows functions to use <function>return_next()</> to avoid
+ building the entire result set in memory.
</para>
</listitem>
<listitem>
<para>
- Allow one-row-at-a-time retrieval of query results (Abhijit)
+ Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
</para>
<para>
- This allows functions to use spi_query() and spi_fetchrow() to
- avoid accumulating the entire result set in memory.
+ This allows functions to use <function>spi_query()</> and
+ <function>spi_fetchrow()</> to avoid accumulating the entire
+ result set in memory.
</para>
</listitem>
<listitem>
<para>
- Force PL/Perl to handle strings as UTF8 if the server encoding is UTF8
- (David Kamholz)
+ Force PL/Perl to handle strings as <literal>UTF8</> if the
+ server encoding is <literal>UTF8</> (David Kamholz)
</para>
</listitem>
Add a validator function for PL/Perl (Andrew)
</para>
<para>
- This allows syntax errors to be reported at definition time, rather
- than execution time.
+ This allows syntax errors to be reported at definition time,
+ rather than execution time.
</para>
</listitem>
<listitem>
<para>
- Allow PL/Perl to return a Perl array when the function returns an array
- type (Andrew)
+ Allow PL/Perl to return a Perl array when the function returns
+ an array type (Andrew)
</para>
<para>
- This basically maps PostgreSQL arrays to Perl arrays.
+ This basically maps <productname>PostgreSQL</productname> arrays
+ to Perl arrays.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Perl non-fatal warnings to generate <command>NOTICE</>
+ messages (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Perl's <literal>strict</> mode to be enabled (Andrew)
</para>
</listitem>
</itemizedlist>
</sect3>
-
-
+
+
<sect3>
<title><application>psql</> Changes</title>
<itemizedlist>
<listitem>
<para>
- Add psql \set ON_ERROR_ROLLBACK to allow statements in a transaction to
- error without affecting the rest of the transaction (Greg Sabino Mullane)
+ Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
+ a transaction to error without affecting the rest of the
+ transaction (Greg Sabino Mullane)
</para>
<para>
- This is basically implemented by wrapping every statement in a subtransaction.
+ This is basically implemented by wrapping every statement in a
+ sub-transaction.
</para>
</listitem>
<listitem>
<para>
- Add support for \x hex strings in psql variables (Bruce)
+ Add support for <literal>\x</> hex strings in
+ <application>psql</> variables (Bruce)
</para>
<para>
Octal escapes were already supported.
<listitem>
<para>
- Add psql support for troff "-ms" output format (Roger Leigh)
+ Add support for <command>troff -ms</> output format (Roger
+ Leigh)
</para>
</listitem>
<listitem>
<para>
- Allow psql's history file location to be controlled by HISTFILE (Andreas
- Seltenreich)
+ Allow the history file location to be controlled by
+ <envar>HISTFILE</> (Andreas Seltenreich)
</para>
<para>
This allows configuration of per-database history storage.
<listitem>
<para>
- Prevent psql \x (expanded mode) from affecting other backslash output
- (Neil)
+ Prevent <command>\x</> (expanded mode) from affecting
+ backslash-command displays (Neil)
</para>
</listitem>
<listitem>
<para>
- Add -L option to psql to log sessions (Lorne Sunley)
+ Add <option>-L</> option to <application>psql</application> to
+ log sessions (Lorne Sunley)
</para>
<para>
This option was added because some operating systems do not have
<listitem>
<para>
- Have psql \d show tablespace of indexes (Qingqing Zhou)
+ Make <command>\d</> show the tablespaces of indexes (Qingqing
+ Zhou)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>psql</application> help (<command>\h</>) to
+ make a best guess on the proper help information (Greg Sabino
+ Mullane)
+ </para>
+ <para>
+ This allows the user to just add <command>\h</> to the front of
+ the syntax error query and get help on the supported syntax.
+ Previously any additional query text beyond the command name
+ had to be removed to use <command>\h</>.
</para>
</listitem>
<listitem>
<para>
- Allow psql \h to make a best guess on the proper help information (Greg
- Sabino Mullane)
+ Add <command>\pset numericlocale</> to allow numbers to be
+ output in a locale-aware format (Eugen Nedelcu)
</para>
<para>
- This allows the user to just add \h to the front of the syntax error
- query and get help on the supported syntax. Previously any additional
- query text beyond the help topics supported had to be removed to use
- \h.
+ For example, using <literal>C</> locale <literal>100000</> would
+ be output as <literal>100,000.0</> while a European locale might
+ output this value as <literal>100.000,0</>.
</para>
</listitem>
<listitem>
<para>
- Add psql \pset numericlocale to allow numbers to be output in a
- locale-aware format (Eugen Nedelcu)
+ Make startup banner show both server version number and
+ <application>psql</>'s version number, when they are different (Bruce)
</para>
<para>
- For example, using C locale 100000 would be output as 100,000.0 and
- European locale might output this value as 100.000,0.
+ Also, a warning will be shown if the server and <application>psql</>
+ are from different major releases.
</para>
</listitem>
<listitem>
<para>
- Add -n / --schema switch to pg_restore (Richard van den Bergg)
+ Add <option>-n</> / <option>--schema</> switch to
+ <application>pg_restore</> (Richard van den Berg)
</para>
<para>
This allows only objects from a specified schema to be restored.
<listitem>
<para>
- Allow pg_dump to dump a consistent snapshot of large objects (Tom)
+ Allow <application>pg_dump</> to dump a consistent snapshot of
+ large objects (Tom)
</para>
</listitem>
<listitem>
<para>
- Allow pg_dump to dump large objects even in text mode (Tom)
+ Allow <application>pg_dump</> to dump large objects even in
+ text mode (Tom)
</para>
</listitem>
<listitem>
<para>
- Add --encoding to pg_dump (Magnus Hagander)
+ Add <option>--encoding</> to <application>pg_dump</>
+ (Magnus Hagander)
+ </para>
+ <para>
+ This allows a database to be dumped in an encoding that is
+ different from the server's encoding. This is valuable when
+ transferring the dump to a machine with a different encoding.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
</para>
<para>
- This allows a database to be dumped in an encoding that is different
- from the server's encoding. This is valuable when transferring the dump
- to a machine with a different encoding.
+ If the call handler for a procedural language is in the
+ <literal>pg_catalog</> schema, <application>pg_dump</> does not
+ dump the handler. Instead, it dumps the language using just
+ <command>CREATE LANGUAGE <replaceable>name</></command>,
+ relying on the <structname>pg_pltemplate</> catalog to provide
+ the language's creation parameters at load time.
</para>
</listitem>
<sect3>
- <title>libpq Changes</title>
+ <title><application>libpq</application> Changes</title>
<itemizedlist>
<listitem>
<para>
- Add a "PGPASSFILE" environment variable to specify the password
- file's filename (Andrew Dunstan)
+ Add a <envar>PGPASSFILE</> environment variable to specify the
+ password file's filename (Andrew)
</para>
</listitem>
<listitem>
<para>
- Add lo_create(), that is similar to lo_creat() but allows the OID of the large
- object to be specified (Tom)
+ Add <function>lo_create()</>, that is similar to
+ <function>lo_creat()</> but allows the OID of the large object
+ to be specified (Tom)
</para>
</listitem>
+ <listitem>
+ <para>
+ Make <application>libpq</application> consistently return an error
+ to the client application on <function>malloc()</function>
+ failure (Neil)
+ </para>
+ </listitem>
</itemizedlist>
</sect3>
<listitem>
<para>
- Add spinlock support for the Itanium processor using Intel compiler (Vikram
- Kalsi)
+ Add spinlock support for the Itanium processor using Intel
+ compiler (Vikram Kalsi)
</para>
</listitem>
<listitem>
<para>
- Add Kerberos 5 support for Win32 (Magnus)
+ Add Kerberos 5 support for Windows (Magnus)
</para>
</listitem>
<listitem>
<para>
- Rename Rendezvous to Bonjour to match OS/X feature renaming (Bruce)
+ Rename Rendezvous to Bonjour to match OS/X feature renaming
+ (Bruce)
</para>
</listitem>
<listitem>
<para>
- Add support for wal_fsync_writethrough for Darwin (Chris Campbell)
+ Add support for <literal>fsync_writethrough</literal> on
+ Darwin (Chris Campbell)
</para>
</listitem>
<listitem>
<para>
- Streamline the passing of information within the server, the optimizer,
- and the lock system (Tom)
+ Streamline the passing of information within the server, the
+ optimizer, and the lock system (Tom)
</para>
</listitem>
<listitem>
<para>
- Allow pg_config to be compiled using MSVC (Andrew Dunstan)
+ Allow <application>pg_config</> to be compiled using MSVC (Andrew)
</para>
<para>
- This is required to build DBD::Pg using MSVC.
+ This is required to build DBD::Pg using <application>MSVC</>.
</para>
</listitem>
Remove support for Kerberos V4 (Magnus)
</para>
<para>
- Kerberos 4 had security vulnerabilities and is no longer being
- maintained by the authors.
+ Kerberos 4 had security vulnerabilities and is no longer
+ maintained.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Code cleanups (Coverity static analysis performed by
+ EnterpriseDB)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Modify <filename>postgresql.conf</> to use documentation defaults
+ <literal>on</>/<literal>off</> rather than
+ <literal>true</>/<literal>false</> (Bruce)
</para>
</listitem>
<listitem>
<para>
- Code cleanups (Coverity static analysis performed by EnterpriseDB)
+ Enhance <application>pg_config</> to be able to report more
+ build-time values (Tom)
</para>
</listitem>
<listitem>
<para>
- Modify postgresql.conf to use documention defaults on/off rather
- than true/false (Bruce)
+ Allow <application>libpq</application> to be built thread-safe
+ on Windows (Dave Page)
</para>
</listitem>
<listitem>
<para>
- Enhance pg_config to be able to report more build-time values (Tom)
+ Allow IPv6 connections to be used on Win32 (Andrew)
</para>
</listitem>
<listitem>
<para>
- Replace rtree index code with code from /contrib/rtree_gist (Tom)
+ Move private declarations from <filename>gist.h</filename> to
+ <filename>gist_private.h</filename> (Neil)
</para>
+
<para>
- The improved capabilities of GIST indexes made this possible.
+ In previous releases, <filename>gist.h</> contained both the
+ public GiST API (intended for use by authors of GiST index
+ implementations) as well as some private declarations used by
+ the implementation of GiST itself. The latter have been moved
+ to a separate file, <filename>gist_private.h</>. Most GiST
+ index implementations should be unaffected.
</para>
</listitem>
+ <listitem>
+ <para>
+ Overhaul GiST memory management (Neil)
+ </para>
+
+ <para>
+ GiST methods are now always invoked in a short-lived memory
+ context. Therefore, memory allocated via <function>palloc()</>
+ will be reclaimed automatically, so GiST index implementations
+ do not need to manually release allocated memory via
+ <function>pfree()</>.
+ </para>
+ </listitem>
</itemizedlist>
</sect3>
-
-
+
+
<sect3>
<title>Contrib Changes</title>
<itemizedlist>
<listitem>
<para>
- Add /contrib/pg_buffercache contrib module (Mark Kirkwood)
+ Add <filename>/contrib/pg_buffercache</> contrib module (Mark
+ Kirkwood)
</para>
<para>
This displays the contents of the buffer cache, for debugging and
<listitem>
<para>
- Remove /contrib/array because it is obsolete (Tom)
+ Remove <filename>/contrib/array</> because it is obsolete (Tom)
</para>
</listitem>
<listitem>
<para>
- Cleanup the contrib/lo module (Tom)
+ Clean up the <filename>/contrib/lo</> module (Tom)
</para>
</listitem>
<listitem>
<para>
- Move /contrib/findoidjoins to src/tools (Tom)
+ Move <filename>/contrib/findoidjoins</> to
+ <filename>/src/tools</> (Tom)
</para>
</listitem>
<listitem>
<para>
- Remove the <<, >>, &<, and &> operators for contrib/cube
+ Remove the <literal><<</>, <literal>>></>,
+ <literal>&<</>, and <literal>&></> operators from
+ <filename>/contrib/cube</>
</para>
<para>
These operators were not useful.
<listitem>
<para>
- Improve /contrib/btree_gist (Janko Richter)
+ Improve <filename>/contrib/btree_gist</> (Janko Richter)
</para>
</listitem>
<listitem>
<para>
- /contrib/pgcrypto - Remove support for libmhash/libmcrypt (Marko Kreen)
+ Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
</para>
- </listitem>
- <listitem>
- <para>
- /contrib/pgcrypto - Add support for new encryption methods (Marko Kreen)
- </para>
- <para>
- 3des and AES
- SHA2 (SHA256, SHA384, SHA512)
- Fortuna PRNG
- PGP encryption
- RSA key
- </para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Implementation of OpenPGP symmetric-key and public-key encryption
+ </para>
+ <para>
+ Both RSA and Elgamal public-key algorithms are supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ OpenSSL build: support 3DES, use internal AES with OpenSSL < 0.9.7
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Take build parameters (OpenSSL, zlib) from <filename>configure</> result
+ </para>
+ <para>
+ There is no need to edit the <filename>Makefile</> anymore.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove support for <filename>libmhash</> and <filename>libmcrypt</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
</listitem>
-
+
</itemizedlist>
</sect3>
<para>
The lesser problem is that the <filename>contrib/tsearch2</> module
- creates several functions that are misdeclared to return
+ creates several functions that are improperly declared to return
<type>internal</> when they do not accept <type>internal</> arguments.
This breaks type safety for all functions using <type>internal</>
arguments.