diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index 345a5b3404226a9e36e718ae36051c615ee5f8ab..fb3dec68d34075e82a3ce83467589c1d2bfd53de 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.336 2005/05/09 00:09:45 tgl Exp $ +$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.337 2005/08/23 01:22:53 momjian Exp $ --> <appendix id="release"> @@ -275,8 +275,8 @@ statistics collector</para> addresses in <type>INET</> data types (Tom)</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-8-0-1"> <title>Release 8.0.1</title> @@ -342,2354 +342,2354 @@ pg_dump/pg_restore</para></listitem> typedefs (Michael)</para></listitem> </itemizedlist> - </sect2> - </sect1> - - <sect1 id="release-8-0"> - <title>Release 8.0</title> - - <note> - <title>Release date</title> - <simpara>2005-01-19</simpara> - </note> - - <sect2> - <title>Overview</title> - - <para> - Major changes in this release: + </sect2> + </sect1> - <variablelist> - <varlistentry> - <term> - Microsoft Windows Native Server - </term> + <sect1 id="release-8-0"> + <title>Release 8.0</title> + <note> + <title>Release date</title> + <simpara>2005-01-19</simpara> + </note> + + <sect2> + <title>Overview</title> + + <para> + Major changes in this release: + + <variablelist> + <varlistentry> + <term> + Microsoft Windows Native Server + </term> + + <listitem> + <para> + This is the first <productname>PostgreSQL</productname> release + to run natively on <trademark class=registered>Microsoft Windows</> as + a server. It can run as a <productname>Windows</> service. This + release supports NT-based Windows releases like + <productname>Windows 2000</>, <productname>Windows XP</>, and + <productname>Windows 2003</>. Older releases like + <productname>Windows 95</>, <productname>Windows 98</>, and + <productname>Windows ME</> are not supported because these operating + systems do not have the infrastructure to support + <productname>PostgreSQL</productname>. A separate installer + project has been created to ease installation on + <productname>Windows</> — see <ulink + url="http://www.postgresql.org/ftp/win32/"></ulink>. + </para> + + <para> + Although tested throughout our release cycle, the Windows port + does not have the benefit of years of use in production + environments that <productname>PostgreSQL</productname> has on + Unix platforms. Therefore it should be treated with the same + level of caution as you would a new product. + </para> + + <para> + Previous releases required the Unix emulation toolkit + <productname>Cygwin</> in order to run the server on Windows + operating systems. <productname>PostgreSQL</productname> has + supported native clients on Windows for many years. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Savepoints + </term> + + <listitem> + <para> + Savepoints allow specific parts of a transaction to be aborted + without affecting the remainder of the transaction. Prior + releases had no such capability; there was no way to recover + from a statement failure within a transaction except by + aborting the whole transaction. This feature is valuable for + application writers who require error recovery within a + complex transaction. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Point-In-Time Recovery + </term> + + <listitem> + <para> + In previous releases there was no way to recover from disk + drive failure except to restore from a previous backup or use + a standby replication server. Point-in-time recovery allows + continuous backup of the server. You can recover either to + the point of failure or to some transaction in the past. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Tablespaces + </term> + + <listitem> + <para> + Tablespaces allow administrators to select different file systems + for storage of individual tables, indexes, and databases. + This improves performance and control over disk space + usage. Prior releases used <application>initlocation</> and + manual symlink management for such tasks. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Improved Buffer Management, <command>CHECKPOINT</command>, + <command>VACUUM</command> + </term> + + <listitem> + <para> + This release has a more intelligent buffer replacement strategy, + which will make better use of available shared buffers and + improve performance. The performance impact of vacuum and + checkpoints is also lessened. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Change Column Types + </term> + + <listitem> + <para> + A column's data type can now be changed with <command>ALTER + TABLE</command>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + New Perl Server-Side Language + </term> + + <listitem> + <para> + A new version of the <application>plperl</> server-side language now + supports a persistent shared storage area, triggers, returning records + and arrays of records, and SPI calls to access the database. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> + Comma-separated-value (CSV) support in <command>COPY</command> + </term> + + <listitem> + <para> + <command>COPY</command> can now read and write + comma-separated-value files. It has the flexibility to + interpret non-standard quoting and separation characters too. + </para> + </listitem> + </varlistentry> + + </variablelist> + </para> + </sect2> + + <sect2> + <title>Migration to version 8.0</title> + + <para> + A dump/restore using <application>pg_dump</application> is + required for those wishing to migrate data from any previous + release. + </para> + + <para> + Observe the following incompatibilities: + + <itemizedlist> + <listitem> <para> - This is the first <productname>PostgreSQL</productname> release - to run natively on <trademark class=registered>Microsoft Windows</> as - a server. It can run as a <productname>Windows</> service. This - release supports NT-based Windows releases like - <productname>Windows 2000</>, <productname>Windows XP</>, and - <productname>Windows 2003</>. Older releases like - <productname>Windows 95</>, <productname>Windows 98</>, and - <productname>Windows ME</> are not supported because these operating - systems do not have the infrastructure to support - <productname>PostgreSQL</productname>. A separate installer - project has been created to ease installation on - <productname>Windows</> — see <ulink - url="http://www.postgresql.org/ftp/win32/"></ulink>. + In <option>READ COMMITTED</> serialization mode, volatile functions + now see the results of concurrent transactions committed up to the + beginning of each statement within the function, rather than up to the + beginning of the interactive command that called the function. </para> - + </listitem> + + <listitem> <para> - Although tested throughout our release cycle, the Windows port - does not have the benefit of years of use in production - environments that <productname>PostgreSQL</productname> has on - Unix platforms. Therefore it should be treated with the same - level of caution as you would a new product. + Functions declared <option>STABLE</> or <option>IMMUTABLE</> always + use the snapshot of the calling query, and therefore do not see the + effects of actions taken after the calling query starts, whether in + their own transaction or other transactions. Such a function must be + read-only, too, meaning that it cannot use any SQL commands other than + <command>SELECT</>. </para> - + </listitem> + + <listitem> <para> - Previous releases required the Unix emulation toolkit - <productname>Cygwin</> in order to run the server on Windows - operating systems. <productname>PostgreSQL</productname> has - supported native clients on Windows for many years. + Non-deferred <option>AFTER</> triggers are now fired immediately + after completion of the triggering query, rather than upon + finishing the current interactive command. This makes a + difference when the triggering query occurred within a function: + the trigger is invoked before the function proceeds to its next + operation. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Savepoints - </term> - + <listitem> <para> - Savepoints allow specific parts of a transaction to be aborted - without affecting the remainder of the transaction. Prior - releases had no such capability; there was no way to recover - from a statement failure within a transaction except by - aborting the whole transaction. This feature is valuable for - application writers who require error recovery within a - complex transaction. + Server configuration parameters <varname>virtual_host</> and + <varname>tcpip_socket</> have been replaced with a more general + parameter <varname>listen_addresses</>. Also, the server now listens on + <literal>localhost</> by default, which eliminates the need for the + <literal>-i</> postmaster switch in many scenarios. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Point-In-Time Recovery - </term> - + <listitem> <para> - In previous releases there was no way to recover from disk - drive failure except to restore from a previous backup or use - a standby replication server. Point-in-time recovery allows - continuous backup of the server. You can recover either to - the point of failure or to some transaction in the past. + Server configuration parameters <varname>SortMem</> and + <varname>VacuumMem</> have been renamed to <varname>work_mem</> + and <varname>maintenance_work_mem</> to better reflect their + use. The original names are still supported in + <command>SET</command> and <command>SHOW</command>. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Tablespaces - </term> - + <listitem> <para> - Tablespaces allow administrators to select different file systems - for storage of individual tables, indexes, and databases. - This improves performance and control over disk space - usage. Prior releases used <application>initlocation</> and - manual symlink management for such tasks. + Server configuration parameters <varname>log_pid</>, + <varname>log_timestamp</>, and <varname>log_source_port</> have been + replaced with a more general parameter <varname>log_line_prefix</>. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Improved Buffer Management, <command>CHECKPOINT</command>, - <command>VACUUM</command> - </term> - + <listitem> <para> - This release has a more intelligent buffer replacement strategy, - which will make better use of available shared buffers and - improve performance. The performance impact of vacuum and - checkpoints is also lessened. + Server configuration parameter <varname>syslog</> has been + replaced with a more logical <varname>log_destination</> variable to + control the log output destination. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Change Column Types - </term> - + <listitem> <para> - A column's data type can now be changed with <command>ALTER - TABLE</command>. + Server configuration parameter <varname>log_statement</> has been + changed so it can selectively log just database modification or + data definition statements. Server configuration parameter + <varname>log_duration</> now prints only when <varname>log_statement</> + prints the query. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - New Perl Server-Side Language - </term> - + <listitem> <para> - A new version of the <application>plperl</> server-side language now - supports a persistent shared storage area, triggers, returning records - and arrays of records, and SPI calls to access the database. + Server configuration parameter <varname>max_expr_depth</> parameter has + been replaced with <varname>max_stack_depth</> which measures the + physical stack size rather than the expression nesting depth. This + helps prevent session termination due to stack overflow caused by + recursive functions. </para> </listitem> - </varlistentry> - - <varlistentry> - <term> - Comma-separated-value (CSV) support in <command>COPY</command> - </term> - + <listitem> <para> - <command>COPY</command> can now read and write - comma-separated-value files. It has the flexibility to - interpret non-standard quoting and separation characters too. + The <function>length()</> function no longer counts trailing spaces in + <type>CHAR(n)</> values. </para> </listitem> - </varlistentry> - - </variablelist> - </para> - </sect2> - - <sect2> - <title>Migration to version 8.0</title> - - <para> - A dump/restore using <application>pg_dump</application> is - required for those wishing to migrate data from any previous - release. - </para> - - <para> - Observe the following incompatibilities: - - <itemizedlist> - - <listitem> - <para> - In <option>READ COMMITTED</> serialization mode, volatile functions - now see the results of concurrent transactions committed up to the - beginning of each statement within the function, rather than up to the - beginning of the interactive command that called the function. - </para> - </listitem> - - <listitem> - <para> - Functions declared <option>STABLE</> or <option>IMMUTABLE</> always - use the snapshot of the calling query, and therefore do not see the - effects of actions taken after the calling query starts, whether in - their own transaction or other transactions. Such a function must be - read-only, too, meaning that it cannot use any SQL commands other than - <command>SELECT</>. - </para> - </listitem> - - <listitem> - <para> - Non-deferred <option>AFTER</> triggers are now fired immediately - after completion of the triggering query, rather than upon - finishing the current interactive command. This makes a - difference when the triggering query occurred within a function: - the trigger is invoked before the function proceeds to its next - operation. - </para> - </listitem> - - <listitem> - <para> - Server configuration parameters <varname>virtual_host</> and - <varname>tcpip_socket</> have been replaced with a more general - parameter <varname>listen_addresses</>. Also, the server now listens on - <literal>localhost</> by default, which eliminates the need for the - <literal>-i</> postmaster switch in many scenarios. - </para> - </listitem> - - <listitem> - <para> - Server configuration parameters <varname>SortMem</> and - <varname>VacuumMem</> have been renamed to <varname>work_mem</> - and <varname>maintenance_work_mem</> to better reflect their - use. The original names are still supported in - <command>SET</command> and <command>SHOW</command>. - </para> - </listitem> - + <listitem> <para> - Server configuration parameters <varname>log_pid</>, - <varname>log_timestamp</>, and <varname>log_source_port</> have been - replaced with a more general parameter <varname>log_line_prefix</>. + Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the + integer, not the leftmost N bits as before. </para> </listitem> - + <listitem> <para> - Server configuration parameter <varname>syslog</> has been - replaced with a more logical <varname>log_destination</> variable to - control the log output destination. + Updating an element or slice of a NULL array value now produces + a non-NULL array result, namely an array containing + just the assigned-to positions. </para> </listitem> - + + <listitem> + <para> + Syntax checking of array input values has been tightened up + considerably. Junk that was previously allowed in odd places with + odd results now causes an error. Empty-string element values + must now be written as <literal>""</>, rather than writing nothing. + Also changed behavior with respect to whitespace surrounding + array elements: trailing whitespace is now ignored, for symmetry + with leading whitespace (which has always been ignored). + </para> + </listitem> + + <listitem> + <para> + Overflow in integer arithmetic operations is now detected and + reported as an error. + </para> + </listitem> + + <listitem> + <para> + The arithmetic operators associated with the single-byte + <type>"char"</> data type have been removed. + </para> + </listitem> + + <listitem> + <para> + The <function>extract()</> function (also called + <function>date_part</>) now returns the proper year for BC dates. + It previously returned one less than the correct year. The + function now also returns the proper values for millennium and + century. + </para> + </listitem> + <listitem> <para> - Server configuration parameter <varname>log_statement</> has been - changed so it can selectively log just database modification or - data definition statements. Server configuration parameter - <varname>log_duration</> now prints only when <varname>log_statement</> - prints the query. + <type>CIDR</> values now must have their non-masked bits be zero. + For example, we no longer allow + <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such + values should never have been accepted by + <productname>PostgreSQL</productname> and will now be rejected. </para> </listitem> - + + <listitem> + <para> + <command>EXECUTE</command> now returns a completion tag that + matches the executed statement. + </para> + </listitem> + + <listitem> + <para> + <application>psql</>'s <command>\copy</> command now reads or + writes to the query's <literal>stdin/stdout</>, rather than + <application>psql</>'s <literal>stdin/stdout</>. The previous + behavior can be accessed via new + <option>pstdin</>/<option>pstdout</> parameters. + </para> + </listitem> + + <listitem> + <para> + The JDBC client interface has been removed from the core + distribution, and is now hosted at <ulink url= + "http://jdbc.postgresql.org"></ulink>. + </para> + </listitem> + + <listitem> + <para> + The Tcl client interface has also been removed. There are several + Tcl interfaces now hosted at <ulink url= + "http://gborg.postgresql.org"></ulink>. + </para> + </listitem> + + <listitem> + <para> + The server now uses its own time zone database, rather than the + one supplied by the operating system. This will provide consistent + behavior across all platforms. In most cases, there should be + little noticeable difference in time zone behavior, except that + the time zone names used by <command>SET</>/<command>SHOW</> + <varname>TimeZone</> may + be different from what your platform provides. + </para> + </listitem> + + <listitem> + <para> + <application>Configure</>'s threading option no longer requires + users to run tests or edit configuration files; threading options + are now detected automatically. + </para> + </listitem> + + <listitem> + <para> + Now that tablespaces have been implemented, + <application>initlocation</> has been removed. + </para> + </listitem> + + <listitem> + <para> + The API for user-defined GiST indexes has been changed. The + Union and PickSplit methods are now passed a pointer to a + special <structname>GistEntryVector</structname> structure, + rather than a <type>bytea</type>. + </para> + </listitem> + + </itemizedlist> + </para> + </sect2> + + <sect2> + <title>Deprecated Features</title> + + <para> + Some aspects of <productname>PostgreSQL</productname>'s behavior + have been determined to be suboptimal. For the sake of backward + compatibility these have not been removed in 8.0, but they are + considered deprecated and will be removed in the next major + release. + </para> + + <itemizedlist> <listitem> <para> - Server configuration parameter <varname>max_expr_depth</> parameter has - been replaced with <varname>max_stack_depth</> which measures the - physical stack size rather than the expression nesting depth. This - helps prevent session termination due to stack overflow caused by - recursive functions. + The 8.1 release will remove the <function>to_char()</> function + for intervals. </para> </listitem> - + + <listitem> + <para> + The server now warns of empty strings passed to + <type>oid</type>/<type>float4</type>/<type>float8</type> data + types, but continues to interpret them as zeroes as before. + In the next major release, empty strings will be considered + invalid input for these data types. + </para> + </listitem> + <listitem> <para> - The <function>length()</> function no longer counts trailing spaces in - <type>CHAR(n)</> values. + By default, tables in <productname>PostgreSQL</productname> 8.0 + and earlier are created with <type>OID</>s. In the next release, + this will <emphasis>not</emphasis> be the case: to create a table + that contains <type>OID</>s, the <option>WITH OIDS</> clause must + be specified or the <varname>default_with_oids</varname> + configuration parameter must be set. Users are encouraged to + explicitly specify <option>WITH OIDS</> if their tables + require OIDs for compatibility with future releases of + <productname>PostgreSQL</productname>. </para> </listitem> - - <listitem> - <para> - Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the - integer, not the leftmost N bits as before. - </para> - </listitem> - - <listitem> - <para> - Updating an element or slice of a NULL array value now produces - a non-NULL array result, namely an array containing - just the assigned-to positions. - </para> - </listitem> - - <listitem> - <para> - Syntax checking of array input values has been tightened up - considerably. Junk that was previously allowed in odd places with - odd results now causes an error. Empty-string element values - must now be written as <literal>""</>, rather than writing nothing. - Also changed behavior with respect to whitespace surrounding - array elements: trailing whitespace is now ignored, for symmetry - with leading whitespace (which has always been ignored). - </para> - </listitem> - - <listitem> - <para> - Overflow in integer arithmetic operations is now detected and - reported as an error. - </para> - </listitem> - - <listitem> - <para> - The arithmetic operators associated with the single-byte - <type>"char"</> data type have been removed. - </para> - </listitem> - - <listitem> - <para> - The <function>extract()</> function (also called - <function>date_part</>) now returns the proper year for BC dates. - It previously returned one less than the correct year. The - function now also returns the proper values for millennium and - century. - </para> - </listitem> - - <listitem> - <para> - <type>CIDR</> values now must have their non-masked bits be zero. - For example, we no longer allow - <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such - values should never have been accepted by - <productname>PostgreSQL</productname> and will now be rejected. - </para> - </listitem> - - <listitem> - <para> - <command>EXECUTE</command> now returns a completion tag that - matches the executed statement. - </para> - </listitem> - - <listitem> - <para> - <application>psql</>'s <command>\copy</> command now reads or - writes to the query's <literal>stdin/stdout</>, rather than - <application>psql</>'s <literal>stdin/stdout</>. The previous - behavior can be accessed via new - <option>pstdin</>/<option>pstdout</> parameters. - </para> - </listitem> - - <listitem> - <para> - The JDBC client interface has been removed from the core - distribution, and is now hosted at <ulink url= - "http://jdbc.postgresql.org"></ulink>. - </para> - </listitem> - - <listitem> - <para> - The Tcl client interface has also been removed. There are several - Tcl interfaces now hosted at <ulink url= - "http://gborg.postgresql.org"></ulink>. - </para> - </listitem> - - <listitem> - <para> - The server now uses its own time zone database, rather than the - one supplied by the operating system. This will provide consistent - behavior across all platforms. In most cases, there should be - little noticeable difference in time zone behavior, except that - the time zone names used by <command>SET</>/<command>SHOW</> - <varname>TimeZone</> may - be different from what your platform provides. - </para> - </listitem> - - <listitem> - <para> - <application>Configure</>'s threading option no longer requires - users to run tests or edit configuration files; threading options - are now detected automatically. - </para> - </listitem> - - <listitem> - <para> - Now that tablespaces have been implemented, - <application>initlocation</> has been removed. - </para> - </listitem> - - <listitem> - <para> - The API for user-defined GiST indexes has been changed. The - Union and PickSplit methods are now passed a pointer to a - special <structname>GistEntryVector</structname> structure, - rather than a <type>bytea</type>. - </para> - </listitem> - </itemizedlist> - </para> - </sect2> - - <sect2> - <title>Deprecated Features</title> - - <para> - Some aspects of <productname>PostgreSQL</productname>'s behavior - have been determined to be suboptimal. For the sake of backward - compatibility these have not been removed in 8.0, but they are - considered deprecated and will be removed in the next major - release. + </sect2> + + <sect2> + <title>Changes</title> + + <para> + Below you will find a detailed account of the changes between + release 8.0 and the previous major release. </para> - - <itemizedlist> - <listitem> - <para> - The 8.1 release will remove the <function>to_char()</> function - for intervals. - </para> - </listitem> - - <listitem> - <para> - The server now warns of empty strings passed to - <type>oid</type>/<type>float4</type>/<type>float8</type> data - types, but continues to interpret them as zeroes as before. - In the next major release, empty strings will be considered - invalid input for these data types. - </para> - </listitem> - - <listitem> - <para> - By default, tables in <productname>PostgreSQL</productname> 8.0 - and earlier are created with <type>OID</>s. In the next release, - this will <emphasis>not</emphasis> be the case: to create a table - that contains <type>OID</>s, the <option>WITH OIDS</> clause must - be specified or the <varname>default_with_oids</varname> - configuration parameter must be set. Users are encouraged to - explicitly specify <option>WITH OIDS</> if their tables - require OIDs for compatibility with future releases of - <productname>PostgreSQL</productname>. - </para> - </listitem> - </itemizedlist> - </sect2> - - <sect2> - <title>Changes</title> - - <para> - Below you will find a detailed account of the changes between - release 8.0 and the previous major release. - </para> - - <sect3> - <title>Performance Improvements</title> - <itemizedlist> - - <listitem> - <para> - Support cross-data-type index usage (Tom) - </para> - <para> - Before this change, many queries would not use an index if the data - types did not match exactly. This improvement makes index usage more - intuitive and consistent. - </para> - </listitem> - - <listitem> - <para> - New buffer replacement strategy that improves caching (Jan) - </para> - <para> - Prior releases used a least-recently-used (LRU) cache to keep - recently referenced pages in memory. The LRU algorithm - did not consider the number of times a specific cache entry was - accessed, so large table scans could force out useful cache pages. - The new cache algorithm uses four separate lists to track most - recently used and most frequently used cache pages and dynamically - optimize their replacement based on the work load. This should - lead to much more efficient use of the shared buffer cache. - Administrators who have tested shared buffer sizes in the past - should retest with this new cache replacement policy. - </para> - </listitem> - - <listitem> - <para> - Add subprocess to write dirty buffers periodically to reduce - checkpoint writes (Jan) - </para> - <para> - In previous releases, the checkpoint process, which runs every few - minutes, would write all dirty buffers to the operating system's - buffer cache then flush all dirty operating system buffers to - disk. This resulted in a periodic spike in disk usage that often - hurt performance. The new code uses a background writer to trickle - disk writes at a steady pace so checkpoints have far fewer dirty - pages to write to disk. Also, the new code does not issue a global - <function>sync()</> call, but instead <function>fsync()</>s just - the files written since the last checkpoint. This should improve - performance and minimize degradation during checkpoints. - </para> - </listitem> - - <listitem> - <para> - Add ability to prolong vacuum to reduce performance impact (Jan) - </para> - <para> - On busy systems, <command>VACUUM</command> performs many I/O - requests which can hurt performance for other users. This - release allows you to slow down <command>VACUUM</command> to - reduce its impact on other users, though this increases the - total duration of <command>VACUUM</command>. - </para> - </listitem> - - <listitem> - <para> - Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom) - </para> - <para> - This improves the way indexes are scanned when many duplicate - values exist in the index. - </para> - </listitem> - - <listitem> - <para> - Use dynamically-generated table size estimates while planning (Tom) - </para> - <para> - Formerly the planner estimated table sizes using the values seen - by the last <command>VACUUM</command> or <command>ANALYZE</command>, - both as to physical table size (number of pages) and number of rows. - Now, the current physical table size is obtained from the kernel, - and the number of rows is estimated by multiplying the table size - by the row density (rows per page) seen by the last - <command>VACUUM</command> or <command>ANALYZE</command>. This should - produce more reliable estimates in cases where the table size has - changed significantly since the last housekeeping command. - </para> - </listitem> - - <listitem> - <para> - Improved index usage with <literal>OR</> clauses (Tom) - </para> - <para> - This allows the optimizer to use indexes in statements with many OR - clauses that would not have been indexed in the past. It can also use - multi-column indexes where the first column is specified and the second - column is part of an <literal>OR</> clause. - </para> - </listitem> - - <listitem> - <para> - Improve matching of partial index clauses (Tom) - </para> - <para> - The server is now smarter about using partial indexes in queries - involving complex <option>WHERE</> clauses. - </para> - </listitem> - - <listitem> - <para> - Improve performance of the GEQO optimizer (Tom) - </para> - <para> - The GEQO optimizer is used to plan queries involving many tables (by - default, twelve or more). This release speeds up the way queries are - analyzed to decrease time spent in optimization. - </para> - </listitem> - - <listitem> - <para> - Miscellaneous optimizer improvements - </para> - <para> - There is not room here to list all the minor improvements made, but - numerous special cases work better than in prior releases. - </para> - </listitem> - - <listitem> - <para> - Improve lookup speed for C functions (Tom) - </para> - <para> - This release uses a hash table to lookup information for dynamically - loaded C functions. This improves their speed so they perform nearly as - quickly as functions that are built into the server executable. - </para> - </listitem> - - <listitem> - <para> - Add type-specific <command>ANALYZE</command> statistics - capability (Mark Cave-Ayland) - </para> - <para> - This feature allows more flexibility in generating statistics - for non-standard data types. - </para> - </listitem> - - <listitem> - <para> - <command>ANALYZE</command> now collects statistics for - expression indexes (Tom) - </para> - <para> - Expression indexes (also called functional indexes) allow users to - index not just columns but the results of expressions and function - calls. With this release, the optimizer can gather and use statistics - about the contents of expression indexes. This will greatly improve - the quality of planning for queries in which an expression index is - relevant. - </para> - </listitem> - - <listitem> - <para> - New two-stage sampling method for <command>ANALYZE</command> - (Manfred Koizar) - </para> - <para> - This gives better statistics when the density of valid rows is very - different in different regions of a table. - </para> - </listitem> - - <listitem> - <para> - Speed up <command>TRUNCATE</command> (Tom) - </para> - <para> - This buys back some of the performance loss observed in 7.4, while still - keeping <command>TRUNCATE</command> transaction-safe. - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Server Changes</title> - <itemizedlist> - - <listitem> - <para> - Add WAL file archiving and point-in-time recovery (Simon Riggs) - </para> - </listitem> - - <listitem> - <para> - Add tablespaces so admins can control disk layout (Gavin) - </para> - </listitem> - - <listitem> - <para> - Add a built-in log rotation program (Andreas Pflug) - </para> - <para> - It is now possible to log server messages conveniently without - relying on either <application>syslog</> or an external log - rotation program. - </para> - </listitem> - - <listitem> - <para> - Add new read-only server configuration parameters to show server - compile-time settings: <varname>block_size</>, - <varname>integer_datetimes</>, <varname>max_function_args</>, - <varname>max_identifier_length</>, <varname>max_index_keys</> (Joe) - </para> - </listitem> - - <listitem> - <para> - Make quoting of <literal>sameuser</>, <literal>samegroup</>, and - <literal>all</> remove special meaning of these terms in - <filename>pg_hba.conf</> (Andrew) - </para> - </listitem> - - <listitem> - <para> - Use clearer IPv6 name <literal>::1/128</> for - <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew) - </para> - </listitem> - - <listitem> - <para> - Use CIDR format in <filename>pg_hba.conf</> examples (Andrew) - </para> - </listitem> - - <listitem> - <para> - Rename server configuration parameters <varname>SortMem</> and - <varname>VacuumMem</> to <varname>work_mem</> and - <varname>maintenance_work_mem</> (Old names still supported) (Tom) - </para> - <para> - This change was made to clarify that bulk operations such as index and - foreign key creation use <varname>maintenance_work_mem</>, while - <varname>work_mem</> is for workspaces used during query execution. - </para> - </listitem> - - <listitem> - <para> - Allow logging of session disconnections using server configuration - <varname>log_disconnections</> (Andrew) - </para> - </listitem> - - <listitem> - <para> - Add new server configuration parameter <varname>log_line_prefix</> to - allow control of information emitted in each log line (Andrew) - </para> - <para> - Available information includes user name, database name, remote IP - address, and session start time. - </para> - </listitem> - - <listitem> - <para> - Remove server configuration parameters <varname>log_pid</>, - <varname>log_timestamp</>, <varname>log_source_port</>; functionality - superseded by <varname>log_line_prefix</> (Andrew) - </para> - </listitem> - - <listitem> - <para> - Replace the <varname>virtual_host</> and <varname>tcpip_socket</> - parameters with a unified <varname>listen_addresses</> parameter - (Andrew, Tom) - </para> - <para> - <varname>virtual_host</> could only specify a single IP address to - listen on. <varname>listen_addresses</> allows multiple addresses - to be specified. - </para> - </listitem> - - <listitem> - <para> - Listen on localhost by default, which eliminates the need for the - <option>-i</> postmaster switch in many scenarios (Andrew) - </para> - <para> - Listening on localhost (<literal>127.0.0.1</>) opens no new - security holes but allows configurations like Windows and JDBC, - which do not support local sockets, to work without special - adjustments. - </para> - </listitem> - - <listitem> - <para> - Remove <varname>syslog</> server configuration parameter, and add more - logical <varname>log_destination</> variable to control log output - location (Magnus) - </para> - </listitem> - - <listitem> - <para> - Change server configuration parameter <varname>log_statement</> to take - values <varname>all</>, <varname>mod</>, <varname>ddl</>, or - <varname>none</> to select which queries are logged (Bruce) - </para> - <para> - This allows administrators to log only data definition changes or - only data modification statements. - </para> - </listitem> - - <listitem> - <para> - Some logging-related configuration parameters could formerly be adjusted - by ordinary users, but only in the <quote>more verbose</> direction. - They are now treated more strictly: only superusers can set them. - However, a superuser may use <command>ALTER USER</> to provide per-user - settings of these values for non-superusers. Also, it is now possible - for superusers to set values of superuser-only configuration parameters - via <literal>PGOPTIONS</>. - </para> - </listitem> - - <listitem> - <para> - Allow configuration files to be placed outside the data directory (mlw) - </para> - <para> - By default, configuration files are kept in the cluster's top directory. - With this addition, configuration files can be placed outside the - data directory, easing administration. - </para> - </listitem> - - <listitem> - <para> - Plan prepared queries only when first executed so constants can be - used for statistics (Oliver Jowett) - </para> - <para> - Prepared statements plan queries once and execute them many - times. While prepared queries avoid the overhead of re-planning - on each use, the quality of the plan suffers from not knowing the exact - parameters to be used in the query. In this release, planning of - unnamed prepared statements is delayed until the first execution, - and the actual parameter values of that execution are used as - optimization hints. This allows use of out-of-line parameter passing - without incurring a performance penalty. - </para> - </listitem> - - <listitem> - <para> - Allow <command>DECLARE CURSOR</command> to take parameters - (Oliver Jowett) - </para> - <para> - It is now useful to issue <command>DECLARE CURSOR</command> in a - <function>Parse</> message with parameters. The parameter values - sent at <function>Bind</> time will be substituted into the - execution of the cursor's query. - </para> - </listitem> - - <listitem> - <para> - Fix hash joins and aggregates of <type>inet</type> and - <type>cidr</type> data types (Tom) - </para> - <para> - Release 7.4 handled hashing of mixed <type>inet</type> and - <type>cidr</type> values incorrectly. (This bug did not exist - in prior releases because they wouldn't try to hash either - data type.) - </para> - </listitem> - - <listitem> - <para> - Make <varname>log_duration</> print only when <varname>log_statement</> - prints the query (Ed L.) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Query Changes</title> - <itemizedlist> - - <listitem> - <para> - Add savepoints (nested transactions) (Alvaro) - </para> - </listitem> - - <listitem> - <para> - Unsupported isolation levels are now accepted and promoted to the - nearest supported level (Peter) - </para> - <para> - The SQL specification states that if a database doesn't support a - specific isolation level, it should use the next more restrictive level. - This change complies with that recommendation. - </para> - </listitem> - - <listitem> - <para> - Allow <command>BEGIN WORK</command> to specify transaction - isolation levels like <command>START TRANSACTION</command> does - (Bruce) - </para> - </listitem> - - <listitem> - <para> - Fix table permission checking for cases in which rules generate - a query type different from the originally submitted query (Tom) - </para> - </listitem> - - <listitem> - <para> - Implement dollar quoting to simplify single-quote usage (Andrew, Tom, - David Fetter) - </para> - <para> - In previous releases, because single quotes had to be used to - quote a function's body, the use of single quotes inside the - function text required use of two single quotes or other error-prone - notations. With this release we add the ability to use "dollar - quoting" to quote a block of text. The ability to use different - quoting delimiters at different nesting levels greatly simplifies - the task of quoting correctly, especially in complex functions. - Dollar quoting can be used anywhere quoted text is needed. - </para> - </listitem> - - <listitem> - <para> - Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom) - </para> - <para> - <option>CASE</> no longer evaluates the tested expression multiple - times. This has benefits when the expression is complex or is - volatile. - </para> - </listitem> - - <listitem> - <para> - Test <option>HAVING</> before computing target list of an - aggregate query (Tom) - </para> - <para> - Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose) - ... GROUP BY ... HAVING SUM(lose) > 0</>. This should work but formerly - could fail with divide-by-zero. - </para> - </listitem> - - <listitem> - <para> - Replace <varname>max_expr_depth</> parameter with - <varname>max_stack_depth</> parameter, measured in kilobytes of stack - size (Tom) - </para> - <para> - This gives us a fairly bulletproof defense against crashing due to - runaway recursive functions. Instead of measuring the depth of expression - nesting, we now directly measure the size of the execution stack. - </para> - </listitem> - - <listitem> - <para> - Allow arbitrary row expressions (Tom) - </para> - <para> - This release allows SQL expressions to contain arbitrary composite - types, that is, row values. It also allows functions to more easily - take rows as arguments and return row values. - </para> - </listitem> - - <listitem> - <para> - Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator - in row and subselect comparisons (Fabien Coelho) - </para> - </listitem> - - <listitem> - <para> - Avoid locale-specific case conversion of basic ASCII letters in - identifiers and keywords (Tom) - </para> - <para> - This solves the <quote>Turkish problem</> with mangling of words - containing <literal>I</> and <literal>i</>. Folding of characters - outside the 7-bit-ASCII set is still locale-aware. - </para> - </listitem> - - <listitem> - <para> - Improve syntax error reporting (Fabien, Tom) - </para> - <para> - Syntax error reports are more useful than before. - </para> - </listitem> - - <listitem> - <para> - Change <command>EXECUTE</command> to return a completion tag - matching the executed statement (Kris Jurka) - </para> - <para> - Previous releases return an <command>EXECUTE</command> tag for - any <command>EXECUTE</command> call. In this release, the tag - returned will reflect the command executed. - </para> - </listitem> - - <listitem> - <para> - Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom) - </para> - <para> - Such a clause makes no logical sense, but in some cases the rule - decompiler formerly produced this syntax. - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Object Manipulation Changes</title> - <itemizedlist> - - <listitem> - <para> - Add <command>COMMENT ON</> for casts, conversions, languages, - operator classes, and large objects (Christopher) - </para> - </listitem> - - <listitem> - <para> - Add new server configuration parameter <varname>default_with_oids</> to - control whether tables are created with <type>OID</>s by default (Neil) - </para> - <para> - This allows administrators to control whether <command>CREATE - TABLE</command> commands create tables with or without <type>OID</> - columns by default. (Note: the current factory default setting for - <varname>default_with_oids</> is <literal>TRUE</>, but the default - will become <literal>FALSE</> in future releases.) - </para> - </listitem> - - <listitem> - <para> - Add <option>WITH</> / <option>WITHOUT OIDS</> clause to - <command>CREATE TABLE AS</command> (Neil) - </para> - </listitem> - - <listitem> - <para> - Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</> - column (<command>ALTER TABLE SET WITHOUT OIDS</> still works) - (Tom) - </para> - </listitem> - - <listitem> - <para> - Allow composite types as table columns (Tom) - </para> - </listitem> - - <listitem> - <para> - Allow <command>ALTER ... ADD COLUMN</> with defaults and - <option>NOT NULL</> constraints; works per SQL spec (Rod) - </para> - <para> - It is now possible for <option>ADD COLUMN</> to create a column - that is not initially filled with NULLs, but with a specified - default value. - </para> - </listitem> - - <listitem> - <para> - Add <command>ALTER COLUMN TYPE</> to change column's type (Rod) - </para> - <para> - It is now possible to alter a column's data type without dropping - and re-adding the column. - </para> - </listitem> - - <listitem> - <para> - Allow multiple <command>ALTER</> actions in a single <command>ALTER - TABLE</command> command (Rod) - </para> - <para> - This is particularly useful for <command>ALTER</> commands that - rewrite the table (which include <option>ALTER COLUMN TYPE</> and - <option>ADD COLUMN</> with a default). By grouping - <command>ALTER</> commands together, the table need be rewritten - only once. - </para> - </listitem> - - <listitem> - <para> - Allow <command>ALTER TABLE</command> to add <type>SERIAL</type> - columns (Tom) - </para> - <para> - This falls out from the new capability of specifying defaults for new - columns. - </para> - </listitem> - - <listitem> - <para> - Allow changing the owners of aggregates, conversions, databases, - functions, operators, operator classes, schemas, types, and tablespaces - (Christopher, Euler Taveira de Oliveira) - </para> - <para> - Previously this required modifying the system tables directly. - </para> - </listitem> - - <listitem> - <para> - Allow temporary object creation to be limited to <option>SECURITY - DEFINER</> functions (Sean Chittenden) - </para> - </listitem> - - <listitem> - <para> - Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher) - </para> - <para> - Prior to this release, there was no way to clear an auto-cluster - specification except to modify the system tables. - </para> - </listitem> - - <listitem> - <para> - Constraint/Index/<type>SERIAL</> names are now - <replaceable>table_column_type</> - with numbers appended to guarantee uniqueness within the schema - (Tom) - </para> - <para> - The SQL specification states that such names should be unique - within a schema. - </para> - </listitem> - - <listitem> - <para> - Add <function>pg_get_serial_sequence()</> to return a - <type>SERIAL</> column's sequence name (Christopher) - </para> - <para> - This allows automated scripts to reliably find the <type>SERIAL</> - sequence name. - </para> - </listitem> - - <listitem> - <para> - Warn when primary/foreign key data type mismatch requires costly lookup - </para> - </listitem> - - <listitem> - <para> - New <command>ALTER INDEX</> command to allow moving of indexes - between tablespaces (Gavin) - </para> - </listitem> - - <listitem> - <para> - Make <command>ALTER TABLE OWNER</> change dependent sequence - ownership too (Alvaro) - </para> - </listitem> - - - </itemizedlist> - </sect3> - - - <sect3> - <title>Utility Command Changes</title> - <itemizedlist> - - <listitem> - <para> - Allow <command>CREATE SCHEMA</command> to create triggers, - indexes, and sequences (Neil) - </para> - </listitem> - - <listitem> - <para> - Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien - Coelho) - </para> - <para> - This allows <option>ALSO</> to be added to rule creation to contrast it with - <option>INSTEAD</> rules. - </para> - </listitem> - - <listitem> - <para> - Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo) - </para> - <para> - This allows the <command>LOCK</command> command to fail if it - would have to wait for the requested lock. - </para> - </listitem> - - <listitem> - <para> - Allow <command>COPY</command> to read and write - comma-separated-value (CSV) files (Andrew, Bruce) - </para> - </listitem> - - <listitem> - <para> - Generate error if the <command>COPY</command> delimiter and NULL - string conflict (Bruce) - </para> - </listitem> - - <listitem> - <para> - <command>GRANT</command>/<command>REVOKE</command> behavior - follows the SQL spec more closely - </para> - </listitem> - - <listitem> - <para> - Avoid locking conflict between <command>CREATE INDEX</command> - and <command>CHECKPOINT</command> (Tom) - </para> - <para> - In 7.3 and 7.4, a long-running B-tree index build could block concurrent - <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the - WAL log could not be recycled. - </para> - </listitem> - - <listitem> - <para> - Database-wide <command>ANALYZE</command> does not hold locks - across tables (Tom) - </para> - <para> - This reduces the potential for deadlocks against other backends - that want exclusive locks on tables. To get the benefit of this - change, do not execute database-wide <command>ANALYZE</command> - inside a transaction block (<command>BEGIN</command> block); it - must be able to commit and start a new transaction for each - table. - </para> - </listitem> - - <listitem> - <para> - <command>REINDEX</command> does not exclusively lock the index's - parent table anymore - </para> - <para> - The index itself is still exclusively locked, but readers of the - table can continue if they are not using the particular index - being rebuilt. - </para> - </listitem> - - <listitem> - <para> - Erase MD5 user passwords when a user is renamed (Bruce) - </para> - <para> - <productname>PostgreSQL</productname> uses the user name as salt - when encrypting passwords via MD5. When a user's name is changed, - the salt will no longer match the stored MD5 password, so the - stored password becomes useless. In this release a notice is - generated and the password is cleared. A new password must then - be assigned if the user is to be able to log in with a password. - </para> - </listitem> - - <listitem> - <para> - New <application>pg_ctl</> <option>kill</> option for Windows (Andrew) - </para> - <para> - Windows does not have a <literal>kill</> command to send signals to - backends so this capability was added to <application>pg_ctl</>. - </para> - </listitem> - - <listitem> - <para> - Information schema improvements - </para> - </listitem> - - <listitem> - <para> - Add <option>--pwfile</> option to - <application>initdb</application> so the initial password can be - set by GUI tools (Magnus) - </para> - </listitem> - - <listitem> - <para> - Detect locale/encoding mismatch in - <application>initdb</application> (Peter) - </para> - </listitem> - - <listitem> - <para> - Add <option>register</> command to <application>pg_ctl</> to - register Windows operating system service (Dave Page) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Data Type and Function Changes</title> - <itemizedlist> - - <listitem> - <para> - More complete support for composite types (row types) (Tom) - </para> - <para> - Composite values can be used in many places where only scalar values - worked before. - </para> - </listitem> - - <listitem> - <para> - Reject non-rectangular array values as erroneous (Joe) - </para> - <para> - Formerly, <function>array_in</> would silently build a - surprising result. - </para> - </listitem> - - <listitem> - <para> - Overflow in integer arithmetic operations is now detected (Tom) - </para> - </listitem> - - <listitem> - <para> - The arithmetic operators associated with the single-byte - <type>"char"</> data type have been removed. - </para> - <para> - Formerly, the parser would select these operators in many situations - where an <quote>unable to select an operator</> error would be more - appropriate, such as <literal>null * null</>. If you actually want - to do arithmetic on a <type>"char"</> column, you can cast it to - integer explicitly. - </para> - </listitem> - - <listitem> - <para> - Syntax checking of array input values considerably tightened up (Joe) - </para> - <para> - Junk that was previously allowed in odd places with odd results - now causes an <literal>ERROR</>, for example, non-whitespace - after the closing right brace. - </para> - </listitem> - - <listitem> - <para> - Empty-string array element values must now be written as - <literal>""</>, rather than writing nothing (Joe) - </para> - <para> - Formerly, both ways of writing an empty-string element value were - allowed, but now a quoted empty string is required. The case where - nothing at all appears will probably be considered to be a NULL - element value in some future release. - </para> - </listitem> - - <listitem> - <para> - Array element trailing whitespace is now ignored (Joe) - </para> - <para> - Formerly leading whitespace was ignored, but trailing whitespace - between an element value and the delimiter or right brace was - significant. Now trailing whitespace is also ignored. - </para> - </listitem> - - <listitem> - <para> - Emit array values with explicit array bounds when lower bound is not one - (Joe) - </para> - </listitem> - - <listitem> - <para> - Accept <literal>YYYY-monthname-DD</> as a date string (Tom) - </para> - </listitem> - - <listitem> - <para> - Make <function>netmask</> and <function>hostmask</> functions - return maximum-length mask length (Tom) - </para> - </listitem> - - <listitem> - <para> - Change factorial function to return <type>numeric</type> (Gavin) - </para> - <para> - Returning <type>numeric</type> allows the factorial function to - work for a wider range of input values. - </para> - </listitem> - - <listitem> - <para> - <function>to_char</>/<function>to_date()</> date conversion - improvements (Kurt Roeckx, Fabien Coelho) - </para> - </listitem> - - <listitem> - <para> - Make <function>length()</> disregard trailing spaces in - <type>CHAR(n)</> (Gavin) - </para> - <para> - This change was made to improve consistency: trailing spaces are - semantically insignificant in <type>CHAR(n)</> data, so they - should not be counted by <function>length()</>. - </para> - </listitem> - - <listitem> - <para> - Warn about empty string being passed to - <type>OID</>/<type>float4</>/<type>float8</> data types (Neil) - </para> - <para> - 8.1 will throw an error instead. - </para> - </listitem> - - <listitem> - <para> - Allow leading or trailing whitespace in - <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</> - input routines - (Neil) - </para> - </listitem> - - <listitem> - <para> - Better support for IEEE <literal>Infinity</> and <literal>NaN</> - values in <type>float4</type>/<type>float8</type> (Neil) - </para> - <para> - These should now work on all platforms that support IEEE-compliant - floating point arithmetic. - </para> - </listitem> - - <listitem> - <para> - Add <option>week</> option to <function>date_trunc()</> (Robert Creager) - </para> - </listitem> - - <listitem> - <para> - Fix <function>to_char</function> for <literal>1 BC</> - (previously it returned <literal>1 AD</>) (Bruce) - </para> - </listitem> - - <listitem> - <para> - Fix <function>date_part(year)</> for BC dates (previously it - returned one less than the correct year) (Bruce) - </para> - </listitem> - - <listitem> - <para> - Fix <function>date_part()</> to return the proper millennium and - century (Fabien Coelho) - </para> - <para> - In previous versions, the century and millennium results had a wrong - number and started in the wrong year, as compared to standard - reckoning of such things. - </para> - </listitem> - - <listitem> - <para> - Add <function>ceiling()</> as an alias for <function>ceil()</>, - and <function>power()</> as an alias for <function>pow()</> for - standards compliance (Neil) - </para> - </listitem> - - <listitem> - <para> - Change <function>ln()</>, <function>log()</>, - <function>power()</>, and <function>sqrt()</> to emit the correct - <literal>SQLSTATE</> error codes for certain error conditions, as - specified by SQL:2003 (Neil) - </para> - </listitem> - - <listitem> - <para> - Add <function>width_bucket()</> function as defined by SQL:2003 (Neil) - </para> - </listitem> - - <listitem> - <para> - Add <function>generate_series()</> functions to simplify working - with numeric sets (Joe) - </para> - </listitem> - - <listitem> - <para> - Fix <function>upper/lower/initcap()</> functions to work with - multibyte encodings (Tom) - </para> - </listitem> - - <listitem> - <para> - Add boolean and bitwise integer <option>AND</>/<option>OR</> - aggregates (Fabien Coelho) - </para> - </listitem> - - <listitem> - <para> - New session information functions to return network addresses for client - and server (Sean Chittenden) - </para> - </listitem> - - <listitem> - <para> - Add function to determine the area of a closed path (Sean Chittenden) - </para> - </listitem> - - <listitem> - <para> - Add function to send cancel request to other backends (Magnus) - </para> - </listitem> - - <listitem> - <para> - Add <type>interval</> plus <type>datetime</> operators (Tom) - </para> - <para> - The reverse ordering, <type>datetime</> plus <type>interval</>, - was already supported, but both are required by the SQL standard. - </para> - </listitem> - - <listitem> - <para> - Casting an integer to <type>BIT(N)</> selects the rightmost N bits - of the integer - (Tom) - </para> - <para> - In prior releases, the leftmost N bits were selected, but this was - deemed unhelpful, not to mention inconsistent with casting from bit - to int. - </para> - </listitem> - - <listitem> - <para> - Require <type>CIDR</> values to have all non-masked bits be zero - (Kevin Brintnall) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Server-Side Language Changes</title> - <itemizedlist> - - <listitem> - <para> - In <literal>READ COMMITTED</> serialization mode, volatile functions - now see the results of concurrent transactions committed up to the - beginning of each statement within the function, rather than up to the - beginning of the interactive command that called the function. - </para> - </listitem> - - <listitem> - <para> - Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always - use the snapshot of the calling query, and therefore do not see the - effects of actions taken after the calling query starts, whether in - their own transaction or other transactions. Such a function must be - read-only, too, meaning that it cannot use any SQL commands other than - <command>SELECT</>. There is a considerable performance gain from - declaring a function <literal>STABLE</> or <literal>IMMUTABLE</> - rather than <literal>VOLATILE</>. - </para> - </listitem> - - <listitem> - <para> - Non-deferred <option>AFTER</> triggers are now fired immediately - after completion of the triggering query, rather than upon - finishing the current interactive command. This makes a difference - when the triggering query occurred within a function: the trigger - is invoked before the function proceeds to its next operation. For - example, if a function inserts a new row into a table, any - non-deferred foreign key checks occur before proceeding with the - function. - </para> - </listitem> - - <listitem> - <para> - Allow function parameters to be declared with names (Dennis Bjorklund) - </para> - <para> - This allows better documentation of functions. Whether the names - actually do anything depends on the specific function language - being used. - </para> - </listitem> - - <listitem> - <para> - Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bjorklund) - </para> - <para> - This basically creates an automatic alias for each named parameter. - </para> - </listitem> - - <listitem> - <para> - Do minimal syntax checking of PL/pgSQL functions at creation time (Tom) - </para> - <para> - This allows us to catch simple syntax errors sooner. - </para> - </listitem> - - <listitem> - <para> - More support for composite types (row and record variables) in PL/pgSQL - </para> - <para> - For example, it now works to pass a rowtype variable to another function - as a single variable. - </para> - </listitem> - - <listitem> - <para> - Default values for PL/pgSQL variables can now reference previously - declared variables - </para> - </listitem> - - <listitem> - <para> - Improve parsing of PL/pgSQL FOR loops (Tom) - </para> - <para> - Parsing is now driven by presence of <literal>".."</> rather than - data type of <option>FOR</> variable. This makes no difference for - correct functions, but should result in more understandable error - messages when a mistake is made. - </para> - </listitem> - - <listitem> - <para> - Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan) - </para> - </listitem> - - <listitem> - <para> - In PL/Tcl, SPI commands are now run in subtransactions. If an error - occurs, the subtransaction is cleaned up and the error is reported - as an ordinary Tcl error, which can be trapped with <literal>catch</>. - Formerly, it was not possible to catch such errors. - </para> - </listitem> - - <listitem> - <para> - Accept <command>ELSEIF</> in PL/pgSQL (Neil) - </para> - <para> - Previously PL/pgSQL only allowed <command>ELSIF</>, but many people - are accustomed to spelling this keyword <command>ELSEIF</>. - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title><application>psql</> Changes</title> - <itemizedlist> - - <listitem> - <para> - Improve <application>psql</> information display about database - objects (Christopher) - </para> - </listitem> - - <listitem> - <para> - Allow <application>psql</> to display group membership in - <command>\du</> and <command>\dg</> (Markus Bertheau) - </para> - </listitem> - - <listitem> - <para> - Prevent <application>psql</> <command>\dn</command> from showing - temporary schemas (Bruce) - </para> - </listitem> - - <listitem> - <para> - Allow <application>psql</> to handle tilde user expansion for file - names (Zach Irmen) - </para> - </listitem> - - <listitem> - <para> - Allow <application>psql</> to display fancy prompts, including - color, via <application>readline</> (Reece Hart, Chet Ramey) - </para> - </listitem> - - <listitem> - <para> - Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax - fully (Tom) - </para> - </listitem> - - <listitem> - <para> - Show the location of syntax errors (Fabien Coelho, Tom) - </para> - </listitem> - - <listitem> - <para> - Add <command>CLUSTER</command> information to <application>psql</> - <command>\d</> display - (Bruce) - </para> - </listitem> - - <listitem> - <para> - Change <application>psql</> <command>\copy stdin/stdout</> to read - from command input/output (Bruce) - </para> - </listitem> - - <listitem> - <para> - Add <option>pstdin</>/<option>pstdout</> to read from - <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark - Feit) - </para> - </listitem> - - <listitem> - <para> - Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename> - (Bruce) - </para> - <para> - This allows a central file where global <application>psql</> startup commands can - be stored. - </para> - </listitem> - - <listitem> - <para> - Have <application>psql</> <command>\d+</> indicate if the table - has an <type>OID</> column (Neil) - </para> - </listitem> - - <listitem> - <para> - On Windows, use binary mode in <application>psql</> when reading files so control-Z - is not seen as end-of-file - </para> - </listitem> - - <listitem> - <para> - Have <command>\dn+</> show permissions and description for schemas (Dennis - Bjorklund) - </para> - </listitem> - - <listitem> - <para> - Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane) - </para> - </listitem> - - <listitem> - <para> - Allow boolean settings to be set using upper or lower case (Michael Paesold) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title><application>pg_dump</> Changes</title> - <itemizedlist> - - <listitem> - <para> - Use dependency information to improve the reliability of - <application>pg_dump</> (Tom) - </para> - <para> - This should solve the longstanding problems with related objects - sometimes being dumped in the wrong order. - </para> - </listitem> - - <listitem> - <para> - Have <application>pg_dump</> output objects in alphabetical order if possible (Tom) - </para> - <para> - This should make it easier to identify changes between - dump files. - </para> - </listitem> - - <listitem> - <para> - Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho) - </para> - <para> - This makes <application>pg_restore</>'s behavior similar to the - results of feeding a <application>pg_dump</> output script to - <application>psql</>. In most cases, ignoring errors and plowing - ahead is the most useful thing to do. Also added was a pg_restore - option to give the old behavior of exiting on an error. - </para> - </listitem> - - <listitem> - <para> - <application>pg_restore</> <option>-l</> display now includes - objects' schema names - </para> - </listitem> - - <listitem> - <para> - New begin/end markers in <application>pg_dump</> text output (Bruce) - </para> - </listitem> - - <listitem> - <para> - Add start/stop times for - <application>pg_dump</>/<application>pg_dumpall</> in verbose mode - (Bruce) - </para> - </listitem> - - <listitem> - <para> - Allow most <application>pg_dump</> options in - <application>pg_dumpall</> (Christopher) - </para> - </listitem> - - <listitem> - <para> - Have <application>pg_dump</> use <command>ALTER OWNER</> rather - than <command>SET SESSION AUTHORIZATION</> by default - (Christopher) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>libpq Changes</title> - <itemizedlist> - - <listitem> - <para> - Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce) - </para> - </listitem> - - <listitem> - <para> - Add <function>PQmbdsplen()</> which returns the display length - of a character (Tatsuo) - </para> - </listitem> - - <listitem> - <para> - Add thread locking to <application>SSL</> and - <application>Kerberos</> connections (Manfred Spraul) - </para> - </listitem> - - <listitem> - <para> - Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and - <function>PQoidStatus()</> to work on <command>EXECUTE</command> - commands (Neil) - </para> - </listitem> - - <listitem> - <para> - Add <function>PQserverVersion()</> to provide more convenient - access to the server version number (Greg Sabino Mullane) - </para> - </listitem> - - <listitem> - <para> - Add <function>PQprepare/PQsendPrepared()</> functions to support - preparing statements without necessarily specifying the data types - of their parameters (Abhijit Menon-Sen) - </para> - </listitem> - - <listitem> - <para> - Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Source Code Changes</title> - <itemizedlist> - - <listitem> - <para> - Allow the database server to run natively on Windows (Claudio, Magnus, Andrew) - </para> - </listitem> - - <listitem> - <para> - Shell script commands converted to C versions for Windows support (Andrew) - </para> - </listitem> - - <listitem> - <para> - Create an extension makefile framework (Fabien Coelho, Peter) - </para> - <para> - This simplifies the task of building extensions outside the original - source tree. - </para> - </listitem> - - <listitem> - <para> - Support relocatable installations (Bruce) - </para> - <para> - Directory paths for installed files (such as the - <filename>/share</> directory) are now computed relative to the - actual location of the executables, so that an installation tree - can be moved to another place without reconfiguring and - rebuilding. - </para> - </listitem> - - <listitem> - <para> - Use <option>--with-docdir</> to choose installation location of documentation; also - allow <option>--infodir</> (Peter) - </para> - </listitem> - - <listitem> - <para> - Add <option>--without-docdir</> to prevent installation of documentation (Peter) - </para> - </listitem> - - <listitem> - <para> - Upgrade to <application>DocBook</> V4.2 SGML (Peter) - </para> - </listitem> - - <listitem> - <para> - New <literal>PostgreSQL</> <application>CVS</> tag (Marc) - </para> - <para> - This was done to make it easier for organizations to manage their - own copies of the <productname>PostgreSQL</productname> - <application>CVS</> repository. File version stamps from the master - repository will not get munged by checking into or out of a copied - repository. - </para> - </listitem> - - <listitem> - <para> - Clarify locking code (Manfred Koizar) - </para> - </listitem> - - <listitem> - <para> - Buffer manager cleanup (Neil) - </para> - </listitem> - - <listitem> - <para> - Decouple platform tests from CPU spinlock code (Bruce, Tom) - </para> - </listitem> - - <listitem> - <para> - Add inlined test-and-set code on PA-RISC for <application>gcc</> - (ViSolve, Tom) - </para> - </listitem> - - <listitem> - <para> - Improve i386 spinlock code (Manfred Spraul) - </para> - </listitem> - - <listitem> - <para> - Clean up spinlock assembly code to avoid warnings from newer - <application>gcc</> releases (Tom) - </para> - </listitem> - - <listitem> - <para> - Remove JDBC from source tree; now a separate project - </para> - </listitem> - - <listitem> - <para> - Remove the libpgtcl client interface; now a separate project - </para> - </listitem> - - <listitem> - <para> - More accurately estimate memory and file descriptor usage (Tom) - </para> - </listitem> - - <listitem> - <para> - Improvements to the Mac OS X startup scripts (Ray A.) - </para> - </listitem> - - <listitem> - <para> - New <function>fsync()</> test program (Bruce) - </para> - </listitem> - - <listitem> - <para> - Major documentation improvements (Neil, Peter) - </para> - </listitem> - - <listitem> - <para> - Remove <application>pg_encoding</application>; not needed - anymore - </para> - </listitem> - - <listitem> - <para> - Remove <application>pg_id</application>; not needed anymore - </para> - </listitem> - - <listitem> - <para> - Remove <application>initlocation</application>; not needed - anymore - </para> - </listitem> - - <listitem> - <para> - Auto-detect thread flags (no more manual testing) (Bruce) - </para> - </listitem> - - <listitem> - <para> - Use Olson's public domain <application>timezone</> library (Magnus) - </para> - </listitem> - - <listitem> - <para> - With threading enabled, use thread flags on Unixware for - backend executables too (Bruce) - </para> - <para> - Unixware cannot mix threaded and non-threaded object files in the - same executable, so everything must be compiled as threaded. - </para> - </listitem> - - <listitem> - <para> - <application>psql</> now uses a <application>flex</>-generated - lexical analyzer to process command strings - </para> - </listitem> - - <listitem> - <para> - Reimplement the linked list data structure used throughout the - backend (Neil) - </para> - <para> - This improves performance by allowing list append and length - operations to be more efficient. - </para> - </listitem> - - <listitem> - <para> - Allow dynamically loaded modules to create their own server configuration - parameters (Thomas Hallgren) - </para> - </listitem> - - <listitem> - <para> - New Brazilian version of FAQ (Euler Taveira de Oliveira) - </para> - </listitem> - - <listitem> - <para> - Add French FAQ (Guillaume Lelarge) - </para> - </listitem> - - <listitem> - <para> - New <application>pgevent</> for Windows logging - </para> - </listitem> - - <listitem> - <para> - Make libpq and ECPG build as proper shared libraries on OS X (Tom) - </para> - </listitem> - - </itemizedlist> - </sect3> - - - <sect3> - <title>Contrib Changes</title> - <itemizedlist> - - <listitem> - <para> - Overhaul of <filename>contrib/dblink</> (Joe) - </para> - </listitem> - - <listitem> - <para> - <filename>contrib/dbmirror</> improvements (Steven Singer) - </para> - </listitem> - - <listitem> - <para> - New <filename>contrib/xml2</> (John Gray, Torchbox) - </para> - </listitem> - - <listitem> - <para> - Updated <filename>contrib/mysql</filename> - </para> - </listitem> - - <listitem> - <para> - New version of <filename>contrib/btree_gist</> (Teodor) - </para> - </listitem> - - <listitem> - <para> - New <filename>contrib/trgm</>, trigram matching for - <productname>PostgreSQL</productname> (Teodor) - </para> - </listitem> - - <listitem> - <para> - Many <filename>contrib/tsearch2</> improvements (Teodor) - </para> - </listitem> - - <listitem> - <para> - Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew) - </para> - </listitem> - - <listitem> - <para> - Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page) - </para> - </listitem> - - <listitem> - <para> - Add functions to <filename>contrib/dbsize</> (Andreas Pflug) - </para> - </listitem> - - <listitem> - <para> - Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging - subprocess - </para> - </listitem> - - <listitem> - <para> - Removed <filename>contrib/rserv</>: obsoleted by various separate projects - </para> - </listitem> - - </itemizedlist> - </sect3> - - </sect2> - </sect1> - + + <sect3> + <title>Performance Improvements</title> + <itemizedlist> + + <listitem> + <para> + Support cross-data-type index usage (Tom) + </para> + <para> + Before this change, many queries would not use an index if the data + types did not match exactly. This improvement makes index usage more + intuitive and consistent. + </para> + </listitem> + + <listitem> + <para> + New buffer replacement strategy that improves caching (Jan) + </para> + <para> + Prior releases used a least-recently-used (LRU) cache to keep + recently referenced pages in memory. The LRU algorithm + did not consider the number of times a specific cache entry was + accessed, so large table scans could force out useful cache pages. + The new cache algorithm uses four separate lists to track most + recently used and most frequently used cache pages and dynamically + optimize their replacement based on the work load. This should + lead to much more efficient use of the shared buffer cache. + Administrators who have tested shared buffer sizes in the past + should retest with this new cache replacement policy. + </para> + </listitem> + + <listitem> + <para> + Add subprocess to write dirty buffers periodically to reduce + checkpoint writes (Jan) + </para> + <para> + In previous releases, the checkpoint process, which runs every few + minutes, would write all dirty buffers to the operating system's + buffer cache then flush all dirty operating system buffers to + disk. This resulted in a periodic spike in disk usage that often + hurt performance. The new code uses a background writer to trickle + disk writes at a steady pace so checkpoints have far fewer dirty + pages to write to disk. Also, the new code does not issue a global + <function>sync()</> call, but instead <function>fsync()</>s just + the files written since the last checkpoint. This should improve + performance and minimize degradation during checkpoints. + </para> + </listitem> + + <listitem> + <para> + Add ability to prolong vacuum to reduce performance impact (Jan) + </para> + <para> + On busy systems, <command>VACUUM</command> performs many I/O + requests which can hurt performance for other users. This + release allows you to slow down <command>VACUUM</command> to + reduce its impact on other users, though this increases the + total duration of <command>VACUUM</command>. + </para> + </listitem> + + <listitem> + <para> + Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom) + </para> + <para> + This improves the way indexes are scanned when many duplicate + values exist in the index. + </para> + </listitem> + + <listitem> + <para> + Use dynamically-generated table size estimates while planning (Tom) + </para> + <para> + Formerly the planner estimated table sizes using the values seen + by the last <command>VACUUM</command> or <command>ANALYZE</command>, + both as to physical table size (number of pages) and number of rows. + Now, the current physical table size is obtained from the kernel, + and the number of rows is estimated by multiplying the table size + by the row density (rows per page) seen by the last + <command>VACUUM</command> or <command>ANALYZE</command>. This should + produce more reliable estimates in cases where the table size has + changed significantly since the last housekeeping command. + </para> + </listitem> + + <listitem> + <para> + Improved index usage with <literal>OR</> clauses (Tom) + </para> + <para> + This allows the optimizer to use indexes in statements with many OR + clauses that would not have been indexed in the past. It can also use + multi-column indexes where the first column is specified and the second + column is part of an <literal>OR</> clause. + </para> + </listitem> + + <listitem> + <para> + Improve matching of partial index clauses (Tom) + </para> + <para> + The server is now smarter about using partial indexes in queries + involving complex <option>WHERE</> clauses. + </para> + </listitem> + + <listitem> + <para> + Improve performance of the GEQO optimizer (Tom) + </para> + <para> + The GEQO optimizer is used to plan queries involving many tables (by + default, twelve or more). This release speeds up the way queries are + analyzed to decrease time spent in optimization. + </para> + </listitem> + + <listitem> + <para> + Miscellaneous optimizer improvements + </para> + <para> + There is not room here to list all the minor improvements made, but + numerous special cases work better than in prior releases. + </para> + </listitem> + + <listitem> + <para> + Improve lookup speed for C functions (Tom) + </para> + <para> + This release uses a hash table to lookup information for dynamically + loaded C functions. This improves their speed so they perform nearly as + quickly as functions that are built into the server executable. + </para> + </listitem> + + <listitem> + <para> + Add type-specific <command>ANALYZE</command> statistics + capability (Mark Cave-Ayland) + </para> + <para> + This feature allows more flexibility in generating statistics + for non-standard data types. + </para> + </listitem> + + <listitem> + <para> + <command>ANALYZE</command> now collects statistics for + expression indexes (Tom) + </para> + <para> + Expression indexes (also called functional indexes) allow users to + index not just columns but the results of expressions and function + calls. With this release, the optimizer can gather and use statistics + about the contents of expression indexes. This will greatly improve + the quality of planning for queries in which an expression index is + relevant. + </para> + </listitem> + + <listitem> + <para> + New two-stage sampling method for <command>ANALYZE</command> + (Manfred Koizar) + </para> + <para> + This gives better statistics when the density of valid rows is very + different in different regions of a table. + </para> + </listitem> + + <listitem> + <para> + Speed up <command>TRUNCATE</command> (Tom) + </para> + <para> + This buys back some of the performance loss observed in 7.4, while still + keeping <command>TRUNCATE</command> transaction-safe. + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Server Changes</title> + <itemizedlist> + + <listitem> + <para> + Add WAL file archiving and point-in-time recovery (Simon Riggs) + </para> + </listitem> + + <listitem> + <para> + Add tablespaces so admins can control disk layout (Gavin) + </para> + </listitem> + + <listitem> + <para> + Add a built-in log rotation program (Andreas Pflug) + </para> + <para> + It is now possible to log server messages conveniently without + relying on either <application>syslog</> or an external log + rotation program. + </para> + </listitem> + + <listitem> + <para> + Add new read-only server configuration parameters to show server + compile-time settings: <varname>block_size</>, + <varname>integer_datetimes</>, <varname>max_function_args</>, + <varname>max_identifier_length</>, <varname>max_index_keys</> (Joe) + </para> + </listitem> + + <listitem> + <para> + Make quoting of <literal>sameuser</>, <literal>samegroup</>, and + <literal>all</> remove special meaning of these terms in + <filename>pg_hba.conf</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Use clearer IPv6 name <literal>::1/128</> for + <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Use CIDR format in <filename>pg_hba.conf</> examples (Andrew) + </para> + </listitem> + + <listitem> + <para> + Rename server configuration parameters <varname>SortMem</> and + <varname>VacuumMem</> to <varname>work_mem</> and + <varname>maintenance_work_mem</> (Old names still supported) (Tom) + </para> + <para> + This change was made to clarify that bulk operations such as index and + foreign key creation use <varname>maintenance_work_mem</>, while + <varname>work_mem</> is for workspaces used during query execution. + </para> + </listitem> + + <listitem> + <para> + Allow logging of session disconnections using server configuration + <varname>log_disconnections</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Add new server configuration parameter <varname>log_line_prefix</> to + allow control of information emitted in each log line (Andrew) + </para> + <para> + Available information includes user name, database name, remote IP + address, and session start time. + </para> + </listitem> + + <listitem> + <para> + Remove server configuration parameters <varname>log_pid</>, + <varname>log_timestamp</>, <varname>log_source_port</>; functionality + superseded by <varname>log_line_prefix</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Replace the <varname>virtual_host</> and <varname>tcpip_socket</> + parameters with a unified <varname>listen_addresses</> parameter + (Andrew, Tom) + </para> + <para> + <varname>virtual_host</> could only specify a single IP address to + listen on. <varname>listen_addresses</> allows multiple addresses + to be specified. + </para> + </listitem> + + <listitem> + <para> + Listen on localhost by default, which eliminates the need for the + <option>-i</> postmaster switch in many scenarios (Andrew) + </para> + <para> + Listening on localhost (<literal>127.0.0.1</>) opens no new + security holes but allows configurations like Windows and JDBC, + which do not support local sockets, to work without special + adjustments. + </para> + </listitem> + + <listitem> + <para> + Remove <varname>syslog</> server configuration parameter, and add more + logical <varname>log_destination</> variable to control log output + location (Magnus) + </para> + </listitem> + + <listitem> + <para> + Change server configuration parameter <varname>log_statement</> to take + values <varname>all</>, <varname>mod</>, <varname>ddl</>, or + <varname>none</> to select which queries are logged (Bruce) + </para> + <para> + This allows administrators to log only data definition changes or + only data modification statements. + </para> + </listitem> + + <listitem> + <para> + Some logging-related configuration parameters could formerly be adjusted + by ordinary users, but only in the <quote>more verbose</> direction. + They are now treated more strictly: only superusers can set them. + However, a superuser may use <command>ALTER USER</> to provide per-user + settings of these values for non-superusers. Also, it is now possible + for superusers to set values of superuser-only configuration parameters + via <literal>PGOPTIONS</>. + </para> + </listitem> + + <listitem> + <para> + Allow configuration files to be placed outside the data directory (mlw) + </para> + <para> + By default, configuration files are kept in the cluster's top directory. + With this addition, configuration files can be placed outside the + data directory, easing administration. + </para> + </listitem> + + <listitem> + <para> + Plan prepared queries only when first executed so constants can be + used for statistics (Oliver Jowett) + </para> + <para> + Prepared statements plan queries once and execute them many + times. While prepared queries avoid the overhead of re-planning + on each use, the quality of the plan suffers from not knowing the exact + parameters to be used in the query. In this release, planning of + unnamed prepared statements is delayed until the first execution, + and the actual parameter values of that execution are used as + optimization hints. This allows use of out-of-line parameter passing + without incurring a performance penalty. + </para> + </listitem> + + <listitem> + <para> + Allow <command>DECLARE CURSOR</command> to take parameters + (Oliver Jowett) + </para> + <para> + It is now useful to issue <command>DECLARE CURSOR</command> in a + <function>Parse</> message with parameters. The parameter values + sent at <function>Bind</> time will be substituted into the + execution of the cursor's query. + </para> + </listitem> + + <listitem> + <para> + Fix hash joins and aggregates of <type>inet</type> and + <type>cidr</type> data types (Tom) + </para> + <para> + Release 7.4 handled hashing of mixed <type>inet</type> and + <type>cidr</type> values incorrectly. (This bug did not exist + in prior releases because they wouldn't try to hash either + data type.) + </para> + </listitem> + + <listitem> + <para> + Make <varname>log_duration</> print only when <varname>log_statement</> + prints the query (Ed L.) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Query Changes</title> + <itemizedlist> + + <listitem> + <para> + Add savepoints (nested transactions) (Alvaro) + </para> + </listitem> + + <listitem> + <para> + Unsupported isolation levels are now accepted and promoted to the + nearest supported level (Peter) + </para> + <para> + The SQL specification states that if a database doesn't support a + specific isolation level, it should use the next more restrictive level. + This change complies with that recommendation. + </para> + </listitem> + + <listitem> + <para> + Allow <command>BEGIN WORK</command> to specify transaction + isolation levels like <command>START TRANSACTION</command> does + (Bruce) + </para> + </listitem> + + <listitem> + <para> + Fix table permission checking for cases in which rules generate + a query type different from the originally submitted query (Tom) + </para> + </listitem> + + <listitem> + <para> + Implement dollar quoting to simplify single-quote usage (Andrew, Tom, + David Fetter) + </para> + <para> + In previous releases, because single quotes had to be used to + quote a function's body, the use of single quotes inside the + function text required use of two single quotes or other error-prone + notations. With this release we add the ability to use "dollar + quoting" to quote a block of text. The ability to use different + quoting delimiters at different nesting levels greatly simplifies + the task of quoting correctly, especially in complex functions. + Dollar quoting can be used anywhere quoted text is needed. + </para> + </listitem> + + <listitem> + <para> + Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom) + </para> + <para> + <option>CASE</> no longer evaluates the tested expression multiple + times. This has benefits when the expression is complex or is + volatile. + </para> + </listitem> + + <listitem> + <para> + Test <option>HAVING</> before computing target list of an + aggregate query (Tom) + </para> + <para> + Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose) + ... GROUP BY ... HAVING SUM(lose) > 0</>. This should work but formerly + could fail with divide-by-zero. + </para> + </listitem> + + <listitem> + <para> + Replace <varname>max_expr_depth</> parameter with + <varname>max_stack_depth</> parameter, measured in kilobytes of stack + size (Tom) + </para> + <para> + This gives us a fairly bulletproof defense against crashing due to + runaway recursive functions. Instead of measuring the depth of expression + nesting, we now directly measure the size of the execution stack. + </para> + </listitem> + + <listitem> + <para> + Allow arbitrary row expressions (Tom) + </para> + <para> + This release allows SQL expressions to contain arbitrary composite + types, that is, row values. It also allows functions to more easily + take rows as arguments and return row values. + </para> + </listitem> + + <listitem> + <para> + Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator + in row and subselect comparisons (Fabien Coelho) + </para> + </listitem> + + <listitem> + <para> + Avoid locale-specific case conversion of basic ASCII letters in + identifiers and keywords (Tom) + </para> + <para> + This solves the <quote>Turkish problem</> with mangling of words + containing <literal>I</> and <literal>i</>. Folding of characters + outside the 7-bit-ASCII set is still locale-aware. + </para> + </listitem> + + <listitem> + <para> + Improve syntax error reporting (Fabien, Tom) + </para> + <para> + Syntax error reports are more useful than before. + </para> + </listitem> + + <listitem> + <para> + Change <command>EXECUTE</command> to return a completion tag + matching the executed statement (Kris Jurka) + </para> + <para> + Previous releases return an <command>EXECUTE</command> tag for + any <command>EXECUTE</command> call. In this release, the tag + returned will reflect the command executed. + </para> + </listitem> + + <listitem> + <para> + Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom) + </para> + <para> + Such a clause makes no logical sense, but in some cases the rule + decompiler formerly produced this syntax. + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Object Manipulation Changes</title> + <itemizedlist> + + <listitem> + <para> + Add <command>COMMENT ON</> for casts, conversions, languages, + operator classes, and large objects (Christopher) + </para> + </listitem> + + <listitem> + <para> + Add new server configuration parameter <varname>default_with_oids</> to + control whether tables are created with <type>OID</>s by default (Neil) + </para> + <para> + This allows administrators to control whether <command>CREATE + TABLE</command> commands create tables with or without <type>OID</> + columns by default. (Note: the current factory default setting for + <varname>default_with_oids</> is <literal>TRUE</>, but the default + will become <literal>FALSE</> in future releases.) + </para> + </listitem> + + <listitem> + <para> + Add <option>WITH</> / <option>WITHOUT OIDS</> clause to + <command>CREATE TABLE AS</command> (Neil) + </para> + </listitem> + + <listitem> + <para> + Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</> + column (<command>ALTER TABLE SET WITHOUT OIDS</> still works) + (Tom) + </para> + </listitem> + + <listitem> + <para> + Allow composite types as table columns (Tom) + </para> + </listitem> + + <listitem> + <para> + Allow <command>ALTER ... ADD COLUMN</> with defaults and + <option>NOT NULL</> constraints; works per SQL spec (Rod) + </para> + <para> + It is now possible for <option>ADD COLUMN</> to create a column + that is not initially filled with NULLs, but with a specified + default value. + </para> + </listitem> + + <listitem> + <para> + Add <command>ALTER COLUMN TYPE</> to change column's type (Rod) + </para> + <para> + It is now possible to alter a column's data type without dropping + and re-adding the column. + </para> + </listitem> + + <listitem> + <para> + Allow multiple <command>ALTER</> actions in a single <command>ALTER + TABLE</command> command (Rod) + </para> + <para> + This is particularly useful for <command>ALTER</> commands that + rewrite the table (which include <option>ALTER COLUMN TYPE</> and + <option>ADD COLUMN</> with a default). By grouping + <command>ALTER</> commands together, the table need be rewritten + only once. + </para> + </listitem> + + <listitem> + <para> + Allow <command>ALTER TABLE</command> to add <type>SERIAL</type> + columns (Tom) + </para> + <para> + This falls out from the new capability of specifying defaults for new + columns. + </para> + </listitem> + + <listitem> + <para> + Allow changing the owners of aggregates, conversions, databases, + functions, operators, operator classes, schemas, types, and tablespaces + (Christopher, Euler Taveira de Oliveira) + </para> + <para> + Previously this required modifying the system tables directly. + </para> + </listitem> + + <listitem> + <para> + Allow temporary object creation to be limited to <option>SECURITY + DEFINER</> functions (Sean Chittenden) + </para> + </listitem> + + <listitem> + <para> + Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher) + </para> + <para> + Prior to this release, there was no way to clear an auto-cluster + specification except to modify the system tables. + </para> + </listitem> + + <listitem> + <para> + Constraint/Index/<type>SERIAL</> names are now + <replaceable>table_column_type</> + with numbers appended to guarantee uniqueness within the schema + (Tom) + </para> + <para> + The SQL specification states that such names should be unique + within a schema. + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_get_serial_sequence()</> to return a + <type>SERIAL</> column's sequence name (Christopher) + </para> + <para> + This allows automated scripts to reliably find the <type>SERIAL</> + sequence name. + </para> + </listitem> + + <listitem> + <para> + Warn when primary/foreign key data type mismatch requires costly lookup + </para> + </listitem> + + <listitem> + <para> + New <command>ALTER INDEX</> command to allow moving of indexes + between tablespaces (Gavin) + </para> + </listitem> + + <listitem> + <para> + Make <command>ALTER TABLE OWNER</> change dependent sequence + ownership too (Alvaro) + </para> + </listitem> + + + </itemizedlist> + </sect3> + + + <sect3> + <title>Utility Command Changes</title> + <itemizedlist> + + <listitem> + <para> + Allow <command>CREATE SCHEMA</command> to create triggers, + indexes, and sequences (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien + Coelho) + </para> + <para> + This allows <option>ALSO</> to be added to rule creation to contrast it with + <option>INSTEAD</> rules. + </para> + </listitem> + + <listitem> + <para> + Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo) + </para> + <para> + This allows the <command>LOCK</command> command to fail if it + would have to wait for the requested lock. + </para> + </listitem> + + <listitem> + <para> + Allow <command>COPY</command> to read and write + comma-separated-value (CSV) files (Andrew, Bruce) + </para> + </listitem> + + <listitem> + <para> + Generate error if the <command>COPY</command> delimiter and NULL + string conflict (Bruce) + </para> + </listitem> + + <listitem> + <para> + <command>GRANT</command>/<command>REVOKE</command> behavior + follows the SQL spec more closely + </para> + </listitem> + + <listitem> + <para> + Avoid locking conflict between <command>CREATE INDEX</command> + and <command>CHECKPOINT</command> (Tom) + </para> + <para> + In 7.3 and 7.4, a long-running B-tree index build could block concurrent + <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the + WAL log could not be recycled. + </para> + </listitem> + + <listitem> + <para> + Database-wide <command>ANALYZE</command> does not hold locks + across tables (Tom) + </para> + <para> + This reduces the potential for deadlocks against other backends + that want exclusive locks on tables. To get the benefit of this + change, do not execute database-wide <command>ANALYZE</command> + inside a transaction block (<command>BEGIN</command> block); it + must be able to commit and start a new transaction for each + table. + </para> + </listitem> + + <listitem> + <para> + <command>REINDEX</command> does not exclusively lock the index's + parent table anymore + </para> + <para> + The index itself is still exclusively locked, but readers of the + table can continue if they are not using the particular index + being rebuilt. + </para> + </listitem> + + <listitem> + <para> + Erase MD5 user passwords when a user is renamed (Bruce) + </para> + <para> + <productname>PostgreSQL</productname> uses the user name as salt + when encrypting passwords via MD5. When a user's name is changed, + the salt will no longer match the stored MD5 password, so the + stored password becomes useless. In this release a notice is + generated and the password is cleared. A new password must then + be assigned if the user is to be able to log in with a password. + </para> + </listitem> + + <listitem> + <para> + New <application>pg_ctl</> <option>kill</> option for Windows (Andrew) + </para> + <para> + Windows does not have a <literal>kill</> command to send signals to + backends so this capability was added to <application>pg_ctl</>. + </para> + </listitem> + + <listitem> + <para> + Information schema improvements + </para> + </listitem> + + <listitem> + <para> + Add <option>--pwfile</> option to + <application>initdb</application> so the initial password can be + set by GUI tools (Magnus) + </para> + </listitem> + + <listitem> + <para> + Detect locale/encoding mismatch in + <application>initdb</application> (Peter) + </para> + </listitem> + + <listitem> + <para> + Add <option>register</> command to <application>pg_ctl</> to + register Windows operating system service (Dave Page) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Data Type and Function Changes</title> + <itemizedlist> + + <listitem> + <para> + More complete support for composite types (row types) (Tom) + </para> + <para> + Composite values can be used in many places where only scalar values + worked before. + </para> + </listitem> + + <listitem> + <para> + Reject non-rectangular array values as erroneous (Joe) + </para> + <para> + Formerly, <function>array_in</> would silently build a + surprising result. + </para> + </listitem> + + <listitem> + <para> + Overflow in integer arithmetic operations is now detected (Tom) + </para> + </listitem> + + <listitem> + <para> + The arithmetic operators associated with the single-byte + <type>"char"</> data type have been removed. + </para> + <para> + Formerly, the parser would select these operators in many situations + where an <quote>unable to select an operator</> error would be more + appropriate, such as <literal>null * null</>. If you actually want + to do arithmetic on a <type>"char"</> column, you can cast it to + integer explicitly. + </para> + </listitem> + + <listitem> + <para> + Syntax checking of array input values considerably tightened up (Joe) + </para> + <para> + Junk that was previously allowed in odd places with odd results + now causes an <literal>ERROR</>, for example, non-whitespace + after the closing right brace. + </para> + </listitem> + + <listitem> + <para> + Empty-string array element values must now be written as + <literal>""</>, rather than writing nothing (Joe) + </para> + <para> + Formerly, both ways of writing an empty-string element value were + allowed, but now a quoted empty string is required. The case where + nothing at all appears will probably be considered to be a NULL + element value in some future release. + </para> + </listitem> + + <listitem> + <para> + Array element trailing whitespace is now ignored (Joe) + </para> + <para> + Formerly leading whitespace was ignored, but trailing whitespace + between an element value and the delimiter or right brace was + significant. Now trailing whitespace is also ignored. + </para> + </listitem> + + <listitem> + <para> + Emit array values with explicit array bounds when lower bound is not one + (Joe) + </para> + </listitem> + + <listitem> + <para> + Accept <literal>YYYY-monthname-DD</> as a date string (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <function>netmask</> and <function>hostmask</> functions + return maximum-length mask length (Tom) + </para> + </listitem> + + <listitem> + <para> + Change factorial function to return <type>numeric</type> (Gavin) + </para> + <para> + Returning <type>numeric</type> allows the factorial function to + work for a wider range of input values. + </para> + </listitem> + + <listitem> + <para> + <function>to_char</>/<function>to_date()</> date conversion + improvements (Kurt Roeckx, Fabien Coelho) + </para> + </listitem> + + <listitem> + <para> + Make <function>length()</> disregard trailing spaces in + <type>CHAR(n)</> (Gavin) + </para> + <para> + This change was made to improve consistency: trailing spaces are + semantically insignificant in <type>CHAR(n)</> data, so they + should not be counted by <function>length()</>. + </para> + </listitem> + + <listitem> + <para> + Warn about empty string being passed to + <type>OID</>/<type>float4</>/<type>float8</> data types (Neil) + </para> + <para> + 8.1 will throw an error instead. + </para> + </listitem> + + <listitem> + <para> + Allow leading or trailing whitespace in + <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</> + input routines + (Neil) + </para> + </listitem> + + <listitem> + <para> + Better support for IEEE <literal>Infinity</> and <literal>NaN</> + values in <type>float4</type>/<type>float8</type> (Neil) + </para> + <para> + These should now work on all platforms that support IEEE-compliant + floating point arithmetic. + </para> + </listitem> + + <listitem> + <para> + Add <option>week</> option to <function>date_trunc()</> (Robert Creager) + </para> + </listitem> + + <listitem> + <para> + Fix <function>to_char</function> for <literal>1 BC</> + (previously it returned <literal>1 AD</>) (Bruce) + </para> + </listitem> + + <listitem> + <para> + Fix <function>date_part(year)</> for BC dates (previously it + returned one less than the correct year) (Bruce) + </para> + </listitem> + + <listitem> + <para> + Fix <function>date_part()</> to return the proper millennium and + century (Fabien Coelho) + </para> + <para> + In previous versions, the century and millennium results had a wrong + number and started in the wrong year, as compared to standard + reckoning of such things. + </para> + </listitem> + + <listitem> + <para> + Add <function>ceiling()</> as an alias for <function>ceil()</>, + and <function>power()</> as an alias for <function>pow()</> for + standards compliance (Neil) + </para> + </listitem> + + <listitem> + <para> + Change <function>ln()</>, <function>log()</>, + <function>power()</>, and <function>sqrt()</> to emit the correct + <literal>SQLSTATE</> error codes for certain error conditions, as + specified by SQL:2003 (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <function>width_bucket()</> function as defined by SQL:2003 (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <function>generate_series()</> functions to simplify working + with numeric sets (Joe) + </para> + </listitem> + + <listitem> + <para> + Fix <function>upper/lower/initcap()</> functions to work with + multibyte encodings (Tom) + </para> + </listitem> + + <listitem> + <para> + Add boolean and bitwise integer <option>AND</>/<option>OR</> + aggregates (Fabien Coelho) + </para> + </listitem> + + <listitem> + <para> + New session information functions to return network addresses for client + and server (Sean Chittenden) + </para> + </listitem> + + <listitem> + <para> + Add function to determine the area of a closed path (Sean Chittenden) + </para> + </listitem> + + <listitem> + <para> + Add function to send cancel request to other backends (Magnus) + </para> + </listitem> + + <listitem> + <para> + Add <type>interval</> plus <type>datetime</> operators (Tom) + </para> + <para> + The reverse ordering, <type>datetime</> plus <type>interval</>, + was already supported, but both are required by the SQL standard. + </para> + </listitem> + + <listitem> + <para> + Casting an integer to <type>BIT(N)</> selects the rightmost N bits + of the integer + (Tom) + </para> + <para> + In prior releases, the leftmost N bits were selected, but this was + deemed unhelpful, not to mention inconsistent with casting from bit + to int. + </para> + </listitem> + + <listitem> + <para> + Require <type>CIDR</> values to have all non-masked bits be zero + (Kevin Brintnall) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Server-Side Language Changes</title> + <itemizedlist> + + <listitem> + <para> + In <literal>READ COMMITTED</> serialization mode, volatile functions + now see the results of concurrent transactions committed up to the + beginning of each statement within the function, rather than up to the + beginning of the interactive command that called the function. + </para> + </listitem> + + <listitem> + <para> + Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always + use the snapshot of the calling query, and therefore do not see the + effects of actions taken after the calling query starts, whether in + their own transaction or other transactions. Such a function must be + read-only, too, meaning that it cannot use any SQL commands other than + <command>SELECT</>. There is a considerable performance gain from + declaring a function <literal>STABLE</> or <literal>IMMUTABLE</> + rather than <literal>VOLATILE</>. + </para> + </listitem> + + <listitem> + <para> + Non-deferred <option>AFTER</> triggers are now fired immediately + after completion of the triggering query, rather than upon + finishing the current interactive command. This makes a difference + when the triggering query occurred within a function: the trigger + is invoked before the function proceeds to its next operation. For + example, if a function inserts a new row into a table, any + non-deferred foreign key checks occur before proceeding with the + function. + </para> + </listitem> + + <listitem> + <para> + Allow function parameters to be declared with names (Dennis Bjorklund) + </para> + <para> + This allows better documentation of functions. Whether the names + actually do anything depends on the specific function language + being used. + </para> + </listitem> + + <listitem> + <para> + Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bjorklund) + </para> + <para> + This basically creates an automatic alias for each named parameter. + </para> + </listitem> + + <listitem> + <para> + Do minimal syntax checking of PL/pgSQL functions at creation time (Tom) + </para> + <para> + This allows us to catch simple syntax errors sooner. + </para> + </listitem> + + <listitem> + <para> + More support for composite types (row and record variables) in PL/pgSQL + </para> + <para> + For example, it now works to pass a rowtype variable to another function + as a single variable. + </para> + </listitem> + + <listitem> + <para> + Default values for PL/pgSQL variables can now reference previously + declared variables + </para> + </listitem> + + <listitem> + <para> + Improve parsing of PL/pgSQL FOR loops (Tom) + </para> + <para> + Parsing is now driven by presence of <literal>".."</> rather than + data type of <option>FOR</> variable. This makes no difference for + correct functions, but should result in more understandable error + messages when a mistake is made. + </para> + </listitem> + + <listitem> + <para> + Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan) + </para> + </listitem> + + <listitem> + <para> + In PL/Tcl, SPI commands are now run in subtransactions. If an error + occurs, the subtransaction is cleaned up and the error is reported + as an ordinary Tcl error, which can be trapped with <literal>catch</>. + Formerly, it was not possible to catch such errors. + </para> + </listitem> + + <listitem> + <para> + Accept <command>ELSEIF</> in PL/pgSQL (Neil) + </para> + <para> + Previously PL/pgSQL only allowed <command>ELSIF</>, but many people + are accustomed to spelling this keyword <command>ELSEIF</>. + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title><application>psql</> Changes</title> + <itemizedlist> + + <listitem> + <para> + Improve <application>psql</> information display about database + objects (Christopher) + </para> + </listitem> + + <listitem> + <para> + Allow <application>psql</> to display group membership in + <command>\du</> and <command>\dg</> (Markus Bertheau) + </para> + </listitem> + + <listitem> + <para> + Prevent <application>psql</> <command>\dn</command> from showing + temporary schemas (Bruce) + </para> + </listitem> + + <listitem> + <para> + Allow <application>psql</> to handle tilde user expansion for file + names (Zach Irmen) + </para> + </listitem> + + <listitem> + <para> + Allow <application>psql</> to display fancy prompts, including + color, via <application>readline</> (Reece Hart, Chet Ramey) + </para> + </listitem> + + <listitem> + <para> + Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax + fully (Tom) + </para> + </listitem> + + <listitem> + <para> + Show the location of syntax errors (Fabien Coelho, Tom) + </para> + </listitem> + + <listitem> + <para> + Add <command>CLUSTER</command> information to <application>psql</> + <command>\d</> display + (Bruce) + </para> + </listitem> + + <listitem> + <para> + Change <application>psql</> <command>\copy stdin/stdout</> to read + from command input/output (Bruce) + </para> + </listitem> + + <listitem> + <para> + Add <option>pstdin</>/<option>pstdout</> to read from + <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark + Feit) + </para> + </listitem> + + <listitem> + <para> + Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename> + (Bruce) + </para> + <para> + This allows a central file where global <application>psql</> startup commands can + be stored. + </para> + </listitem> + + <listitem> + <para> + Have <application>psql</> <command>\d+</> indicate if the table + has an <type>OID</> column (Neil) + </para> + </listitem> + + <listitem> + <para> + On Windows, use binary mode in <application>psql</> when reading files so control-Z + is not seen as end-of-file + </para> + </listitem> + + <listitem> + <para> + Have <command>\dn+</> show permissions and description for schemas (Dennis + Bjorklund) + </para> + </listitem> + + <listitem> + <para> + Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane) + </para> + </listitem> + + <listitem> + <para> + Allow boolean settings to be set using upper or lower case (Michael Paesold) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title><application>pg_dump</> Changes</title> + <itemizedlist> + + <listitem> + <para> + Use dependency information to improve the reliability of + <application>pg_dump</> (Tom) + </para> + <para> + This should solve the longstanding problems with related objects + sometimes being dumped in the wrong order. + </para> + </listitem> + + <listitem> + <para> + Have <application>pg_dump</> output objects in alphabetical order if possible (Tom) + </para> + <para> + This should make it easier to identify changes between + dump files. + </para> + </listitem> + + <listitem> + <para> + Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho) + </para> + <para> + This makes <application>pg_restore</>'s behavior similar to the + results of feeding a <application>pg_dump</> output script to + <application>psql</>. In most cases, ignoring errors and plowing + ahead is the most useful thing to do. Also added was a pg_restore + option to give the old behavior of exiting on an error. + </para> + </listitem> + + <listitem> + <para> + <application>pg_restore</> <option>-l</> display now includes + objects' schema names + </para> + </listitem> + + <listitem> + <para> + New begin/end markers in <application>pg_dump</> text output (Bruce) + </para> + </listitem> + + <listitem> + <para> + Add start/stop times for + <application>pg_dump</>/<application>pg_dumpall</> in verbose mode + (Bruce) + </para> + </listitem> + + <listitem> + <para> + Allow most <application>pg_dump</> options in + <application>pg_dumpall</> (Christopher) + </para> + </listitem> + + <listitem> + <para> + Have <application>pg_dump</> use <command>ALTER OWNER</> rather + than <command>SET SESSION AUTHORIZATION</> by default + (Christopher) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>libpq Changes</title> + <itemizedlist> + + <listitem> + <para> + Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce) + </para> + </listitem> + + <listitem> + <para> + Add <function>PQmbdsplen()</> which returns the display length + of a character (Tatsuo) + </para> + </listitem> + + <listitem> + <para> + Add thread locking to <application>SSL</> and + <application>Kerberos</> connections (Manfred Spraul) + </para> + </listitem> + + <listitem> + <para> + Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and + <function>PQoidStatus()</> to work on <command>EXECUTE</command> + commands (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <function>PQserverVersion()</> to provide more convenient + access to the server version number (Greg Sabino Mullane) + </para> + </listitem> + + <listitem> + <para> + Add <function>PQprepare/PQsendPrepared()</> functions to support + preparing statements without necessarily specifying the data types + of their parameters (Abhijit Menon-Sen) + </para> + </listitem> + + <listitem> + <para> + Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Source Code Changes</title> + <itemizedlist> + + <listitem> + <para> + Allow the database server to run natively on Windows (Claudio, Magnus, Andrew) + </para> + </listitem> + + <listitem> + <para> + Shell script commands converted to C versions for Windows support (Andrew) + </para> + </listitem> + + <listitem> + <para> + Create an extension makefile framework (Fabien Coelho, Peter) + </para> + <para> + This simplifies the task of building extensions outside the original + source tree. + </para> + </listitem> + + <listitem> + <para> + Support relocatable installations (Bruce) + </para> + <para> + Directory paths for installed files (such as the + <filename>/share</> directory) are now computed relative to the + actual location of the executables, so that an installation tree + can be moved to another place without reconfiguring and + rebuilding. + </para> + </listitem> + + <listitem> + <para> + Use <option>--with-docdir</> to choose installation location of documentation; also + allow <option>--infodir</> (Peter) + </para> + </listitem> + + <listitem> + <para> + Add <option>--without-docdir</> to prevent installation of documentation (Peter) + </para> + </listitem> + + <listitem> + <para> + Upgrade to <application>DocBook</> V4.2 SGML (Peter) + </para> + </listitem> + + <listitem> + <para> + New <literal>PostgreSQL</> <application>CVS</> tag (Marc) + </para> + <para> + This was done to make it easier for organizations to manage their + own copies of the <productname>PostgreSQL</productname> + <application>CVS</> repository. File version stamps from the master + repository will not get munged by checking into or out of a copied + repository. + </para> + </listitem> + + <listitem> + <para> + Clarify locking code (Manfred Koizar) + </para> + </listitem> + + <listitem> + <para> + Buffer manager cleanup (Neil) + </para> + </listitem> + + <listitem> + <para> + Decouple platform tests from CPU spinlock code (Bruce, Tom) + </para> + </listitem> + + <listitem> + <para> + Add inlined test-and-set code on PA-RISC for <application>gcc</> + (ViSolve, Tom) + </para> + </listitem> + + <listitem> + <para> + Improve i386 spinlock code (Manfred Spraul) + </para> + </listitem> + + <listitem> + <para> + Clean up spinlock assembly code to avoid warnings from newer + <application>gcc</> releases (Tom) + </para> + </listitem> + + <listitem> + <para> + Remove JDBC from source tree; now a separate project + </para> + </listitem> + + <listitem> + <para> + Remove the libpgtcl client interface; now a separate project + </para> + </listitem> + + <listitem> + <para> + More accurately estimate memory and file descriptor usage (Tom) + </para> + </listitem> + + <listitem> + <para> + Improvements to the Mac OS X startup scripts (Ray A.) + </para> + </listitem> + + <listitem> + <para> + New <function>fsync()</> test program (Bruce) + </para> + </listitem> + + <listitem> + <para> + Major documentation improvements (Neil, Peter) + </para> + </listitem> + + <listitem> + <para> + Remove <application>pg_encoding</application>; not needed + anymore + </para> + </listitem> + + <listitem> + <para> + Remove <application>pg_id</application>; not needed anymore + </para> + </listitem> + + <listitem> + <para> + Remove <application>initlocation</application>; not needed + anymore + </para> + </listitem> + + <listitem> + <para> + Auto-detect thread flags (no more manual testing) (Bruce) + </para> + </listitem> + + <listitem> + <para> + Use Olson's public domain <application>timezone</> library (Magnus) + </para> + </listitem> + + <listitem> + <para> + With threading enabled, use thread flags on Unixware for + backend executables too (Bruce) + </para> + <para> + Unixware cannot mix threaded and non-threaded object files in the + same executable, so everything must be compiled as threaded. + </para> + </listitem> + + <listitem> + <para> + <application>psql</> now uses a <application>flex</>-generated + lexical analyzer to process command strings + </para> + </listitem> + + <listitem> + <para> + Reimplement the linked list data structure used throughout the + backend (Neil) + </para> + <para> + This improves performance by allowing list append and length + operations to be more efficient. + </para> + </listitem> + + <listitem> + <para> + Allow dynamically loaded modules to create their own server configuration + parameters (Thomas Hallgren) + </para> + </listitem> + + <listitem> + <para> + New Brazilian version of FAQ (Euler Taveira de Oliveira) + </para> + </listitem> + + <listitem> + <para> + Add French FAQ (Guillaume Lelarge) + </para> + </listitem> + + <listitem> + <para> + New <application>pgevent</> for Windows logging + </para> + </listitem> + + <listitem> + <para> + Make libpq and ECPG build as proper shared libraries on OS X (Tom) + </para> + </listitem> + + </itemizedlist> + </sect3> + + + <sect3> + <title>Contrib Changes</title> + <itemizedlist> + + <listitem> + <para> + Overhaul of <filename>contrib/dblink</> (Joe) + </para> + </listitem> + + <listitem> + <para> + <filename>contrib/dbmirror</> improvements (Steven Singer) + </para> + </listitem> + + <listitem> + <para> + New <filename>contrib/xml2</> (John Gray, Torchbox) + </para> + </listitem> + + <listitem> + <para> + Updated <filename>contrib/mysql</filename> + </para> + </listitem> + + <listitem> + <para> + New version of <filename>contrib/btree_gist</> (Teodor) + </para> + </listitem> + + <listitem> + <para> + New <filename>contrib/trgm</>, trigram matching for + <productname>PostgreSQL</productname> (Teodor) + </para> + </listitem> + + <listitem> + <para> + Many <filename>contrib/tsearch2</> improvements (Teodor) + </para> + </listitem> + + <listitem> + <para> + Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page) + </para> + </listitem> + + <listitem> + <para> + Add functions to <filename>contrib/dbsize</> (Andreas Pflug) + </para> + </listitem> + + <listitem> + <para> + Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging + subprocess + </para> + </listitem> + + <listitem> + <para> + Removed <filename>contrib/rserv</>: obsoleted by various separate projects + </para> + </listitem> + + </itemizedlist> + </sect3> + + </sect2> + </sect1> + <sect1 id="release-7-4-8"> <title>Release 7.4.8</title> @@ -2869,8 +2869,8 @@ holder of the lock released it within a very narrow window. <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-7"> <title>Release 7.4.7</title> @@ -2927,8 +2927,8 @@ datestyles</para></listitem> GMT</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-6"> <title>Release 7.4.6</title> @@ -2997,8 +2997,8 @@ This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN. ECPG prepare statement</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-5"> <title>Release 7.4.5</title> @@ -3033,8 +3033,8 @@ still worth a re-release. The bug does not exist in pre-7.4 releases. </para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-4"> <title>Release 7.4.4</title> @@ -3083,8 +3083,8 @@ aggregate plan</para></listitem> <listitem><para>Translation updates (various contributors)</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-3"> <title>Release 7.4.3</title> @@ -3139,8 +3139,8 @@ names from outer query levels. <listitem><para>Numerous translation updates (various contributors)</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-2"> <title>Release 7.4.2</title> @@ -3280,8 +3280,8 @@ inconveniences associated with the <literal>i/I</> problem.</para></listitem> <listitem><para>Various JDBC fixes</para></listitem> </itemizedlist> - </sect2> - </sect1> + </sect2> + </sect1> <sect1 id="release-7-4-1"> <title>Release 7.4.1</title> @@ -11226,4 +11226,3 @@ sgml-local-catalogs:("/usr/lib/sgml/catalog") sgml-local-ecat-files:nil End: --> -