<!--
-$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">
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>
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>
<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>
GMT</para></listitem>
</itemizedlist>
- </sect2>
- </sect1>
+ </sect2>
+ </sect1>
<sect1 id="release-7-4-6">
<title>Release 7.4.6</title>
ECPG prepare statement</para></listitem>
</itemizedlist>
- </sect2>
- </sect1>
+ </sect2>
+ </sect1>
<sect1 id="release-7-4-5">
<title>Release 7.4.5</title>
</para></listitem>
</itemizedlist>
- </sect2>
- </sect1>
+ </sect2>
+ </sect1>
<sect1 id="release-7-4-4">
<title>Release 7.4.4</title>
<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>
<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>
<listitem><para>Various JDBC fixes</para></listitem>
</itemizedlist>
- </sect2>
- </sect1>
+ </sect2>
+ </sect1>
<sect1 id="release-7-4-1">
<title>Release 7.4.1</title>
sgml-local-ecat-files:nil
End:
-->
-