#
# PostgreSQL documentation makefile
#
-# $PostgreSQL: pgsql/doc/src/sgml/Makefile,v 1.114 2008/12/11 07:34:07 petere Exp $
+# $PostgreSQL: pgsql/doc/src/sgml/Makefile,v 1.115 2009/05/02 20:17:19 tgl Exp $
#
#----------------------------------------------------------------------------
# PostScript from TeX
postgres.ps:
$(error Invalid target; use postgres-A4.ps or postgres-US.ps as targets)
-
+
%.ps: %.dvi
dvips -o $@ $<
postgres.pdf:
$(error Invalid target; use postgres-A4.pdf or postgres-US.pdf as targets)
-
+
%.pdf: %.tex-pdf
@rm -f $*.aux $*.log $*.out
# multiple runs are necessary to create proper intra-document links
INSTALL.html: standalone-install.sgml installation.sgml version.sgml
$(JADE.text) -V nochunks standalone-install.sgml installation.sgml >$@
-# remove links to main documentation
-HISTORY.html: release.sgml
- ( echo '<!doctype appendix PUBLIC "-//OASIS//DTD DocBook V4.2//EN">'; \
- cat $< ) | \
- $(PERL) -p -0 -e 's/<link\s+linkend[^>]*>//g' | \
- $(PERL) -p -e 's/<\/link>//g' >tempfile_HISTORY.sgml
+HISTORY.html: generate_history.pl $(wildcard $(srcdir)/release*.sgml)
+ $(PERL) $< "$(srcdir)" release.sgml >tempfile_HISTORY.sgml
$(JADE.text) -V nochunks tempfile_HISTORY.sgml >$@
rm tempfile_HISTORY.sgml
-<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.60 2009/03/25 23:20:01 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.61 2009/05/02 20:17:19 tgl Exp $ -->
<!entity history SYSTEM "history.sgml">
<!entity info SYSTEM "info.sgml">
<!entity errcodes SYSTEM "errcodes.sgml">
<!entity features SYSTEM "features.sgml">
<!entity keywords SYSTEM "keywords.sgml">
+
<!entity release SYSTEM "release.sgml">
+<!entity release-8.4 SYSTEM "release-8.4.sgml">
+<!entity release-8.3 SYSTEM "release-8.3.sgml">
+<!entity release-8.2 SYSTEM "release-8.2.sgml">
+<!entity release-8.1 SYSTEM "release-8.1.sgml">
+<!entity release-8.0 SYSTEM "release-8.0.sgml">
+<!entity release-7.4 SYSTEM "release-7.4.sgml">
+<!entity release-old SYSTEM "release-old.sgml">
+
<!entity acronyms SYSTEM "acronyms.sgml">
<!entity features-supported SYSTEM "features-supported.sgml">
--- /dev/null
+#! /usr/bin/perl -w
+
+# generate_history.pl -- flatten release notes for use as HISTORY file
+#
+# Usage: generate_history.pl srcdir release.sgml >output.sgml
+#
+# The main point of this script is to strip out <link> references, which
+# generally point into the rest of the documentation and so can't be used
+# in a standalone build of the release notes. To make sure this is done
+# everywhere, we have to fold in the sub-files of the release notes.
+#
+# $PostgreSQL: pgsql/doc/src/sgml/generate_history.pl,v 1.1 2009/05/02 20:17:19 tgl Exp $
+
+use strict;
+
+my($srcdir) = shift;
+defined($srcdir) || die "$0: missing required argument: srcdir\n";
+my($infile) = shift;
+defined($infile) || die "$0: missing required argument: inputfile\n";
+
+# Emit DOCTYPE header so that the output is a self-contained SGML document
+print "<!DOCTYPE appendix PUBLIC \"-//OASIS//DTD DocBook V4.2//EN\">\n";
+
+process_file($infile);
+
+exit 0;
+
+sub process_file {
+ my($filename) = @_;
+
+ local *FILE; # need a local filehandle so we can recurse
+
+ my($f) = $srcdir . '/' . $filename;
+ open(FILE, $f) || die "could not read $f: $!\n";
+
+ while (<FILE>) {
+ # Recursively expand sub-files of the release notes
+ if (m/^&(release-.*);$/) {
+ process_file($1 . ".sgml");
+ next;
+ }
+
+ # Remove <link ...> tags, which might span multiple lines
+ while (m/<link/) {
+ if (s/<link\s+linkend[^>]*>//) {
+ next;
+ }
+ # incomplete tag, so slurp another line
+ $_ .= <FILE>;
+ }
+
+ # Remove </link> too
+ s|</link>||g;
+
+ print;
+ }
+ close(FILE);
+}
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-7.4.sgml,v 1.1 2009/05/02 20:17:19 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-7-4-25">
+ <title>Release 7.4.25</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-03-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.24.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.25</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent error recursion crashes when encoding conversion fails (Tom)
+ </para>
+
+ <para>
+ This change extends fixes made in the last two minor releases for
+ related failure scenarios. The previous fixes were narrowly tailored
+ for the original problem reports, but we have now recognized that
+ <emphasis>any</> error thrown by an encoding conversion function could
+ potentially lead to infinite recursion while trying to report the
+ error. The solution therefore is to disable translation and encoding
+ conversion and report the plain-ASCII form of any error message,
+ if we find we have gotten into a recursive error reporting situation.
+ (CVE-2009-0922)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>CREATE CONVERSION</> with the wrong encodings
+ for the specified conversion function (Heikki)
+ </para>
+
+ <para>
+ This prevents one possible scenario for encoding conversion failure.
+ The previous change is a backstop to guard against other kinds of
+ failures in the same area.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump when <function>to_char()</> is given format codes that
+ are inappropriate for the type of the data argument (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+ of known timezone abbreviations (Xavier Bugaud)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-24">
+ <title>Release 7.4.24</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-02-02</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.23.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.24</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of URLs in <function>headline()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of overlength headlines in <function>headline()</>
+ function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible Assert failure or misconversion if an encoding
+ conversion is created with the wrong conversion function for the
+ specified pair of encodings (Tom, Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnecessary locking of small tables in <command>VACUUM</>
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix uninitialized variables in <filename>contrib/tsearch2</>'s
+ <function>get_covers()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in <function>to_char()</>'s handling of <literal>TH</>
+ format codes (Andreas Scherbaum)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make all documentation reference <literal>pgsql-bugs</> and/or
+ <literal>pgsql-hackers</> as appropriate, instead of the
+ now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+ mailing lists (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-23">
+ <title>Release 7.4.23</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-11-03</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.22.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.23</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix backend crash when the client encoding cannot represent a localized
+ error message (Tom)
+ </para>
+
+ <para>
+ We have addressed similar issues before, but it would still fail if
+ the <quote>character has no equivalent</> message itself couldn't
+ be converted. The fix is to disable localization and send the plain
+ ASCII error message when we detect such a situation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect tsearch2 headline generation when single query
+ item matches first word of text (Sushant Sinha)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix improper display of fractional seconds in interval values when
+ using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+ build (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+ behave correctly when the passed tuple and tuple descriptor have
+ different numbers of columns (Tom)
+ </para>
+
+ <para>
+ This situation is normal when a table has had columns added or removed,
+ but these two functions didn't handle it properly.
+ The only likely consequence is an incorrect error indication.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s parsing of <command>CREATE USER</> (Michael)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-22">
+ <title>Release 7.4.22</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-09-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.21.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.22</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix datetime input functions to correctly detect integer overflow when
+ running on a 64-bit platform (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of writing very long log messages to syslog (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+ ON</> query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+ boolean results always result in two groups, regardless of the
+ expressions' contents (Tom)
+ </para>
+
+ <para>
+ This is very substantially more accurate than the regular <literal>GROUP
+ BY</> estimate for certain boolean tests like <replaceable>col</>
+ <literal>IS NULL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <application>pg_dump</> and <application>pg_restore</>'s
+ error reporting after failure to send a SQL command (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-21">
+ <title>Release 7.4.21</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-06-12</simpara>
+ </note>
+
+ <para>
+ This release contains one serious bug fix over 7.4.20.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.21</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+ </para>
+
+ <para>
+ Before this fix, a negative constant in a view or rule might be dumped
+ as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+ be <literal>(-42)::integer</> due to operator precedence rules.
+ Usually this would make little difference, but it could interact with
+ another recent patch to cause
+ <productname>PostgreSQL</> to reject what had been a valid
+ <command>SELECT DISTINCT</> view query. Since this could result in
+ <application>pg_dump</> output failing to reload, it is being treated
+ as a high-priority fix. The only released versions in which dump
+ output is actually incorrect are 8.3.1 and 8.2.7.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-20">
+ <title>Release 7.4.20</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>never released</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.19.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.20</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ However, if you are upgrading from a version earlier than 7.4.11,
+ see the release notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix conversions between ISO-8859-5 and other encodings to handle
+ Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+ two dots) (Sergey Burladyan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a few datatype input functions
+ that were allowing unused bytes in their results to contain
+ uninitialized, unpredictable values (Tom)
+ </para>
+
+ <para>
+ This could lead to failures in which two apparently identical literal
+ values were not seen as equal, resulting in the parser complaining
+ about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+ expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a corner case in regular-expression substring matching
+ (<literal>substring(<replaceable>string</> from
+ <replaceable>pattern</>)</literal>) (Tom)
+ </para>
+
+ <para>
+ The problem occurs when there is a match to the pattern overall but
+ the user has specified a parenthesized subexpression and that
+ subexpression hasn't got a match. An example is
+ <literal>substring('foo' from 'foo(bar)?')</>.
+ This should return NULL, since <literal>(bar)</> isn't matched, but
+ it was mistakenly returning the whole-pattern match instead (ie,
+ <literal>foo</>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect result from <application>ecpg</>'s
+ <function>PGTYPEStimestamp_sub()</> function (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+ 4.3 (Tom)
+ </para>
+
+ <para>
+ This problem affects <quote>old style</> (V0) C functions that
+ return boolean. The fix is already in 8.3, but the need to
+ back-patch it was not realized at the time.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+ race condition (Tom)
+ </para>
+
+ <para>
+ In rare cases a session that had just executed a
+ <command>LISTEN</> might not get a notification, even though
+ one would be expected because the concurrent transaction executing
+ <command>NOTIFY</> was observed to commit later.
+ </para>
+
+ <para>
+ A side effect of the fix is that a transaction that has executed
+ a not-yet-committed <command>LISTEN</> command will not see any
+ row in <structname>pg_listener</> for the <command>LISTEN</>,
+ should it choose to look; formerly it would have. This behavior
+ was never documented one way or the other, but it is possible that
+ some applications depend on the old behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix display of constant expressions in <literal>ORDER BY</>
+ and <literal>GROUP BY</> (Tom)
+ </para>
+
+ <para>
+ An explictly casted constant would be shown incorrectly. This could
+ for example lead to corruption of a view definition during
+ dump and reload.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> to handle NOTICE messages correctly
+ during COPY OUT (Tom)
+ </para>
+
+ <para>
+ This failure has only been observed to occur when a user-defined
+ datatype's output routine issues a NOTICE, but there is no
+ guarantee it couldn't happen due to other causes.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-19">
+ <title>Release 7.4.19</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-01-07</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.18,
+ including fixes for significant security issues.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.19</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent functions in indexes from executing with the privileges of
+ the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+ </para>
+
+ <para>
+ Functions used in index expressions and partial-index
+ predicates are evaluated whenever a new table entry is made. It has
+ long been understood that this poses a risk of trojan-horse code
+ execution if one modifies a table owned by an untrustworthy user.
+ (Note that triggers, defaults, check constraints, etc. pose the
+ same type of risk.) But functions in indexes pose extra danger
+ because they will be executed by routine maintenance operations
+ such as <command>VACUUM FULL</>, which are commonly performed
+ automatically under a superuser account. For example, a nefarious user
+ can execute code with superuser privileges by setting up a
+ trojan-horse index definition and waiting for the next routine vacuum.
+ The fix arranges for standard maintenance operations
+ (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+ and <command>CLUSTER</>) to execute as the table owner rather than
+ the calling user, using the same privilege-switching mechanism already
+ used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
+ this security measure, execution of <command>SET SESSION
+ AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+ <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+ </para>
+
+ <para>
+ Suitably crafted regular-expression patterns could cause crashes,
+ infinite or near-infinite looping, and/or massive memory consumption,
+ all of which pose denial-of-service hazards for applications that
+ accept regex search patterns from untrustworthy sources.
+ (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+
+ <para>
+ The fix that appeared for this in 7.4.18 was incomplete, as it plugged
+ the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
+ CVE-2007-3278)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner failure in some cases of <literal>WHERE false AND var IN
+ (SELECT ...)</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential crash in <function>translate()</> when using a multibyte
+ database encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to not crash on long exception messages (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <application>ecpg</> parser fixes (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+ NULL rowid as a category in its own right, rather than crashing (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <type>tsvector</> and <type>tsquery</> output routines to
+ escape backslashes correctly (Teodor, Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require a specific version of <productname>Autoconf</> to be used
+ when re-generating the <command>configure</> script (Peter)
+ </para>
+
+ <para>
+ This affects developers and packagers only. The change was made
+ to prevent accidental use of untested combinations of
+ <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+ You can remove the version check if you really want to use a
+ different <productname>Autoconf</> version, but it's
+ your responsibility whether the result works or not.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-18">
+ <title>Release 7.4.18</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-09-17</simpara>
+ </note>
+
+ <para>
+ This release contains fixes from 7.4.17.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.18</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent index corruption when a transaction inserts rows and
+ then aborts close to the end of a concurrent <command>VACUUM</>
+ on the same table (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix excessive logging of <acronym>SSL</> error messages (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash when <varname>log_min_error_statement</> logging runs out
+ of memory (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <command>CLUSTER</> from failing
+ due to attempting to process temporary tables of other sessions (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-17">
+ <title>Release 7.4.17</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-04-23</simpara>
+ </note>
+
+ <para>
+ This release contains fixes from 7.4.16,
+ including a security fix.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.17</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Support explicit placement of the temporary-table schema within
+ <varname>search_path</>, and disable searching it for functions
+ and operators (Tom)
+ </para>
+ <para>
+ This is needed to allow a security-definer function to set a
+ truly secure value of <varname>search_path</>. Without it,
+ an unprivileged SQL user can use temporary objects to execute code
+ with the privileges of the security-definer function (CVE-2007-2138).
+ See <command>CREATE FUNCTION</> for more information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>/contrib/tsearch2</> crash fixes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+ <command>UPDATE</> chains (Tom, Pavan Deolasee)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
+ (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-16">
+ <title>Release 7.4.16</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-05</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.15, including
+ a security fix.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.16</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove security vulnerability that allowed connected users
+ to read backend memory (Tom)
+ </para>
+ <para>
+ The vulnerability involves suppressing the normal check that a SQL
+ function returns the data type it's declared to, or changing the
+ data type of a table column used in a SQL function (CVE-2007-0555).
+ This error can easily be exploited to cause a backend crash, and in
+ principle might be used to read database content that the user
+ should not be able to access.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare bug wherein btree index page splits could fail
+ due to choosing an infeasible split point (Heikki Linnakangas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tighten security of multi-byte character processing for UTF8 sequences
+ over three bytes long (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-15">
+ <title>Release 7.4.15</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-01-08</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.14.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.15</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+ </para>
+
+ <para>
+ This fixes a problem with starting the statistics collector,
+ among other things.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>failed to re-find parent key</> errors in
+ <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bugs affecting multi-gigabyte hash indexes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+ empty elements (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>to_number()</> and <function>to_char(numeric)</>
+ are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+ new <application>initdb</> installs (Tom)
+ </para>
+
+ <para>
+ This is because <varname>lc_numeric</> can potentially
+ change the output of these functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve index usage of regular expressions that use parentheses (Tom)
+ </para>
+
+ <para>
+ This improves <application>psql</> <literal>\d</> performance also.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-14">
+ <title>Release 7.4.14</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-10-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.13.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.14</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</para></listitem>
+<listitem><para>Fix <function>string_to_array()</> to handle overlapping
+ matches for the separator string</para>
+<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
+</para></listitem>
+<listitem><para>Fix corner cases in pattern matching for
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
+<listitem><para>Fix index-corrupting bugs in /contrib/ltree
+ (Teodor)</para></listitem>
+<listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
+<listitem><para>Adjust regression tests for recent changes in US DST laws
+</para> </listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-13">
+ <title>Release 7.4.13</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-05-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.12,
+ including patches for extremely serious security issues.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.13</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+
+ <para>
+ Full security against the SQL-injection attacks described in
+ CVE-2006-2313 and CVE-2006-2314 might require changes in application
+ code. If you have applications that embed untrustworthy strings
+ into SQL commands, you should examine them as soon as possible to
+ ensure that they are using recommended escaping techniques. In
+ most cases, applications should be using subroutines provided by
+ libraries or drivers (such as <application>libpq</>'s
+ <function>PQescapeStringConn()</>) to perform string escaping,
+ rather than relying on <foreignphrase>ad hoc</> code to do it.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change the server to reject invalidly-encoded multibyte
+characters in all cases (Tatsuo, Tom)</para>
+<para>While <productname>PostgreSQL</> has been moving in this direction for
+some time, the checks are now applied uniformly to all encodings and all
+textual input, and are now always errors not merely warnings. This change
+defends against SQL-injection attacks of the type described in CVE-2006-2313.
+</para></listitem>
+
+<listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
+<para>As a server-side defense against SQL-injection attacks of the type
+described in CVE-2006-2314, the server now only accepts <literal>''</> and not
+<literal>\'</> as a representation of ASCII single quote in SQL string
+literals. By default, <literal>\'</> is rejected only when
+<varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
+GB18030, or UHC), which is the scenario in which SQL injection is possible.
+A new configuration parameter <varname>backslash_quote</> is available to
+adjust this behavior when needed. Note that full security against
+CVE-2006-2314 might require client-side changes; the purpose of
+<varname>backslash_quote</> is in part to make it obvious that insecure
+clients are insecure.
+</para></listitem>
+
+<listitem><para>Modify <application>libpq</>'s string-escaping routines to be
+aware of encoding considerations and
+<varname>standard_conforming_strings</></para>
+<para>This fixes <application>libpq</>-using applications for the security
+issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
+them against the planned changeover to SQL-standard string literal syntax.
+Applications that use multiple <productname>PostgreSQL</> connections
+concurrently should migrate to <function>PQescapeStringConn()</> and
+<function>PQescapeByteaConn()</> to ensure that escaping is done correctly
+for the settings in use in each database connection. Applications that
+do string escaping <quote>by hand</> should be modified to rely on library
+routines instead.
+</para></listitem>
+
+<listitem><para>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>alt_to_iso</>,
+<function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
+<function>mic_to_euc_tw</> were all broken to varying
+extents.
+</para></listitem>
+
+<listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
+
+<listitem><para>Fix bug that sometimes caused OR'd index scans to
+miss rows they should have returned</para></listitem>
+
+<listitem><para>Fix WAL replay for case where a btree index has been
+truncated</para></listitem>
+
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</para></listitem>
+
+<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
+
+<listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
+
+<listitem><para>Fix various minor memory leaks</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-12">
+ <title>Release 7.4.12</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-02-14</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.11.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.12</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.11, see the release
+ notes for 7.4.11.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix potential crash in <command>SET
+SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
+<para>An unprivileged user could crash the server process, resulting in
+momentary denial of service to other users, if the server has been compiled
+with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</para></listitem>
+
+<listitem><para>Fix bug with row visibility logic in self-inserted
+rows (Tom)</para>
+<para>Under rare circumstances a row inserted by the current command
+could be seen as already valid, when it should not be. Repairs bug
+created in 7.4.9 and 7.3.11 releases.
+</para></listitem>
+
+<listitem><para>Fix race condition that could lead to <quote>file already
+exists</> errors during pg_clog file creation
+(Tom)</para></listitem>
+
+<listitem><para>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</para></listitem>
+
+<listitem><para>Fix to allow restoring dumps that have cross-schema
+references to custom operators (Tom)</para></listitem>
+
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-11">
+ <title>Release 7.4.11</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-01-09</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.10.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.11</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.8, see the release
+ notes for 7.4.8.
+ Also, you might need to <command>REINDEX</> indexes on textual
+ columns after updating, if you are affected by the locale or
+ <application>plperl</> issues described below.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</para></listitem>
+
+<listitem><para>Fix character string comparison for locales that consider
+different character combinations as equal, such as Hungarian (Tom)</para>
+<para>This might require <command>REINDEX</> to fix existing indexes on
+textual columns.</para></listitem>
+
+<listitem><para>Set locale environment variables during postmaster startup
+to ensure that <application>plperl</> won't change the locale later</para>
+<para>This fixes a problem that occurred if the <application>postmaster</> was
+started with environment variables specifying a different locale than what
+<application>initdb</> had been told. Under these conditions, any use of
+<application>plperl</> was likely to lead to corrupt indexes. You might need
+<command>REINDEX</> to fix existing indexes on
+textual columns if this has happened to you.</para></listitem>
+
+<listitem><para>Fix longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</para></listitem>
+
+<listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
+which caused it not to use all available salt space for MD5 and
+XDES algorithms (Marko Kreen, Solar Designer)</para>
+<para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
+
+<listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
+rather than crashing, when the number of columns specified is different from
+what's actually returned by the query (Joe)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-10">
+ <title>Release 7.4.10</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-12-12</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.9.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.10</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.8, see the release
+ notes for 7.4.8.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix race condition in transaction log management</para>
+<para>There was a narrow window in which an I/O operation could be initiated
+for the wrong page, leading to an Assert failure or data
+corruption.</para>
+</listitem>
+
+<listitem><para>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
+
+<listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
+
+<listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
+
+<listitem><para>Fix longstanding planning error for outer joins</para>
+<para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
+only supported with merge-joinable join conditions</>.</para></listitem>
+
+<listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
+table has been dropped</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-9">
+ <title>Release 7.4.9</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-10-04</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.8.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.9</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ if you are upgrading from a version earlier than 7.4.8, see the release
+ notes for 7.4.8.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix error that allowed <command>VACUUM</> to remove
+<literal>ctid</> chains too soon, and add more checking in code that follows
+<literal>ctid</> links</para>
+<para>This fixes a long-standing problem that could cause crashes in very rare
+circumstances.</para></listitem>
+<listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
+length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
+<para>In prior releases, the padding of <type>CHAR()</> was incorrect
+because it only padded to the specified number of bytes without
+considering how many characters were stored.</para></listitem>
+<listitem><para>Fix the sense of the test for read-only transaction
+in <command>COPY</></para>
+<para>The code formerly prohibited <command>COPY TO</>, where it should
+prohibit <command>COPY FROM</>.
+</para></listitem>
+<listitem><para>Fix planning problem with outer-join ON clauses that reference
+only the inner-side relation</para></listitem>
+<listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
+cases</para></listitem>
+<listitem><para>Make <function>array_in</> and <function>array_recv</> more
+paranoid about validating their OID parameter</para></listitem>
+<listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
+a...</> with GiST index on column <literal>a</></para></listitem>
+<listitem><para>Improve robustness of datetime parsing</para></listitem>
+<listitem><para>Improve checking for partially-written WAL
+pages</para></listitem>
+<listitem><para>Improve robustness of signal handling when SSL is
+enabled</para></listitem>
+<listitem><para>Don't try to open more than <literal>max_files_per_process</>
+files during postmaster startup</para></listitem>
+<listitem><para>Various memory leakage fixes</para></listitem>
+<listitem><para>Various portability improvements</para></listitem>
+<listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
+the variable is of pass-by-reference type</para></listitem>
+<listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
+code</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-8">
+ <title>Release 7.4.8</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-05-09</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.7, including several
+ security-related issues.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.8</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ it is one possible way of handling two significant security problems
+ that have been found in the initial contents of 7.4.X system
+ catalogs. A dump/initdb/reload sequence using 7.4.8's initdb will
+ automatically correct these problems.
+ </para>
+
+ <para>
+ The larger security problem is that the built-in character set encoding
+ conversion functions can be invoked from SQL commands by unprivileged
+ users, but the functions were not designed for such use and are not
+ secure against malicious choices of arguments. The fix involves changing
+ the declared parameter list of these functions so that they can no longer
+ be invoked from SQL commands. (This does not affect their normal use
+ by the encoding conversion machinery.)
+ </para>
+
+ <para>
+ The lesser problem is that the <filename>contrib/tsearch2</> module
+ creates several functions that are misdeclared to return
+ <type>internal</> when they do not accept <type>internal</> arguments.
+ This breaks type safety for all functions using <type>internal</>
+ arguments.
+ </para>
+
+ <para>
+ It is strongly recommended that all installations repair these errors,
+ either by initdb or by following the manual repair procedures given
+ below. The errors at least allow unprivileged database users to crash
+ their server process, and might allow unprivileged users to gain the
+ privileges of a database superuser.
+ </para>
+
+ <para>
+ If you wish not to do an initdb, perform the following procedures instead.
+ As the database superuser, do:
+
+<programlisting>
+BEGIN;
+UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
+WHERE pronamespace = 11 AND pronargs = 5
+ AND proargtypes[2] = 'cstring'::regtype;
+-- The command should report having updated 90 rows;
+-- if not, rollback and investigate instead of committing!
+COMMIT;
+</programlisting>
+
+ Next, if you have installed <filename>contrib/tsearch2</>, do:
+
+<programlisting>
+BEGIN;
+UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
+WHERE oid IN (
+ 'dex_init(text)'::regprocedure,
+ 'snb_en_init(text)'::regprocedure,
+ 'snb_ru_init(text)'::regprocedure,
+ 'spell_init(text)'::regprocedure,
+ 'syn_init(text)'::regprocedure
+);
+-- The command should report having updated 5 rows;
+-- if not, rollback and investigate instead of committing!
+COMMIT;
+</programlisting>
+
+ If this command fails with a message like <quote>function
+ "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
+ is not installed in this database, or you already did the update.
+ </para>
+
+ <para>
+ The above procedures must be carried out in <emphasis>each</> database
+ of an installation, including <literal>template1</>, and ideally
+ including <literal>template0</> as well. If you do not fix the
+ template databases then any subsequently created databases will contain
+ the same errors. <literal>template1</> can be fixed in the same way
+ as any other database, but fixing <literal>template0</> requires
+ additional steps. First, from any database issue:
+<programlisting>
+UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
+</programlisting>
+ Next connect to <literal>template0</> and perform the above repair
+ procedures. Finally, do:
+<programlisting>
+-- re-freeze template0:
+VACUUM FREEZE;
+-- and protect it against future alterations:
+UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
+</programlisting>
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change encoding function signature to prevent
+misuse</para></listitem>
+<listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
+<type>INTERNAL</> function results</para></listitem>
+<listitem><para>Repair ancient race condition that allowed a transaction to be
+seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
+than for other purposes</para>
+<para>This is an extremely serious bug since it could lead to apparent
+data inconsistencies being briefly visible to applications.</para></listitem>
+<listitem><para>Repair race condition between relation extension and
+VACUUM</para>
+<para>This could theoretically have caused loss of a page's worth of
+freshly-inserted data, although the scenario seems of very low probability.
+There are no known cases of it having caused more than an Assert failure.
+</para></listitem>
+<listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
+<para>
+The comparison code was wrong in the case where the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
+it will need to be <command>REINDEX</>ed after installing this update, because
+the fix corrects the sort order of column values.
+</para></listitem>
+<listitem><para>Fix <function>EXTRACT(EPOCH)</> for
+<type>TIME WITH TIME ZONE</> values</para></listitem>
+<listitem><para>Fix mis-display of negative fractional seconds in
+<type>INTERVAL</> values</para>
+<para>
+This error only occurred when the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+</para></listitem>
+<listitem><para>Ensure operations done during backend shutdown are counted by
+statistics collector</para>
+<para>
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough — it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
+</para></listitem>
+<listitem><para>Additional buffer overrun checks in plpgsql
+(Neil)</para></listitem>
+<listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
+correctly (Neil)</para></listitem>
+<listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
+(Marko Kreen)</para></listitem>
+<listitem><para>Still more 64-bit fixes for
+<filename>contrib/intagg</></para></listitem>
+<listitem><para>Prevent incorrect optimization of functions returning
+<type>RECORD</></para></listitem>
+<listitem><para>Prevent <function>to_char(interval)</> from dumping core for
+month-related formats</para></listitem>
+<listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
+<listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
+<listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
+<listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
+<listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
+<para>
+This fixes a lock management error that would only be visible if a transaction
+was kicked out of a wait for a lock (typically by query cancel) and then the
+holder of the lock released it within a very narrow window.
+</para></listitem>
+<listitem><para>Fix problem with untyped parameter appearing in
+<command>INSERT ... SELECT</></para></listitem>
+<listitem><para>Fix <command>CLUSTER</> failure after
+<command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-7">
+ <title>Release 7.4.7</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-01-31</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.6, including several
+ security-related issues.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 7.4.7</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Disallow <command>LOAD</> to non-superusers</para>
+<para>
+On platforms that will automatically execute initialization functions of a
+shared library (this includes at least Windows and ELF-based Unixen),
+<command>LOAD</> can be used to make the server execute arbitrary code.
+Thanks to NGS Software for reporting this.</para></listitem>
+<listitem><para>Check that creator of an aggregate function has the right to
+execute the specified transition functions</para>
+<para>
+This oversight made it possible to bypass denial of EXECUTE
+permission on a function.</para></listitem>
+<listitem><para>Fix security and 64-bit issues in
+contrib/intagg</para></listitem>
+<listitem><para>Add needed STRICT marking to some contrib functions (Kris
+Jurka)</para></listitem>
+<listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
+many parameters (Neil)</para></listitem>
+<listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
+<para>
+The result of the join was mistakenly supposed to be sorted the same as the
+left input. This could not only deliver mis-sorted output to the user, but
+in case of nested merge joins could give outright wrong answers.
+</para></listitem>
+<listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
+<listitem><para>Fix display of negative intervals in SQL and GERMAN
+datestyles</para></listitem>
+<listitem><para>Make age(timestamptz) do calculation in local timezone not
+GMT</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-6">
+ <title>Release 7.4.6</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2004-10-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.5.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.6</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Repair possible failure to update hint bits on disk</para>
+<para>
+Under rare circumstances this oversight could lead to
+<quote>could not access transaction status</> failures, which qualifies
+it as a potential-data-loss bug.
+</para></listitem>
+<listitem><para>Ensure that hashed outer join does not miss tuples</para>
+<para>
+Very large left joins using a hash join plan could fail to output unmatched
+left-side rows given just the right data distribution.
+</para></listitem>
+<listitem><para>Disallow running <application>pg_ctl</> as root</para>
+<para>
+This is to guard against any possible security issues.
+</para></listitem>
+<listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
+<para>
+This has been reported as a security issue, though it's hardly worthy of
+concern since there is no reason for non-developers to use this script anyway.
+</para></listitem>
+<listitem><para>Prevent forced backend shutdown from re-emitting prior command
+result</para>
+<para>
+In rare cases, a client might think that its last command had succeeded when
+it really had been aborted by forced database shutdown.
+</para></listitem>
+<listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
+<para>
+This could lead to misbehavior in some of the system-statistics views.
+</para></listitem>
+<listitem><para>Fix small memory leak in postmaster</para></listitem>
+<listitem><para>Fix <quote>expected both swapped tables to have TOAST
+tables</> bug</para>
+<para>
+This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
+</para></listitem>
+<listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
+<listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
+<listitem><para><literal>::</> is no longer interpreted as a variable in an
+ECPG prepare statement</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-5">
+ <title>Release 7.4.5</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2004-08-18</simpara>
+ </note>
+
+ <para>
+ This release contains one serious bug fix over 7.4.4.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.5</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
+<para>
+This patch fixes a rare case in which concurrent insertions into a B-tree index
+could result in a server panic. No permanent damage would result, but it's
+still worth a re-release. The bug does not exist in pre-7.4 releases.
+</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-4">
+ <title>Release 7.4.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2004-08-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.3.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.4</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Prevent possible loss of committed transactions during crash</para>
+<para>
+Due to insufficient interlocking between transaction commit and checkpointing,
+it was possible for transactions committed just before the most recent
+checkpoint to be lost, in whole or in part, following a database crash and
+restart. This is a serious bug that has existed
+since <productname>PostgreSQL</productname> 7.1.
+</para></listitem>
+<listitem><para>Check HAVING restriction before evaluating result list of an
+aggregate plan</para></listitem>
+<listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
+<listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
+<listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
+<listitem><para>Pretty-print UNION queries correctly</para></listitem>
+<listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
+<listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
+<listitem><para>Fix thread support for OS X and Solaris</para></listitem>
+<listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
+<listitem><para>ECPG fixes</para></listitem>
+<listitem><para>Translation updates (various contributors)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-3">
+ <title>Release 7.4.3</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2004-06-14</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.2.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.3</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
+<listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
+<listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
+<listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
+<listitem><para>Several important fixes in pg_autovacuum, including fixes for
+large tables, unsigned oids, stability, temp tables, and debug mode
+(Matthew T. O'Connor)</para></listitem>
+<listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
+<listitem><para>Several JDBC fixes</para></listitem>
+<listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
+<listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
+<listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
+<listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
+<listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
+<listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
+<para>
+Select-list aliases within the sub-select will now take precedence over
+names from outer query levels.
+</para></listitem>
+<listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
+<listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
+<para>
+ This fixes a difficult-to-exploit security hole.
+</para></listitem>
+<listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
+<listitem><para>Numerous translation updates (various contributors)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-2">
+ <title>Release 7.4.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2004-03-08</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.1.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.2</title>
+
+ <para>
+ A dump/restore is not required for those running 7.4.X. However,
+ it might be advisable as the easiest method of incorporating fixes for
+ two errors that have been found in the initial contents of 7.4.X system
+ catalogs. A dump/initdb/reload sequence using 7.4.2's initdb will
+ automatically correct these problems.
+ </para>
+
+ <para>
+ The more severe of the two errors is that data type <type>anyarray</>
+ has the wrong alignment label; this is a problem because the
+ <structname>pg_statistic</> system catalog uses <type>anyarray</>
+ columns. The mislabeling can cause planner misestimations and even
+ crashes when planning queries that involve <literal>WHERE</> clauses on
+ double-aligned columns (such as <type>float8</> and <type>timestamp</>).
+ It is strongly recommended that all installations repair this error,
+ either by initdb or by following the manual repair procedure given
+ below.
+ </para>
+
+ <para>
+ The lesser error is that the system view <structname>pg_settings</>
+ ought to be marked as having public update access, to allow
+ <literal>UPDATE pg_settings</> to be used as a substitute for
+ <command>SET</>. This can also be fixed either by initdb or manually,
+ but it is not necessary to fix unless you want to use <literal>UPDATE
+ pg_settings</>.
+ </para>
+
+ <para>
+ If you wish not to do an initdb, the following procedure will work
+ for fixing <structname>pg_statistic</>. As the database superuser,
+ do:
+
+<programlisting>
+-- clear out old data in pg_statistic:
+DELETE FROM pg_statistic;
+VACUUM pg_statistic;
+-- this should update 1 row:
+UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
+-- this should update 6 rows:
+UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
+--
+-- At this point you MUST start a fresh backend to avoid a crash!
+--
+-- repopulate pg_statistic:
+ANALYZE;
+</programlisting>
+
+ This can be done in a live database, but beware that all backends
+ running in the altered database must be restarted before it is safe to
+ repopulate <structname>pg_statistic</>.
+ </para>
+
+ <para>
+ To repair the <structname>pg_settings</> error, simply do:
+<programlisting>
+GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
+</programlisting>
+ </para>
+
+ <para>
+ The above procedures must be carried out in <emphasis>each</> database
+ of an installation, including <literal>template1</>, and ideally
+ including <literal>template0</> as well. If you do not fix the
+ template databases then any subsequently created databases will contain
+ the same errors. <literal>template1</> can be fixed in the same way
+ as any other database, but fixing <literal>template0</> requires
+ additional steps. First, from any database issue:
+<programlisting>
+UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
+</programlisting>
+ Next connect to <literal>template0</> and perform the above repair
+ procedures. Finally, do:
+<programlisting>
+-- re-freeze template0:
+VACUUM FREEZE;
+-- and protect it against future alterations:
+UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
+</programlisting>
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<para>
+ Release 7.4.2 incorporates all the fixes included in release 7.3.6,
+ plus the following fixes:
+</para>
+
+<itemizedlist>
+<listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
+<para>See above for details about this problem.</para></listitem>
+<listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
+<listitem><para>Fix several optimizer bugs, most of which led to
+<quote>variable not found in subplan target lists</> errors</para></listitem>
+<listitem><para>Avoid out-of-memory failure during startup of large multiple
+index scan</para></listitem>
+<listitem><para>Fix multibyte problem that could lead to <quote>out of
+memory</> error during <command>COPY IN</></para></listitem>
+<listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
+TABLE AS</> from tables without OIDs</para></listitem>
+<listitem><para>Fix problems with <filename>alter_table</> regression test
+during parallel testing</para></listitem>
+<listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
+<listitem><para>Partial fix for Turkish-locale issues</para>
+<para>initdb will succeed now in Turkish locale, but there are still some
+inconveniences associated with the <literal>i/I</> problem.</para></listitem>
+<listitem><para>Make pg_dump set client encoding on restore</para></listitem>
+<listitem><para>Other minor pg_dump fixes</para></listitem>
+<listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
+<listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
+<literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem>
+<listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
+<listitem><para>Various other ecpg fixes (Michael)</para></listitem>
+<listitem><para>Fixes for Borland compiler</para></listitem>
+<listitem><para>Thread build improvements (Bruce)</para></listitem>
+<listitem><para>Various other build fixes</para></listitem>
+<listitem><para>Various JDBC fixes</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-1">
+ <title>Release 7.4.1</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2003-12-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 7.4.
+ For information about new features in the 7.4 major release, see
+ <xref linkend="release-7-4">.
+ </para>
+
+
+ <sect2>
+ <title>Migration to Version 7.4.1</title>
+
+ <para>
+ A dump/restore is <emphasis>not</emphasis> required for those
+ running 7.4.
+ </para>
+
+ <para>
+ If you want to install the fixes in the information schema
+ you need to reload it into the database.
+ This is either accomplished by initializing a new cluster
+ by running <command>initdb</command>, or by running the following
+ sequence of SQL commands in each database (ideally including
+ <literal>template1</literal>) as a superuser in
+ <application>psql</application>, after installing the new release:
+<programlisting>
+DROP SCHEMA information_schema CASCADE;
+\i /usr/local/pgsql/share/information_schema.sql
+</programlisting>
+ Substitute your installation path in the second command.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
+<listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
+<listitem><para>Fix for subqueries that used hash joins (Tom)</para>
+<para>
+ Certain subqueries that used hash joins would crash because of
+ improperly shared structures.
+</para></listitem>
+<listitem><para>Fix free space map compaction bug (Tom)</para>
+<para>
+ This fixes a bug where compaction of the free space map could lead
+ to a database server shutdown.
+</para>
+</listitem>
+<listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
+<listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
+<para>
+ Fix these functions to return values consistent with pre-7.4
+ releases.
+</para>
+</listitem>
+<listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
+<para>
+ Fixes include improper variable initialization, missing vacuum after
+ <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
+</para>
+</listitem>
+<listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
+<listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
+<para>
+ Fix crash on Solaris caused by use of any type of password
+ authentication when no passwords were defined.
+</para>
+</listitem>
+<listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
+<listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
+<listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
+<listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
+<listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
+<listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
+<listitem><para>Escape <type>bytea</type> output for bytes > 0x7e(Joe)</para>
+<para>
+ If different client encodings are used for <type>bytea</type> output and input, it
+ is possible for <type>bytea</type> values to be corrupted by the differing
+ encodings. This fix escapes all bytes that might be affected.
+</para>
+</listitem>
+<listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
+<listitem><para>New Czech FAQ</para></listitem>
+<listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
+<listitem><para>ECPG fixes (Michael)</para></listitem>
+<listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
+<listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
+<listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
+<para>
+ Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
+ By installing them in their own directory, name conflicts have been reduced.
+</para>
+</listitem>
+<listitem><para>Fix SSL memory leak (Neil)</para>
+<para>
+ This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
+</para>
+</listitem>
+<listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
+<listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+</sect1>
+
+<sect1 id="release-7-4">
+ <title>Release 7.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2003-11-17</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ Major changes in this release:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
+ now much more efficient
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, <literal>IN</literal>/<literal>NOT
+ IN</literal> subqueries were joined to the upper query by
+ sequentially scanning the subquery looking for a match. The
+ 7.4 code uses the same sophisticated techniques used by
+ ordinary joins and so is much faster. An
+ <literal>IN</literal> will now usually be as fast as or faster
+ than an equivalent <literal>EXISTS</literal> subquery; this
+ reverses the conventional wisdom that applied to previous
+ releases.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Improved <literal>GROUP BY</literal> processing by using hash buckets
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, rows to be grouped had to be sorted
+ first. The 7.4 code can do <literal>GROUP BY</literal>
+ without sorting, by accumulating results into a hash table
+ with one entry per group. It will still use the sort
+ technique, however, if the hash table is estimated to be too
+ large to fit in <varname>sort_mem</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ New multikey hash join capability
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, hash joins could only occur on single
+ keys. This release allows multicolumn hash joins.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Queries using the explicit <literal>JOIN</literal> syntax are
+ now better optimized
+ </term>
+
+ <listitem>
+ <para>
+ Prior releases evaluated queries using the explicit
+ <literal>JOIN</literal> syntax only in the order implied by
+ the syntax. 7.4 allows full optimization of these queries,
+ meaning the optimizer considers all possible join orderings
+ and chooses the most efficient. Outer joins, however, must
+ still follow the declared ordering.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Faster and more powerful regular expression code
+ </term>
+
+ <listitem>
+ <para>
+ The entire regular expression module has been replaced with a
+ new version by Henry Spencer, originally written for Tcl. The
+ code greatly improves performance and supports several flavors
+ of regular expressions.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Function-inlining for simple SQL functions
+ </term>
+
+ <listitem>
+ <para>
+ Simple SQL functions can now be inlined by including their SQL
+ in the main query. This improves performance by eliminating
+ per-call overhead. That means simple SQL functions now
+ behave like macros.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Full support for IPv6 connections and IPv6 address data types
+ </term>
+
+ <listitem>
+ <para>
+ Previous releases allowed only IPv4 connections, and the IP
+ data types only supported IPv4 addresses. This release adds
+ full IPv6 support in both of these areas.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Major improvements in SSL performance and reliability
+ </term>
+
+ <listitem>
+ <para>
+ Several people very familiar with the SSL API have overhauled
+ our SSL code to improve SSL key negotiation and error
+ recovery.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Make free space map efficiently reuse empty index pages,
+ and other free space management improvements
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, B-tree index pages that were left empty
+ because of deleted rows could only be reused by rows with
+ index values similar to the rows originally indexed on that
+ page. In 7.4, <command>VACUUM</command> records empty index
+ pages and allows them to be reused for any future index rows.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ SQL-standard information schema
+ </term>
+
+ <listitem>
+ <para>
+ The information schema provides a standardized and stable way
+ to access information about the schema objects defined in a
+ database.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Cursors conform more closely to the SQL standard
+ </term>
+
+ <listitem>
+ <para>
+ The commands <command>FETCH</command> and
+ <command>MOVE</command> have been overhauled to conform more
+ closely to the SQL standard.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Cursors can exist outside transactions
+ </term>
+
+ <listitem>
+ <para>
+ These cursors are also called holdable cursors.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ New client-to-server protocol
+ </term>
+
+ <listitem>
+ <para>
+ The new protocol adds error codes, more status information,
+ faster startup, better support for binary data transmission,
+ parameter values separated from SQL commands, prepared
+ statements available at the protocol level, and cleaner
+ recovery from <command>COPY</command> failures. The older
+ protocol is still supported by both server and clients.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application>libpq</application> and
+ <application>ECPG</application> applications are now fully
+ thread-safe
+ </term>
+
+ <listitem>
+ <para>
+ While previous <application>libpq</application> releases
+ already supported threads, this release improves thread safety
+ by fixing some non-thread-safe code that was used during
+ database connection startup. The <command>configure</command>
+ option <option>--enable-thread-safety</option> must be used to
+ enable this feature.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ New version of full-text indexing
+ </term>
+
+ <listitem>
+ <para>
+ A new full-text indexing suite is available in
+ <filename>contrib/tsearch2</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ New autovacuum tool
+ </term>
+
+ <listitem>
+ <para>
+ The new autovacuum tool in
+ <filename>contrib/autovacuum</filename> monitors the database
+ statistics tables for
+ <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
+ activity and automatically vacuums tables when needed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Array handling has been improved and moved into the server core
+ </term>
+
+ <listitem>
+ <para>
+ Many array limitations have been removed, and arrays behave
+ more like fully-supported data types.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+
+ <sect2>
+ <title>Migration to Version 7.4</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:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The server-side autocommit setting was removed and
+ reimplemented in client applications and languages.
+ Server-side autocommit was causing too many problems with
+ languages and applications that wanted to control their own
+ autocommit behavior, so autocommit was removed from the server
+ and added to individual client APIs as appropriate.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Error message wording has changed substantially in this
+ release. Significant effort was invested to make the messages
+ more consistent and user-oriented. If your applications try to
+ detect different error conditions by parsing the error message,
+ you are strongly encouraged to use the new error code facility instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Inner joins using the explicit <literal>JOIN</literal> syntax
+ might behave differently because they are now better
+ optimized.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A number of server configuration parameters have been renamed
+ for clarity, primarily those related to
+ logging.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
+ does nothing. In prior releases, <literal>FETCH 0</literal>
+ would fetch all remaining rows, and <literal>MOVE 0</literal>
+ would move to the end of the cursor.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>FETCH</command> and <command>MOVE</command> now return
+ the actual number of rows fetched/moved, or zero if at the
+ beginning/end of the cursor. Prior releases would return the
+ row count passed to the command, not the number of rows
+ actually fetched or moved.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>COPY</command> now can process files that use
+ carriage-return or carriage-return/line-feed end-of-line
+ sequences. Literal carriage-returns and line-feeds are no
+ longer accepted in data values; use <literal>\r</literal> and
+ <literal>\n</literal> instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Trailing spaces are now trimmed when converting from type
+ <type>char(<replaceable>n</>)</type> to
+ <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
+ This is what most people always expected to happen anyway.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The data type <type>float(<replaceable>p</>)</type> now
+ measures <replaceable>p</> in binary digits, not decimal
+ digits. The new behavior follows the SQL standard.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ambiguous date values now must match the ordering specified by
+ the <varname>datestyle</varname> setting. In prior releases, a
+ date specification of <literal>10/20/03</> was interpreted as a
+ date in October even if <varname>datestyle</> specified that
+ the day should be first. 7.4 will throw an error if a date
+ specification is invalid for the current setting of
+ <varname>datestyle</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The functions <function>oidrand</function>,
+ <function>oidsrand</function>, and
+ <function>userfntest</function> have been removed. These
+ functions were determined to be no longer useful.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ String literals specifying time-varying date/time values, such
+ as <literal>'now'</literal> or <literal>'today'</literal> will
+ no longer work as expected in column default expressions; they
+ now cause the time of the table creation to be the default, not
+ the time of the insertion. Functions such as
+ <function>now()</>, <function>current_timestamp</>, or
+ <function>current_date</function> should be used instead.
+ </para>
+
+ <para>
+ In previous releases, there was special code so that strings
+ such as <literal>'now'</literal> were interpreted at
+ <command>INSERT</> time and not at table creation time, but
+ this work around didn't cover all cases. Release 7.4 now
+ requires that defaults be defined properly using functions such
+ as <function>now()</> or <function>current_timestamp</>. These
+ will work in all situations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The dollar sign (<literal>$</>) is no longer allowed in
+ operator names. It can instead be a non-first character in
+ identifiers. This was done to improve compatibility with other
+ database systems, and to avoid syntax problems when parameter
+ placeholders (<literal>$<replaceable>n</></>) are written
+ adjacent to operators.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <para>
+ Below you will find a detailed account of the changes between
+ release 7.4 and the previous major release.
+ </para>
+
+ <sect3>
+ <title>Server Operation Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
+ Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix SSL to handle errors cleanly (Nathan Mueller)
+ </para>
+ <para>
+ In prior releases, certain SSL API error reports were not
+ handled correctly. This release fixes those problems.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ SSL protocol security and performance improvements (Sean Chittenden)
+ </para>
+ <para>
+ SSL key renegotiation was happening too frequently, causing poor
+ SSL performance. Also, initial key handling was improved.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Print lock information when a deadlock is detected (Tom)
+ </para>
+ <para>
+ This allows easier debugging of deadlock situations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update <filename>/tmp</filename> socket modification times
+ regularly to avoid their removal (Tom)
+ </para>
+ <para>
+ This should help prevent <filename>/tmp</filename> directory
+ cleaner administration scripts from removing server socket
+ files.
+ </para>
+ </listitem>
+
+ <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
+
+ <listitem>
+ <para>Make B-tree indexes fully WAL-safe (Tom)</para>
+ <para>
+ In prior releases, under certain rare cases, a server crash
+ could cause B-tree indexes to become corrupt. This release
+ removes those last few rare cases.
+ </para>
+ </listitem>
+
+ <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Fix inconsistent index lookups during split of first root page (Tom)
+ </para>
+ <para>
+ In prior releases, when a single-page index split into two
+ pages, there was a brief period when another database session
+ could miss seeing an index entry. This release fixes that rare
+ failure case.
+ </para>
+ </listitem>
+
+ <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
+
+ <listitem>
+ <para>Preserve free space information between server restarts (Tom)</para>
+ <para>
+ In prior releases, the free space map was not saved when the
+ postmaster was stopped, so newly started servers had no free
+ space information. This release saves the free space map, and
+ reloads it when the server is restarted.
+ </para>
+ </listitem>
+
+ <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
+ <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
+ <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
+ <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
+ <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
+ <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
+ <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Performance Improvements</title>
+
+ <itemizedlist>
+ <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
+ <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
+ <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
+ <listitem><para>Improve constant folding (Tom)</para></listitem>
+ <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
+
+ <listitem>
+ <para>Reduce memory usage for queries using complex functions (Tom)</para>
+ <para>
+ In prior releases, functions returning allocated memory would
+ not free it until the query completed. This release allows the
+ freeing of function-allocated memory when the function call
+ completes, reducing the total memory used by functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Improve GEQO optimizer performance (Tom)</para>
+ <para>
+ This release fixes several inefficiencies in the way the GEQO optimizer
+ manages potential query paths.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
+ tables (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
+ performance (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow most <literal>IN</literal> subqueries to be processed as
+ joins (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Pattern matching operations can use indexes regardless of
+ locale (Peter)
+ </para>
+ <para>
+ There is no way for non-ASCII locales to use the standard
+ indexes for <literal>LIKE</literal> comparisons. This release
+ adds a way to create a special index for
+ <literal>LIKE</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
+ <para>
+ For shared libraries that require a long time to load, this
+ option is available so the library can be preloaded in the
+ postmaster and inherited by all database sessions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimizer cost computations, particularly for subqueries (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
+ means <literal>a.x = 42</literal> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow hash/merge joins on complex joins (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow hash joins for more data types (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow join optimization of explicit inner joins, disable with
+ <varname>join_collapse_limit</varname> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add parameter <varname>from_collapse_limit</varname> to control
+ conversion of subqueries to joins (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use faster and more powerful regular expression code from Tcl
+ (Henry Spencer, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use bit-mapped relation sets in the optimizer (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Improve connection startup time (Tom)</para>
+ <para>
+ The new client/server protocol requires fewer network packets to
+ start a database session.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve trigger/constraint performance (Stephan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix hash indexes which were broken in rare cases (Tom)
+ </para>
+ </listitem>
+
+ <listitem><para>Improve hash index concurrency and speed (Tom)</para>
+ <para>
+ Prior releases suffered from poor hash index performance,
+ particularly for high concurrency situations. This release fixes
+ that, and the development group is interested in reports
+ comparing B-tree and hash index performance.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
+ <para>
+ Certain CPU's perform faster data copies when addresses are
+ 32-byte aligned.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
+ <para>
+ <type>numeric</type> used to be stored in base 100. The new code
+ uses base 10000, for significantly better performance.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Server Configuration Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
+ <para>
+ This was done so most parameters that control the server logs
+ begin with <literal>log_</>.
+ </para>
+ </listitem>
+
+ <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
+ <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
+ <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
+
+ <listitem>
+ <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
+ <para>
+ In prior releases, it was difficult to determine if checkpoint
+ was happening too frequently. This feature adds a warning to the
+ server logs when excessive checkpointing happens.
+ </para>
+ </listitem>
+
+ <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Change debug server log messages to output as <literal>DEBUG</>
+ rather than <literal>LOG</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
+ <para>
+ This is a security feature so non-superusers cannot disable
+ logging that was enabled by the administrator.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <varname>log_min_messages</>/<varname>client_min_messages</> now
+ controls <varname>debug_*</> output (Bruce)
+ </para>
+ <para>
+ This centralizes client debug information so all debug output
+ can be sent to either the client or server logs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
+ <para>
+ This allows Mac OS X hosts to query the network for available
+ <productname>PostgreSQL</productname> servers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add ability to print only slow statements using
+ <varname>log_min_duration_statement</varname>
+ (Christopher)
+ </para>
+ <para>
+ This is an often requested debugging feature that allows
+ administrators to see only slow queries in their server logs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
+ <para>
+ This allows administrators to merge the host IP address and
+ netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
+ </para>
+ </listitem>
+
+ <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
+
+ <listitem>
+ <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
+ <para>
+ This works with the new error reporting feature to supply
+ additional error information like hints, file names and line
+ numbers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
+ <para>
+ This option is useful for administration tools that need to know
+ the configuration variable names and their minimums, maximums,
+ defaults, and descriptions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new columns in <literal>pg_settings</literal>:
+ <literal>context</>, <literal>type</>, <literal>source</>,
+ <literal>min_val</>, <literal>max_val</> (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make default <varname>shared_buffers</> 1000 and
+ <varname>max_connections</> 100, if possible (Tom)
+ </para>
+ <para>
+ Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
+ would start on even very old systems. This release tests the
+ amount of shared memory allowed by the platform and selects more
+ reasonable default values if possible. Of course, users are
+ still encouraged to evaluate their resource load and size
+ <varname>shared_buffers</varname> accordingly.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New <filename>pg_hba.conf</filename> record type
+ <literal>hostnossl</> to prevent SSL connections (Jon
+ Jensen)
+ </para>
+ <para>
+ In prior releases, there was no way to prevent SSL connections
+ if both the client and server supported SSL. This option allows
+ that capability.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove parameter <varname>geqo_random_seed</varname>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Query Changes</title>
+
+ <itemizedlist>
+ <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
+ <listitem><para>Add read-only transactions (Peter)</para></listitem>
+ <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
+
+ <listitem>
+ <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
+ <para>
+ In prior releases, only the superuser could see query strings
+ using <literal>pg_stat_activity</literal>. Now ordinary users
+ can see their own query strings.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
+ <para>
+ The SQL standard says that an aggregate function appearing
+ within a nested subquery belongs to the outer query if its
+ argument contains only outer-query variables. Prior
+ <productname>PostgreSQL</productname> releases did not handle
+ this fine point correctly.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
+ <para>
+ By default, tables mentioned in the query are automatically
+ added to the <literal>FROM</> clause if they are not already
+ there. This is compatible with historic
+ <productname>POSTGRES</productname> behavior but is contrary to
+ the SQL standard. This option allows selecting
+ standard-compatible behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
+ <para>
+ This allows <command>UPDATE</command> to set a column to its
+ declared default value.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
+ <para>
+ In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
+ only use constants, not expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Object Manipulation Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
+ </listitem>
+
+ <listitem>
+ <para>Add statement-level triggers (Neil)</para>
+ <para>
+ While this allows a trigger to fire at the end of a statement,
+ it does not allow the trigger to access all rows modified by the
+ statement. This capability is planned for a future release.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add check constraints for domains (Rod)</para>
+ <para>
+ This greatly increases the usefulness of domains by allowing
+ them to use check constraints.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
+ <para>
+ This allows manipulation of existing domains.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Fix several zero-column table bugs (Tom)</para>
+ <para>
+ <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
+ that occur when using such tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
+ <para>
+ In prior releases, <literal>ALTER TABLE ... ADD
+ PRIMARY</literal> would add a unique index, but not a not-null
+ constraint. That is fixed in this release.
+ </para>
+ </listitem>
+
+ <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
+ <para>
+ This allows control over whether new and updated rows will have
+ an OID column. This is most useful for saving storage space.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
+ increment, cache, cycle values (Rod)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
+ <para>
+ This command is used by <command>pg_dump</command> to record the
+ cluster column for each table previously clustered. This
+ information is used by database-wide cluster to cluster all
+ previously clustered tables.
+ </para>
+ </listitem>
+
+ <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
+ <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
+ <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Allow copying table schema using <literal>LIKE
+ <replaceable>subtable</replaceable></literal>, also SQL:2003
+ feature <literal>INCLUDING DEFAULTS</literal> (Rod)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>WITH GRANT OPTION</literal> clause to
+ <command>GRANT</command> (Peter)
+ </para>
+ <para>
+ This enabled <command>GRANT</command> to give other users the
+ ability to grant privileges on a object.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Utility Command Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
+ <para>
+ This adds the ability for a table to be dropped or all rows
+ deleted on transaction commit.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
+ <para>
+ In previous releases, cursors were removed at the end of the
+ transaction that created them. Cursors can now be created with
+ the <literal>WITH HOLD</literal> option, which allows them to
+ continue to be accessed after the creating transaction has
+ committed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
+ <para>
+ In previous releases, <literal>FETCH 0</literal> fetched all
+ remaining rows, and <literal>MOVE 0</literal> moved to the end
+ of the cursor.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Cause <command>FETCH</command> and <command>MOVE</command> to
+ return the number of rows fetched/moved, or zero if at the
+ beginning/end of cursor, per SQL standard (Bruce)
+ </para>
+ <para>
+ In prior releases, the row count returned by
+ <command>FETCH</command> and <command>MOVE</command> did not
+ accurately reflect the number of rows processed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Properly handle <literal>SCROLL</literal> with cursors, or
+ report an error (Neil)</para>
+ <para>
+ Allowing random access (both forward and backward scrolling) to
+ some kinds of queries cannot be done without some additional
+ work. If <literal>SCROLL</literal> is specified when the cursor
+ is created, this additional work will be performed. Furthermore,
+ if the cursor has been created with <literal>NO SCROLL</literal>,
+ no random access is allowed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Implement SQL-compatible options <literal>FIRST</>,
+ <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
+ <literal>RELATIVE <replaceable>n</></> for
+ <command>FETCH</command> and <command>MOVE</command> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
+ <para>
+ This allows all previously clustered tables in a database to be
+ reclustered with a single command.
+ </para>
+ </listitem>
+
+ <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
+
+ <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
+
+ <listitem>
+ <para>
+ Disallow literal carriage return as a data value,
+ backslash-carriage-return and <literal>\r</> are still allowed
+ (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
+ <para>
+ <command>TRUNCATE</command> can now be used inside a
+ transaction. If the transaction aborts, the changes made by the
+ <command>TRUNCATE</command> are automatically rolled back.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow prepare/bind of utility commands like
+ <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
+ </listitem>
+
+ <listitem>
+ <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
+ <para>
+ In prior releases, functional indexes only supported a simple
+ function applied to one or more column names. This release
+ allows any type of scalar expression.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <command>SHOW TRANSACTION ISOLATION</command> match input
+ to <command>SET TRANSACTION ISOLATION</command>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <command>COMMENT ON DATABASE</command> on nonlocal
+ database generate a warning, rather than an error (Rod)
+ </para>
+
+ <para>
+ Database comments are stored in database-local tables so
+ comments on a database have to be stored in each database.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
+ <para>
+ This allows system tables to be reindexed without the
+ requirement of a standalone session, which was necessary in
+ previous releases. The only tables that now require a standalone
+ session for reindexing are the global system tables
+ <literal>pg_database</>, <literal>pg_shadow</>, and
+ <literal>pg_group</>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Data Type and Function Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ New server parameter <varname>extra_float_digits</varname> to
+ control precision display of floating-point numbers (Pedro
+ Ferreira, Tom)
+ </para>
+ <para>
+ This controls output precision which was causing regression
+ testing problems.
+ </para>
+ </listitem>
+
+ <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Remove rarely used functions <function>oidrand</>,
+ <function>oidsrand</>, and <function>userfntest</> functions
+ (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
+ <para>
+ An MD5 function was frequently requested. For more complex
+ encryption capabilities, use
+ <filename>contrib/pgcrypto</filename>.
+ </para>
+ </listitem>
+
+ <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
+
+ <listitem>
+ <para>
+ Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
+ <type>timestamp without time zone</type> is assumed to be in
+ local time, not GMT (Tom)
+ </para>
+ </listitem>
+
+ <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
+ <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
+ <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
+ <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
+
+ <listitem>
+ <para>
+ Allow functions that can take any argument data type and return
+ any data type, using <type>anyelement</type> and
+ <type>anyarray</type> (Joe)
+ </para>
+ <para>
+ This allows the creation of functions that can work with any
+ data type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Arrays can now be specified as <literal>ARRAY[1,2,3]</literal>,
+ <literal>ARRAY[['a','b'],['c','d']]</literal>, or
+ <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow proper comparisons for arrays, including <literal>ORDER
+ BY</literal> and <literal>DISTINCT</literal> support
+ (Joe)
+ </para>
+ </listitem>
+
+ <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
+ <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
+
+ <listitem>
+ <para>
+ Allow <literal>WHERE</literal> qualification
+ <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
+ (<replaceable>array_expr</>)</literal> (Joe)
+ </para>
+ <para>
+ This allows arrays to behave like a list of values, for purposes
+ like <literal>SELECT * FROM tab WHERE col IN
+ (array_val)</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New array functions <function>array_append</>,
+ <function>array_cat</>, <function>array_lower</>,
+ <function>array_prepend</>, <function>array_to_string</>,
+ <function>array_upper</>, <function>string_to_array</> (Joe)
+ </para>
+ </listitem>
+
+ <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
+ <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
+
+ <listitem>
+ <para>
+ Allow 60 in seconds fields of <type>time</type>,
+ <type>timestamp</type>, and <type>interval</type> input values
+ (Tom)
+ </para>
+ <para>
+ Sixty-second values are needed for leap seconds.
+ </para>
+ </listitem>
+
+ <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
+
+ <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
+
+ <listitem>
+ <para>
+ Trim trailing spaces when <type>char</type> is cast to
+ <type>varchar</> or <type>text</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <type>float(<replaceable>p</>)</> measure the precision
+ <replaceable>p</> in binary digits, not decimal digits
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
+ </listitem>
+
+ <listitem>
+ <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <literal>SHOW datestyle</literal> generate output similar
+ to that used by <literal>SET datestyle</literal> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
+ TIME ZONE</literal> follow the SQL convention for the sign of
+ time zone offsets, i.e., positive is east from UTC (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
+ <para>
+ Prior releases returned an incorrect value for this function call.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
+ <para>
+ <function>initcap()</function> now uppercases a letter appearing
+ after any non-alphanumeric character, rather than only after
+ whitespace.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new <varname>datestyle</varname> values <literal>MDY</>,
+ <literal>DMY</>, and <literal>YMD</> to set input field order;
+ honor <literal>US</> and <literal>European</> for backward
+ compatibility (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ String literals like <literal>'now'</literal> or
+ <literal>'today'</literal> will no longer work as a column
+ default. Use functions such as <function>now()</function>,
+ <function>current_timestamp</function> instead. (change
+ required for prepared statements) (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
+ <para>
+ NaN was already sorted after ordinary numeric values for most
+ purposes, but <function>min()</> and <function>max()</> didn't
+ get this right.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Prevent interval from suppressing <literal>:00</literal>
+ seconds display</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New functions <function>pg_get_triggerdef(prettyprint)</function>
+ and <function>pg_conversion_is_visible()</function> (Christopher)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
+ match <varname>datestyle</varname>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_constraintdef</function> support
+ unique, primary-key, and check constraints (Christopher)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Server-Side Language Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
+ used on a zero-row record variable (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make PL/Python's <function>spi_execute</function> interface
+ handle null values properly (Andrew Bosma)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
+ </listitem>
+
+ <listitem>
+ <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
+ <para>
+ The Python language no longer supports a restricted execution
+ environment, so the trusted version of PL/Python was removed. If
+ this situation changes, a version of PL/Python that can be used
+ by non-superusers will be readded.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Allow polymorphic SQL functions (Joe)</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improved compiled function caching mechanism in PL/pgSQL with
+ full support for polymorphism (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new parameter <literal>$0</> in PL/pgSQL representing the
+ function's actual return type (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
+ qualified type names in the parameter type list
+ (Jan)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>psql Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
+ <para>
+ This forces the pager to be used even if the number of rows is
+ less than the screen height. This is valuable for rows that
+ wrap across several screen rows.
+ </para>
+ </listitem>
+
+ <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
+ <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
+ <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
+
+ <listitem>
+ <para>
+ <command>\encoding</> now changes based on the server parameter
+ <varname>client_encoding</varname> (Tom)
+ </para>
+ <para>
+ In previous versions, <command>\encoding</command> was not aware
+ of encoding changes made using <literal>SET
+ client_encoding</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Save editor buffer into readline history (Ross)</para>
+ <para>
+ When <command>\e</> is used to edit a query, the result is saved
+ in the readline history for retrieval using the up arrow.
+ </para>
+ </listitem>
+
+ <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
+ <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
+
+ <listitem>
+ <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
+ <para>
+ This takes the place of the removed server parameter <varname>autocommit</varname>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
+ <para>
+ This controls the new error reporting details.
+ </para>
+ </listitem>
+
+ <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
+ <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>pg_dump Changes</title>
+
+ <itemizedlist>
+ <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
+ <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
+
+ <listitem>
+ <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
+ <para>
+ This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
+ </para>
+ </listitem>
+
+ <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
+
+ <listitem>
+ <para>
+ Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privileges (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow pg_dumpall to support the options <option>-a</>,
+ <option>-s</>, <option>-x</> of pg_dump (Tom)
+ </para>
+ </listitem>
+
+ <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ pg_dump options <option>--use-set-session-authorization</option>
+ and <option>--no-reconnect</option> now do nothing, all dumps
+ use <command>SET SESSION AUTHORIZATION</command>
+ </para>
+ <para>
+ pg_dump no longer reconnects to switch users, but instead always
+ uses <command>SET SESSION AUTHORIZATION</command>. This will
+ reduce password prompting during restores.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
+ <para>
+ <productname>PostgreSQL</productname> now includes its own
+ long-option processing routines.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>libpq Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Add function <function>PQfreemem</function> for freeing memory on
+ Windows, suggested for <command>NOTIFY</command> (Bruce)
+ </para>
+ <para>
+ Windows requires that memory allocated in a library be freed by
+ a function in the same library, hence
+ <function>free()</function> doesn't work for freeing memory
+ allocated by libpq. <function>PQfreemem</function> is the proper
+ way to free libpq memory, especially on Windows, and is
+ recommended for other platforms as well.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Document service capability, and add sample file (Bruce)</para>
+ <para>
+ This allows clients to look up connection information in a
+ central file on the client machine.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <function>PQsetdbLogin</function> have the same defaults as
+ <function>PQconnectdb</function> (Tom)
+ </para>
+ </listitem>
+
+ <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow thread-safe libpq with <filename>configure</filename>
+ option <option>--enable-thread-safety</option> (Lee Kindness,
+ Philip Yarra)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow function <function>pqInternalNotice</function> to accept a
+ format string and arguments instead of just a preformatted
+ message (Tom, Sean Chittenden)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Control SSL negotiation with <literal>sslmode</literal> values
+ <literal>disable</literal>, <literal>allow</literal>,
+ <literal>prefer</literal>, and <literal>require</literal> (Jon
+ Jensen)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Allow new error codes and levels of text (Tom)</para>
+ </listitem>
+
+ <listitem>
+ <para>Allow access to the underlying table and column of a query result (Tom)</para>
+ <para>
+ This is helpful for query-builder applications that want to know
+ the underlying table and column names associated with a specific
+ result set.
+ </para>
+ </listitem>
+
+ <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
+ <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
+
+ <listitem>
+ <para>
+ Add function <function>PQexecPrepared</function> and
+ <function>PQsendQueryPrepared</function> functions which perform
+ bind/execute of previously prepared statements (Tom)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>JDBC Changes</title>
+
+ <itemizedlist>
+ <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
+ <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
+ <listitem><para>Support SSL connections (Barry)</para></listitem>
+ <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
+ <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Miscellaneous Interface Changes</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
+ </listitem>
+ <listitem>
+ <para>Add Informix compatibility to ECPG (Michael)</para>
+ <para>
+ This allows ECPG to process embedded C programs that were
+ written using certain Informix extensions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow thread-safe embedded SQL programs with
+ <filename>configure</filename> option
+ <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
+ </para>
+ <para>
+ This allows multiple threads to access the database at the same
+ time.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Source Code Changes</title>
+
+ <itemizedlist>
+ <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
+ <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
+ <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
+ <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
+ <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
+ <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
+ <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
+ <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
+ <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
+ <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
+ <listitem><para> Bison >= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
+ <listitem><para>Merge documentation into one book (Peter)</para></listitem>
+ <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
+ <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
+ <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
+ <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
+ <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
+ <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
+ <listitem>
+ <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
+ <para>
+ This was no longer needed now that we have <command>CREATE CONVERSION</command>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Generate a compile error if spinlock code is not found (Bruce)</para>
+ <para>
+ Platforms without spinlock code will now fail to compile, rather
+ than silently using semaphores. This failure can be disabled
+ with a new <command>configure</command> option.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Contrib Changes</title>
+
+ <itemizedlist>
+ <listitem><para>Change dbmirror license to BSD</para></listitem>
+ <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
+ <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
+ <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
+ <listitem><para>Update oracle</para></listitem>
+ <listitem><para>Update mysql</para></listitem>
+ <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
+ <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
+ <listitem><para>Update btree_gist (Oleg)</para></listitem>
+ <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
+ <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
+ <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
+ <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
+ <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
+ <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
+ <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
+ <listitem><para>Improve pgstattuple (Rod)</para></listitem>
+ <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
+ <listitem><para>Improve adddepend (Rod)</para></listitem>
+ <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
+ <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
+ <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
+ </itemizedlist>
+ </sect3>
+ </sect2>
+</sect1>
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.0.sgml,v 1.1 2009/05/02 20:17:19 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-8-0-21">
+ <title>Release 8.0.21</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-03-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.20.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.21</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent error recursion crashes when encoding conversion fails (Tom)
+ </para>
+
+ <para>
+ This change extends fixes made in the last two minor releases for
+ related failure scenarios. The previous fixes were narrowly tailored
+ for the original problem reports, but we have now recognized that
+ <emphasis>any</> error thrown by an encoding conversion function could
+ potentially lead to infinite recursion while trying to report the
+ error. The solution therefore is to disable translation and encoding
+ conversion and report the plain-ASCII form of any error message,
+ if we find we have gotten into a recursive error reporting situation.
+ (CVE-2009-0922)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>CREATE CONVERSION</> with the wrong encodings
+ for the specified conversion function (Heikki)
+ </para>
+
+ <para>
+ This prevents one possible scenario for encoding conversion failure.
+ The previous change is a backstop to guard against other kinds of
+ failures in the same area.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump when <function>to_char()</> is given format codes that
+ are inappropriate for the type of the data argument (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+ of known timezone abbreviations (Xavier Bugaud)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-20">
+ <title>Release 8.0.20</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-02-02</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.19.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.20</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of URLs in <function>headline()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of overlength headlines in <function>headline()</>
+ function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible Assert failure or misconversion if an encoding
+ conversion is created with the wrong conversion function for the
+ specified pair of encodings (Tom, Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnecessary locking of small tables in <command>VACUUM</>
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix uninitialized variables in <filename>contrib/tsearch2</>'s
+ <function>get_covers()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make all documentation reference <literal>pgsql-bugs</> and/or
+ <literal>pgsql-hackers</> as appropriate, instead of the
+ now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+ mailing lists (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2009a (for
+ Kathmandu and historical DST corrections in Switzerland, Cuba)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-19">
+ <title>Release 8.0.19</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-11-03</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.18.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.19</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix backend crash when the client encoding cannot represent a localized
+ error message (Tom)
+ </para>
+
+ <para>
+ We have addressed similar issues before, but it would still fail if
+ the <quote>character has no equivalent</> message itself couldn't
+ be converted. The fix is to disable localization and send the plain
+ ASCII error message when we detect such a situation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash when deeply nested functions are invoked from
+ a trigger (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure an error is reported when a newly-defined PL/pgSQL trigger
+ function is invoked as a normal function (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect tsearch2 headline generation when single query
+ item matches first word of text (Sushant Sinha)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix improper display of fractional seconds in interval values when
+ using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+ build (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+ behave correctly when the passed tuple and tuple descriptor have
+ different numbers of columns (Tom)
+ </para>
+
+ <para>
+ This situation is normal when a table has had columns added or removed,
+ but these two functions didn't handle it properly.
+ The only likely consequence is an incorrect error indication.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s parsing of <command>CREATE USER</> (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix recent breakage of <literal>pg_ctl restart</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008i (for
+ DST law changes in Argentina, Brazil, Mauritius, Syria)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-18">
+ <title>Release 8.0.18</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-09-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.17.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.18</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Widen local lock counters from 32 to 64 bits (Tom)
+ </para>
+
+ <para>
+ This responds to reports that the counters could overflow in
+ sufficiently long transactions, leading to unexpected <quote>lock is
+ already held</> errors.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add checks in executor startup to ensure that the tuples produced by an
+ <command>INSERT</> or <command>UPDATE</> will match the target table's
+ current rowtype (Tom)
+ </para>
+
+ <para>
+ <command>ALTER COLUMN TYPE</>, followed by re-use of a previously
+ cached plan, could produce this type of situation. The check protects
+ against data corruption and/or crashes that could ensue.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix datetime input functions to correctly detect integer overflow when
+ running on a 64-bit platform (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of writing very long log messages to syslog (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+ ON</> query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+ boolean results always result in two groups, regardless of the
+ expressions' contents (Tom)
+ </para>
+
+ <para>
+ This is very substantially more accurate than the regular <literal>GROUP
+ BY</> estimate for certain boolean tests like <replaceable>col</>
+ <literal>IS NULL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
+ about the encoding of data sent to or from Tcl (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to work with Python 2.5
+ </para>
+
+ <para>
+ This is a back-port of fixes made during the 8.2 development cycle.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <application>pg_dump</> and <application>pg_restore</>'s
+ error reporting after failure to send a SQL command (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to properly preserve postmaster
+ command-line arguments across a <literal>restart</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008f (for
+ DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
+ Pakistan, Palestine, and Paraguay)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-17">
+ <title>Release 8.0.17</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-06-12</simpara>
+ </note>
+
+ <para>
+ This release contains one serious bug fix over 8.0.16.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.17</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+ </para>
+
+ <para>
+ Before this fix, a negative constant in a view or rule might be dumped
+ as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+ be <literal>(-42)::integer</> due to operator precedence rules.
+ Usually this would make little difference, but it could interact with
+ another recent patch to cause
+ <productname>PostgreSQL</> to reject what had been a valid
+ <command>SELECT DISTINCT</> view query. Since this could result in
+ <application>pg_dump</> output failing to reload, it is being treated
+ as a high-priority fix. The only released versions in which dump
+ output is actually incorrect are 8.3.1 and 8.2.7.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-16">
+ <title>Release 8.0.16</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>never released</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.15.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.16</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X.
+ However, if you are upgrading from a version earlier than 8.0.6,
+ see the release notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
+ column is correctly checked to see if it's been initialized to all
+ non-nulls (Brendan Jurd)
+ </para>
+
+ <para>
+ Previous versions neglected to check this requirement at all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible <command>CREATE TABLE</> failure when inheriting the
+ <quote>same</> constraint from multiple parent relations that
+ inherited that constraint from a common ancestor (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix conversions between ISO-8859-5 and other encodings to handle
+ Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+ two dots) (Sergey Burladyan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a few datatype input functions
+ that were allowing unused bytes in their results to contain
+ uninitialized, unpredictable values (Tom)
+ </para>
+
+ <para>
+ This could lead to failures in which two apparently identical literal
+ values were not seen as equal, resulting in the parser complaining
+ about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+ expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a corner case in regular-expression substring matching
+ (<literal>substring(<replaceable>string</> from
+ <replaceable>pattern</>)</literal>) (Tom)
+ </para>
+
+ <para>
+ The problem occurs when there is a match to the pattern overall but
+ the user has specified a parenthesized subexpression and that
+ subexpression hasn't got a match. An example is
+ <literal>substring('foo' from 'foo(bar)?')</>.
+ This should return NULL, since <literal>(bar)</> isn't matched, but
+ it was mistakenly returning the whole-pattern match instead (ie,
+ <literal>foo</>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008c (for
+ DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba,
+ Argentina/San_Luis, and Chile)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect result from <application>ecpg</>'s
+ <function>PGTYPEStimestamp_sub()</> function (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump in <filename>contrib/xml2</>'s
+ <function>xpath_table()</> function when the input query returns a
+ NULL value (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <filename>contrib/xml2</>'s makefile to not override
+ <literal>CFLAGS</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+ 4.3 (Tom)
+ </para>
+
+ <para>
+ This problem affects <quote>old style</> (V0) C functions that
+ return boolean. The fix is already in 8.3, but the need to
+ back-patch it was not realized at the time.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+ race condition (Tom)
+ </para>
+
+ <para>
+ In rare cases a session that had just executed a
+ <command>LISTEN</> might not get a notification, even though
+ one would be expected because the concurrent transaction executing
+ <command>NOTIFY</> was observed to commit later.
+ </para>
+
+ <para>
+ A side effect of the fix is that a transaction that has executed
+ a not-yet-committed <command>LISTEN</> command will not see any
+ row in <structname>pg_listener</> for the <command>LISTEN</>,
+ should it choose to look; formerly it would have. This behavior
+ was never documented one way or the other, but it is possible that
+ some applications depend on the old behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare crash when an error occurs during a query using a hash index
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix input of datetime values for February 29 in years BC (Tom)
+ </para>
+
+ <para>
+ The former coding was mistaken about which years were leap years.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>unrecognized node type</> error in some variants of
+ <command>ALTER OWNER</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to correctly extract the postmaster's port
+ number from command-line options (Itagaki Takahiro, Tom)
+ </para>
+
+ <para>
+ Previously, <literal>pg_ctl start -w</> could try to contact the
+ postmaster on the wrong port, leading to bogus reports of startup
+ failure.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use <option>-fwrapv</> to defend against possible misoptimization
+ in recent <application>gcc</> versions (Tom)
+ </para>
+
+ <para>
+ This is known to be necessary when building <productname>PostgreSQL</>
+ with <application>gcc</> 4.3 or later.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix display of constant expressions in <literal>ORDER BY</>
+ and <literal>GROUP BY</> (Tom)
+ </para>
+
+ <para>
+ An explictly casted constant would be shown incorrectly. This could
+ for example lead to corruption of a view definition during
+ dump and reload.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> to handle NOTICE messages correctly
+ during COPY OUT (Tom)
+ </para>
+
+ <para>
+ This failure has only been observed to occur when a user-defined
+ datatype's output routine issues a NOTICE, but there is no
+ guarantee it couldn't happen due to other causes.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-15">
+ <title>Release 8.0.15</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-01-07</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.14,
+ including fixes for significant security issues.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <para>
+ This is the last 8.0.X release for which the <productname>PostgreSQL</>
+ community will produce binary packages for <productname>Windows</>.
+ Windows users are encouraged to move to 8.2.X or later,
+ since there are Windows-specific fixes in 8.2.X that
+ are impractical to back-port. 8.0.X will continue to
+ be supported on other platforms.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.15</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent functions in indexes from executing with the privileges of
+ the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+ </para>
+
+ <para>
+ Functions used in index expressions and partial-index
+ predicates are evaluated whenever a new table entry is made. It has
+ long been understood that this poses a risk of trojan-horse code
+ execution if one modifies a table owned by an untrustworthy user.
+ (Note that triggers, defaults, check constraints, etc. pose the
+ same type of risk.) But functions in indexes pose extra danger
+ because they will be executed by routine maintenance operations
+ such as <command>VACUUM FULL</>, which are commonly performed
+ automatically under a superuser account. For example, a nefarious user
+ can execute code with superuser privileges by setting up a
+ trojan-horse index definition and waiting for the next routine vacuum.
+ The fix arranges for standard maintenance operations
+ (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+ and <command>CLUSTER</>) to execute as the table owner rather than
+ the calling user, using the same privilege-switching mechanism already
+ used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
+ this security measure, execution of <command>SET SESSION
+ AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+ <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+ </para>
+
+ <para>
+ Suitably crafted regular-expression patterns could cause crashes,
+ infinite or near-infinite looping, and/or massive memory consumption,
+ all of which pose denial-of-service hazards for applications that
+ accept regex search patterns from untrustworthy sources.
+ (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+
+ <para>
+ The fix that appeared for this in 8.0.14 was incomplete, as it plugged
+ the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
+ CVE-2007-3278)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2007k
+ (in particular, recent Argentina changes) (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner failure in some cases of <literal>WHERE false AND var IN
+ (SELECT ...)</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Preserve the tablespace of indexes that are
+ rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make archive recovery always start a new WAL timeline, rather than only
+ when a recovery stop time was used (Simon)
+ </para>
+
+ <para>
+ This avoids a corner-case risk of trying to overwrite an existing
+ archived copy of the last WAL segment, and seems simpler and cleaner
+ than the original definition.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
+ when the table is too small for it to be useful (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential crash in <function>translate()</> when using a multibyte
+ database encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
+ as <literal>int</> rather than <literal>char</> (Tom)
+ </para>
+
+ <para>
+ While this could theoretically happen anywhere, no standard build of
+ Perl did things this way ... until <productname>Mac OS X</> 10.5.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to not crash on long exception messages (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_dump</> to correctly handle inheritance child tables
+ that have default expressions different from their parent's (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <application>ecpg</> parser fixes (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+ NULL rowid as a category in its own right, rather than crashing (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <type>tsvector</> and <type>tsquery</> output routines to
+ escape backslashes correctly (Teodor, Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require a specific version of <productname>Autoconf</> to be used
+ when re-generating the <command>configure</> script (Peter)
+ </para>
+
+ <para>
+ This affects developers and packagers only. The change was made
+ to prevent accidental use of untested combinations of
+ <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+ You can remove the version check if you really want to use a
+ different <productname>Autoconf</> version, but it's
+ your responsibility whether the result works or not.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-14">
+ <title>Release 8.0.14</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-09-17</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.13.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.14</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent index corruption when a transaction inserts rows and
+ then aborts close to the end of a concurrent <command>VACUUM</>
+ on the same table (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix excessive logging of <acronym>SSL</> error messages (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix logging so that log messages are never interleaved when using
+ the syslogger process (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash when <varname>log_min_error_statement</> logging runs out
+ of memory (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect handling of some foreign-key corner cases (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <command>CLUSTER</> from failing
+ due to attempting to process temporary tables of other sessions (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Windows socket improvements (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+ because of possible encoding mismatches (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-13">
+ <title>Release 8.0.13</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-04-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.12,
+ including a security fix.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.13</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Support explicit placement of the temporary-table schema within
+ <varname>search_path</>, and disable searching it for functions
+ and operators (Tom)
+ </para>
+ <para>
+ This is needed to allow a security-definer function to set a
+ truly secure value of <varname>search_path</>. Without it,
+ an unprivileged SQL user can use temporary objects to execute code
+ with the privileges of the security-definer function (CVE-2007-2138).
+ See <command>CREATE FUNCTION</> for more information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>/contrib/tsearch2</> crash fixes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+ <command>UPDATE</> chains (Tom, Pavan Deolasee)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-12">
+ <title>Release 8.0.12</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-07</simpara>
+ </note>
+
+ <para>
+ This release contains one fix from 8.0.11.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.12</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove overly-restrictive check for type length in constraints and
+ functional indexes(Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-11">
+ <title>Release 8.0.11</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-05</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.10, including
+ a security fix.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.11</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove security vulnerabilities that allowed connected users
+ to read backend memory (Tom)
+ </para>
+ <para>
+ The vulnerabilities involve suppressing the normal check that a SQL
+ function returns the data type it's declared to, and changing the
+ data type of a table column (CVE-2007-0555, CVE-2007-0556). These
+ errors can easily be exploited to cause a backend crash, and in
+ principle might be used to read database content that the user
+ should not be able to access.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare bug wherein btree index page splits could fail
+ due to choosing an infeasible split point (Heikki Linnakangas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tighten security of multi-byte character processing for UTF8 sequences
+ over three bytes long (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-10">
+ <title>Release 8.0.10</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-01-08</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.9.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.10</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+ </para>
+
+ <para>
+ This fixes a problem with starting the statistics collector,
+ among other things.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>failed to re-find parent key</> errors in
+ <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix race condition for truncation of a large relation across a
+ gigabyte boundary by <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bugs affecting multi-gigabyte hash indexes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible deadlock in Windows signal handling (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+ empty elements (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix ecpg memory leak during connection (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>to_number()</> and <function>to_char(numeric)</>
+ are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+ new <application>initdb</> installs (Tom)
+ </para>
+
+ <para>
+ This is because <varname>lc_numeric</> can potentially
+ change the output of these functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve index usage of regular expressions that use parentheses (Tom)
+ </para>
+
+ <para>
+ This improves <application>psql</> <literal>\d</> performance also.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update timezone database
+ </para>
+
+ <para>
+ This affects Australian and Canadian daylight-savings rules in
+ particular.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-9">
+ <title>Release 8.0.9</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-10-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.8.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.9</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix crash when referencing <literal>NEW</> row
+values in rule WHERE expressions (Tom)</para></listitem>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</para></listitem>
+<listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
+function returning multiple rows (Tom)</para></listitem>
+<listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
+<literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
+<listitem><para>Fix <function>string_to_array()</> to handle overlapping
+ matches for the separator string</para>
+<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
+</para></listitem>
+<listitem><para>Fix corner cases in pattern matching for
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
+<listitem><para>Fix index-corrupting bugs in /contrib/ltree
+ (Teodor)</para></listitem>
+<listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
+Wieland)</para></listitem>
+<listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
+<listitem><para>Fix instability of statistics collection on Win32 (Tom, Andrew)</para></listitem>
+<listitem><para>Fixes for <systemitem class="osname">AIX</> and
+<productname>Intel</> compilers (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-8">
+ <title>Release 8.0.8</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-05-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.7,
+ including patches for extremely serious security issues.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.8</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+
+ <para>
+ Full security against the SQL-injection attacks described in
+ CVE-2006-2313 and CVE-2006-2314 might require changes in application
+ code. If you have applications that embed untrustworthy strings
+ into SQL commands, you should examine them as soon as possible to
+ ensure that they are using recommended escaping techniques. In
+ most cases, applications should be using subroutines provided by
+ libraries or drivers (such as <application>libpq</>'s
+ <function>PQescapeStringConn()</>) to perform string escaping,
+ rather than relying on <foreignphrase>ad hoc</> code to do it.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change the server to reject invalidly-encoded multibyte
+characters in all cases (Tatsuo, Tom)</para>
+<para>While <productname>PostgreSQL</> has been moving in this direction for
+some time, the checks are now applied uniformly to all encodings and all
+textual input, and are now always errors not merely warnings. This change
+defends against SQL-injection attacks of the type described in CVE-2006-2313.
+</para></listitem>
+
+<listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
+<para>As a server-side defense against SQL-injection attacks of the type
+described in CVE-2006-2314, the server now only accepts <literal>''</> and not
+<literal>\'</> as a representation of ASCII single quote in SQL string
+literals. By default, <literal>\'</> is rejected only when
+<varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
+GB18030, or UHC), which is the scenario in which SQL injection is possible.
+A new configuration parameter <varname>backslash_quote</> is available to
+adjust this behavior when needed. Note that full security against
+CVE-2006-2314 might require client-side changes; the purpose of
+<varname>backslash_quote</> is in part to make it obvious that insecure
+clients are insecure.
+</para></listitem>
+
+<listitem><para>Modify <application>libpq</>'s string-escaping routines to be
+aware of encoding considerations and
+<varname>standard_conforming_strings</></para>
+<para>This fixes <application>libpq</>-using applications for the security
+issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
+them against the planned changeover to SQL-standard string literal syntax.
+Applications that use multiple <productname>PostgreSQL</> connections
+concurrently should migrate to <function>PQescapeStringConn()</> and
+<function>PQescapeByteaConn()</> to ensure that escaping is done correctly
+for the settings in use in each database connection. Applications that
+do string escaping <quote>by hand</> should be modified to rely on library
+routines instead.
+</para></listitem>
+
+<listitem><para>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>alt_to_iso</>,
+<function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
+<function>mic_to_euc_tw</> were all broken to varying
+extents.
+</para></listitem>
+
+<listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
+
+<listitem><para>Fix bug that sometimes caused OR'd index scans to
+miss rows they should have returned</para></listitem>
+
+<listitem><para>Fix WAL replay for case where a btree index has been
+truncated</para></listitem>
+
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</para></listitem>
+
+<listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
+create tables in the default tablespace, not the base directory (Kris
+Jurka)</para></listitem>
+
+<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
+
+<listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
+
+<listitem><para>Fix various minor memory leaks</para></listitem>
+
+<listitem><para>Fix problem with password prompting on some Win32 systems
+(Robert Kinberg)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-7">
+ <title>Release 8.0.7</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-02-14</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.6.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.7</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.6, see the release
+ notes for 8.0.6.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix potential crash in <command>SET
+SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
+<para>An unprivileged user could crash the server process, resulting in
+momentary denial of service to other users, if the server has been compiled
+with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</para></listitem>
+
+<listitem><para>Fix bug with row visibility logic in self-inserted
+rows (Tom)</para>
+<para>Under rare circumstances a row inserted by the current command
+could be seen as already valid, when it should not be. Repairs bug
+created in 8.0.4, 7.4.9, and 7.3.11 releases.
+</para></listitem>
+
+<listitem><para>Fix race condition that could lead to <quote>file already
+exists</> errors during pg_clog and pg_subtrans file creation
+(Tom)</para></listitem>
+
+<listitem><para>Fix cases that could lead to crashes if a cache-invalidation
+message arrives at just the wrong time (Tom)</para></listitem>
+
+<listitem><para>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</para></listitem>
+
+<listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
+<literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
+constraints in the proper order (Nakano Yoshihisa)</para></listitem>
+
+<listitem><para>Fixes to allow restoring dumps that have cross-schema
+references to custom operators or operator classes (Tom)</para></listitem>
+
+<listitem><para>Allow <application>pg_restore</> to continue properly after a
+<command>COPY</> failure; formerly it tried to treat the remaining
+<command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
+
+<listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
+when the data directory is not specified (Magnus)</para></listitem>
+
+<listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
+(Neil)</para></listitem>
+
+<listitem><para>Recover properly if error occurs during argument passing
+in <application>PL/python</> (Neil)</para></listitem>
+
+<listitem><para>Fix <application>PL/perl</>'s handling of locales on
+Win32 to match the backend (Andrew)</para></listitem>
+
+<listitem><para>Fix crash when <literal>log_min_messages</> is set to
+<literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
+(Bruce)</para></listitem>
+
+<listitem><para>Fix <application>pgxs</> <literal>-L</> library path
+specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
+
+<listitem><para>Check that SID is enabled while checking for Win32 admin
+privileges (Magnus)</para></listitem>
+
+<listitem><para>Properly reject out-of-range date inputs (Kris
+Jurka)</para></listitem>
+
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-6">
+ <title>Release 8.0.6</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-01-09</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.5.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.6</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.3, see the release
+ notes for 8.0.3.
+ Also, you might need to <command>REINDEX</> indexes on textual
+ columns after updating, if you are affected by the locale or
+ <application>plperl</> issues described below.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix Windows code so that postmaster will continue rather
+than exit if there is no more room in ShmemBackendArray (Magnus)</para>
+<para>The previous behavior could lead to a denial-of-service situation if too
+many connection requests arrive close together. This applies
+<emphasis>only</> to the Windows port.</para></listitem>
+
+<listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
+to return an already-used page as new, potentially causing loss of
+recently-committed data (Tom)</para></listitem>
+
+<listitem><para>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</para></listitem>
+
+<listitem><para>Fix character string comparison for locales that consider
+different character combinations as equal, such as Hungarian (Tom)</para>
+<para>This might require <command>REINDEX</> to fix existing indexes on
+textual columns.</para></listitem>
+
+<listitem><para>Set locale environment variables during postmaster startup
+to ensure that <application>plperl</> won't change the locale later</para>
+<para>This fixes a problem that occurred if the <application>postmaster</> was
+started with environment variables specifying a different locale than what
+<application>initdb</> had been told. Under these conditions, any use of
+<application>plperl</> was likely to lead to corrupt indexes. You might need
+<command>REINDEX</> to fix existing indexes on
+textual columns if this has happened to you.</para></listitem>
+
+<listitem><para>Allow more flexible relocation of installation
+directories (Tom)</para>
+<para>Previous releases supported relocation only if all installation
+directory paths were the same except for the last component.</para></listitem>
+
+<listitem><para>Fix longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</para></listitem>
+
+<listitem><para>Various fixes for functions returning <literal>RECORD</>s
+(Tom) </para></listitem>
+
+<listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
+which caused it not to use all available salt space for MD5 and
+XDES algorithms (Marko Kreen, Solar Designer)</para>
+<para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
+
+<listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
+rather than crashing, when the number of columns specified is different from
+what's actually returned by the query (Joe)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-5">
+ <title>Release 8.0.5</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-12-12</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.4.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.5</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.3, see the release
+ notes for 8.0.3.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix race condition in transaction log management</para>
+<para>There was a narrow window in which an I/O operation could be initiated
+for the wrong page, leading to an Assert failure or data
+corruption.</para>
+</listitem>
+
+<listitem><para>Fix bgwriter problems after recovering from errors
+(Tom)</para>
+<para>
+The background writer was found to leak buffer pins after write errors.
+While not fatal in itself, this might lead to mysterious blockages of
+later VACUUM commands.
+</para>
+</listitem>
+
+<listitem><para>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
+
+<listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
+
+<listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
+
+<listitem><para>Retry file reads and writes after Windows
+NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
+
+<listitem><para>Fix intermittent failure when <varname>log_line_prefix</>
+includes <literal>%i</></para></listitem>
+
+<listitem><para>Fix <application>psql</> performance issue with long scripts
+on Windows (Merlin Moncure)</para></listitem>
+
+<listitem><para>Fix missing updates of <filename>pg_group</> flat
+file</para></listitem>
+
+<listitem><para>Fix longstanding planning error for outer joins</para>
+<para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
+only supported with merge-joinable join conditions</>.</para></listitem>
+
+<listitem><para>Postpone timezone initialization until after
+<filename>postmaster.pid</> is created</para>
+<para>This avoids confusing startup scripts that expect the pid file to appear
+quickly.</para></listitem>
+
+<listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
+table has been dropped</para></listitem>
+
+<listitem><para>Fix problems with whole-row references (<literal>foo.*</>)
+to subquery results</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-4">
+ <title>Release 8.0.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-10-04</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.3.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.4</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ if you are upgrading from a version earlier than 8.0.3, see the release
+ notes for 8.0.3.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix error that allowed <command>VACUUM</> to remove
+<literal>ctid</> chains too soon, and add more checking in code that follows
+<literal>ctid</> links</para>
+<para>This fixes a long-standing problem that could cause crashes in very rare
+circumstances.</para></listitem>
+<listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
+length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
+<para>In prior releases, the padding of <type>CHAR()</> was incorrect
+because it only padded to the specified number of bytes without
+considering how many characters were stored.</para></listitem>
+<listitem><para>Force a checkpoint before committing <command>CREATE
+DATABASE</></para>
+<para>This should fix recent reports of <quote>index is not a btree</>
+failures when a crash occurs shortly after <command>CREATE
+DATABASE</>.</para></listitem>
+<listitem><para>Fix the sense of the test for read-only transaction
+in <command>COPY</></para>
+<para>The code formerly prohibited <command>COPY TO</>, where it should
+prohibit <command>COPY FROM</>.
+</para></listitem>
+<listitem><para>Handle consecutive embedded newlines in <command>COPY</>
+CSV-mode input</para></listitem>
+<listitem><para>Fix <function>date_trunc(week)</> for dates near year
+end</para></listitem>
+<listitem><para>Fix planning problem with outer-join ON clauses that reference
+only the inner-side relation</para></listitem>
+<listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
+cases</para></listitem>
+<listitem><para>Fix overenthusiastic optimization of <literal>x IN (SELECT
+DISTINCT ...)</> and related cases</para></listitem>
+<listitem><para>Fix mis-planning of queries with small <literal>LIMIT</>
+values due to poorly thought out <quote>fuzzy</> cost
+comparison</para></listitem>
+<listitem><para>Make <function>array_in</> and <function>array_recv</> more
+paranoid about validating their OID parameter</para></listitem>
+<listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
+a...</> with GiST index on column <literal>a</></para></listitem>
+<listitem><para>Improve robustness of datetime parsing</para></listitem>
+<listitem><para>Improve checking for partially-written WAL
+pages</para></listitem>
+<listitem><para>Improve robustness of signal handling when SSL is
+enabled</para></listitem>
+<listitem><para>Improve MIPS and M68K spinlock code</para></listitem>
+<listitem><para>Don't try to open more than <literal>max_files_per_process</>
+files during postmaster startup</para></listitem>
+<listitem><para>Various memory leakage fixes</para></listitem>
+<listitem><para>Various portability improvements</para></listitem>
+<listitem><para>Update timezone data files</para></listitem>
+<listitem><para>Improve handling of DLL load failures on Windows</para></listitem>
+<listitem><para>Improve random-number generation on Windows</para></listitem>
+<listitem><para>Make <literal>psql -f filename</> return a nonzero exit code
+when opening the file fails</para></listitem>
+<listitem><para>Change <application>pg_dump</> to handle inherited check
+constraints more reliably</para></listitem>
+<listitem><para>Fix password prompting in <application>pg_restore</> on
+Windows</para></listitem>
+<listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
+the variable is of pass-by-reference type</para></listitem>
+<listitem><para>Fix PL/Perl <literal>%_SHARED</> so it's actually
+shared</para></listitem>
+<listitem><para>Fix <filename>contrib/pg_autovacuum</> to allow sleep
+intervals over 2000 sec</para></listitem>
+<listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
+code</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-3">
+ <title>Release 8.0.3</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-05-09</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.2, including several
+ security-related issues.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.3</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.X. However,
+ it is one possible way of handling two significant security problems
+ that have been found in the initial contents of 8.0.X system
+ catalogs. A dump/initdb/reload sequence using 8.0.3's initdb will
+ automatically correct these problems.
+ </para>
+
+ <para>
+ The larger security problem is that the built-in character set encoding
+ conversion functions can be invoked from SQL commands by unprivileged
+ users, but the functions were not designed for such use and are not
+ secure against malicious choices of arguments. The fix involves changing
+ the declared parameter list of these functions so that they can no longer
+ be invoked from SQL commands. (This does not affect their normal use
+ by the encoding conversion machinery.)
+ </para>
+
+ <para>
+ The lesser problem is that the <filename>contrib/tsearch2</> module
+ creates several functions that are improperly declared to return
+ <type>internal</> when they do not accept <type>internal</> arguments.
+ This breaks type safety for all functions using <type>internal</>
+ arguments.
+ </para>
+
+ <para>
+ It is strongly recommended that all installations repair these errors,
+ either by initdb or by following the manual repair procedure given
+ below. The errors at least allow unprivileged database users to crash
+ their server process, and might allow unprivileged users to gain the
+ privileges of a database superuser.
+ </para>
+
+ <para>
+ If you wish not to do an initdb, perform the same manual repair
+ procedures shown in the <link linkend="release-7-4-8">7.4.8 release
+ notes</link>.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change encoding function signature to prevent
+misuse</para></listitem>
+<listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
+<type>INTERNAL</> function results</para></listitem>
+<listitem><para>Guard against incorrect second parameter to
+<function>record_out</></para></listitem>
+<listitem><para>Repair ancient race condition that allowed a transaction to be
+seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
+than for other purposes</para>
+<para>This is an extremely serious bug since it could lead to apparent
+data inconsistencies being briefly visible to applications.</para></listitem>
+<listitem><para>Repair race condition between relation extension and
+VACUUM</para>
+<para>This could theoretically have caused loss of a page's worth of
+freshly-inserted data, although the scenario seems of very low probability.
+There are no known cases of it having caused more than an Assert failure.
+</para></listitem>
+<listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
+<para>
+The comparison code was wrong in the case where the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
+it will need to be <command>REINDEX</>ed after installing this update, because
+the fix corrects the sort order of column values.
+</para></listitem>
+<listitem><para>Fix <function>EXTRACT(EPOCH)</> for
+<type>TIME WITH TIME ZONE</> values</para></listitem>
+<listitem><para>Fix mis-display of negative fractional seconds in
+<type>INTERVAL</> values</para>
+<para>
+This error only occurred when the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+</para></listitem>
+<listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
+correctly (Neil)</para></listitem>
+<listitem><para>Still more 64-bit fixes for
+<filename>contrib/intagg</></para></listitem>
+<listitem><para>Prevent incorrect optimization of functions returning
+<type>RECORD</></para></listitem>
+<listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
+<listitem><para>Fix Borland makefile for libpq</para></listitem>
+<listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
+(Teodor)</para></listitem>
+<listitem><para>Make <command>pg_ctl</> check the PID found in
+<filename>postmaster.pid</> to see if it is still a live
+process</para></listitem>
+<listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
+by addition of dump timestamps</para></listitem>
+<listitem><para>Fix interaction between materializing holdable cursors and
+firing deferred triggers during transaction commit</para></listitem>
+<listitem><para>Fix memory leak in SQL functions returning pass-by-reference
+data types</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-2">
+ <title>Release 8.0.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-04-07</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.1.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.2</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.*.
+ This release updates the major version number of the
+ <productname>PostgreSQL</productname> libraries, so it might be
+ necessary to re-link some user applications if they cannot
+ find the properly-numbered shared library.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Increment the major version number of all interface
+libraries (Bruce)</para>
+<para>
+This should have been done in 8.0.0. It is required so 7.4.X versions
+of PostgreSQL client applications, like <application>psql</>,
+can be used on the same machine as 8.0.X applications. This might require
+re-linking user applications that use these libraries.
+</para></listitem>
+<listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
+<option>fsync_writethrough</> (Magnus, Bruce)</para>
+<para>
+This setting causes <productname>PostgreSQL</productname> to write through
+any disk-drive write cache when writing to WAL.
+This behavior was formerly called <option>fsync</>, but was
+renamed because it acts quite differently from <option>fsync</> on other
+platforms.
+</para>
+</listitem>
+<listitem><para>Enable the <varname>wal_sync_method</> setting of
+<option>open_datasync</> on Windows, and make it the default for that
+ platform (Magnus, Bruce)</para>
+<para>
+Because the default is no longer <option>fsync_writethrough</>,
+data loss is possible during a power failure if the disk drive has
+write caching enabled. To turn off the write cache on Windows,
+from the <application>Device Manager</>, choose the drive properties,
+then <literal>Policies</>.
+</para>
+</listitem>
+<listitem><para>New cache management algorithm <acronym>2Q</> replaces
+<acronym>ARC</> (Tom)</para>
+<para>
+This was done to avoid a pending US patent on <acronym>ARC</>. The
+<acronym>2Q</> code might be a few percentage points slower than
+<acronym>ARC</> for some work loads. A better cache management algorithm
+will appear in 8.1.
+</para></listitem>
+<listitem><para>Planner adjustments to improve behavior on freshly-created
+tables (Tom)</para></listitem>
+<listitem><para>Allow plpgsql to assign to an element of an array that is
+initially <literal>NULL</> (Tom)</para>
+<para>
+Formerly the array would remain <literal>NULL</>, but now it becomes a
+single-element array. The main SQL engine was changed to handle
+<command>UPDATE</> of a null array value this way in 8.0, but the similar
+case in plpgsql was overlooked.
+</para>
+</listitem>
+<listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
+in plpython function bodies (Michael Fuhr)</para>
+<para>
+ This prevents syntax errors when plpython code is written on a Windows or
+ Mac client.
+</para>
+</listitem>
+<listitem><para>Allow SPI cursors to handle utility commands that return rows,
+such as <command>EXPLAIN</> (Tom)</para></listitem>
+<listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
+SET WITHOUT OIDS</> (Tom)</para></listitem>
+<listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
+(Neil)</para></listitem>
+<listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
+<listitem><para>Document the Windows-only <literal>register</> and
+<literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
+<listitem><para>Ensure operations done during backend shutdown are counted by
+statistics collector</para>
+<para>
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough — it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
+</para></listitem>
+<listitem><para>Change the Windows default for configuration parameter
+<varname>log_destination</> to <option>eventlog</> (Magnus)</para>
+<para>
+By default, a server running on Windows will now send log output to the
+Windows event logger rather than standard error.
+</para></listitem>
+<listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
+<listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
+who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
+<listitem><para>Modify WAL log entries for <command>CREATE</> and
+<command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
+<para>This allows point-in-time recovery on a different machine with possibly
+different database location. Note that <command>CREATE TABLESPACE</> still
+poses a hazard in such situations.
+</para></listitem>
+<listitem><para>Fix crash from a backend exiting with an open transaction
+that created a table and opened a cursor on it (Tom)</para></listitem>
+<listitem><para>Fix <function>array_map()</> so it can call PL functions
+(Tom)</para></listitem>
+<listitem><para>Several <filename>contrib/tsearch2</> and
+<filename>contrib/btree_gist</> fixes (Teodor)
+</para></listitem>
+<listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
+functions on some platforms (Marko Kreen)</para></listitem>
+<listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
+(Tom)</para></listitem>
+<listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
+(Michael)</para></listitem>
+<listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
+ecpg (Christof Petig)</para></listitem>
+<listitem><para>Do not use locale-aware versions of <function>upper()</>,
+<function>lower()</>, and <function>initcap()</> when the locale is
+<literal>C</> (Bruce)</para>
+<para>
+ This allows these functions to work on platforms that generate errors
+ for non-7-bit data when the locale is <literal>C</>.
+</para></listitem>
+<listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
+<listitem><para>Fix <function>to_date()</> to behave reasonably when
+<literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
+<listitem><para>Prevent <function>to_char(interval)</> from failing
+when given a zero-month interval (Tom)</para></listitem>
+<listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
+(Bruce)</para>
+<para>
+<function>date_trunc('week')</>
+returned the wrong year for the first few days of January in some years.
+</para></listitem>
+<listitem><para>Use the correct default mask length for class <literal>D</>
+addresses in <type>INET</> data types (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-1">
+ <title>Release 8.0.1</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-01-31</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.0.0, including several
+ security-related issues.
+ For information about new features in the 8.0 major release, see
+ <xref linkend="release-8-0">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.0.1</title>
+
+ <para>
+ A dump/restore is not required for those running 8.0.0.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Disallow <command>LOAD</> to non-superusers</para>
+<para>
+On platforms that will automatically execute initialization functions of a
+shared library (this includes at least Windows and ELF-based Unixen),
+<command>LOAD</> can be used to make the server execute arbitrary code.
+Thanks to NGS Software for reporting this.</para></listitem>
+<listitem><para>Check that creator of an aggregate function has the right to
+execute the specified transition functions</para>
+<para>
+This oversight made it possible to bypass denial of EXECUTE
+permission on a function.</para></listitem>
+<listitem><para>Fix security and 64-bit issues in
+contrib/intagg</para></listitem>
+<listitem><para>Add needed STRICT marking to some contrib functions (Kris
+Jurka)</para></listitem>
+<listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
+many parameters (Neil)</para></listitem>
+<listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
+constraints in all cases</para></listitem>
+<listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
+<para>
+The result of the join was mistakenly supposed to be sorted the same as the
+left input. This could not only deliver mis-sorted output to the user, but
+in case of nested merge joins could give outright wrong answers.
+</para></listitem>
+<listitem><para>Improve planning of grouped aggregate queries</para></listitem>
+<listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
+closes cursors created since the savepoint</para></listitem>
+<listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
+<listitem><para>Avoid SHGetSpecialFolderPath() on Windows
+(Magnus)</para></listitem>
+<listitem><para>Fix some problems in running pg_autovacuum as a Windows
+service (Dave Page)</para></listitem>
+<listitem><para>Multiple minor bug fixes in
+pg_dump/pg_restore</para></listitem>
+<listitem><para>Fix ecpg segfault with named structs used in
+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:
+ </para>
+
+ <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 SP4</>, <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 nonstandard quoting and separation characters too.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </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:
+ </para>
+
+ <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>
+ Nondeferred <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</>.
+ </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.
+ </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.
+ </para>
+ </listitem>
+
+ <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.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The <function>length()</> function no longer counts trailing spaces in
+ <type>CHAR(n)</> values.
+ </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 nonnull 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 nonmasked 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</> might 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>
+ </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>
+ 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 nonstandard 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 can 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 nonrectangular 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 nonmasked 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>
+ Nondeferred <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
+ nondeferred foreign key checks occur before proceeding with the
+ function.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow function parameters to be declared with names (Dennis Björklund)
+ </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 Björklund)
+ </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
+ Björklund)
+ </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 nonthreaded 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>
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.1.sgml,v 1.1 2009/05/02 20:17:19 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-8-1-17">
+ <title>Release 8.1.17</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-03-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.16.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.17</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.15,
+ see the release notes for 8.1.15.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent error recursion crashes when encoding conversion fails (Tom)
+ </para>
+
+ <para>
+ This change extends fixes made in the last two minor releases for
+ related failure scenarios. The previous fixes were narrowly tailored
+ for the original problem reports, but we have now recognized that
+ <emphasis>any</> error thrown by an encoding conversion function could
+ potentially lead to infinite recursion while trying to report the
+ error. The solution therefore is to disable translation and encoding
+ conversion and report the plain-ASCII form of any error message,
+ if we find we have gotten into a recursive error reporting situation.
+ (CVE-2009-0922)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>CREATE CONVERSION</> with the wrong encodings
+ for the specified conversion function (Heikki)
+ </para>
+
+ <para>
+ This prevents one possible scenario for encoding conversion failure.
+ The previous change is a backstop to guard against other kinds of
+ failures in the same area.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump when <function>to_char()</> is given format codes that
+ are inappropriate for the type of the data argument (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix decompilation of <literal>CASE WHEN</> with an implicit coercion
+ (Tom)
+ </para>
+
+ <para>
+ This mistake could lead to Assert failures in an Assert-enabled build,
+ or an <quote>unexpected CASE WHEN clause</> error message in other
+ cases, when trying to examine or dump a view.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
+ </para>
+
+ <para>
+ If <command>CLUSTER</> or a rewriting variant of <command>ALTER TABLE</>
+ were executed by someone other than the table owner, the
+ <structname>pg_type</> entry for the table's TOAST table would end up
+ marked as owned by that someone. This caused no immediate problems,
+ since the permissions on the TOAST rowtype aren't examined by any
+ ordinary database operation. However, it could lead to unexpected
+ failures if one later tried to drop the role that issued the command
+ (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</>
+ warnings from <application>pg_dump</> after having done so (in 8.3).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean up PL/pgSQL error status variables fully at block exit
+ (Ashesh Vashi and Dave Page)
+ </para>
+
+ <para>
+ This is not a problem for PL/pgSQL itself, but the omission could cause
+ the PL/pgSQL Debugger to crash while examining the state of a function.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+ of known timezone abbreviations (Xavier Bugaud)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-16">
+ <title>Release 8.1.16</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-02-02</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.15.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.16</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.15,
+ see the release notes for 8.1.15.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix crash in autovacuum (Alvaro)
+ </para>
+
+ <para>
+ The crash occurs only after vacuuming a whole database for
+ anti-transaction-wraparound purposes, which means that it occurs
+ infrequently and is hard to track down.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of URLs in <function>headline()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of overlength headlines in <function>headline()</>
+ function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible Assert failure or misconversion if an encoding
+ conversion is created with the wrong conversion function for the
+ specified pair of encodings (Tom, Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnecessary locking of small tables in <command>VACUUM</>
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure that the contents of a holdable cursor don't depend on the
+ contents of TOAST tables (Tom)
+ </para>
+
+ <para>
+ Previously, large field values in a cursor result might be represented
+ as TOAST pointers, which would fail if the referenced table got dropped
+ before the cursor is read, or if the large value is deleted and then
+ vacuumed away. This cannot happen with an ordinary cursor,
+ but it could with a cursor that is held past its creating transaction.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix uninitialized variables in <filename>contrib/tsearch2</>'s
+ <function>get_covers()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>configure</> script to properly report failure when
+ unable to obtain linkage information for PL/Perl (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make all documentation reference <literal>pgsql-bugs</> and/or
+ <literal>pgsql-hackers</> as appropriate, instead of the
+ now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+ mailing lists (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2009a (for
+ Kathmandu and historical DST corrections in Switzerland, Cuba)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-15">
+ <title>Release 8.1.15</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-11-03</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.14.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.15</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2. Also, if you were running a previous
+ 8.1.X release, it is recommended to <command>REINDEX</> all GiST
+ indexes after the upgrade.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix GiST index corruption due to marking the wrong index entry
+ <quote>dead</> after a deletion (Teodor)
+ </para>
+
+ <para>
+ This would result in index searches failing to find rows they
+ should have found. Corrupted indexes can be fixed with
+ <command>REINDEX</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix backend crash when the client encoding cannot represent a localized
+ error message (Tom)
+ </para>
+
+ <para>
+ We have addressed similar issues before, but it would still fail if
+ the <quote>character has no equivalent</> message itself couldn't
+ be converted. The fix is to disable localization and send the plain
+ ASCII error message when we detect such a situation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash when deeply nested functions are invoked from
+ a trigger (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix mis-expansion of rule queries when a sub-<literal>SELECT</> appears
+ in a function call in <literal>FROM</>, a multi-row <literal>VALUES</>
+ list, or a <literal>RETURNING</> list (Tom)
+ </para>
+
+ <para>
+ The usual symptom of this problem is an <quote>unrecognized node type</>
+ error.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure an error is reported when a newly-defined PL/pgSQL trigger
+ function is invoked as a normal function (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible collision of <structfield>relfilenode</> numbers
+ when moving a table to another tablespace with <command>ALTER SET
+ TABLESPACE</> (Heikki)
+ </para>
+
+ <para>
+ The command tried to re-use the existing filename, instead of
+ picking one that is known unused in the destination directory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect tsearch2 headline generation when single query
+ item matches first word of text (Sushant Sinha)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix improper display of fractional seconds in interval values when
+ using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+ build (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+ behave correctly when the passed tuple and tuple descriptor have
+ different numbers of columns (Tom)
+ </para>
+
+ <para>
+ This situation is normal when a table has had columns added or removed,
+ but these two functions didn't handle it properly.
+ The only likely consequence is an incorrect error indication.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s parsing of <command>CREATE ROLE</> (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix recent breakage of <literal>pg_ctl restart</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008i (for
+ DST law changes in Argentina, Brazil, Mauritius, Syria)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-14">
+ <title>Release 8.1.14</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-09-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.13.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.14</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Widen local lock counters from 32 to 64 bits (Tom)
+ </para>
+
+ <para>
+ This responds to reports that the counters could overflow in
+ sufficiently long transactions, leading to unexpected <quote>lock is
+ already held</> errors.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible duplicate output of tuples during a GiST index scan (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add checks in executor startup to ensure that the tuples produced by an
+ <command>INSERT</> or <command>UPDATE</> will match the target table's
+ current rowtype (Tom)
+ </para>
+
+ <para>
+ <command>ALTER COLUMN TYPE</>, followed by re-use of a previously
+ cached plan, could produce this type of situation. The check protects
+ against data corruption and/or crashes that could ensue.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>AT TIME ZONE</> to first try to interpret its timezone
+ argument as a timezone abbreviation, and only try it as a full timezone
+ name if that fails, rather than the other way around as formerly (Tom)
+ </para>
+
+ <para>
+ The timestamp input functions have always resolved ambiguous zone names
+ in this order. Making <literal>AT TIME ZONE</> do so as well improves
+ consistency, and fixes a compatibility bug introduced in 8.1:
+ in ambiguous cases we now behave the same as 8.0 and before did,
+ since in the older versions <literal>AT TIME ZONE</> accepted
+ <emphasis>only</> abbreviations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix datetime input functions to correctly detect integer overflow when
+ running on a 64-bit platform (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of writing very long log messages to syslog (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+ ON</> query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner bug with nested sub-select expressions (Tom)
+ </para>
+
+ <para>
+ If the outer sub-select has no direct dependency on the parent query,
+ but the inner one does, the outer value might not get recalculated
+ for new parent query rows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+ boolean results always result in two groups, regardless of the
+ expressions' contents (Tom)
+ </para>
+
+ <para>
+ This is very substantially more accurate than the regular <literal>GROUP
+ BY</> estimate for certain boolean tests like <replaceable>col</>
+ <literal>IS NULL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/PgSQL to not fail when a <literal>FOR</> loop's target variable
+ is a record containing composite-type fields (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
+ about the encoding of data sent to or from Tcl (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to work with Python 2.5
+ </para>
+
+ <para>
+ This is a back-port of fixes made during the 8.2 development cycle.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <application>pg_dump</> and <application>pg_restore</>'s
+ error reporting after failure to send a SQL command (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to properly preserve postmaster
+ command-line arguments across a <literal>restart</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008f (for
+ DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
+ Pakistan, Palestine, and Paraguay)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-13">
+ <title>Release 8.1.13</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-06-12</simpara>
+ </note>
+
+ <para>
+ This release contains one serious and one minor bug fix over 8.1.12.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.13</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+ </para>
+
+ <para>
+ Before this fix, a negative constant in a view or rule might be dumped
+ as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+ be <literal>(-42)::integer</> due to operator precedence rules.
+ Usually this would make little difference, but it could interact with
+ another recent patch to cause
+ <productname>PostgreSQL</> to reject what had been a valid
+ <command>SELECT DISTINCT</> view query. Since this could result in
+ <application>pg_dump</> output failing to reload, it is being treated
+ as a high-priority fix. The only released versions in which dump
+ output is actually incorrect are 8.3.1 and 8.2.7.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>ALTER AGGREGATE ... OWNER TO</> update
+ <structname>pg_shdepend</> (Tom)
+ </para>
+
+ <para>
+ This oversight could lead to problems if the aggregate was later
+ involved in a <command>DROP OWNED</> or <command>REASSIGN OWNED</>
+ operation.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-12">
+ <title>Release 8.1.12</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>never released</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.11.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.12</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
+ column is correctly checked to see if it's been initialized to all
+ non-nulls (Brendan Jurd)
+ </para>
+
+ <para>
+ Previous versions neglected to check this requirement at all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible <command>CREATE TABLE</> failure when inheriting the
+ <quote>same</> constraint from multiple parent relations that
+ inherited that constraint from a common ancestor (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix conversions between ISO-8859-5 and other encodings to handle
+ Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+ two dots) (Sergey Burladyan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a few datatype input functions
+ that were allowing unused bytes in their results to contain
+ uninitialized, unpredictable values (Tom)
+ </para>
+
+ <para>
+ This could lead to failures in which two apparently identical literal
+ values were not seen as equal, resulting in the parser complaining
+ about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+ expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a corner case in regular-expression substring matching
+ (<literal>substring(<replaceable>string</> from
+ <replaceable>pattern</>)</literal>) (Tom)
+ </para>
+
+ <para>
+ The problem occurs when there is a match to the pattern overall but
+ the user has specified a parenthesized subexpression and that
+ subexpression hasn't got a match. An example is
+ <literal>substring('foo' from 'foo(bar)?')</>.
+ This should return NULL, since <literal>(bar)</> isn't matched, but
+ it was mistakenly returning the whole-pattern match instead (ie,
+ <literal>foo</>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008c (for
+ DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba,
+ Argentina/San_Luis, and Chile)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect result from <application>ecpg</>'s
+ <function>PGTYPEStimestamp_sub()</> function (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump in <filename>contrib/xml2</>'s
+ <function>xpath_table()</> function when the input query returns a
+ NULL value (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <filename>contrib/xml2</>'s makefile to not override
+ <literal>CFLAGS</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+ 4.3 (Tom)
+ </para>
+
+ <para>
+ This problem affects <quote>old style</> (V0) C functions that
+ return boolean. The fix is already in 8.3, but the need to
+ back-patch it was not realized at the time.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+ race condition (Tom)
+ </para>
+
+ <para>
+ In rare cases a session that had just executed a
+ <command>LISTEN</> might not get a notification, even though
+ one would be expected because the concurrent transaction executing
+ <command>NOTIFY</> was observed to commit later.
+ </para>
+
+ <para>
+ A side effect of the fix is that a transaction that has executed
+ a not-yet-committed <command>LISTEN</> command will not see any
+ row in <structname>pg_listener</> for the <command>LISTEN</>,
+ should it choose to look; formerly it would have. This behavior
+ was never documented one way or the other, but it is possible that
+ some applications depend on the old behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
+ prepared transaction (Tom)
+ </para>
+
+ <para>
+ This was formerly allowed but trying to do it had various unpleasant
+ consequences, notably that the originating backend could not exit
+ as long as an <command>UNLISTEN</> remained uncommitted.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare crash when an error occurs during a query using a hash index
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix input of datetime values for February 29 in years BC (Tom)
+ </para>
+
+ <para>
+ The former coding was mistaken about which years were leap years.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>unrecognized node type</> error in some variants of
+ <command>ALTER OWNER</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to correctly extract the postmaster's port
+ number from command-line options (Itagaki Takahiro, Tom)
+ </para>
+
+ <para>
+ Previously, <literal>pg_ctl start -w</> could try to contact the
+ postmaster on the wrong port, leading to bogus reports of startup
+ failure.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use <option>-fwrapv</> to defend against possible misoptimization
+ in recent <application>gcc</> versions (Tom)
+ </para>
+
+ <para>
+ This is known to be necessary when building <productname>PostgreSQL</>
+ with <application>gcc</> 4.3 or later.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix display of constant expressions in <literal>ORDER BY</>
+ and <literal>GROUP BY</> (Tom)
+ </para>
+
+ <para>
+ An explictly casted constant would be shown incorrectly. This could
+ for example lead to corruption of a view definition during
+ dump and reload.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> to handle NOTICE messages correctly
+ during COPY OUT (Tom)
+ </para>
+
+ <para>
+ This failure has only been observed to occur when a user-defined
+ datatype's output routine issues a NOTICE, but there is no
+ guarantee it couldn't happen due to other causes.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-11">
+ <title>Release 8.1.11</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-01-07</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.10,
+ including fixes for significant security issues.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <para>
+ This is the last 8.1.X release for which the <productname>PostgreSQL</>
+ community will produce binary packages for <productname>Windows</>.
+ Windows users are encouraged to move to 8.2.X or later,
+ since there are Windows-specific fixes in 8.2.X that
+ are impractical to back-port. 8.1.X will continue to
+ be supported on other platforms.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.11</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent functions in indexes from executing with the privileges of
+ the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+ </para>
+
+ <para>
+ Functions used in index expressions and partial-index
+ predicates are evaluated whenever a new table entry is made. It has
+ long been understood that this poses a risk of trojan-horse code
+ execution if one modifies a table owned by an untrustworthy user.
+ (Note that triggers, defaults, check constraints, etc. pose the
+ same type of risk.) But functions in indexes pose extra danger
+ because they will be executed by routine maintenance operations
+ such as <command>VACUUM FULL</>, which are commonly performed
+ automatically under a superuser account. For example, a nefarious user
+ can execute code with superuser privileges by setting up a
+ trojan-horse index definition and waiting for the next routine vacuum.
+ The fix arranges for standard maintenance operations
+ (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+ and <command>CLUSTER</>) to execute as the table owner rather than
+ the calling user, using the same privilege-switching mechanism already
+ used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
+ this security measure, execution of <command>SET SESSION
+ AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+ <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+ </para>
+
+ <para>
+ Suitably crafted regular-expression patterns could cause crashes,
+ infinite or near-infinite looping, and/or massive memory consumption,
+ all of which pose denial-of-service hazards for applications that
+ accept regex search patterns from untrustworthy sources.
+ (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+
+ <para>
+ The fix that appeared for this in 8.1.10 was incomplete, as it plugged
+ the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
+ CVE-2007-3278)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2007k
+ (in particular, recent Argentina changes) (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve planner's handling of LIKE/regex estimation in non-C locales
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner failure in some cases of <literal>WHERE false AND var IN
+ (SELECT ...)</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Preserve the tablespace of indexes that are
+ rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make archive recovery always start a new WAL timeline, rather than only
+ when a recovery stop time was used (Simon)
+ </para>
+
+ <para>
+ This avoids a corner-case risk of trying to overwrite an existing
+ archived copy of the last WAL segment, and seems simpler and cleaner
+ than the original definition.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
+ when the table is too small for it to be useful (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential crash in <function>translate()</> when using a multibyte
+ database encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix overflow in <literal>extract(epoch from interval)</> for intervals
+ exceeding 68 years (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Perl to not fail when a UTF-8 regular expression is used
+ in a trusted function (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
+ as <literal>int</> rather than <literal>char</> (Tom)
+ </para>
+
+ <para>
+ While this could theoretically happen anywhere, no standard build of
+ Perl did things this way ... until <productname>Mac OS X</> 10.5.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to not crash on long exception messages (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_dump</> to correctly handle inheritance child tables
+ that have default expressions different from their parent's (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
+ to a file that is not a plain file (Martin Pitt)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <application>ecpg</> parser fixes (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/pgcrypto</> defend against
+ <application>OpenSSL</> libraries that fail on keys longer than 128
+ bits; which is the case at least on some Solaris versions (Marko Kreen)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+ NULL rowid as a category in its own right, rather than crashing (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <type>tsvector</> and <type>tsquery</> output routines to
+ escape backslashes correctly (Teodor, Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require a specific version of <productname>Autoconf</> to be used
+ when re-generating the <command>configure</> script (Peter)
+ </para>
+
+ <para>
+ This affects developers and packagers only. The change was made
+ to prevent accidental use of untested combinations of
+ <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+ You can remove the version check if you really want to use a
+ different <productname>Autoconf</> version, but it's
+ your responsibility whether the result works or not.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-10">
+ <title>Release 8.1.10</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-09-17</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.9.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.10</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent index corruption when a transaction inserts rows and
+ then aborts close to the end of a concurrent <command>VACUUM</>
+ on the same table (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the <type>interval</> data type to accept input consisting only of
+ milliseconds or microseconds (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Speed up rtree index insertion (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix excessive logging of <acronym>SSL</> error messages (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix logging so that log messages are never interleaved when using
+ the syslogger process (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash when <varname>log_min_error_statement</> logging runs out
+ of memory (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect handling of some foreign-key corner cases (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
+ due to attempting to process temporary tables of other sessions (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Windows socket improvements (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+ because of possible encoding mismatches (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-9">
+ <title>Release 8.1.9</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-04-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.8,
+ including a security fix.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.9</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Support explicit placement of the temporary-table schema within
+ <varname>search_path</>, and disable searching it for functions
+ and operators (Tom)
+ </para>
+ <para>
+ This is needed to allow a security-definer function to set a
+ truly secure value of <varname>search_path</>. Without it,
+ an unprivileged SQL user can use temporary objects to execute code
+ with the privileges of the security-definer function (CVE-2007-2138).
+ See <command>CREATE FUNCTION</> for more information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>/contrib/tsearch2</> crash fixes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require <command>COMMIT PREPARED</> to be executed in the same
+ database as the transaction was prepared in (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+ <command>UPDATE</> chains (Tom, Pavan Deolasee)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Planner fixes, including improving outer join and bitmap scan
+ selection logic (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-8">
+ <title>Release 8.1.8</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-07</simpara>
+ </note>
+
+ <para>
+ This release contains one fix from 8.1.7.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.8</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove overly-restrictive check for type length in constraints and
+ functional indexes(Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-7">
+ <title>Release 8.1.7</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-05</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.6, including
+ a security fix.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.7</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove security vulnerabilities that allowed connected users
+ to read backend memory (Tom)
+ </para>
+ <para>
+ The vulnerabilities involve suppressing the normal check that a SQL
+ function returns the data type it's declared to, and changing the
+ data type of a table column (CVE-2007-0555, CVE-2007-0556). These
+ errors can easily be exploited to cause a backend crash, and in
+ principle might be used to read database content that the user
+ should not be able to access.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare bug wherein btree index page splits could fail
+ due to choosing an infeasible split point (Heikki Linnakangas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <command>VACUUM</> performance for databases with many tables (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix autovacuum to avoid leaving non-permanent transaction IDs in
+ non-connectable databases (Alvaro)
+ </para>
+
+ <para>
+ This bug affects the 8.1 branch only.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tighten security of multi-byte character processing for UTF8 sequences
+ over three bytes long (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bogus <quote>permission denied</> failures occurring on Windows
+ due to attempts to fsync already-deleted files (Magnus, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crashes when an already-in-use PL/pgSQL function is
+ updated (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-6">
+ <title>Release 8.1.6</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-01-08</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.5.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.6</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+ </para>
+
+ <para>
+ This fixes a problem with starting the statistics collector,
+ among other things.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_restore</> to handle a tar-format backup
+ that contains large objects (blobs) with comments (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>failed to re-find parent key</> errors in
+ <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean out <filename>pg_internal.init</> cache files during server
+ restart (Simon)
+ </para>
+
+ <para>
+ This avoids a hazard that the cache files might contain stale
+ data after PITR recovery.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix race condition for truncation of a large relation across a
+ gigabyte boundary by <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug causing needless deadlock errors on row-level locks (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bugs affecting multi-gigabyte hash indexes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible deadlock in Windows signal handling (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+ empty elements (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix ecpg memory leak during connection (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix for Darwin (OS X) compilation (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>to_number()</> and <function>to_char(numeric)</>
+ are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+ new <application>initdb</> installs (Tom)
+ </para>
+
+ <para>
+ This is because <varname>lc_numeric</> can potentially
+ change the output of these functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve index usage of regular expressions that use parentheses (Tom)
+ </para>
+
+ <para>
+ This improves <application>psql</> <literal>\d</> performance also.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update timezone database
+ </para>
+
+ <para>
+ This affects Australian and Canadian daylight-savings rules in
+ particular.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-5">
+ <title>Release 8.1.5</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-10-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.4.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.5</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Disallow aggregate functions in <command>UPDATE</>
+commands, except within sub-SELECTs (Tom)</para>
+<para>The behavior of such an aggregate was unpredictable, and in 8.1.X
+could cause a crash, so it has been disabled. The SQL standard does not allow
+this either.</para></listitem>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</para></listitem>
+<listitem><para>Fix core dump in duration logging for extended query protocol
+when a <command>COMMIT</> or <command>ROLLBACK</> is
+executed</para></listitem>
+<listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
+function returning multiple rows (Tom)</para></listitem>
+<listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
+<literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
+<listitem><para>Fix <function>string_to_array()</> to handle overlapping
+ matches for the separator string</para>
+<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
+</para></listitem>
+<listitem><para>Fix <function>to_timestamp()</> for
+<literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
+<listitem><para>Fix autovacuum's calculation that decides whether
+ <command>ANALYZE</> is needed (Alvaro)</para></listitem>
+<listitem><para>Fix corner cases in pattern matching for
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
+<listitem><para>Fix index-corrupting bugs in /contrib/ltree
+ (Teodor)</para></listitem>
+<listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
+Wieland)</para></listitem>
+<listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
+<listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
+</listitem>
+<listitem><para>Efficiency improvements in hash tables and bitmap index scans
+(Tom)</para></listitem>
+<listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
+<listitem><para>Fix <varname>statement_timeout</> to use the proper
+units on Win32 (Bruce)</para>
+<para>In previous Win32 8.1.X versions, the delay was off by a factor of
+100.</para></listitem>
+<listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
+compilers (Hiroshi Saito)</para></listitem>
+<listitem><para>Fixes for <systemitem class="osname">AIX</> and
+<productname>Intel</> compilers (Tom)</para></listitem>
+<listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-4">
+ <title>Release 8.1.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-05-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.3,
+ including patches for extremely serious security issues.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.4</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+
+ <para>
+ Full security against the SQL-injection attacks described in
+ CVE-2006-2313 and CVE-2006-2314 might require changes in application
+ code. If you have applications that embed untrustworthy strings
+ into SQL commands, you should examine them as soon as possible to
+ ensure that they are using recommended escaping techniques. In
+ most cases, applications should be using subroutines provided by
+ libraries or drivers (such as <application>libpq</>'s
+ <function>PQescapeStringConn()</>) to perform string escaping,
+ rather than relying on <foreignphrase>ad hoc</> code to do it.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change the server to reject invalidly-encoded multibyte
+characters in all cases (Tatsuo, Tom)</para>
+<para>While <productname>PostgreSQL</> has been moving in this direction for
+some time, the checks are now applied uniformly to all encodings and all
+textual input, and are now always errors not merely warnings. This change
+defends against SQL-injection attacks of the type described in CVE-2006-2313.
+</para></listitem>
+
+<listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
+<para>As a server-side defense against SQL-injection attacks of the type
+described in CVE-2006-2314, the server now only accepts <literal>''</> and not
+<literal>\'</> as a representation of ASCII single quote in SQL string
+literals. By default, <literal>\'</> is rejected only when
+<varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
+GB18030, or UHC), which is the scenario in which SQL injection is possible.
+A new configuration parameter <varname>backslash_quote</> is available to
+adjust this behavior when needed. Note that full security against
+CVE-2006-2314 might require client-side changes; the purpose of
+<varname>backslash_quote</> is in part to make it obvious that insecure
+clients are insecure.
+</para></listitem>
+
+<listitem><para>Modify <application>libpq</>'s string-escaping routines to be
+aware of encoding considerations and
+<varname>standard_conforming_strings</></para>
+<para>This fixes <application>libpq</>-using applications for the security
+issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
+them against the planned changeover to SQL-standard string literal syntax.
+Applications that use multiple <productname>PostgreSQL</> connections
+concurrently should migrate to <function>PQescapeStringConn()</> and
+<function>PQescapeByteaConn()</> to ensure that escaping is done correctly
+for the settings in use in each database connection. Applications that
+do string escaping <quote>by hand</> should be modified to rely on library
+routines instead.
+</para></listitem>
+
+<listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
+<para>Errors in fortuna PRNG reseeding logic could cause a predictable
+session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
+This only affects non-OpenSSL-using builds.
+</para></listitem>
+
+<listitem><para>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>win866_to_iso</>,
+<function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
+<function>mic_to_euc_tw</> were all broken to varying
+extents.
+</para></listitem>
+
+<listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
+
+<listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
+(Alvaro)</para></listitem>
+
+<listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
+<para>In certain cases, having <literal>full_page_writes</> off would cause
+crash recovery to fail. A proper fix will appear in 8.2; for now it's just
+disabled.
+</para></listitem>
+
+<listitem><para>Various planner fixes, particularly for bitmap index scans and
+MIN/MAX optimization (Tom)</para></listitem>
+
+<listitem><para>Fix incorrect optimization in merge join (Tom)</para>
+<para>Outer joins could sometimes emit multiple copies of unmatched rows.
+</para></listitem>
+
+<listitem><para>Fix crash from using and modifying a plpgsql function in the
+same transaction</para></listitem>
+
+<listitem><para>Fix WAL replay for case where a B-Tree index has been
+truncated</para></listitem>
+
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</para></listitem>
+
+<listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
+create tables in the default tablespace, not the base directory (Kris
+Jurka)</para></listitem>
+
+<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
+
+<listitem><para>Improve qsort performance (Dann Corbit)</para>
+<para>Currently this code is only used on Solaris.
+</para></listitem>
+
+<listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
+
+<listitem><para>Fix various minor memory leaks</para></listitem>
+
+<listitem><para>Fix problem with password prompting on some Win32 systems
+(Robert Kinberg)</para></listitem>
+
+<listitem><para>Improve <application>pg_dump</>'s handling of default values
+for domains</para></listitem>
+
+<listitem><para>Fix <application>pg_dumpall</> to handle identically-named
+users and groups reasonably (only possible when dumping from a pre-8.1 server)
+(Tom)</para>
+<para>The user and group will be merged into a single role with
+<literal>LOGIN</> permission. Formerly the merged role wouldn't have
+<literal>LOGIN</> permission, making it unusable as a user.
+</para></listitem>
+
+<listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
+documented (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-3">
+ <title>Release 8.1.3</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-02-14</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.2,
+ including one very serious security issue.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.3</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, if you are upgrading from a version earlier than 8.1.2,
+ see the release notes for 8.1.2.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix bug that allowed any logged-in user to <command>SET
+ROLE</> to any other database user id (CVE-2006-0553)</para>
+<para>Due to inadequate validity checking, a user could exploit the special
+case that <command>SET ROLE</> normally uses to restore the previous role
+setting after an error. This allowed ordinary users to acquire superuser
+status, for example.
+The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
+However, in all releases back to 7.3 there is a related bug in <command>SET
+SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
+if it has been compiled with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</para></listitem>
+
+<listitem><para>Fix bug with row visibility logic in self-inserted
+rows (Tom)</para>
+<para>Under rare circumstances a row inserted by the current command
+could be seen as already valid, when it should not be. Repairs bug
+created in 8.0.4, 7.4.9, and 7.3.11 releases.
+</para></listitem>
+
+<listitem><para>Fix race condition that could lead to <quote>file already
+exists</> errors during pg_clog and pg_subtrans file creation
+(Tom)</para></listitem>
+
+<listitem><para>Fix cases that could lead to crashes if a cache-invalidation
+message arrives at just the wrong time (Tom)</para></listitem>
+
+<listitem><para>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</para></listitem>
+
+<listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
+<literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
+constraints in the proper order (Nakano Yoshihisa)</para></listitem>
+
+<listitem><para>Fixes to allow restoring dumps that have cross-schema
+references to custom operators or operator classes (Tom)</para></listitem>
+
+<listitem><para>Allow <application>pg_restore</> to continue properly after a
+<command>COPY</> failure; formerly it tried to treat the remaining
+<command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
+
+<listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
+when the data directory is not specified (Magnus)</para></listitem>
+
+<listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
+(Christoph Zwerschke)</para></listitem>
+
+<listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
+(Neil)</para></listitem>
+
+<listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
+together in function result type declarations</para></listitem>
+
+<listitem><para>Recover properly if error occurs during argument passing
+in <application>PL/python</> (Neil)</para></listitem>
+
+<listitem><para>Fix memory leak in <function>plperl_return_next</>
+(Neil)</para></listitem>
+
+<listitem><para>Fix <application>PL/perl</>'s handling of locales on
+Win32 to match the backend (Andrew)</para></listitem>
+
+<listitem><para>Various optimizer fixes (Tom)</para></listitem>
+
+<listitem><para>Fix crash when <literal>log_min_messages</> is set to
+<literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
+(Bruce)</para></listitem>
+
+<listitem><para>Fix <application>pgxs</> <literal>-L</> library path
+specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
+
+<listitem><para>Check that SID is enabled while checking for Win32 admin
+privileges (Magnus)</para></listitem>
+
+<listitem><para>Properly reject out-of-range date inputs (Kris
+Jurka)</para></listitem>
+
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
+
+<listitem><para>Improve speed of <command>COPY IN</> via libpq, by
+avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
+
+<listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
+creation (Tom)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-2">
+ <title>Release 8.1.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-01-09</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.1.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.2</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ However, you might need to <command>REINDEX</> indexes on textual
+ columns after updating, if you are affected by the locale or
+ <application>plperl</> issues described below.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix Windows code so that postmaster will continue rather
+than exit if there is no more room in ShmemBackendArray (Magnus)</para>
+<para>The previous behavior could lead to a denial-of-service situation if too
+many connection requests arrive close together. This applies
+<emphasis>only</> to the Windows port.</para></listitem>
+
+<listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
+to return an already-used page as new, potentially causing loss of
+recently-committed data (Tom)</para></listitem>
+
+<listitem><para>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</para></listitem>
+
+<listitem><para>Fix character string comparison for locales that consider
+different character combinations as equal, such as Hungarian (Tom)</para>
+<para>This might require <command>REINDEX</> to fix existing indexes on
+textual columns.</para></listitem>
+
+<listitem><para>Set locale environment variables during postmaster startup
+to ensure that <application>plperl</> won't change the locale later</para>
+<para>This fixes a problem that occurred if the <application>postmaster</> was
+started with environment variables specifying a different locale than what
+<application>initdb</> had been told. Under these conditions, any use of
+<application>plperl</> was likely to lead to corrupt indexes. You might need
+<command>REINDEX</> to fix existing indexes on
+textual columns if this has happened to you.</para></listitem>
+
+<listitem><para>Allow more flexible relocation of installation
+directories (Tom)</para>
+<para>Previous releases supported relocation only if all installation
+directory paths were the same except for the last component.</para></listitem>
+
+<listitem><para>Prevent crashes caused by the use of
+<literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
+(Tatsuo)</para></listitem>
+
+<listitem><para>Fix longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</para></listitem>
+
+<listitem><para>Fix bug where COPY CSV mode considered any
+<literal>\.</> to terminate the copy data</para> <para>The new code
+requires <literal>\.</> to appear alone on a line, as per
+documentation.</para></listitem>
+
+<listitem><para>Make COPY CSV mode quote a literal data value of
+<literal>\.</> to ensure it cannot be interpreted as the
+end-of-data marker (Bruce)</para></listitem>
+
+<listitem><para>Various fixes for functions returning <literal>RECORD</>s
+(Tom) </para></listitem>
+
+<listitem><para>Fix processing of <filename>postgresql.conf</> so a
+final line with no newline is processed properly (Tom)
+</para></listitem>
+
+<listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
+which caused it not to use all available salt space for MD5 and
+XDES algorithms (Marko Kreen, Solar Designer)</para>
+<para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
+
+<listitem><para>Fix autovacuum crash when processing expression indexes
+</para></listitem>
+
+<listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
+rather than crashing, when the number of columns specified is different from
+what's actually returned by the query (Joe)</para></listitem>
+
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1-1">
+ <title>Release 8.1.1</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-12-12</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.1.0.
+ For information about new features in the 8.1 major release, see
+ <xref linkend="release-8-1">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.1.1</title>
+
+ <para>
+ A dump/restore is not required for those running 8.1.X.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix incorrect optimizations of outer-join conditions
+(Tom)</para></listitem>
+
+<listitem><para>Fix problems with wrong reported column names in cases
+involving sub-selects flattened by the optimizer (Tom)</para></listitem>
+
+<listitem><para>Fix update failures in scenarios involving CHECK constraints,
+toasted columns, <emphasis>and</> indexes (Tom)</para></listitem>
+
+<listitem><para>Fix bgwriter problems after recovering from errors
+(Tom)</para>
+<para>
+The background writer was found to leak buffer pins after write errors.
+While not fatal in itself, this might lead to mysterious blockages of
+later VACUUM commands.
+</para>
+</listitem>
+
+<listitem><para>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
+
+<listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
+fixes (Teodor)</para></listitem>
+
+<listitem><para>Fix problems with translated error messages in
+languages that require word reordering, such as Turkish; also problems with
+unexpected truncation of output strings and wrong display of the smallest
+possible bigint value (Andrew, Tom)</para>
+<para>
+These problems only appeared on platforms that were using our
+<filename>port/snprintf.c</> code, which includes BSD variants if
+<literal>--enable-nls</> was given, and perhaps others. In addition,
+a different form of the translated-error-message problem could appear
+on Windows depending on which version of <filename>libintl</> was used.
+</para></listitem>
+
+<listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
+<literal>HH12</>, and <literal>D</> format specifiers for
+<function>to_char(time)</> and <function>to_char(interval)</>.
+(<function>to_char(interval)</> should probably use
+<literal>HH24</>.) (Bruce)</para></listitem>
+
+<listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
+Saito)</para></listitem>
+
+<listitem><para>Optimizer improvements (Tom)</para></listitem>
+
+<listitem><para>Retry file reads and writes after Windows
+NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
+
+<listitem><para>Prevent <application>autovacuum</> from crashing during
+ANALYZE of expression index (Alvaro)</para></listitem>
+
+<listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
+tables</para></listitem>
+
+<listitem><para>Fix problems when a trigger alters the output of a SELECT
+DISTINCT query</para></listitem>
+
+<listitem><para>Add 8.1.0 release note item on how to migrate invalid
+<literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-1">
+ <title>Release 8.1</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2005-11-08</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ Major changes in this release:
+ </para>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>
+ Improve concurrent access to the shared buffer cache (Tom)
+ </term>
+
+ <listitem>
+ <para>
+ Access to the shared buffer cache was identified as a
+ significant scalability problem, particularly on multi-CPU
+ systems. In this release, the way that locking is done in the
+ buffer manager has been overhauled to reduce lock contention
+ and improve scalability. The buffer manager has also been
+ changed to use a <quote>clock sweep</quote> replacement
+ policy.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Allow index scans to use an intermediate in-memory bitmap (Tom)
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, only a single index could be used to do
+ lookups on a table. With this feature, if a query has
+ <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
+ no multicolumn index on <literal>col1</> and <literal>col2</>,
+ but there is an index on <literal>col1</> and another on
+ <literal>col2</>, it is possible to search both indexes and
+ combine the results in memory, then do heap fetches for only
+ the rows matching both the <literal>col1</> and
+ <literal>col2</> restrictions. This is very useful in
+ environments that have a lot of unstructured queries where it
+ is impossible to create indexes that match all possible access
+ conditions. Bitmap scans are useful even with a single index,
+ as they reduce the amount of random access needed; a bitmap
+ index scan is efficient for retrieving fairly large fractions
+ of the complete table, whereas plain index scans are not.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
+ </term>
+
+ <listitem>
+ <para>
+ Two-phase commit allows transactions to be "prepared" on several
+ computers, and once all computers have successfully prepared
+ their transactions (none failed), all transactions can be
+ committed. Even if a machine crashes after a prepare, the
+ prepared transaction can be committed after the machine is
+ restarted. New syntax includes <command>PREPARE TRANSACTION</> and
+ <command>COMMIT/ROLLBACK PREPARED</>. A new system view
+ <literal>pg_prepared_xacts</> has also been added.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Create a new role system that replaces users and groups
+ (Stephen Frost)
+ </term>
+
+ <listitem>
+ <para>
+ Roles are a combination of users and groups. Like users, they
+ can have login capability, and like groups, a role can have
+ other roles as members. Roles basically remove the distinction
+ between users and groups. For example, a role can:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Have login capability (optionally)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Own objects
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Hold access permissions for database objects
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Inherit permissions from other roles it is a member of
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ <para>
+ Once a user logs into a role, she obtains capabilities of
+ the login role plus any inherited roles, and can use
+ <command>SET ROLE</> to switch to other roles she is a member of.
+ This feature is a generalization of the SQL standard's concept of
+ roles.
+ This change also replaces <structname>pg_shadow</> and
+ <structname>pg_group</> by new role-capable catalogs
+ <structname>pg_authid</> and <structname>pg_auth_members</>. The old
+ tables are redefined as read-only views on the new role tables.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Automatically use indexes for <function>MIN()</> and
+ <function>MAX()</> (Tom)
+ </term>
+
+ <listitem>
+ <para>
+ In previous releases, the only way to use an index for
+ <function>MIN()</> or <function>MAX()</> was to rewrite the
+ query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
+ Index usage now happens automatically.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Move <filename>/contrib/pg_autovacuum</> into the main server
+ (Alvaro)
+ </term>
+
+ <listitem>
+ <para>
+ Integrating autovacuum into the server allows it to be
+ automatically started and stopped in sync with the database
+ server, and allows autovacuum to be configured from
+ <filename>postgresql.conf</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Add shared row level locks using <command>SELECT ... FOR SHARE</>
+ (Alvaro)
+ </term>
+
+ <listitem>
+ <para>
+ While <productname>PostgreSQL</productname>'s MVCC locking
+ allows <command>SELECT</> to never be blocked by writers and
+ therefore does not need shared row locks for typical operations,
+ shared locks are useful for applications that require shared row
+ locking. In particular this reduces the locking requirements
+ imposed by referential integrity checks.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Add dependencies on shared objects, specifically roles
+ (Alvaro)
+ </term>
+
+ <listitem>
+ <para>
+ This extension of the dependency mechanism prevents roles from
+ being dropped while there are still database objects they own.
+ Formerly it was possible to accidentally <quote>orphan</> objects by
+ deleting their owner. While this could be recovered from, it
+ was messy and unpleasant.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ Improve performance for partitioned tables (Simon)
+ </term>
+
+ <listitem>
+ <para>
+ The new <varname>constraint_exclusion</varname> configuration
+ parameter avoids lookups on child tables where constraints indicate
+ that no matching rows exist in the child table.
+ </para>
+ <para>
+ This allows for a basic type of table partitioning. If child tables
+ store separate key ranges and this is enforced using appropriate
+ <command>CHECK</> constraints, the optimizer will skip child
+ table accesses when the constraint guarantees no matching rows
+ exist in the child table.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect2>
+
+ <sect2>
+ <title>Migration to Version 8.1</title>
+
+ <para>
+ A dump/restore using <application>pg_dump</application> is required
+ for those wishing to migrate data from any previous release.
+ </para>
+
+ <para>
+ The 8.0 release announced that the <function>to_char()</> function
+ for intervals would be removed in 8.1. However, since no better API
+ has been suggested, <function>to_char(interval)</> has been enhanced in
+ 8.1 and will remain in the server.
+ </para>
+
+ <para>
+ Observe the following incompatibilities:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <varname>add_missing_from</> is now false by default (Neil)
+ </para>
+ <para>
+ By default, we now generate an error if a table is used in a query
+ without a <literal>FROM</> reference. The old behavior is still
+ available, but the parameter must be set to 'true' to obtain it.
+ </para>
+
+ <para>
+ It might be necessary to set <varname>add_missing_from</> to true
+ in order to load an existing dump file, if the dump contains any
+ views or rules created using the implicit-<literal>FROM</> syntax.
+ This should be a one-time annoyance, because
+ <productname>PostgreSQL</productname> 8.1 will convert
+ such views and rules to standard explicit-<literal>FROM</> syntax.
+ Subsequent dumps will therefore not have the problem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Cause input of a zero-length string (<literal>''</literal>) for
+ <type>float4</type>/<type>float8</type>/<type>oid</type>
+ to throw an error, rather than treating it as a zero (Neil)
+ </para>
+ <para>
+ This change is consistent with the current handling of
+ zero-length strings for integers. The schedule for this change
+ was announced in 8.0.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <varname>default_with_oids</> is now false by default (Neil)
+ </para>
+ <para>
+ With this option set to false, user-created tables no longer
+ have an OID column unless <command>WITH OIDS</> is specified in
+ <command>CREATE TABLE</>. Though OIDs have existed in all
+ releases of <productname>PostgreSQL</>, their use is limited
+ because they are only four bytes long and the counter is shared
+ across all installed databases. The preferred way of uniquely
+ identifying rows is via sequences and the <type>SERIAL</> type,
+ which have been supported since <productname>PostgreSQL</> 6.4.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>E''</> syntax so eventually ordinary strings can
+ treat backslashes literally (Bruce)
+ </para>
+ <para>
+ Currently <productname>PostgreSQL</productname> processes a
+ backslash in a string literal as introducing a special escape sequence,
+ e.g. <literal>\n</> or <literal>\010</>.
+ While this allows easy entry of special values, it is
+ nonstandard and makes porting of applications from other
+ databases more difficult. For this reason, the
+ <productname>PostgreSQL</productname> project is planning to
+ remove the special meaning of backslashes in strings. For
+ backward compatibility and for users who want special backslash
+ processing, a new string syntax has been created. This new string
+ syntax is formed by writing an <literal>E</> immediately preceding the
+ single quote that starts the string, e.g. <literal>E'hi\n'</>. While
+ this release does not change the handling of backslashes in strings, it
+ does add new configuration parameters to help users migrate applications
+ for future releases:
+ </para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <varname>standard_conforming_strings</> — does this release
+ treat backslashes literally in ordinary strings?
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <varname>escape_string_warning</> — warn about backslashes in
+ ordinary (non-E) strings
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>
+ The <varname>standard_conforming_strings</> value is read-only.
+ Applications can retrieve the value to know how backslashes are
+ processed. (Presence of the parameter can also be taken as an
+ indication that <literal>E''</> string syntax is supported.)
+ In a future release, <varname>standard_conforming_strings</>
+ will be true, meaning backslashes will be treated literally in
+ non-E strings. To prepare for this change, use <literal>E''</>
+ strings in places that need special backslash processing, and
+ turn on <varname>escape_string_warning</> to find additional
+ strings that need to be converted to use <literal>E''</>.
+ Also, use two single-quotes (<literal>''</>) to embed a literal
+ single-quote in a string, rather than the
+ <productname>PostgreSQL</productname>-supported syntax of
+ backslash single-quote (<literal>\'</>). The former is
+ standards-conforming and does not require the use of the
+ <literal>E''</> string syntax. You can also use the
+ <literal>$$</> string syntax, which does not treat backslashes
+ specially.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>REINDEX DATABASE</> reindex all indexes in the
+ database (Tom)
+ </para>
+ <para>
+ Formerly, <command>REINDEX DATABASE</> reindexed only
+ system tables. This new behavior seems more intuitive. A new
+ command <command>REINDEX SYSTEM</> provides the old functionality
+ of reindexing just the system tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Read-only large object descriptors now obey MVCC snapshot semantics
+ </para>
+ <para>
+ When a large object is opened with <literal>INV_READ</> (and not
+ <literal>INV_WRITE</>), the data read from the descriptor will now
+ reflect a <quote>snapshot</> of the large object's state at the
+ time of the transaction snapshot in use by the query that called
+ <function>lo_open()</>. To obtain the old behavior of always
+ returning the latest committed data, include <literal>INV_WRITE</>
+ in the mode flags for <function>lo_open()</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add proper dependencies for arguments of sequence functions (Tom)
+ </para>
+ <para>
+ In previous releases, sequence names passed to <function>nextval()</>,
+ <function>currval()</>, and <function>setval()</> were stored as
+ simple text strings, meaning that renaming or dropping a
+ sequence used in a <literal>DEFAULT</> clause made the clause
+ invalid. This release stores all newly-created sequence function
+ arguments as internal OIDs, allowing them to track sequence
+ renaming, and adding dependency information that prevents
+ improper sequence removal. It also makes such <literal>DEFAULT</>
+ clauses immune to schema renaming and search path changes.
+ </para>
+ <para>
+ Some applications might rely on the old behavior of
+ run-time lookup for sequence names. This can still be done by
+ explicitly casting the argument to <type>text</>, for example
+ <literal>nextval('myseq'::text)</>.
+ </para>
+ <para>
+ Pre-8.1 database dumps loaded into 8.1 will use the old text-based
+ representation and therefore will not have the features of
+ OID-stored arguments. However, it is possible to update a
+ database containing text-based <literal>DEFAULT</> clauses.
+ First, save this query into a file, such as <filename>fixseq.sql</>:
+<programlisting>
+SELECT 'ALTER TABLE ' ||
+ pg_catalog.quote_ident(n.nspname) || '.' ||
+ pg_catalog.quote_ident(c.relname) ||
+ ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
+ ' SET DEFAULT ' ||
+ regexp_replace(d.adsrc,
+ $$val\(\(('[^']*')::text\)::regclass$$,
+ $$val(\1$$,
+ 'g') ||
+ ';'
+FROM pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
+WHERE n.oid = c.relnamespace AND
+ c.oid = a.attrelid AND
+ a.attrelid = d.adrelid AND
+ a.attnum = d.adnum AND
+ d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
+</programlisting>
+ Next, run the query against a database to find what
+ adjustments are required, like this for database <literal>db1</>:
+<programlisting>
+psql -t -f fixseq.sql db1
+</programlisting>
+ This will show the <command>ALTER TABLE</> commands needed to
+ convert the database to the newer OID-based representation.
+ If the commands look reasonable, run this to update the database:
+<programlisting>
+psql -t -f fixseq.sql db1 | psql -e db1
+</programlisting>
+ This process must be repeated in each database to be updated.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In <application>psql</application>, treat unquoted
+ <literal>\{digit}+</> sequences as octal (Bruce)
+ </para>
+ <para>
+ In previous releases, <literal>\{digit}+</> sequences were
+ treated as decimal, and only <literal>\0{digit}+</> were treated
+ as octal. This change was made for consistency.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove grammar productions for prefix and postfix <literal>%</>
+ and <literal>^</> operators
+ (Tom)
+ </para>
+ <para>
+ These have never been documented and complicated the use of the
+ modulus operator (<literal>%</>) with negative numbers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <literal>&<</> and <literal>&></> for polygons
+ consistent with the box "over" operators (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>CREATE LANGUAGE</> can ignore the provided arguments
+ in favor of information from <structname>pg_pltemplate</>
+ (Tom)
+ </para>
+ <para>
+ A new system catalog <structname>pg_pltemplate</> has been defined
+ to carry information about the preferred definitions of procedural
+ languages (such as whether they have validator functions). When
+ an entry exists in this catalog for the language being created,
+ <command>CREATE LANGUAGE</> will ignore all its parameters except the
+ language name and instead use the catalog information. This measure
+ was taken because of increasing problems with obsolete language
+ definitions being loaded by old dump files. As of 8.1,
+ <application>pg_dump</> will dump procedural language definitions as
+ just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
+ on a template entry to exist at load time. We expect this will be a
+ more future-proof representation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <function>pg_cancel_backend(int)</function> return a
+ <type>boolean</type> rather than an <type>integer</type> (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Some users are having problems loading UTF-8 data into 8.1.X.
+ This is because previous versions allowed invalid UTF-8 byte
+ sequences to be entered into the database, and this release
+ properly accepts only valid UTF-8 sequences. One way to correct a
+ dumpfile is to run the command <command>iconv -c -f UTF-8 -t
+ UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
+ removes invalid character sequences. A diff of the two files will
+ show the sequences that are invalid. <command>iconv</> reads the
+ entire input file into memory so it might be necessary to use
+ <application>split</> to break up the dump into multiple smaller
+ files for processing.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Additional Changes</title>
+
+ <para>
+ Below you will find a detailed account of the additional changes
+ between <productname>PostgreSQL</productname> 8.1 and the
+ previous major release.
+ </para>
+
+ <sect3>
+ <title>Performance Improvements</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve GiST and R-tree index performance (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve the optimizer, including auto-resizing of hash joins
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Overhaul internal API in several areas
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change WAL record CRCs from 64-bit to 32-bit (Tom)
+ </para>
+ <para>
+ We determined that the extra cost of computing 64-bit CRCs was
+ significant, and the gain in reliability too marginal to justify it.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent writing large empty gaps in WAL pages (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow nonconsecutive index columns to be used in a multicolumn
+ index (Tom)
+ </para>
+ <para>
+ For example, this allows an index on columns a,b,c to be used in
+ a query with <command>WHERE a = 4 and c = 10</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Skip WAL logging for <command>CREATE TABLE AS</> /
+ <command>SELECT INTO</> (Simon)
+ </para>
+ <para>
+ Since a crash during <command>CREATE TABLE AS</> would cause the
+ table to be dropped during recovery, there is no reason to WAL
+ log as the table is loaded. (Logging still happens if WAL
+ archiving is enabled, however.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow concurrent GiST index access (Teodor, Oleg)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add configuration parameter <varname>full_page_writes</> to
+ control writing full pages to WAL (Bruce)
+ </para>
+ <para>
+ To prevent partial disk writes from corrupting the database,
+ <productname>PostgreSQL</productname> writes a complete copy of
+ each database disk page to WAL the first time it is modified
+ after a checkpoint. This option turns off that functionality for more
+ speed. This is safe to use with battery-backed disk caches where
+ partial page writes cannot happen.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use <literal>O_DIRECT</> if available when using
+ <literal>O_SYNC</> for <varname>wal_sync_method</varname>
+ (Itagaki Takahiro)
+ </para>
+ <para>
+ <literal>O_DIRECT</> causes disk writes to bypass the kernel
+ cache, and for WAL writes, this improves performance.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <command>COPY FROM</> performance (Alon Goldshuv)
+ </para>
+ <para>
+ This was accomplished by reading <command>COPY</> input in
+ larger chunks, rather than character by character.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve the performance of <function>COUNT()</function>,
+ <function>SUM</function>, <function>AVG()</function>,
+ <function>STDDEV()</function>, and
+ <function>VARIANCE()</function> (Neil, Tom)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Server Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent problems due to transaction ID (XID) wraparound (Tom)
+ </para>
+ <para>
+ The server will now warn when the transaction counter approaches
+ the wraparound point. If the counter becomes too close to wraparound,
+ the server will stop accepting queries. This ensures that data is
+ not lost before needed vacuuming is performed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix problems with object IDs (OIDs) conflicting with existing system
+ objects after the OID counter has wrapped around (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add warning about the need to increase
+ <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
+ during <command>VACUUM</> (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <varname>temp_buffers</> configuration parameter to allow
+ users to determine the size of the local buffer area for
+ temporary table access (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add session start time and client IP address to
+ <literal>pg_stat_activity</> (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Adjust <literal>pg_stat</> views for bitmap scans (Tom)
+ </para>
+ <para>
+ The meanings of some of the fields have changed slightly.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Enhance <literal>pg_locks</> view (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Log queries for client-side <command>PREPARE</> and
+ <command>EXECUTE</> (Simon)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Kerberos name and user name case sensitivity to be
+ specified in <filename>postgresql.conf</> (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add configuration parameter <varname>krb_server_hostname</> so
+ that the server host name can be specified as part of service
+ principal (Todd Kover)
+ </para>
+ <para>
+ If not set, any service principal matching an entry in the
+ keytab can be used. This is new Kerberos matching behavior in
+ this release.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <varname>log_line_prefix</> options for millisecond
+ timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
+ L.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add WAL logging for GiST indexes (Teodor, Oleg)
+ </para>
+ <para>
+ GiST indexes are now safe for crash and point-in-time recovery.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove old <filename>*.backup</> files when we do
+ <function>pg_stop_backup()</> (Bruce)
+ </para>
+ <para>
+ This prevents a large number of <filename>*.backup</> files from
+ existing in <filename>pg_xlog/</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add configuration parameters to control TCP/IP keep-alive
+ times for idle, interval, and count (Oliver Jowett)
+ </para>
+
+ <para>
+ These values can be changed to allow more rapid detection of
+ lost client connections.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add per-user and per-database connection limits (Petr Jelinek)
+ </para>
+ <para>
+ Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
+ limits can now be enforced on the maximum number of sessions that
+ can concurrently connect as a specific user or to a specific database.
+ Setting the limit to zero disables user or database connections.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow more than two gigabytes of shared memory and per-backend
+ work memory on 64-bit machines (Koichi Suzuki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New system catalog <structname>pg_pltemplate</> allows overriding
+ obsolete procedural-language definitions in dump files (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Query Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add temporary views (Koju Iijima, Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <command>HAVING</> without any aggregate functions or
+ <command>GROUP BY</> so that the query returns a single group (Tom)
+ </para>
+ <para>
+ Previously, such a case would treat the <command>HAVING</>
+ clause the same as a <command>WHERE</> clause. This was not per spec.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>USING</> clause to allow additional tables to be
+ specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
+ </para>
+ <para>
+ In prior releases, there was no clear method for specifying
+ additional tables to be used for joins in a <command>DELETE</>
+ statement. <command>UPDATE</> already has a <literal>FROM</>
+ clause for this purpose.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <literal>\x</> hex escapes in backend and ecpg
+ strings (Bruce)
+ </para>
+ <para>
+ This is just like the standard C <literal>\x</> escape syntax.
+ Octal escapes were already supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
+ </para>
+ <para>
+ This feature allows <command>BETWEEN</> comparisons without
+ requiring the first value to be less than the second. For
+ example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
+ false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
+ true. <command>BETWEEN ASYMMETRIC</> was already supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>NOWAIT</> option to <command>SELECT ... FOR
+ UPDATE/SHARE</> (Hans-Juergen Schoenig)
+ </para>
+ <para>
+ While the <varname>statement_timeout</> configuration
+ parameter allows a query taking more than a certain amount of
+ time to be cancelled, the <command>NOWAIT</> option allows a
+ query to be canceled as soon as a <command>SELECT ... FOR
+ UPDATE/SHARE</> command cannot immediately acquire a row lock.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Object Manipulation Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Track dependencies of shared objects (Alvaro)
+ </para>
+ <para>
+ <productname>PostgreSQL</productname> allows global tables
+ (users, databases, tablespaces) to reference information in
+ multiple databases. This addition adds dependency information
+ for global tables, so, for example, user ownership can be
+ tracked across databases, so a user who owns something in any
+ database can no longer be removed. Dependency tracking already
+ existed for database-local objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow limited <command>ALTER OWNER</> commands to be performed
+ by the object owner (Stephen Frost)
+ </para>
+ <para>
+ Prior releases allowed only superusers to change object owners.
+ Now, ownership can be transferred if the user executing the command
+ owns the object and would be able to create it as the new owner
+ (that is, the user is a member of the new owning role and that role
+ has the CREATE permission that would be needed to create the object
+ afresh).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>ALTER</> object <command>SET SCHEMA</> capability
+ for some object types (tables, functions, types) (Bernd Helmle)
+ </para>
+ <para>
+ This allows objects to be moved to different schemas.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
+ disable triggers (Satoshi Nagayasu)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Utility Command Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow <command>TRUNCATE</> to truncate multiple tables in a
+ single command (Alvaro)
+ </para>
+ <para>
+ Because of referential integrity checks, it is not allowed to
+ truncate a table that is part of a referential integrity
+ constraint. Using this new functionality, <command>TRUNCATE</>
+ can be used to truncate such tables, if both tables involved in
+ a referential integrity constraint are truncated in a single
+ <command>TRUNCATE</> command.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Properly process carriage returns and line feeds in
+ <command>COPY CSV</> mode (Andrew)
+ </para>
+ <para>
+ In release 8.0, carriage returns and line feeds in <command>CSV
+ COPY TO</> were processed in an inconsistent manner. (This was
+ documented on the TODO list.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>COPY WITH CSV HEADER</> to allow a header line as
+ the first line in <command>COPY</> (Andrew)
+ </para>
+ <para>
+ This allows handling of the common <command>CSV</> usage of
+ placing the column names on the first line of the data file. For
+ <command>COPY TO</>, the first line contains the column names,
+ and for <command>COPY FROM</>, the first line is ignored.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ On Windows, display better sub-second precision in
+ <command>EXPLAIN ANALYZE</> (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add trigger duration display to <command>EXPLAIN ANALYZE</>
+ (Tom)
+ </para>
+ <para>
+ Prior releases included trigger execution time as part of the
+ total execution time, but did not show it separately. It is now
+ possible to see how much time is spent in each trigger.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <literal>\x</> hex escapes in <command>COPY</>
+ (Sergey Ten)
+ </para>
+ <para>
+ Previous releases only supported octal escapes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>SHOW ALL</> include variable descriptions
+ (Matthias Schmidt)
+ </para>
+ <para>
+ <command>SHOW</> varname still only displays the variable's
+ value and does not include the description.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <application>initdb</application> create a new standard
+ database called <literal>postgres</>, and convert utilities to
+ use <literal>postgres</> rather than <literal>template1</> for
+ standard lookups (Dave)
+ </para>
+ <para>
+ In prior releases, <literal>template1</> was used both as a
+ default connection for utilities like
+ <application>createuser</application>, and as a template for
+ new databases. This caused <command>CREATE DATABASE</> to
+ sometimes fail, because a new database cannot be created if
+ anyone else is in the template database. With this change, the
+ default connection database is now <literal>postgres</>,
+ meaning it is much less likely someone will be using
+ <literal>template1</> during <command>CREATE DATABASE</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Create new <application>reindexdb</application> command-line
+ utility by moving <filename>/contrib/reindexdb</> into the
+ server (Euler Taveira de Oliveira)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Data Type and Function Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <function>MAX()</> and <function>MIN()</> aggregates for
+ array types (Koju Iijima)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>to_date()</> and <function>to_timestamp()</> to
+ behave reasonably when <literal>CC</> and <literal>YY</> fields
+ are both used (Karel Zak)
+ </para>
+ <para>
+ If the format specification contains <literal>CC</> and a year
+ specification is <literal>YYY</> or longer, ignore the
+ <literal>CC</>. If the year specification is <literal>YY</> or
+ shorter, interpret <literal>CC</> as the previous century.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>md5(bytea)</> (Abhijit Menon-Sen)
+ </para>
+ <para>
+ <function>md5(text)</> already existed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <command>numeric ^ numeric</> based on
+ <function>power(numeric, numeric)</>
+ </para>
+ <para>
+ The function already existed, but there was no operator assigned
+ to it.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <type>NUMERIC</> modulus by properly truncating the quotient
+ during computation (Bruce)
+ </para>
+ <para>
+ In previous releases, modulus for large values sometimes
+ returned negative results due to rounding of the quotient.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a function <function>lastval()</> (Dennis Björklund)
+ </para>
+ <para>
+ <function>lastval()</> is a simplified version of
+ <function>currval()</>. It automatically determines the proper
+ sequence name based on the most recent <function>nextval()</> or
+ <function>setval()</> call performed by the current session.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>to_timestamp(DOUBLE PRECISION) (Michael Glaesemann)</>
+ </para>
+ <para>
+ Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
+ TIMEZONE</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_postmaster_start_time()</> function (Euler
+ Taveira de Oliveira, Matthias Schmidt)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the full use of time zone names in <command>AT TIME
+ ZONE</>, not just the short list previously available (Magnus)
+ </para>
+ <para>
+ Previously, only a predefined list of time zone names were
+ supported by <command>AT TIME ZONE</>. Now any supported time
+ zone name can be used, e.g.:
+ <programlisting>
+ SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
+ </programlisting>
+ In the above query, the time zone used is adjusted based on the
+ daylight saving time rules that were in effect on the supplied
+ date.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>GREATEST()</> and <function>LEAST()</> variadic
+ functions (Pavel Stehule)
+ </para>
+ <para>
+ These functions take a variable number of arguments and return
+ the greatest or least value among the arguments.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_column_size()</> (Mark Kirkwood)
+ </para>
+ <para>
+ This returns storage size of a column, which might be compressed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>regexp_replace()</> (Atsushi Ogawa)
+ </para>
+ <para>
+ This allows regular expression replacement, like sed. An optional
+ flag argument allows selection of global (replace all) and
+ case-insensitive modes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix interval division and multiplication (Bruce)
+ </para>
+ <para>
+ Previous versions sometimes returned unjustified results, like
+ <command>'4 months'::interval / 5</> returning <command>'1 mon
+ -6 days'</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix roundoff behavior in timestamp, time, and interval output (Tom)
+ </para>
+ <para>
+ This fixes some cases in which the seconds field would be shown as
+ <literal>60</> instead of incrementing the higher-order fields.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a separate day field to type <type>interval</> so a one day
+ interval can be distinguished from a 24 hour interval (Michael
+ Glaesemann)
+ </para>
+ <para>
+ Days that contain a daylight saving time adjustment are not 24
+ hours long, but typically 23 or 25 hours. This change creates a
+ conceptual distinction between intervals of <quote>so many days</>
+ and intervals of <quote>so many hours</>. Adding
+ <literal>1 day</> to a timestamp now gives the same local time on
+ the next day even if a daylight saving time adjustment occurs
+ between, whereas adding <literal>24 hours</> will give a different
+ local time when this happens. For example, under US DST rules:
+ <programlisting>
+ '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
+ '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
+ </programlisting>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>justify_days()</> and <function>justify_hours()</>
+ (Michael Glaesemann)
+ </para>
+ <para>
+ These functions, respectively, adjust days to an appropriate
+ number of full months and days, and adjust hours to an
+ appropriate number of full days and hours.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Move <filename>/contrib/dbsize</> into the backend, and rename
+ some of the functions (Dave Page, Andreas Pflug)
+ </para>
+ <para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <function>pg_tablespace_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_database_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_relation_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_total_relation_size()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_size_pretty()</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ <para>
+ <function>pg_total_relation_size()</> includes indexes and TOAST
+ tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add functions for read-only file access to the cluster directory
+ (Dave Page, Andreas Pflug)
+ </para>
+ <para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <function>pg_stat_file()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_read_file()</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <function>pg_ls_dir()</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_reload_conf()</> to force reloading of the
+ configuration files (Dave Page, Andreas Pflug)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_rotate_logfile()</> to force rotation of the
+ server log file (Dave Page, Andreas Pflug)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Encoding and Locale Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Rename some encodings to be more consistent and to follow
+ international standards (Bruce)
+ </para>
+ <para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <literal>UNICODE</> is now <literal>UTF8</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>ALT</> is now <literal>WIN866</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>WIN</> is now <literal>WIN1251</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>TCVN</> is now <literal>WIN1258</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+
+ <para>
+ The original names still work.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <literal>WIN1252</> encoding (Roland Volkmann)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for four-byte <literal>UTF8</> characters (John
+ Hansen)
+ </para>
+ <para>
+ Previously only one, two, and three-byte <literal>UTF8</> characters
+ were supported. This is particularly important for support for
+ some Chinese character sets.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow direct conversion between <literal>EUC_JP</> and
+ <literal>SJIS</> to improve performance (Atsushi Ogawa)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the UTF8 encoding to work on Windows (Magnus)
+ </para>
+ <para>
+ This is done by mapping UTF8 to the Windows-native UTF16
+ implementation.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>General Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow function characteristics, like strictness and volatility,
+ to be modified via <command>ALTER FUNCTION</> (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Increase the maximum number of function arguments to 100 (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow SQL and PL/PgSQL functions to use <command>OUT</> and
+ <command>INOUT</> parameters (Tom)
+ </para>
+ <para>
+ <command>OUT</> is an alternate way for a function to return
+ values. Instead of using <command>RETURN</>, values can be
+ returned by assigning to parameters declared as <command>OUT</> or
+ <command>INOUT</>. This is notationally simpler in some cases,
+ particularly so when multiple values need to be returned.
+ While returning multiple values from a function
+ was possible in previous releases, this greatly simplifies the
+ process. (The feature will be extended to other server-side
+ languages in future releases.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Move language handler functions into the <literal>pg_catalog</> schema
+ </para>
+ <para>
+ This makes it easier to drop the public schema if desired.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>SPI_getnspname()</function> to SPI (Neil)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>PL/PgSQL Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Overhaul the memory management of PL/PgSQL functions (Neil)
+ </para>
+ <para>
+ The parsetree of each function is now stored in a separate
+ memory context. This allows this memory to be easily reclaimed
+ when it is no longer needed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Check function syntax at <command>CREATE FUNCTION</> time,
+ rather than at runtime (Neil)
+ </para>
+ <para>
+ Previously, most syntax errors were reported only when the
+ function was executed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <command>OPEN</> to open non-<command>SELECT</> queries
+ like <command>EXPLAIN</> and <command>SHOW</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ No longer require functions to issue a <command>RETURN</>
+ statement (Tom)
+ </para>
+ <para>
+ This is a byproduct of the newly added <command>OUT</> and
+ <command>INOUT</> functionality. <command>RETURN</> can
+ be omitted when it is not needed to provide the function's
+ return value.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for an optional <command>INTO</> clause to
+ PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
+ the <literal>SQLSTATE</> and error message of the current
+ exception (Pavel Stehule, Neil)
+ </para>
+ <para>
+ These variables are only defined inside exception blocks.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the parameters to the <command>RAISE</> statement to be
+ expressions (Pavel Stehule, Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow block and loop labels (Pavel Stehule)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>PL/Perl Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow large result sets to be returned efficiently (Abhijit
+ Menon-Sen)
+ </para>
+ <para>
+ This allows functions to use <function>return_next()</> to avoid
+ building the entire result set in memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
+ </para>
+ <para>
+ This allows functions to use <function>spi_query()</> and
+ <function>spi_fetchrow()</> to avoid accumulating the entire
+ result set in memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Force PL/Perl to handle strings as <literal>UTF8</> if the
+ server encoding is <literal>UTF8</> (David Kamholz)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a validator function for PL/Perl (Andrew)
+ </para>
+ <para>
+ This allows syntax errors to be reported at definition time,
+ rather than execution time.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow PL/Perl to return a Perl array when the function returns
+ an array type (Andrew)
+ </para>
+ <para>
+ This basically maps <productname>PostgreSQL</productname> arrays
+ to Perl arrays.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Perl nonfatal warnings to generate <command>NOTICE</>
+ messages (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Perl's <literal>strict</> mode to be enabled (Andrew)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title><application>psql</> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
+ a transaction to error without affecting the rest of the
+ transaction (Greg Sabino Mullane)
+ </para>
+ <para>
+ This is basically implemented by wrapping every statement in a
+ sub-transaction.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <literal>\x</> hex strings in
+ <application>psql</> variables (Bruce)
+ </para>
+ <para>
+ Octal escapes were already supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <command>troff -ms</> output format (Roger
+ Leigh)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the history file location to be controlled by
+ <envar>HISTFILE</> (Andreas Seltenreich)
+ </para>
+ <para>
+ This allows configuration of per-database history storage.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <command>\x</> (expanded mode) from affecting
+ the output of <command>\d tablename</> (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <option>-L</> option to <application>psql</application> to
+ log sessions (Lorne Sunley)
+ </para>
+ <para>
+ This option was added because some operating systems do not have
+ simple command-line activity logging functionality.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>\d</> show the tablespaces of indexes (Qingqing
+ Zhou)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>psql</application> help (<command>\h</>) to
+ make a best guess on the proper help information (Greg Sabino
+ Mullane)
+ </para>
+ <para>
+ This allows the user to just add <command>\h</> to the front of
+ the syntax error query and get help on the supported syntax.
+ Previously any additional query text beyond the command name
+ had to be removed to use <command>\h</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>\pset numericlocale</> to allow numbers to be
+ output in a locale-aware format (Eugen Nedelcu)
+ </para>
+ <para>
+ For example, using <literal>C</> locale <literal>100000</> would
+ be output as <literal>100,000.0</> while a European locale might
+ output this value as <literal>100.000,0</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make startup banner show both server version number and
+ <application>psql</>'s version number, when they are different (Bruce)
+ </para>
+ <para>
+ Also, a warning will be shown if the server and <application>psql</>
+ are from different major releases.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title><application>pg_dump</> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <option>-n</> / <option>--schema</> switch to
+ <application>pg_restore</> (Richard van den Berg)
+ </para>
+ <para>
+ This allows just the objects in a specified schema to be restored.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>pg_dump</> to dump large objects even in
+ text mode (Tom)
+ </para>
+ <para>
+ With this change, large objects are now always dumped; the former
+ <option>-b</> switch is a no-op.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>pg_dump</> to dump a consistent snapshot of
+ large objects (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Dump comments for large objects (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <option>--encoding</> to <application>pg_dump</>
+ (Magnus Hagander)
+ </para>
+ <para>
+ This allows a database to be dumped in an encoding that is
+ different from the server's encoding. This is valuable when
+ transferring the dump to a machine with a different encoding.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
+ </para>
+ <para>
+ If the call handler for a procedural language is in the
+ <literal>pg_catalog</> schema, <application>pg_dump</> does not
+ dump the handler. Instead, it dumps the language using just
+ <command>CREATE LANGUAGE <replaceable>name</></command>,
+ relying on the <structname>pg_pltemplate</> catalog to provide
+ the language's creation parameters at load time.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title><application>libpq</application> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add a <envar>PGPASSFILE</> environment variable to specify the
+ password file's filename (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>lo_create()</>, that is similar to
+ <function>lo_creat()</> but allows the OID of the large object
+ to be specified (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <application>libpq</application> consistently return an error
+ to the client application on <function>malloc()</function>
+ failure (Neil)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Source Code Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <application>pgxs</> to support building against a relocated
+ installation
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add spinlock support for the Itanium processor using Intel
+ compiler (Vikram Kalsi)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add Kerberos 5 support for Windows (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add Chinese FAQ (laser@pgsqldb.com)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Rename Rendezvous to Bonjour to match OS/X feature renaming
+ (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <literal>fsync_writethrough</literal> on
+ Darwin (Chris Campbell)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Streamline the passing of information within the server, the
+ optimizer, and the lock system (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>pg_config</> to be compiled using MSVC (Andrew)
+ </para>
+ <para>
+ This is required to build DBD::Pg using <application>MSVC</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove support for Kerberos V4 (Magnus)
+ </para>
+ <para>
+ Kerberos 4 had security vulnerabilities and is no longer
+ maintained.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Code cleanups (Coverity static analysis performed by
+ EnterpriseDB)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Modify <filename>postgresql.conf</> to use documentation defaults
+ <literal>on</>/<literal>off</> rather than
+ <literal>true</>/<literal>false</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Enhance <application>pg_config</> to be able to report more
+ build-time values (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>libpq</application> to be built thread-safe
+ on Windows (Dave Page)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow IPv6 connections to be used on Windows (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add Server Administration documentation about I/O subsystem
+ reliability (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Move private declarations from <filename>gist.h</filename> to
+ <filename>gist_private.h</filename> (Neil)
+ </para>
+
+ <para>
+ In previous releases, <filename>gist.h</> contained both the
+ public GiST API (intended for use by authors of GiST index
+ implementations) as well as some private declarations used by
+ the implementation of GiST itself. The latter have been moved
+ to a separate file, <filename>gist_private.h</>. Most GiST
+ index implementations should be unaffected.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Overhaul GiST memory management (Neil)
+ </para>
+
+ <para>
+ GiST methods are now always invoked in a short-lived memory
+ context. Therefore, memory allocated via <function>palloc()</>
+ will be reclaimed automatically, so GiST index implementations
+ do not need to manually release allocated memory via
+ <function>pfree()</>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+
+ <sect3>
+ <title>Contrib Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <filename>/contrib/pg_buffercache</> contrib module (Mark
+ Kirkwood)
+ </para>
+ <para>
+ This displays the contents of the buffer cache, for debugging and
+ performance tuning purposes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove <filename>/contrib/array</> because it is obsolete (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean up the <filename>/contrib/lo</> module (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Move <filename>/contrib/findoidjoins</> to
+ <filename>/src/tools</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove the <literal><<</>, <literal>>></>,
+ <literal>&<</>, and <literal>&></> operators from
+ <filename>/contrib/cube</>
+ </para>
+ <para>
+ These operators were not useful.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <filename>/contrib/btree_gist</> (Janko Richter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <filename>/contrib/pgbench</> (Tomoaki Sato, Tatsuo)
+ </para>
+ <para>
+ There is now a facility for testing with SQL command scripts given
+ by the user, instead of only a hard-wired command sequence.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Implementation of OpenPGP symmetric-key and public-key encryption
+ </para>
+ <para>
+ Both RSA and Elgamal public-key algorithms are supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ OpenSSL build: support 3DES, use internal AES with OpenSSL < 0.9.7
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Take build parameters (OpenSSL, zlib) from <filename>configure</> result
+ </para>
+ <para>
+ There is no need to edit the <filename>Makefile</> anymore.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove support for <filename>libmhash</> and <filename>libmcrypt</>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </listitem>
+
+ </itemizedlist>
+ </sect3>
+
+ </sect2>
+ </sect1>
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.2.sgml,v 1.1 2009/05/02 20:17:19 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-8-2-13">
+ <title>Release 8.2.13</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-03-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.12.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.13</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.11,
+ see the release notes for 8.2.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent error recursion crashes when encoding conversion fails (Tom)
+ </para>
+
+ <para>
+ This change extends fixes made in the last two minor releases for
+ related failure scenarios. The previous fixes were narrowly tailored
+ for the original problem reports, but we have now recognized that
+ <emphasis>any</> error thrown by an encoding conversion function could
+ potentially lead to infinite recursion while trying to report the
+ error. The solution therefore is to disable translation and encoding
+ conversion and report the plain-ASCII form of any error message,
+ if we find we have gotten into a recursive error reporting situation.
+ (CVE-2009-0922)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>CREATE CONVERSION</> with the wrong encodings
+ for the specified conversion function (Heikki)
+ </para>
+
+ <para>
+ This prevents one possible scenario for encoding conversion failure.
+ The previous change is a backstop to guard against other kinds of
+ failures in the same area.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump when <function>to_char()</> is given format codes that
+ are inappropriate for the type of the data argument (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible failure in <filename>contrib/tsearch2</> when C locale is
+ used with a multi-byte encoding (Teodor)
+ </para>
+
+ <para>
+ Crashes were possible on platforms where <type>wchar_t</> is narrower
+ than <type>int</>; Windows in particular.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix extreme inefficiency in <filename>contrib/tsearch2</> parser's
+ handling of an email-like string containing multiple <literal>@</>
+ characters (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix decompilation of <literal>CASE WHEN</> with an implicit coercion
+ (Tom)
+ </para>
+
+ <para>
+ This mistake could lead to Assert failures in an Assert-enabled build,
+ or an <quote>unexpected CASE WHEN clause</> error message in other
+ cases, when trying to examine or dump a view.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
+ </para>
+
+ <para>
+ If <command>CLUSTER</> or a rewriting variant of <command>ALTER TABLE</>
+ were executed by someone other than the table owner, the
+ <structname>pg_type</> entry for the table's TOAST table would end up
+ marked as owned by that someone. This caused no immediate problems,
+ since the permissions on the TOAST rowtype aren't examined by any
+ ordinary database operation. However, it could lead to unexpected
+ failures if one later tried to drop the role that issued the command
+ (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</>
+ warnings from <application>pg_dump</> after having done so (in 8.3).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/pgSQL to not treat <literal>INTO</> after <command>INSERT</> as
+ an INTO-variables clause anywhere in the string, not only at the start;
+ in particular, don't fail for <command>INSERT INTO</> within
+ <command>CREATE RULE</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean up PL/pgSQL error status variables fully at block exit
+ (Ashesh Vashi and Dave Page)
+ </para>
+
+ <para>
+ This is not a problem for PL/pgSQL itself, but the omission could cause
+ the PL/pgSQL Debugger to crash while examining the state of a function.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Retry failed calls to <function>CallNamedPipe()</> on Windows
+ (Steve Marshall, Magnus)
+ </para>
+
+ <para>
+ It appears that this function can sometimes fail transiently;
+ we previously treated any failure as a hard error, which could
+ confuse <command>LISTEN</>/<command>NOTIFY</> as well as other
+ operations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+ of known timezone abbreviations (Xavier Bugaud)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-12">
+ <title>Release 8.2.12</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-02-02</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.11.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.12</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.11,
+ see the release notes for 8.2.11.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve handling of URLs in <function>headline()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of overlength headlines in <function>headline()</>
+ function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible Assert failure or misconversion if an encoding
+ conversion is created with the wrong conversion function for the
+ specified pair of encodings (Tom, Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible Assert failure if a statement executed in PL/pgSQL is
+ rewritten into another kind of statement, for example if an
+ <command>INSERT</> is rewritten into an <command>UPDATE</> (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure that a snapshot is available to datatype input functions (Tom)
+ </para>
+
+ <para>
+ This primarily affects domains that are declared with <literal>CHECK</>
+ constraints involving user-defined stable or immutable functions. Such
+ functions typically fail if no snapshot has been set.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make it safer for SPI-using functions to be used within datatype I/O;
+ in particular, to be used in domain check constraints (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnecessary locking of small tables in <command>VACUUM</>
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a problem that made <literal>UPDATE RETURNING tableoid</>
+ return zero instead of the correct OID (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner misestimation of selectivity when transitive equality
+ is applied to an outer-join clause (Tom)
+ </para>
+
+ <para>
+ This could result in bad plans for queries like
+ <literal>... from a left join b on a.a1 = b.b1 where a.a1 = 42 ...</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimizer's handling of long <literal>IN</> lists (Tom)
+ </para>
+
+ <para>
+ This change avoids wasting large amounts of time on such lists
+ when constraint exclusion is enabled.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure that the contents of a holdable cursor don't depend on the
+ contents of TOAST tables (Tom)
+ </para>
+
+ <para>
+ Previously, large field values in a cursor result might be represented
+ as TOAST pointers, which would fail if the referenced table got dropped
+ before the cursor is read, or if the large value is deleted and then
+ vacuumed away. This cannot happen with an ordinary cursor,
+ but it could with a cursor that is held past its creating transaction.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory leak when a set-returning function is terminated without
+ reading its whole result (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <filename>contrib/dblink</>'s
+ <function>dblink_get_result(text,bool)</> function (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible garbage output from <filename>contrib/sslinfo</> functions
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>configure</> script to properly report failure when
+ unable to obtain linkage information for PL/Perl (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make all documentation reference <literal>pgsql-bugs</> and/or
+ <literal>pgsql-hackers</> as appropriate, instead of the
+ now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+ mailing lists (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2009a (for
+ Kathmandu and historical DST corrections in Switzerland, Cuba)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-11">
+ <title>Release 8.2.11</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-11-03</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.10.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.11</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.7,
+ see the release notes for 8.2.7. Also, if you were running a previous
+ 8.2.X release, it is recommended to <command>REINDEX</> all GiST
+ indexes after the upgrade.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix GiST index corruption due to marking the wrong index entry
+ <quote>dead</> after a deletion (Teodor)
+ </para>
+
+ <para>
+ This would result in index searches failing to find rows they
+ should have found. Corrupted indexes can be fixed with
+ <command>REINDEX</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix backend crash when the client encoding cannot represent a localized
+ error message (Tom)
+ </para>
+
+ <para>
+ We have addressed similar issues before, but it would still fail if
+ the <quote>character has no equivalent</> message itself couldn't
+ be converted. The fix is to disable localization and send the plain
+ ASCII error message when we detect such a situation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash when deeply nested functions are invoked from
+ a trigger (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimization of <replaceable>expression</> <literal>IN</>
+ (<replaceable>expression-list</>) queries (Tom, per an idea from Robert
+ Haas)
+ </para>
+
+ <para>
+ Cases in which there are query variables on the right-hand side had been
+ handled less efficiently in 8.2.x and 8.3.x than in prior versions.
+ The fix restores 8.1 behavior for such cases.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix mis-expansion of rule queries when a sub-<literal>SELECT</> appears
+ in a function call in <literal>FROM</>, a multi-row <literal>VALUES</>
+ list, or a <literal>RETURNING</> list (Tom)
+ </para>
+
+ <para>
+ The usual symptom of this problem is an <quote>unrecognized node type</>
+ error.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory leak during rescan of a hashed aggregation plan (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure an error is reported when a newly-defined PL/pgSQL trigger
+ function is invoked as a normal function (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible collision of <structfield>relfilenode</> numbers
+ when moving a table to another tablespace with <command>ALTER SET
+ TABLESPACE</> (Heikki)
+ </para>
+
+ <para>
+ The command tried to re-use the existing filename, instead of
+ picking one that is known unused in the destination directory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect tsearch2 headline generation when single query
+ item matches first word of text (Sushant Sinha)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix improper display of fractional seconds in interval values when
+ using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+ build (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+ behave correctly when the passed tuple and tuple descriptor have
+ different numbers of columns (Tom)
+ </para>
+
+ <para>
+ This situation is normal when a table has had columns added or removed,
+ but these two functions didn't handle it properly.
+ The only likely consequence is an incorrect error indication.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s parsing of <command>CREATE ROLE</> (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix recent breakage of <literal>pg_ctl restart</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <filename>pg_control</> is opened in binary mode
+ (Itagaki Takahiro)
+ </para>
+
+ <para>
+ <application>pg_controldata</> and <application>pg_resetxlog</>
+ did this incorrectly, and so could fail on Windows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008i (for
+ DST law changes in Argentina, Brazil, Mauritius, Syria)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-10">
+ <title>Release 8.2.10</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-09-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.9.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.10</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.7,
+ see the release notes for 8.2.7.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix bug in btree WAL recovery code (Heikki)
+ </para>
+
+ <para>
+ Recovery failed if the WAL ended partway through a page split operation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential miscalculation of <structfield>datfrozenxid</> (Alvaro)
+ </para>
+
+ <para>
+ This error may explain some recent reports of failure to remove old
+ <structname>pg_clog</> data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Widen local lock counters from 32 to 64 bits (Tom)
+ </para>
+
+ <para>
+ This responds to reports that the counters could overflow in
+ sufficiently long transactions, leading to unexpected <quote>lock is
+ already held</> errors.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible duplicate output of tuples during a GiST index scan (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix missed permissions checks when a view contains a simple
+ <literal>UNION ALL</> construct (Heikki)
+ </para>
+
+ <para>
+ Permissions for the referenced tables were checked properly, but not
+ permissions for the view itself.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add checks in executor startup to ensure that the tuples produced by an
+ <command>INSERT</> or <command>UPDATE</> will match the target table's
+ current rowtype (Tom)
+ </para>
+
+ <para>
+ <command>ALTER COLUMN TYPE</>, followed by re-use of a previously
+ cached plan, could produce this type of situation. The check protects
+ against data corruption and/or crashes that could ensue.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible repeated drops during <command>DROP OWNED</> (Tom)
+ </para>
+
+ <para>
+ This would typically result in strange errors such as <quote>cache
+ lookup failed for relation NNN</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>AT TIME ZONE</> to first try to interpret its timezone
+ argument as a timezone abbreviation, and only try it as a full timezone
+ name if that fails, rather than the other way around as formerly (Tom)
+ </para>
+
+ <para>
+ The timestamp input functions have always resolved ambiguous zone names
+ in this order. Making <literal>AT TIME ZONE</> do so as well improves
+ consistency, and fixes a compatibility bug introduced in 8.1:
+ in ambiguous cases we now behave the same as 8.0 and before did,
+ since in the older versions <literal>AT TIME ZONE</> accepted
+ <emphasis>only</> abbreviations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix datetime input functions to correctly detect integer overflow when
+ running on a 64-bit platform (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent integer overflows during units conversion when displaying a
+ configuration parameter that has units (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of writing very long log messages to syslog (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow spaces in the suffix part of an LDAP URL in
+ <filename>pg_hba.conf</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+ ON</> query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner bug with nested sub-select expressions (Tom)
+ </para>
+
+ <para>
+ If the outer sub-select has no direct dependency on the parent query,
+ but the inner one does, the outer value might not get recalculated
+ for new parent query rows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+ boolean results always result in two groups, regardless of the
+ expressions' contents (Tom)
+ </para>
+
+ <para>
+ This is very substantially more accurate than the regular <literal>GROUP
+ BY</> estimate for certain boolean tests like <replaceable>col</>
+ <literal>IS NULL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/PgSQL to not fail when a <literal>FOR</> loop's target variable
+ is a record containing composite-type fields (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
+ about the encoding of data sent to or from Tcl (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ On Windows, work around a Microsoft bug by preventing
+ <application>libpq</> from trying to send more than 64kB per system call
+ (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <application>pg_dump</> and <application>pg_restore</>'s
+ error reporting after failure to send a SQL command (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to properly preserve postmaster
+ command-line arguments across a <literal>restart</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008f (for
+ DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
+ Pakistan, Palestine, and Paraguay)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-9">
+ <title>Release 8.2.9</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-06-12</simpara>
+ </note>
+
+ <para>
+ This release contains one serious and one minor bug fix over 8.2.8.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.9</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.7,
+ see the release notes for 8.2.7.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+ </para>
+
+ <para>
+ Before this fix, a negative constant in a view or rule might be dumped
+ as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+ be <literal>(-42)::integer</> due to operator precedence rules.
+ Usually this would make little difference, but it could interact with
+ another recent patch to cause
+ <productname>PostgreSQL</> to reject what had been a valid
+ <command>SELECT DISTINCT</> view query. Since this could result in
+ <application>pg_dump</> output failing to reload, it is being treated
+ as a high-priority fix. The only released versions in which dump
+ output is actually incorrect are 8.3.1 and 8.2.7.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>ALTER AGGREGATE ... OWNER TO</> update
+ <structname>pg_shdepend</> (Tom)
+ </para>
+
+ <para>
+ This oversight could lead to problems if the aggregate was later
+ involved in a <command>DROP OWNED</> or <command>REASSIGN OWNED</>
+ operation.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-8">
+ <title>Release 8.2.8</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>never released</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.7.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.8</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, if you are upgrading from a version earlier than 8.2.7,
+ see the release notes for 8.2.7.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
+ occurred on Windows when using UTF-8 database encoding and a different
+ client encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
+ column is correctly checked to see if it's been initialized to all
+ non-nulls (Brendan Jurd)
+ </para>
+
+ <para>
+ Previous versions neglected to check this requirement at all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible <command>CREATE TABLE</> failure when inheriting the
+ <quote>same</> constraint from multiple parent relations that
+ inherited that constraint from a common ancestor (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
+ to the target table of an <command>UPDATE</> or <command>DELETE</>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix GIN bug that could result in a <literal>too many LWLocks
+ taken</literal> failure (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid possible crash when decompressing corrupted data
+ (Zdenek Kotala)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair two places where SIGTERM exit of a backend could leave corrupted
+ state in shared memory (Tom)
+ </para>
+
+ <para>
+ Neither case is very important if SIGTERM is used to shut down the
+ whole database cluster together, but there was a problem if someone
+ tried to SIGTERM individual backends.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix conversions between ISO-8859-5 and other encodings to handle
+ Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+ two dots) (Sergey Burladyan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix several datatype input functions, notably <function>array_in()</>,
+ that were allowing unused bytes in their results to contain
+ uninitialized, unpredictable values (Tom)
+ </para>
+
+ <para>
+ This could lead to failures in which two apparently identical literal
+ values were not seen as equal, resulting in the parser complaining
+ about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+ expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a corner case in regular-expression substring matching
+ (<literal>substring(<replaceable>string</> from
+ <replaceable>pattern</>)</literal>) (Tom)
+ </para>
+
+ <para>
+ The problem occurs when there is a match to the pattern overall but
+ the user has specified a parenthesized subexpression and that
+ subexpression hasn't got a match. An example is
+ <literal>substring('foo' from 'foo(bar)?')</>.
+ This should return NULL, since <literal>(bar)</> isn't matched, but
+ it was mistakenly returning the whole-pattern match instead (ie,
+ <literal>foo</>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008c (for
+ DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
+ Argentina/San_Luis)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect result from <application>ecpg</>'s
+ <function>PGTYPEStimestamp_sub()</> function (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix broken GiST comparison function for <filename>contrib/tsearch2</>'s
+ <type>tsquery</> type (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crashes in <filename>contrib/cube</> functions (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump in <filename>contrib/xml2</>'s
+ <function>xpath_table()</> function when the input query returns a
+ NULL value (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <filename>contrib/xml2</>'s makefile to not override
+ <literal>CFLAGS</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+ 4.3 (Tom)
+ </para>
+
+ <para>
+ This problem affects <quote>old style</> (V0) C functions that
+ return boolean. The fix is already in 8.3, but the need to
+ back-patch it was not realized at the time.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-7">
+ <title>Release 8.2.7</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-03-17</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.6.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.7</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ However, you might need to <command>REINDEX</> indexes on textual
+ columns after updating, if you are affected by the Windows locale
+ issue described below.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix character string comparison for Windows locales that consider
+ different character combinations as equal (Tom)
+ </para>
+
+ <para>
+ This fix applies only on Windows and only when using UTF-8
+ database encoding. The same fix was made for all other cases
+ over two years ago, but Windows with UTF-8 uses a separate code
+ path that was not updated. If you are using a locale that
+ considers some non-identical strings as equal, you may need to
+ <command>REINDEX</> to fix existing indexes on textual columns.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair potential deadlock between concurrent <command>VACUUM FULL</>
+ operations on different system catalogs (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+ race condition (Tom)
+ </para>
+
+ <para>
+ In rare cases a session that had just executed a
+ <command>LISTEN</> might not get a notification, even though
+ one would be expected because the concurrent transaction executing
+ <command>NOTIFY</> was observed to commit later.
+ </para>
+
+ <para>
+ A side effect of the fix is that a transaction that has executed
+ a not-yet-committed <command>LISTEN</> command will not see any
+ row in <structname>pg_listener</> for the <command>LISTEN</>,
+ should it choose to look; formerly it would have. This behavior
+ was never documented one way or the other, but it is possible that
+ some applications depend on the old behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
+ prepared transaction (Tom)
+ </para>
+
+ <para>
+ This was formerly allowed but trying to do it had various unpleasant
+ consequences, notably that the originating backend could not exit
+ as long as an <command>UNLISTEN</> remained uncommitted.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow dropping a temporary table within a
+ prepared transaction (Heikki)
+ </para>
+
+ <para>
+ This was correctly disallowed by 8.1, but the check was inadvertently
+ broken in 8.2.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix rare crash when an error occurs during a query using a hash index
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory leaks in certain usages of set-returning functions (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix input of datetime values for February 29 in years BC (Tom)
+ </para>
+
+ <para>
+ The former coding was mistaken about which years were leap years.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>unrecognized node type</> error in some variants of
+ <command>ALTER OWNER</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <structname>pg_stat_activity</>.<structfield>waiting</> flag
+ is cleared when a lock wait is aborted (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix handling of process permissions on Windows Vista (Dave, Magnus)
+ </para>
+
+ <para>
+ In particular, this fix allows starting the server as the Administrator
+ user.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008a
+ (in particular, recent Chile changes); adjust timezone abbreviation
+ <literal>VET</> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to correctly extract the postmaster's port
+ number from command-line options (Itagaki Takahiro, Tom)
+ </para>
+
+ <para>
+ Previously, <literal>pg_ctl start -w</> could try to contact the
+ postmaster on the wrong port, leading to bogus reports of startup
+ failure.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use <option>-fwrapv</> to defend against possible misoptimization
+ in recent <application>gcc</> versions (Tom)
+ </para>
+
+ <para>
+ This is known to be necessary when building <productname>PostgreSQL</>
+ with <application>gcc</> 4.3 or later.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Correctly enforce <varname>statement_timeout</> values longer
+ than <literal>INT_MAX</> microseconds (about 35 minutes) (Tom)
+ </para>
+
+ <para>
+ This bug affects only builds with <option>--enable-integer-datetimes</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>unexpected PARAM_SUBLINK ID</> planner error when
+ constant-folding simplifies a sub-select (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix logical errors in constraint-exclusion handling of <literal>IS
+ NULL</> and <literal>NOT</> expressions (Tom)
+ </para>
+
+ <para>
+ The planner would sometimes exclude partitions that should not
+ have been excluded because of the possibility of NULL results.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix another cause of <quote>failed to build any N-way joins</>
+ planner errors (Tom)
+ </para>
+
+ <para>
+ This could happen in cases where a clauseless join needed to be
+ forced before a join clause could be exploited.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect constant propagation in outer-join planning (Tom)
+ </para>
+
+ <para>
+ The planner could sometimes incorrectly conclude that a variable
+ could be constrained to be equal to a constant, leading
+ to wrong query results.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix display of constant expressions in <literal>ORDER BY</>
+ and <literal>GROUP BY</> (Tom)
+ </para>
+
+ <para>
+ An explictly casted constant would be shown incorrectly. This could
+ for example lead to corruption of a view definition during
+ dump and reload.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> to handle NOTICE messages correctly
+ during COPY OUT (Tom)
+ </para>
+
+ <para>
+ This failure has only been observed to occur when a user-defined
+ datatype's output routine issues a NOTICE, but there is no
+ guarantee it couldn't happen due to other causes.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-6">
+ <title>Release 8.2.6</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-01-07</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.5,
+ including fixes for significant security issues.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.6</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent functions in indexes from executing with the privileges of
+ the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+ </para>
+
+ <para>
+ Functions used in index expressions and partial-index
+ predicates are evaluated whenever a new table entry is made. It has
+ long been understood that this poses a risk of trojan-horse code
+ execution if one modifies a table owned by an untrustworthy user.
+ (Note that triggers, defaults, check constraints, etc. pose the
+ same type of risk.) But functions in indexes pose extra danger
+ because they will be executed by routine maintenance operations
+ such as <command>VACUUM FULL</>, which are commonly performed
+ automatically under a superuser account. For example, a nefarious user
+ can execute code with superuser privileges by setting up a
+ trojan-horse index definition and waiting for the next routine vacuum.
+ The fix arranges for standard maintenance operations
+ (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+ and <command>CLUSTER</>) to execute as the table owner rather than
+ the calling user, using the same privilege-switching mechanism already
+ used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
+ this security measure, execution of <command>SET SESSION
+ AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+ <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+ </para>
+
+ <para>
+ Suitably crafted regular-expression patterns could cause crashes,
+ infinite or near-infinite looping, and/or massive memory consumption,
+ all of which pose denial-of-service hazards for applications that
+ accept regex search patterns from untrustworthy sources.
+ (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+
+ <para>
+ The fix that appeared for this in 8.2.5 was incomplete, as it plugged
+ the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
+ CVE-2007-3278)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bugs in WAL replay for GIN indexes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix GIN index build to work properly when
+ <varname>maintenance_work_mem</> is 4GB or more (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2007k
+ (in particular, recent Argentina changes) (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve planner's handling of LIKE/regex estimation in non-C locales
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planning-speed problem for deep outer-join nests, as well as
+ possible poor choice of join order (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner failure in some cases of <literal>WHERE false AND var IN
+ (SELECT ...)</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE TABLE ... SERIAL</> and
+ <command>ALTER SEQUENCE ... OWNED BY</> not change the
+ <function>currval()</> state of the sequence (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Preserve the tablespace and storage parameters of indexes that are
+ rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make archive recovery always start a new WAL timeline, rather than only
+ when a recovery stop time was used (Simon)
+ </para>
+
+ <para>
+ This avoids a corner-case risk of trying to overwrite an existing
+ archived copy of the last WAL segment, and seems simpler and cleaner
+ than the original definition.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
+ when the table is too small for it to be useful (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential crash in <function>translate()</> when using a multibyte
+ database encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <function>corr()</> return the correct result for negative
+ correlation values (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix overflow in <literal>extract(epoch from interval)</> for intervals
+ exceeding 68 years (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Perl to not fail when a UTF-8 regular expression is used
+ in a trusted function (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
+ as <literal>int</> rather than <literal>char</> (Tom)
+ </para>
+
+ <para>
+ While this could theoretically happen anywhere, no standard build of
+ Perl did things this way ... until <productname>Mac OS X</> 10.5.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to work correctly with Python 2.5 on 64-bit machines
+ (Marko Kreen)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Python to not crash on long exception messages (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_dump</> to correctly handle inheritance child tables
+ that have default expressions different from their parent's (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
+ to a file that is not a plain file (Martin Pitt)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <application>ecpg</> parser fixes (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/pgcrypto</> defend against
+ <application>OpenSSL</> libraries that fail on keys longer than 128
+ bits; which is the case at least on some Solaris versions (Marko Kreen)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+ NULL rowid as a category in its own right, rather than crashing (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <type>tsvector</> and <type>tsquery</> output routines to
+ escape backslashes correctly (Teodor, Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require a specific version of <productname>Autoconf</> to be used
+ when re-generating the <command>configure</> script (Peter)
+ </para>
+
+ <para>
+ This affects developers and packagers only. The change was made
+ to prevent accidental use of untested combinations of
+ <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+ You can remove the version check if you really want to use a
+ different <productname>Autoconf</> version, but it's
+ your responsibility whether the result works or not.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update <function>gettimeofday</> configuration check so that
+ <productname>PostgreSQL</> can be built on newer versions of
+ <productname>MinGW</> (Magnus)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-5">
+ <title>Release 8.2.5</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-09-17</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.4.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.5</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent index corruption when a transaction inserts rows and
+ then aborts close to the end of a concurrent <command>VACUUM</>
+ on the same table (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
+ domains over domains (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix some planner problems with outer joins, notably poor
+ size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the <type>interval</> data type to accept input consisting only of
+ milliseconds or microseconds (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Speed up rtree index insertion (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix excessive logging of <acronym>SSL</> error messages (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix logging so that log messages are never interleaved when using
+ the syslogger process (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash when <varname>log_min_error_statement</> logging runs out
+ of memory (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect handling of some foreign-key corner cases (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
+ due to attempting to process temporary tables of other sessions (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Windows socket and semaphore improvements (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+ because of possible encoding mismatches (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require non-superusers who use <filename>/contrib/dblink</> to use only
+ password authentication, as a security measure (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Do not let <filename>/contrib/intarray</> try to make its GIN opclass
+ the default (this caused problems at dump/restore) (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-4">
+ <title>Release 8.2.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-04-23</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.3,
+ including a security fix.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.4</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Support explicit placement of the temporary-table schema within
+ <varname>search_path</>, and disable searching it for functions
+ and operators (Tom)
+ </para>
+
+ <para>
+ This is needed to allow a security-definer function to set a
+ truly secure value of <varname>search_path</>. Without it,
+ an unprivileged SQL user can use temporary objects to execute code
+ with the privileges of the security-definer function (CVE-2007-2138).
+ See <command>CREATE FUNCTION</> for more information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <varname>shared_preload_libraries</> for Windows
+ by forcing reload in each backend (Korry Douglas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>to_char()</> so it properly upper/lower cases localized day or month
+ names (Pavel Stehule)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>/contrib/tsearch2</> crash fixes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require <command>COMMIT PREPARED</> to be executed in the same
+ database as the transaction was prepared in (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <command>pg_dump</> to do binary backups larger than two gigabytes
+ on Windows (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent the statistics collector from writing to disk too frequently (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+ <command>UPDATE</> chains (Tom, Pavan Deolasee)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in domains that use array types (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <command>pg_dump</> so it can dump a serial column's sequence
+ using <option>-t</> when not also dumping the owning table
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Planner fixes, including improving outer join and bitmap scan
+ selection logic (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible wrong answers or crash when a PL/pgSQL function tries
+ to <literal>RETURN</> from within an <literal>EXCEPTION</> block
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PANIC during enlargement of a hash index (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-3">
+ <title>Release 8.2.3</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-07</simpara>
+ </note>
+
+ <para>
+ This release contains two fixes from 8.2.2.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.3</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove overly-restrictive check for type length in constraints and
+ functional indexes(Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-2">
+ <title>Release 8.2.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-02-05</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.1, including
+ a security fix.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.2</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.X.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Remove security vulnerabilities that allowed connected users
+ to read backend memory (Tom)
+ </para>
+
+ <para>
+ The vulnerabilities involve suppressing the normal check that a SQL
+ function returns the data type it's declared to, and changing the
+ data type of a table column (CVE-2007-0555, CVE-2007-0556). These
+ errors can easily be exploited to cause a backend crash, and in
+ principle might be used to read database content that the user
+ should not be able to access.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix not-so-rare-anymore bug wherein btree index page splits could fail
+ due to choosing an infeasible split point (Heikki Linnakangas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix Borland C compile scripts (L Bayuk)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Properly handle <function>to_char('CC')</> for years ending in
+ <literal>00</> (Tom)
+ </para>
+
+ <para>
+ Year 2000 is in the twentieth century, not the twenty-first.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect permission check in
+ <literal>information_schema.key_column_usage</> view (Tom)
+ </para>
+
+ <para>
+ The symptom is <quote>relation with OID nnnnn does not exist</> errors.
+ To get this fix without using <command>initdb</>, use <command>CREATE OR
+ REPLACE VIEW</> to install the corrected definition found in
+ <filename>share/information_schema.sql</>. Note you will need to do
+ this in each database.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <command>VACUUM</> performance for databases with many tables (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potentially incorrect results from index searches using
+ <literal>ROW</> inequality conditions (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tighten security of multi-byte character processing for UTF8 sequences
+ over three bytes long (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bogus <quote>permission denied</> failures occurring on Windows
+ due to attempts to fsync already-deleted files (Magnus, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug that could cause the statistics collector
+ to hang on Windows (Magnus)
+ </para>
+
+ <para>
+ This would in turn lead to autovacuum not working.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crashes when an already-in-use PL/pgSQL function is
+ updated (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible errors in processing PL/pgSQL exception blocks (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-1">
+ <title>Release 8.2.1</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2007-01-08</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.2.
+ For information about new features in the 8.2 major release, see
+ <xref linkend="release-8-2">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.2.1</title>
+
+ <para>
+ A dump/restore is not required for those running 8.2.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
+ <literal>LIMIT NULL</>) (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <filename>Several /contrib/tsearch2</> fixes (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ On Windows, make log messages coming from the operating system use
+ <acronym>ASCII</> encoding (Hiroshi Saito)
+ </para>
+
+ <para>
+ This fixes a conversion problem when there is a mismatch between
+ the encoding of the operating system and database server.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix Windows linking of <application>pg_dump</> using
+ <filename>win32.mak</>
+ (Hiroshi Saito)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner mistakes for outer join queries (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix several problems in queries involving sub-SELECTs (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential crash in SPI during subtransaction abort (Tom)
+ </para>
+
+ <para>
+ This affects all PL functions since they all use SPI.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve build speed of <acronym>PDF</> documentation (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimization decisions related to index scans (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <application>psql</> print multi-byte combining characters as
+ before, rather than output as <literal>\u</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve index usage of regular expressions that use parentheses (Tom)
+ </para>
+
+ <para>
+ This improves <application>psql</> <literal>\d</> performance also.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <application>pg_dumpall</> assume that databases have public
+ <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
+ </para>
+
+ <para>
+ This preserves the previous behavior that anyone can connect to a
+ database if allowed by <filename>pg_hba.conf</>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2">
+ <title>Release 8.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2006-12-05</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ This release adds many functionality and performance improvements that
+ were requested by users, including:
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Query language enhancements including <command>INSERT/UPDATE/DELETE
+ RETURNING</command>, multirow <literal>VALUES</literal> lists, and
+ optional target-table alias in
+ <command>UPDATE</>/<command>DELETE</command>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Index creation without blocking concurrent
+ <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
+ operations
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Many query optimization improvements, including support for
+ reordering outer joins
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improved sorting performance with lower memory usage
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ More efficient locking with better concurrency
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ More efficient vacuuming
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Easier administration of warm standby servers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New <literal>FILLFACTOR</literal> support for tables and indexes
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Monitoring, logging, and performance tuning additions
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ More control over creating and dropping objects
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Table inheritance relationships can be defined
+ for and removed from pre-existing tables
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <command>COPY TO</command> can copy the output of an arbitrary
+ <command>SELECT</command> statement
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Array improvements, including nulls in arrays
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Aggregate-function improvements, including multiple-input
+ aggregates and SQL:2003 statistical functions
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Many <filename>contrib/</filename> improvements
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Migration to Version 8.2</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:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Set <link
+ linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
+ to <literal>on</> by default (Bruce)
+ </para>
+
+ <para>
+ This issues a warning if backslash escapes are used in
+ <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
+ strings</link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change the <link linkend="sql-syntax-row-constructors">row
+ constructor syntax</link> (<literal>ROW(...)</>) so that
+ list elements <literal>foo.*</> will be expanded to a list
+ of their member fields, rather than creating a nested
+ row type field as formerly (Tom)
+ </para>
+
+ <para>
+ The new behavior is substantially more useful since it
+ allows, for example, triggers to check for data changes
+ with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
+ The old behavior is still available by omitting <literal>.*</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <link linkend="row-wise-comparison">row comparisons</link>
+ follow <acronym>SQL</> standard semantics and allow them
+ to be used in index scans (Tom)
+ </para>
+
+ <para>
+ Previously, row = and <> comparisons followed the
+ standard but < <= > >= did not. A row comparison
+ can now be used as an index constraint for a multicolumn
+ index matching the row value.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
+ tests follow <acronym>SQL</> standard semantics (Tom)
+ </para>
+
+ <para>
+ The former behavior conformed to the standard for simple cases
+ with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
+ true if any row field was non-null, whereas the standard says it
+ should return true only when all fields are non-null.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
+ CONSTRAINT</></link> affect only one constraint (Kris Jurka)
+ </para>
+
+ <para>
+ In previous releases, <command>SET CONSTRAINT</> modified
+ all constraints with a matching name. In this release,
+ the schema search path is used to modify only the first
+ matching constraint. A schema specification is also
+ supported. This more nearly conforms to the SQL standard.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove <literal>RULE</> permission for tables, for security reasons
+ (Tom)
+ </para>
+
+ <para>
+ As of this release, only a table's owner can create or modify
+ rules for the table. For backwards compatibility,
+ <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
+ but it does nothing.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Array comparison improvements (Tom)
+ </para>
+
+ <para>
+ Now array dimensions are also compared.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <link linkend="functions-array">array concatenation</link>
+ to match documented behavior (Tom)
+ </para>
+
+ <para>
+ This changes the previous behavior where concatenation
+ would modify the array lower bound.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make command-line options of <application>postmaster</>
+ and <link linkend="app-postgres"><application>postgres</></link>
+ identical (Peter)
+ </para>
+
+ <para>
+ This allows the postmaster to pass arguments to each backend
+ without using <literal>-o</>. Note that some options are now
+ only available as long-form options, because there were conflicting
+ single-letter options.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Deprecate use of <application>postmaster</> symbolic link (Peter)
+ </para>
+
+ <para>
+ <application>postmaster</> and <application>postgres</>
+ commands now act identically, with the behavior determined
+ by command-line options. The <application>postmaster</> symbolic link is
+ kept for compatibility, but is not really needed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <link
+ linkend="guc-log-duration"><varname>log_duration</></link>
+ to output even if the query is not output (Tom)
+ </para>
+
+ <para>
+ In prior releases, <varname>log_duration</> only printed if
+ the query appeared earlier in the log.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <link
+ linkend="functions-formatting"><function>to_char(time)</></link>
+ and <link
+ linkend="functions-formatting"><function>to_char(interval)</></link>
+ treat <literal>HH</> and <literal>HH12</> as 12-hour
+ intervals
+ </para>
+
+ <para>
+ Most applications should use <literal>HH24</> unless they
+ want a 12-hour display.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Zero unmasked bits in conversion from <link
+ linkend="datatype-inet"><type>INET</></link> to <link
+ linkend="datatype-inet"><type>CIDR</></link> (Tom)
+ </para>
+
+ <para>
+ This ensures that the converted value is actually valid for
+ <type>CIDR</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove <varname>australian_timezones</> configuration variable
+ (Joachim Wieland)
+ </para>
+
+ <para>
+ This variable has been superseded by a more general facility
+ for configuring timezone abbreviations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve cost estimation for nested-loop index scans (Tom)
+ </para>
+
+ <para>
+ This might eliminate the need to set unrealistically small
+ values of <link
+ linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
+ If you have been using a very small <varname>random_page_cost</>,
+ please recheck your test cases.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change behavior of <command>pg_dump</> <literal>-n</> and
+ <literal>-t</> options. (Greg Sabino Mullane)
+ </para>
+ <para>
+ See the <command>pg_dump</> manual page for details.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <link linkend="libpq"><application>libpq</></link>
+ <function>PQdsplen()</> to return a useful value (Martijn
+ van Oosterhout)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Declare <link linkend="libpq"><application>libpq</></link>
+ <function>PQgetssl()</> as returning <literal>void *</>,
+ rather than <literal>SSL *</> (Martijn van Oosterhout)
+ </para>
+
+ <para>
+ This allows applications to use the function without including
+ the OpenSSL headers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ C-language loadable modules must now include a
+ <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
+ macro call for version compatibility checking
+ (Martijn van Oosterhout)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ For security's sake, modules used by a PL/PerlU function are no
+ longer available to PL/Perl functions (Andrew)
+ </para>
+ <note>
+ <para>
+ This also implies that data can no longer be shared between a PL/Perl
+ function and a PL/PerlU function.
+ Some Perl installations have not been compiled with the correct flags
+ to allow multiple interpreters to exist within a single process.
+ In this situation PL/Perl and PL/PerlU cannot both be used in a
+ single backend. The solution is to get a Perl installation which
+ supports multiple interpreters.
+ </para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para>
+ In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
+ <function>xml_is_well_formed()</> (Tom)
+ </para>
+
+ <para>
+ <function>xml_valid()</> will remain for backward compatibility,
+ but its behavior will change to do schema checking in a future
+ release.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove <filename>contrib/ora2pg/</>, now at <ulink
+ url="http://www.samse.fr/GPL/ora2pg"></ulink>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove contrib modules that have been migrated to PgFoundry:
+ <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
+ <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove abandoned contrib modules:
+ <filename>mSQL-interface</>, <filename>tips</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
+ </para>
+
+ <para>
+ These ports no longer had active maintainers.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <para>
+ Below you will find a detailed account of the
+ changes between <productname>PostgreSQL</productname> 8.2 and
+ the previous major release.
+ </para>
+
+ <sect3>
+ <title>Performance Improvements</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow the planner to reorder <link linkend="queries-join">outer
+ joins</link> in some circumstances (Tom)
+ </para>
+
+ <para>
+ In previous releases, outer joins would always be evaluated in
+ the order written in the query. This change allows the
+ query optimizer to consider reordering outer joins, in cases where
+ it can determine that the join order can be changed without
+ altering the meaning of the query. This can make a
+ considerable performance difference for queries involving
+ multiple outer joins or mixed inner and outer joins.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve efficiency of <link
+ linkend="functions-comparisons"><literal>IN</>
+ (list-of-expressions)</link> clauses (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve sorting speed and reduce memory usage (Simon, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve subtransaction performance (Alvaro, Itagaki Takahiro,
+ Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>FILLFACTOR</> to <link
+ linkend="SQL-CREATETABLE">table</link> and <link
+ linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
+ Takahiro)
+ </para>
+
+ <para>
+ This leaves extra free space in each table or index page,
+ allowing improved performance as the database grows. This
+ is particularly valuable to maintain clustering.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Increase default values for <link
+ linkend="guc-shared-buffers"><varname>shared_buffers</></link>
+ and <varname>max_fsm_pages</>
+ (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve locking performance by breaking the lock manager tables into
+ sections
+ (Tom)
+ </para>
+
+ <para>
+ This allows locking to be more fine-grained, reducing
+ contention.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reduce locking requirements of sequential scans (Qingqing
+ Zhou)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reduce locking required for database creation and destruction
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve the optimizer's selectivity estimates for <link
+ linkend="functions-like"><literal>LIKE</></link>, <link
+ linkend="functions-like"><literal>ILIKE</></link>, and
+ <link linkend="functions-posix-regexp">regular expression</link>
+ operations (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve planning of joins to <link linkend="ddl-inherit">inherited
+ tables</link> and <link linkend="queries-union"><literal>UNION
+ ALL</></link> views (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="guc-constraint-exclusion">constraint
+ exclusion</link> to be applied to <link
+ linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
+ <command>DELETE</> queries (Tom)
+ </para>
+
+ <para>
+ <command>SELECT</> already honored constraint exclusion.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve planning of constant <literal>WHERE</> clauses, such as
+ a condition that depends only on variables inherited from an
+ outer query level (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Protocol-level unnamed prepared statements are re-planned
+ for each set of <literal>BIND</> values (Tom)
+ </para>
+
+ <para>
+ This improves performance because the exact parameter values
+ can be used in the plan.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
+ Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid extra scan of tables without indexes during <link
+ linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
+ indexing (Oleg, Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove dead index entries before B-Tree page split (Junji
+ Teramoto)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Server Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow a forced switch to a new transaction log file (Simon, Tom)
+ </para>
+
+ <para>
+ This is valuable for keeping warm standby slave servers
+ in sync with the master. Transaction log file switching now also happens
+ automatically during <link
+ linkend="functions-admin"><function>pg_stop_backup()</></link>.
+ This ensures that all
+ transaction log files needed for recovery can be archived immediately.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <acronym>WAL</> informational functions (Simon)
+ </para>
+
+ <para>
+ Add functions for interrogating the current transaction log insertion
+ point and determining <acronym>WAL</> filenames from the
+ hex <acronym>WAL</> locations displayed by <link
+ linkend="functions-admin"><function>pg_stop_backup()</></link>
+ and related functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve recovery from a crash during <acronym>WAL</> replay (Simon)
+ </para>
+
+ <para>
+ The server now does periodic checkpoints during <acronym>WAL</>
+ recovery, so if there is a crash, future <acronym>WAL</>
+ recovery is shortened. This also eliminates the need for
+ warm standby servers to replay the entire log since the
+ base backup if they crash.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve reliability of long-term <acronym>WAL</> replay
+ (Heikki, Simon, Tom)
+ </para>
+
+ <para>
+ Formerly, trying to roll forward through more than 2 billion
+ transactions would not work due to XID wraparound. This meant
+ warm standby servers had to be reloaded
+ from fresh base backups periodically.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="guc-archive-timeout"><varname>archive_timeout</></link>
+ to force transaction log file switches at a given interval (Simon)
+ </para>
+
+ <para>
+ This enforces a maximum replication delay for warm standby servers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
+ authentication (Magnus Hagander)
+ </para>
+
+ <para>
+ This is particularly useful for platforms that do not
+ support <acronym>PAM</>, such as Windows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="sql-grant-description-objects"><literal>GRANT
+ CONNECT ON DATABASE</></link> (Gevik Babakhani)
+ </para>
+
+ <para>
+ This gives SQL-level control over database access. It works as
+ an additional filter on top of the existing
+ <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
+ controls.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <link linkend="ssl-tcp"><acronym>SSL</>
+ Certificate Revocation List</link> (<acronym>CRL</>) files
+ (Libor Hohoš)
+ </para>
+
+ <para>
+ The server and <application>libpq</> both recognize <acronym>CRL</>
+ files now.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="GiST"><acronym>GiST</></link> indexes are
+ now clusterable (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove routine autovacuum server log entries (Bruce)
+ </para>
+
+ <para>
+ <link
+ linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+ now shows autovacuum activity.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Track maximum XID age within individual tables, instead of whole databases (Alvaro)
+ </para>
+
+ <para>
+ This reduces the overhead involved in preventing transaction
+ ID wraparound, by avoiding unnecessary VACUUMs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add last vacuum and analyze timestamp columns to the stats
+ collector (Larry Rosenman)
+ </para>
+
+ <para>
+ These values now appear in the <link
+ linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
+ system views.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of statistics monitoring, especially
+ <varname>stats_command_string</>
+ (Tom, Bruce)
+ </para>
+
+ <para>
+ This release enables <varname>stats_command_string</> by
+ default, now that its overhead is minimal. This means
+ <link
+ linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+ will now show all active queries by default.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a <literal>waiting</> column to <link
+ linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+ (Tom)
+ </para>
+
+ <para>
+ This allows <structname>pg_stat_activity</> to show all the
+ information included in the <application>ps</> display.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add configuration parameter <link
+ linkend="guc-update-process-title"><varname>update_process_title</></link>
+ to control whether the <application>ps</> display is updated
+ for every command (Bruce)
+ </para>
+
+ <para>
+ On platforms where it is expensive to update the <application>ps</>
+ display, it might be worthwhile to turn this off and rely solely on
+ <structname>pg_stat_activity</> for status information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow units to be specified in configuration settings
+ (Peter)
+ </para>
+
+ <para>
+ For example, you can now set <link
+ linkend="guc-shared-buffers"><varname>shared_buffers</></link>
+ to <literal>32MB</> rather than mentally converting sizes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <link linkend="config-setting">include
+ directives</link> in <filename>postgresql.conf</> (Joachim
+ Wieland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve logging of protocol-level prepare/bind/execute
+ messages (Bruce, Tom)
+ </para>
+
+ <para>
+ Such logging now shows statement names, bind parameter
+ values, and the text of the query being executed. Also,
+ the query text is properly included in logged error messages
+ when enabled by <varname>log_min_error_statement</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent <link
+ linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
+ from being set to unsafe values
+ </para>
+
+ <para>
+ On platforms where we can determine the actual kernel stack depth
+ limit (which is most), make sure that the initial default value of
+ <varname>max_stack_depth</> is safe, and reject attempts to set it
+ to unsafely large values.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Enable highlighting of error location in query in more
+ cases (Tom)
+ </para>
+
+ <para>
+ The server is now able to report a specific error location for
+ some semantic errors (such as unrecognized column name), rather
+ than just for basic syntax errors as before.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <quote>failed to re-find parent key</> errors in
+ <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean out <filename>pg_internal.init</> cache files during server
+ restart (Simon)
+ </para>
+
+ <para>
+ This avoids a hazard that the cache files might contain stale
+ data after PITR recovery.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix race condition for truncation of a large relation across a
+ gigabyte boundary by <command>VACUUM</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug causing needless deadlock errors on row-level locks (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bugs affecting multi-gigabyte hash indexes (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Each backend process is now its own process group leader (Tom)
+ </para>
+
+ <para>
+ This allows query cancel to abort subprocesses invoked from a
+ backend or archive/recovery process.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Query Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
+ linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
+ linkend="SQL-DELETE"><command>DELETE</></link>
+ <literal>RETURNING</> (Jonah Harris, Tom)
+ </para>
+
+ <para>
+ This allows these commands to return values, such as the
+ computed serial key for a new row. In the <command>UPDATE</>
+ case, values from the updated version of the row are returned.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for multiple-row <link
+ linkend="queries-values"><literal>VALUES</></link> clauses,
+ per SQL standard (Joe, Tom)
+ </para>
+
+ <para>
+ This allows <command>INSERT</> to insert multiple rows of
+ constants, or queries to generate result sets using constants.
+ For example, <literal>INSERT ... VALUES (...), (...),
+ ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
+ ....) AS alias(f1, ...)</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
+ and <link linkend="SQL-DELETE"><command>DELETE</></link>
+ to use an alias for the target table (Atsushi Ogawa)
+ </para>
+
+ <para>
+ The SQL standard does not permit an alias in these commands, but
+ many database systems allow one anyway for notational convenience.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
+ to set multiple columns with a list of values (Susanne
+ Ebrecht)
+ </para>
+
+ <para>
+ This is basically a short-hand for assigning the columns
+ and values in pairs. The syntax is <literal>UPDATE tab
+ SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make row comparisons work per standard (Tom)
+ </para>
+
+ <para>
+ The forms <, <=, >, >= now compare rows lexicographically,
+ that is, compare the first elements, if equal compare the second
+ elements, and so on. Formerly they expanded to an AND condition
+ across all the elements, which was neither standard nor very useful.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
+ option to <command>TRUNCATE</> (Joachim Wieland)
+ </para>
+
+ <para>
+ This causes <command>TRUNCATE</> to automatically include all tables
+ that reference the specified table(s) via foreign keys. While
+ convenient, this is a dangerous tool — use with caution!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
+ in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
+ command (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="functions-comparisons"><literal>IS NOT
+ DISTINCT FROM</></link> (Pavel Stehule)
+ </para>
+
+ <para>
+ This operator is similar to equality (<literal>=</>), but
+ evaluates to true when both left and right operands are
+ <literal>NULL</>, and to false when just one is, rather than
+ yielding <literal>NULL</> in these cases.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve the length output used by <link
+ linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
+ (Tom)
+ </para>
+
+ <para>
+ When all corresponding columns are of the same defined length, that
+ length is used for the result, rather than a generic length.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="functions-like"><literal>ILIKE</></link>
+ to work for multi-byte encodings (Tom)
+ </para>
+
+ <para>
+ Internally, <literal>ILIKE</> now calls <function>lower()</>
+ and then uses <literal>LIKE</>. Locale-specific regular
+ expression patterns still do not work in these encodings.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Enable <link
+ linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
+ to be turned <literal>on</> (Kevin Grittner)
+ </para>
+
+ <para>
+ This allows backslash escaping in strings to be disabled,
+ making <productname>PostgreSQL</> more
+ standards-compliant. The default is <literal>off</> for backwards
+ compatibility, but future releases will default this to <literal>on</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Do not flatten subqueries that contain <literal>volatile</>
+ functions in their target lists (Jaime Casanova)
+ </para>
+
+ <para>
+ This prevents surprising behavior due to multiple evaluation
+ of a <literal>volatile</> function (such as <function>random()</>
+ or <function>nextval()</>). It might cause performance
+ degradation in the presence of functions that are unnecessarily
+ marked as <literal>volatile</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add system views <link
+ linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
+ and <link
+ linkend="view-pg-cursors"><literal>pg_cursors</></link>
+ to show prepared statements and open cursors (Joachim Wieland, Neil)
+ </para>
+
+ <para>
+ These are very useful in pooled connection setups.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support portal parameters in <link
+ linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
+ linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
+ </para>
+
+ <para>
+ This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
+ work in these commands.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ If <acronym>SQL</>-level <link
+ linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
+ are unspecified, infer their types from the content of the
+ query (Neil)
+ </para>
+
+ <para>
+ Protocol-level <command>PREPARE</> already did this.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
+ two billion (Dhanaraj M)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Object Manipulation Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <literal>TABLESPACE</> clause to <link
+ linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
+ (Neil)
+ </para>
+
+ <para>
+ This allows a tablespace to be specified for the new table.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>ON COMMIT</> clause to <link
+ linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
+ (Neil)
+ </para>
+
+ <para>
+ This allows temporary tables to be truncated or dropped on
+ transaction commit. The default behavior is for the table
+ to remain until the session ends.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>INCLUDING CONSTRAINTS</> to <link
+ linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
+ (Greg Stark)
+ </para>
+
+ <para>
+ This allows easy copying of <literal>CHECK</> constraints to a new
+ table.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the creation of placeholder (shell) <link
+ linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
+ </para>
+
+ <para>
+ A shell type declaration creates a type name, without specifying
+ any of the details of the type. Making a shell type is useful
+ because it allows cleaner declaration of the type's input/output
+ functions, which must exist before the type can be defined <quote>for
+ real</>. The syntax is <command>CREATE TYPE <replaceable
+ class="parameter">typename</replaceable></>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
+ now support multiple input parameters (Sergey Koposov, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new aggregate creation <link
+ linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
+ </para>
+
+ <para>
+ The new syntax is <command>CREATE AGGREGATE
+ <replaceable>aggname</> (<replaceable>input_type</>)
+ (<replaceable>parameter_list</>)</command>. This more
+ naturally supports the new multi-parameter aggregate
+ functionality. The previous syntax is still supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
+ to remove a previously set role password (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <command>DROP</> object <literal>IF EXISTS</> for many
+ object types (Andrew)
+ </para>
+
+ <para>
+ This allows <command>DROP</> operations on non-existent
+ objects without generating an error.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
+ to drop all objects owned by a role (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
+ OWNED</></link> to reassign ownership of all objects owned
+ by a role (Alvaro)
+ </para>
+
+ <para>
+ This, and <literal>DROP OWNED</> above, facilitate dropping
+ roles.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
+ syntax (Bruce)
+ </para>
+
+ <para>
+ This was added for setting sequence-specific permissions.
+ <literal>GRANT ON TABLE</> for sequences is still supported
+ for backward compatibility.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
+ permission for sequences that allows only <function>currval()</>
+ and <function>nextval()</>, not <function>setval()</>
+ (Bruce)
+ </para>
+
+ <para>
+ <literal>USAGE</> permission allows more fine-grained
+ control over sequence access. Granting <literal>USAGE</>
+ allows users to increment
+ a sequence, but prevents them from setting the sequence to
+ an arbitrary value using <function>setval()</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
+ [ NO ] INHERIT</></link> (Greg Stark)
+ </para>
+
+ <para>
+ This allows inheritance to be adjusted dynamically, rather than
+ just at table creation and destruction. This is very valuable
+ when using inheritance to implement table partitioning.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-COMMENT">comments</link> on global
+ objects to be stored globally (Kris Jurka)
+ </para>
+
+ <para>
+ Previously, comments attached to databases were stored in individual
+ databases, making them ineffective, and there was no provision
+ at all for comments on roles or tablespaces. This change adds a new
+ shared catalog <link
+ linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
+ and stores comments on databases, roles, and tablespaces therein.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Utility Command Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add option to allow indexes to be created without blocking
+ concurrent writes to the table (Greg Stark, Tom)
+ </para>
+
+ <para>
+ The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
+ INDEX CONCURRENTLY</></link>. The default behavior is
+ still to block table modification while a index is being
+ created.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Provide <link linkend="functions-advisory-locks">advisory
+ locking</link> functionality (Abhijit Menon-Sen, Tom)
+ </para>
+
+ <para>
+ This is a new locking API designed to replace what used to be
+ in /contrib/userlock. The userlock code is now on pgfoundry.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-COPY"><command>COPY</></link> to
+ dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
+ Zak)
+ </para>
+
+ <para>
+ This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
+ queries. The syntax is <literal>COPY (SELECT ...) TO</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make the <link linkend="SQL-COPY"><command>COPY</></link>
+ command return a command tag that includes the number of
+ rows copied (Volkan YAZICI)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
+ to expire rows without being affected by other concurrent
+ <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <link linkend="APP-INITDB"><application>initdb</></link>
+ detect the operating system locale and set the default
+ <varname>DateStyle</> accordingly (Peter)
+ </para>
+
+ <para>
+ This makes it more likely that the installed
+ <filename>postgresql.conf</> <varname>DateStyle</> value will
+ be as desired.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reduce number of progress messages displayed by <application>initdb</> (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Date/Time Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow full timezone names in <link
+ linkend="datatype-datetime"><type>timestamp</></link> input values
+ (Joachim Wieland)
+ </para>
+
+ <para>
+ For example, <literal>'2006-05-24 21:11
+ America/New_York'::timestamptz</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support configurable timezone abbreviations (Joachim Wieland)
+ </para>
+
+ <para>
+ A desired set of timezone abbreviations can be chosen via the
+ configuration parameter <link
+ linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
+ and <link
+ linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
+ views to show supported timezones (Magnus Hagander)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
+ <link
+ linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
+ and <link
+ linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
+ (Bruce)
+ </para>
+
+ <para>
+ <function>clock_timestamp()</> is the current wall-clock time,
+ <function>statement_timestamp()</> is the time the current
+ statement arrived at the server, and
+ <function>transaction_timestamp()</> is an alias for
+ <function>now()</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link
+ linkend="functions-formatting"><function>to_char()</></link>
+ to print localized month and day names (Euler Taveira de
+ Oliveira)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link
+ linkend="functions-formatting"><function>to_char(time)</></link>
+ and <link
+ linkend="functions-formatting"><function>to_char(interval)</></link>
+ to output <acronym>AM</>/<acronym>PM</> specifications
+ (Bruce)
+ </para>
+
+ <para>
+ Intervals and times are treated as 24-hour periods, e.g.
+ <literal>25 hours</> is considered <acronym>AM</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new function <link
+ linkend="functions-datetime-table"><function>justify_interval()</></link>
+ to adjust interval units (Mark Dilger)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow timezone offsets up to 14:59 away from GMT
+ </para>
+
+ <para>
+ Kiribati uses GMT+14, so we'd better accept that.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Interval computation improvements (Michael Glaesemann, Bruce)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Other Data Type and Function Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow arrays to contain <literal>NULL</> elements (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow assignment to array elements not contiguous with the existing
+ entries (Tom)
+ </para>
+
+ <para>
+ The intervening array positions will be filled with nulls.
+ This is per SQL standard.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New built-in <link linkend="functions-array">operators</link>
+ for array-subset comparisons (<literal>@></>,
+ <literal><@</>, <literal>&&</>) (Teodor, Tom)
+ </para>
+
+ <para>
+ These operators can be indexed for many data types using
+ <acronym>GiST</> or <acronym>GIN</> indexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add convenient arithmetic <link
+ linkend="cidr-inet-operators-table">operations</link> on
+ <type>INET</>/<type>CIDR</> values (Stephen R. van den
+ Berg)
+ </para>
+
+ <para>
+ The new operators are <literal>&</> (and), <literal>|</>
+ (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
+ <type>inet</> <literal>-</> <type>int8</>, and
+ <type>inet</> <literal>-</> <type>inet</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new <link
+ linkend="functions-aggregate-statistics-table">aggregate functions</link>
+ from SQL:2003 (Neil)
+ </para>
+
+ <para>
+ The new functions are <function>var_pop()</>,
+ <function>var_samp()</>, <function>stddev_pop()</>, and
+ <function>stddev_samp()</>. <function>var_samp()</> and
+ <function>stddev_samp()</> are merely renamings of the
+ existing aggregates <function>variance()</> and
+ <function>stddev()</>. The latter names remain available
+ for backward compatibility.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add SQL:2003 statistical <link
+ linkend="functions-aggregate-statistics-table">aggregates</link>
+ (Sergey Koposov)
+ </para>
+
+ <para>
+ New functions: <function>regr_intercept()</>,
+ <function>regr_slope()</>, <function>regr_r2()</>,
+ <function>corr()</>, <function>covar_samp()</>,
+ <function>covar_pop()</>, <function>regr_avgx()</>,
+ <function>regr_avgy()</>, <function>regr_sxy()</>,
+ <function>regr_sxx()</>, <function>regr_syy()</>,
+ <function>regr_count()</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
+ based on other domains (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Properly enforce domain <link
+ linkend="ddl-constraints"><literal>CHECK</></link> constraints
+ everywhere (Neil, Tom)
+ </para>
+
+ <para>
+ For example, the result of a user-defined function that is
+ declared to return a domain type is now checked against the
+ domain's constraints. This closes a significant hole in the domain
+ implementation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix problems with dumping renamed <link
+ linkend="datatype-serial"><type>SERIAL</></link> columns
+ (Tom)
+ </para>
+
+ <para>
+ The fix is to dump a <type>SERIAL</> column by explicitly
+ specifying its <literal>DEFAULT</> and sequence elements,
+ and reconstructing the <type>SERIAL</> column on reload
+ using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
+ SEQUENCE OWNED BY</></link> command. This also allows
+ dropping a <type>SERIAL</> column specification.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a server-side sleep function <link
+ linkend="functions-datetime-delay"><function>pg_sleep()</></link>
+ (Joachim Wieland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add all comparison operators for the <link
+ linkend="datatype-oid"><type>tid</></link> (tuple id) data
+ type (Mark Kirkwood, Greg Stark, Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>PL/PgSQL Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
+ trigger parameters (Andrew)
+ </para>
+
+ <para>
+ <literal>TG_relname</> is now deprecated. Comparable
+ changes have been made in the trigger parameters for the other
+ PLs as well.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <literal>FOR</> statements to return values to scalars
+ as well as records and row types (Pavel Stehule)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a <literal>BY</> clause to the <literal>FOR</> loop,
+ to control the iteration increment (Jaime Casanova)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>STRICT</> to <link
+ linkend="plpgsql-statements-sql-onerow"><command>SELECT
+ INTO</></link> (Matt Miller)
+ </para>
+
+ <para>
+ <literal>STRICT</> mode throws an exception if more or less
+ than one row is returned by the <command>SELECT</>, for
+ <productname>Oracle PL/SQL</> compatibility.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>PL/Perl Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <literal>table_name</> and <literal>table_schema</> to
+ trigger parameters (Adam Sjøgren)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add prepared queries (Dmitry Karasik)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <literal>$_TD</> trigger data a global variable (Andrew)
+ </para>
+
+ <para>
+ Previously, it was lexical, which caused unexpected sharing
+ violations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Run PL/Perl and PL/PerlU in separate interpreters, for security
+ reasons (Andrew)
+ </para>
+ <para>
+ In consequence, they can no longer share data nor loaded modules.
+ Also, if Perl has not been compiled with the requisite flags to
+ allow multiple interpreters, only one of these languages can be used
+ in any given backend process.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>PL/Python Server-Side Language Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Named parameters are passed as ordinary variables, as well as in the
+ <literal>args[]</> array (Sven Suursoho)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>table_name</> and <literal>table_schema</> to
+ trigger parameters (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow returning of composite types and result sets (Sven Suursoho)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Return result-set as <literal>list</>, <literal>iterator</>,
+ or <literal>generator </>(Sven Suursoho)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow functions to return <literal>void</> (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Python 2.5 is now supported (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add new command <literal>\password</> for changing role
+ password with client-side password encryption (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <literal>\c</> to connect to a new host and port
+ number (David, Volkan YAZICI)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add tablespace display to <literal>\l+</> (Philip Yarra)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <literal>\df</> slash command to include the argument
+ names and modes (<literal>OUT</> or <literal>INOUT</>) of
+ the function (David Fetter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support binary <command>COPY</> (Andreas Pflug)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add option to run the entire session in a single transaction
+ (Simon)
+ </para>
+
+ <para>
+ Use option <literal>-1</> or <literal>--single-transaction</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support for automatically retrieving <command>SELECT</>
+ results in batches using a cursor (Chris Mair)
+ </para>
+
+ <para>
+ This is enabled using <command>\set FETCH_COUNT
+ <replaceable>n</></command>. This
+ feature allows large result sets to be retrieved in
+ <application>psql</> without attempting to buffer the entire
+ result set in memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make multi-line values align in the proper column
+ (Martijn van Oosterhout)
+ </para>
+
+ <para>
+ Field values containing newlines are now displayed in a more
+ readable fashion.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Save multi-line statements as a single entry, rather than
+ one line at a time (Sergey E. Koposov)
+ </para>
+
+ <para>
+ This makes up-arrow recall of queries easier. (This is
+ not available on Windows, because that platform uses the native
+ command-line editing present in the operating system.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make the line counter 64-bit so it can handle files with more
+ than two billion lines (David Fetter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Report both the returned data and the command status tag
+ for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
+ RETURNING</> (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow complex selection of objects to be included or excluded
+ by <application>pg_dump</> (Greg Sabino Mullane)
+ </para>
+
+ <para>
+ <application>pg_dump</> now supports multiple <literal>-n</>
+ (schema) and <literal>-t</> (table) options, and adds
+ <literal>-N</> and <literal>-T</> options to exclude objects.
+ Also, the arguments of these switches can now be wild-card expressions
+ rather than single object names, for example
+ <literal>-t 'foo*'</>, and a schema can be part of
+ a <literal>-t</> or <literal>-T</> switch, for example
+ <literal>-t schema1.table1</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
+ <literal>--no-data-for-failed-tables</> option to suppress
+ loading data if table creation failed (i.e., the table already
+ exists) (Martin Pitt)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
+ option to run the entire session in a single transaction
+ (Simon)
+ </para>
+
+ <para>
+ Use option <literal>-1</> or <literal>--single-transaction</>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title><link linkend="libpq"><application>libpq</></link> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="libpq-misc"><function>PQencryptPassword()</></link>
+ to encrypt passwords (Tom)
+ </para>
+
+ <para>
+ This allows passwords to be sent pre-encrypted for commands
+ like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
+ PASSWORD</></link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add function <link
+ linkend="libpq-threading"><function>PQisthreadsafe()</></link>
+ (Bruce)
+ </para>
+
+ <para>
+ This allows applications to query the thread-safety status
+ of the library.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
+ <link
+ linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
+ and related functions to return information about previously
+ prepared statements and open cursors (Volkan YAZICI)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
+ from <link
+ linkend="libpq-pgservice"><filename>pg_service.conf</></link>
+ (Laurenz Albe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow a hostname in <link
+ linkend="libpq-pgpass"><filename>~/.pgpass</></link>
+ to match the default socket directory (Bruce)
+ </para>
+
+ <para>
+ A blank hostname continues to match any Unix-socket connection,
+ but this addition allows entries that are specific to one of
+ several postmasters on the machine.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
+ put its result into a variable (Joachim Wieland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
+ (Joachim Wieland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add regression tests (Joachim Wieland, Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Major source code cleanups (Joachim Wieland, Michael)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title><application>Windows</> Port</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
+ server (Magnus, Hiroshi Saito)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <acronym>MSVC</> support for utility commands and <link
+ linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
+ Saito)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for Windows code pages <literal>1253</>,
+ <literal>1254</>, <literal>1255</>, and <literal>1257</>
+ (Kris Jurka)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Drop privileges on startup, so that the server can be started from
+ an administrative account (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Stability fixes (Qingqing Zhou, Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add native semaphore implementation (Qingqing Zhou)
+ </para>
+
+ <para>
+ The previous code mimicked SysV semaphores.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Source Code Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
+ Inverted iNdex) index access method (Teodor, Oleg)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove R-tree indexing (Tom)
+ </para>
+
+ <para>
+ Rtree has been re-implemented using <link
+ linkend="GiST"><acronym>GiST</></link>. Among other
+ differences, this means that rtree indexes now have support
+ for crash recovery via write-ahead logging (WAL).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reduce libraries needlessly linked into the backend (Martijn
+ van Oosterhout, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a configure flag to allow libedit to be preferred over
+ <acronym>GNU</> readline (Bruce)
+ </para>
+
+ <para>
+ Use configure <link
+ linkend="configure"><literal>--with-libedit-preferred</></link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow installation into directories containing spaces
+ (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve ability to relocate installation directories (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for <productname>Solaris x86_64</> using the
+ <productname>Solaris</> compiler (Pierre Girard, Theo
+ Schlossnagle, Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <application>DTrace</> support (Robert Lor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>PG_VERSION_NUM</> for use by third-party
+ applications wanting to test the backend version in C using >
+ and < comparisons (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
+ (Mark Wong)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>LWLOCK_STATS</> define to report locking
+ activity (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Emit warnings for unknown <application>configure</> options
+ (Martijn van Oosterhout)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add server support for <quote>plugin</> libraries
+ that can be used for add-on tasks such as debugging and performance
+ measurement (Korry Douglas)
+ </para>
+
+ <para>
+ This consists of two features: a table of <quote>rendezvous
+ variables</> that allows separately-loaded shared libraries to
+ communicate, and a new configuration parameter <link
+ linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
+ that allows libraries to be loaded into specific sessions without
+ explicit cooperation from the client application. This allows
+ external add-ons to implement features such as a PL/PgSQL debugger.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Rename existing configuration parameter
+ <varname>preload_libraries</> to <link
+ linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
+ (Tom)
+ </para>
+
+ <para>
+ This was done for clarity in comparison to
+ <varname>local_preload_libraries</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add new configuration parameter <link
+ linkend="guc-server-version-num"><varname>server_version_num</></link>
+ (Greg Sabino Mullane)
+ </para>
+
+ <para>
+ This is like <varname>server_version</varname>, but is an
+ integer, e.g. <literal>80200</>. This allows applications to
+ make version checks more easily.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a configuration parameter <link
+ linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Re-implement the <link linkend="regress">regression test</link> script as a C program
+ (Magnus, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow loadable modules to allocate shared memory and
+ lightweight locks (Marc Munro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add automatic initialization and finalization of dynamically
+ loaded libraries (Ralf Engelschall, Tom)
+ </para>
+
+ <para>
+ New <link linkend="xfunc-c-dynload">functions</link>
+ <function>_PG_init()</> and <function>_PG_fini()</> are
+ called if the library defines such symbols. Hence we no
+ longer need to specify an initialization function in
+ <varname>shared_preload_libraries</>; we can assume that
+ the library used the <function>_PG_init()</> convention
+ instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link
+ linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
+ header block to all shared object files (Martijn van
+ Oosterhout)
+ </para>
+
+ <para>
+ The magic block prevents version mismatches between loadable object
+ files and servers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add shared library support for AIX (Laurenz Albe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New <link linkend="datatype-xml"><acronym>XML</></link>
+ documentation section (Bruce)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Contrib Changes</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Major tsearch2 improvements (Oleg, Teodor)
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ multibyte encoding support, including <acronym>UTF8</>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ query rewriting support
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ improved ranking functions
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ thesaurus dictionary support
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Ispell dictionaries now recognize <application>MySpell</>
+ format, used by <application>OpenOffice</>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <acronym>GIN</> support
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </listitem>
+
+ <listitem>
+ <para>
+ Add adminpack module containing <application>Pgadmin</> administration
+ functions (Dave)
+ </para>
+
+ <para>
+ These functions provide additional file system access
+ routines not present in the default <productname>PostgreSQL</>
+ server.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add sslinfo module (Victor Wagner)
+ </para>
+
+ <para>
+ Reports information about the current connection's <acronym>SSL</>
+ certificate.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add pgrowlocks module (Tatsuo)
+ </para>
+
+ <para>
+ This shows row locking information for a specified table.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add hstore module (Oleg, Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add isn module, replacing isbn_issn (Jeremy Kronuz)
+ </para>
+
+ <para>
+ This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
+ <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
+ <acronym>ISSN</> (serials).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add index information functions to pgstattuple (ITAGAKI Takahiro,
+ Satoshi Nagayasu)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add pg_freespacemap module to display free space map information
+ (Mark Kirkwood)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ pgcrypto now has all planned functionality (Marko Kreen)
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Include iMath library in pgcrypto to have the public-key encryption
+ functions always available.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add SHA224 algorithm that was missing in OpenBSD code.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Activate builtin code for SHA224/256/384/512 hashes on older
+ OpenSSL to have those algorithms always available.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ New function gen_random_bytes() that returns cryptographically strong
+ randomness. Useful for generating encryption keys.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove digest_exists(), hmac_exists() and cipher_exists() functions.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improvements to cube module (Joshua Reich)
+ </para>
+
+ <para>
+ New functions are <function>cube(float[])</>,
+ <function>cube(float[], float[])</>, and
+ <function>cube_subset(cube, int4[])</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add async query capability to dblink (Kai Londenberg,
+ Joe Conway)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New operators for array-subset comparisons (<literal>@></>,
+ <literal><@</>, <literal>&&</>) (Tom)
+ </para>
+
+ <para>
+ Various contrib packages already had these operators for their
+ datatypes, but the naming wasn't consistent. We have now added
+ consistently named array-subset comparison operators to the core code
+ and all the contrib packages that have such functionality.
+ (The old names remain available, but are deprecated.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add uninstall scripts for all contrib packages that have install
+ scripts (David, Josh Drake)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ </sect2>
+ </sect1>
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.3.sgml,v 1.1 2009/05/02 20:17:19 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-8-3-7">
+ <title>Release 8.3.7</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-03-16</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.3.6.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.7</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.5,
+ see the release notes for 8.3.5.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Prevent error recursion crashes when encoding conversion fails (Tom)
+ </para>
+
+ <para>
+ This change extends fixes made in the last two minor releases for
+ related failure scenarios. The previous fixes were narrowly tailored
+ for the original problem reports, but we have now recognized that
+ <emphasis>any</> error thrown by an encoding conversion function could
+ potentially lead to infinite recursion while trying to report the
+ error. The solution therefore is to disable translation and encoding
+ conversion and report the plain-ASCII form of any error message,
+ if we find we have gotten into a recursive error reporting situation.
+ (CVE-2009-0922)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Disallow <command>CREATE CONVERSION</> with the wrong encodings
+ for the specified conversion function (Heikki)
+ </para>
+
+ <para>
+ This prevents one possible scenario for encoding conversion failure.
+ The previous change is a backstop to guard against other kinds of
+ failures in the same area.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>xpath()</> to not modify the path expression unless
+ necessary, and to make a saner attempt at it when necessary (Andrew)
+ </para>
+
+ <para>
+ The SQL standard suggests that <function>xpath</> should work on data
+ that is a document fragment, but <application>libxml</> doesn't support
+ that, and indeed it's not clear that this is sensible according to the
+ XPath standard. <function>xpath</> attempted to work around this
+ mismatch by modifying both the data and the path expression, but the
+ modification was buggy and could cause valid searches to fail. Now,
+ <function>xpath</> checks whether the data is in fact a well-formed
+ document, and if so invokes <application>libxml</> with no change to the
+ data or path expression. Otherwise, a different modification method
+ that is somewhat less likely to fail is used.
+ </para>
+
+ <note>
+ <para>
+ The new modification method is still not 100% satisfactory, and it
+ seems likely that no real solution is possible. This patch should
+ therefore be viewed as a band-aid to keep from breaking existing
+ applications unnecessarily. It is likely that
+ <productname>PostgreSQL</> 8.4 will simply reject use of
+ <function>xpath</> on data that is not a well-formed document.
+ </para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix core dump when <function>to_char()</> is given format codes that
+ are inappropriate for the type of the data argument (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible failure in text search when C locale is used with
+ a multi-byte encoding (Teodor)
+ </para>
+
+ <para>
+ Crashes were possible on platforms where <type>wchar_t</> is narrower
+ than <type>int</>; Windows in particular.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix extreme inefficiency in text search parser's handling of an
+ email-like string containing multiple <literal>@</> characters (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner problem with sub-<command>SELECT</> in the output list
+ of a larger subquery (Tom)
+ </para>
+
+ <para>
+ The known symptom of this bug is a <quote>failed to locate grouping
+ columns</> error that is dependent on the datatype involved;
+ but there could be other issues as well.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix decompilation of <literal>CASE WHEN</> with an implicit coercion
+ (Tom)
+ </para>
+
+ <para>
+ This mistake could lead to Assert failures in an Assert-enabled build,
+ or an <quote>unexpected CASE WHEN clause</> error message in other
+ cases, when trying to examine or dump a view.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
+ </para>
+
+ <para>
+ If <command>CLUSTER</> or a rewriting variant of <command>ALTER TABLE</>
+ were executed by someone other than the table owner, the
+ <structname>pg_type</> entry for the table's TOAST table would end up
+ marked as owned by that someone. This caused no immediate problems,
+ since the permissions on the TOAST rowtype aren't examined by any
+ ordinary database operation. However, it could lead to unexpected
+ failures if one later tried to drop the role that issued the command
+ (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</>
+ warnings from <application>pg_dump</> after having done so (in 8.3).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <command>UNLISTEN</> to exit quickly if the current session has
+ never executed any <command>LISTEN</> command (Tom)
+ </para>
+
+ <para>
+ Most of the time this is not a particularly useful optimization, but
+ since <command>DISCARD ALL</> invokes <command>UNLISTEN</>, the previous
+ coding caused a substantial performance problem for applications that
+ made heavy use of <command>DISCARD ALL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/pgSQL to not treat <literal>INTO</> after <command>INSERT</> as
+ an INTO-variables clause anywhere in the string, not only at the start;
+ in particular, don't fail for <command>INSERT INTO</> within
+ <command>CREATE RULE</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clean up PL/pgSQL error status variables fully at block exit
+ (Ashesh Vashi and Dave Page)
+ </para>
+
+ <para>
+ This is not a problem for PL/pgSQL itself, but the omission could cause
+ the PL/pgSQL Debugger to crash while examining the state of a function.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Retry failed calls to <function>CallNamedPipe()</> on Windows
+ (Steve Marshall, Magnus)
+ </para>
+
+ <para>
+ It appears that this function can sometimes fail transiently;
+ we previously treated any failure as a hard error, which could
+ confuse <command>LISTEN</>/<command>NOTIFY</> as well as other
+ operations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+ of known timezone abbreviations (Xavier Bugaud)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-3-6">
+ <title>Release 8.3.6</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2009-02-02</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.3.5.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.6</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.5,
+ see the release notes for 8.3.5.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <command>DISCARD ALL</> release advisory locks, in addition
+ to everything it already did (Tom)
+ </para>
+
+ <para>
+ This was decided to be the most appropriate behavior. This could
+ affect existing applications, however.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix whole-index GiST scans to work correctly (Teodor)
+ </para>
+
+ <para>
+ This error could cause rows to be lost if a table is clustered
+ on a GiST index.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix crash of <literal>xmlconcat(NULL)</> (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash in <literal>ispell</> dictionary if high-bit-set
+ characters are used as flags (Teodor)
+ </para>
+
+ <para>
+ This is known to be done by one widely available Norwegian dictionary,
+ and the same condition may exist in others.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix misordering of <application>pg_dump</> output for composite types
+ (Tom)
+ </para>
+
+ <para>
+ The most likely problem was for user-defined operator classes to
+ be dumped after indexes or views that needed them.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of URLs in <function>headline()</> function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve handling of overlength headlines in <function>headline()</>
+ function (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible Assert failure or misconversion if an encoding
+ conversion is created with the wrong conversion function for the
+ specified pair of encodings (Tom, Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible Assert failure if a statement executed in PL/pgSQL is
+ rewritten into another kind of statement, for example if an
+ <command>INSERT</> is rewritten into an <command>UPDATE</> (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure that a snapshot is available to datatype input functions (Tom)
+ </para>
+
+ <para>
+ This primarily affects domains that are declared with <literal>CHECK</>
+ constraints involving user-defined stable or immutable functions. Such
+ functions typically fail if no snapshot has been set.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make it safer for SPI-using functions to be used within datatype I/O;
+ in particular, to be used in domain check constraints (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnecessary locking of small tables in <command>VACUUM</>
+ (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a problem that sometimes kept <command>ALTER TABLE ENABLE/DISABLE
+ RULE</> from being recognized by active sessions (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a problem that made <literal>UPDATE RETURNING tableoid</>
+ return zero instead of the correct OID (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow functions declared as taking <type>ANYARRAY</> to work on
+ the <structname>pg_statistic</> columns of that type (Tom)
+ </para>
+
+ <para>
+ This used to work, but was unintentionally broken in 8.3.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner misestimation of selectivity when transitive equality
+ is applied to an outer-join clause (Tom)
+ </para>
+
+ <para>
+ This could result in bad plans for queries like
+ <literal>... from a left join b on a.a1 = b.b1 where a.a1 = 42 ...</>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimizer's handling of long <literal>IN</> lists (Tom)
+ </para>
+
+ <para>
+ This change avoids wasting large amounts of time on such lists
+ when constraint exclusion is enabled.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent synchronous scan during GIN index build (Tom)
+ </para>
+
+ <para>
+ Because GIN is optimized for inserting tuples in increasing TID order,
+ choosing to use a synchronous scan could slow the build by a factor of
+ three or more.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure that the contents of a holdable cursor don't depend on the
+ contents of TOAST tables (Tom)
+ </para>
+
+ <para>
+ Previously, large field values in a cursor result might be represented
+ as TOAST pointers, which would fail if the referenced table got dropped
+ before the cursor is read, or if the large value is deleted and then
+ vacuumed away. This cannot happen with an ordinary cursor,
+ but it could with a cursor that is held past its creating transaction.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory leak when a set-returning function is terminated without
+ reading its whole result (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix encoding conversion problems in XML functions when the database
+ encoding isn't UTF-8 (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <filename>contrib/dblink</>'s
+ <function>dblink_get_result(text,bool)</> function (Joe)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible garbage output from <filename>contrib/sslinfo</> functions
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect behavior of <filename>contrib/tsearch2</> compatibility
+ trigger when it's fired more than once in a command (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible mis-signaling in autovacuum (Heikki)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Support running as a service on Windows 7 beta (Dave and Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s handling of varchar structs (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>configure</> script to properly report failure when
+ unable to obtain linkage information for PL/Perl (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make all documentation reference <literal>pgsql-bugs</> and/or
+ <literal>pgsql-hackers</> as appropriate, instead of the
+ now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+ mailing lists (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2009a (for
+ Kathmandu and historical DST corrections in Switzerland, Cuba)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-3-5">
+ <title>Release 8.3.5</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-11-03</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.3.4.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.5</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.1,
+ see the release notes for 8.3.1. Also, if you were running a previous
+ 8.3.X release, it is recommended to <command>REINDEX</> all GiST
+ indexes after the upgrade.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix GiST index corruption due to marking the wrong index entry
+ <quote>dead</> after a deletion (Teodor)
+ </para>
+
+ <para>
+ This would result in index searches failing to find rows they
+ should have found. Corrupted indexes can be fixed with
+ <command>REINDEX</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix backend crash when the client encoding cannot represent a localized
+ error message (Tom)
+ </para>
+
+ <para>
+ We have addressed similar issues before, but it would still fail if
+ the <quote>character has no equivalent</> message itself couldn't
+ be converted. The fix is to disable localization and send the plain
+ ASCII error message when we detect such a situation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash in <type>bytea</>-to-XML mapping (Michael McMaster)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash when deeply nested functions are invoked from
+ a trigger (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimization of <replaceable>expression</> <literal>IN</>
+ (<replaceable>expression-list</>) queries (Tom, per an idea from Robert
+ Haas)
+ </para>
+
+ <para>
+ Cases in which there are query variables on the right-hand side had been
+ handled less efficiently in 8.2.x and 8.3.x than in prior versions.
+ The fix restores 8.1 behavior for such cases.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix mis-expansion of rule queries when a sub-<literal>SELECT</> appears
+ in a function call in <literal>FROM</>, a multi-row <literal>VALUES</>
+ list, or a <literal>RETURNING</> list (Tom)
+ </para>
+
+ <para>
+ The usual symptom of this problem is an <quote>unrecognized node type</>
+ error.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix Assert failure during rescan of an <literal>IS NULL</>
+ search of a GiST index (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix memory leak during rescan of a hashed aggregation plan (Neil)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure an error is reported when a newly-defined PL/pgSQL trigger
+ function is invoked as a normal function (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Force a checkpoint before <command>CREATE DATABASE</> starts to copy
+ files (Heikki)
+ </para>
+
+ <para>
+ This prevents a possible failure if files had recently been deleted
+ in the source database.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent possible collision of <structfield>relfilenode</> numbers
+ when moving a table to another tablespace with <command>ALTER SET
+ TABLESPACE</> (Heikki)
+ </para>
+
+ <para>
+ The command tried to re-use the existing filename, instead of
+ picking one that is known unused in the destination directory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect text search headline generation when single query
+ item matches first word of text (Sushant Sinha)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix improper display of fractional seconds in interval values when
+ using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+ build (Ron Mayer)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <literal>ILIKE</> compare characters case-insensitively
+ even when they're escaped (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <command>DISCARD</> is handled properly by statement logging (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect logging of last-completed-transaction time during
+ PITR recovery (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+ behave correctly when the passed tuple and tuple descriptor have
+ different numbers of columns (Tom)
+ </para>
+
+ <para>
+ This situation is normal when a table has had columns added or removed,
+ but these two functions didn't handle it properly.
+ The only likely consequence is an incorrect error indication.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Mark <varname>SessionReplicationRole</> as <literal>PGDLLIMPORT</>
+ so it can be used by <application>Slony</> on Windows (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix small memory leak when using <application>libpq</>'s
+ <literal>gsslib</> parameter (Magnus)
+ </para>
+
+ <para>
+ The space used by the parameter string was not freed at connection
+ close.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <application>libgssapi</> is linked into <application>libpq</>
+ if needed (Markus Schaaf)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</>'s parsing of <command>CREATE ROLE</> (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix recent breakage of <literal>pg_ctl restart</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Ensure <filename>pg_control</> is opened in binary mode
+ (Itagaki Takahiro)
+ </para>
+
+ <para>
+ <application>pg_controldata</> and <application>pg_resetxlog</>
+ did this incorrectly, and so could fail on Windows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008i (for
+ DST law changes in Argentina, Brazil, Mauritius, Syria)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-3-4">
+ <title>Release 8.3.4</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-09-22</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.3.3.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.4</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.1,
+ see the release notes for 8.3.1.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix bug in btree WAL recovery code (Heikki)
+ </para>
+
+ <para>
+ Recovery failed if the WAL ended partway through a page split operation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential use of wrong cutoff XID for HOT page pruning (Alvaro)
+ </para>
+
+ <para>
+ This error created a risk of corruption in system
+ catalogs that are consulted by <command>VACUUM</>: dead tuple versions
+ might be removed too soon. The impact of this on actual database
+ operations would be minimal, since the system doesn't follow MVCC
+ rules while examining catalogs, but it might result in transiently
+ wrong output from <application>pg_dump</> or other client programs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix potential miscalculation of <structfield>datfrozenxid</> (Alvaro)
+ </para>
+
+ <para>
+ This error may explain some recent reports of failure to remove old
+ <structname>pg_clog</> data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect HOT updates after <structname>pg_class</> is reindexed
+ (Tom)
+ </para>
+
+ <para>
+ Corruption of <structname>pg_class</> could occur if <literal>REINDEX
+ TABLE pg_class</> was followed in the same session by an <literal>ALTER
+ TABLE RENAME</> or <literal>ALTER TABLE SET SCHEMA</> command.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix missed <quote>combo cid</> case (Karl Schnaitter)
+ </para>
+
+ <para>
+ This error made rows incorrectly invisible to a transaction in which they
+ had been deleted by multiple subtransactions that all aborted.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent autovacuum from crashing if the table it's currently
+ checking is deleted at just the wrong time (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Widen local lock counters from 32 to 64 bits (Tom)
+ </para>
+
+ <para>
+ This responds to reports that the counters could overflow in
+ sufficiently long transactions, leading to unexpected <quote>lock is
+ already held</> errors.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible duplicate output of tuples during a GiST index scan (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Regenerate foreign key checking queries from scratch when either
+ table is modified (Tom)
+ </para>
+
+ <para>
+ Previously, 8.3 would attempt to replan the query, but would work from
+ previously generated query text. This led to failures if a
+ table or column was renamed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix missed permissions checks when a view contains a simple
+ <literal>UNION ALL</> construct (Heikki)
+ </para>
+
+ <para>
+ Permissions for the referenced tables were checked properly, but not
+ permissions for the view itself.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add checks in executor startup to ensure that the tuples produced by an
+ <command>INSERT</> or <command>UPDATE</> will match the target table's
+ current rowtype (Tom)
+ </para>
+
+ <para>
+ This situation is believed to be impossible in 8.3, but it can happen in
+ prior releases, so a check seems prudent.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible repeated drops during <command>DROP OWNED</> (Tom)
+ </para>
+
+ <para>
+ This would typically result in strange errors such as <quote>cache
+ lookup failed for relation NNN</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix several memory leaks in XML operations (Kris Jurka, Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>xmlserialize()</> to raise error properly for
+ unacceptable target data type (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix a couple of places that mis-handled multibyte characters in text
+ search configuration file parsing (Tom)
+ </para>
+
+ <para>
+ Certain characters occurring in configuration files would always cause
+ <quote>invalid byte sequence for encoding</> failures.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Provide file name and line number location for all errors reported
+ in text search configuration files (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <literal>AT TIME ZONE</> to first try to interpret its timezone
+ argument as a timezone abbreviation, and only try it as a full timezone
+ name if that fails, rather than the other way around as formerly (Tom)
+ </para>
+
+ <para>
+ The timestamp input functions have always resolved ambiguous zone names
+ in this order. Making <literal>AT TIME ZONE</> do so as well improves
+ consistency, and fixes a compatibility bug introduced in 8.1:
+ in ambiguous cases we now behave the same as 8.0 and before did,
+ since in the older versions <literal>AT TIME ZONE</> accepted
+ <emphasis>only</> abbreviations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix datetime input functions to correctly detect integer overflow when
+ running on a 64-bit platform (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent integer overflows during units conversion when displaying a
+ configuration parameter that has units (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of writing very long log messages to syslog (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow spaces in the suffix part of an LDAP URL in
+ <filename>pg_hba.conf</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+ ON</> query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner bug that could improperly push down <literal>IS NULL</>
+ tests below an outer join (Tom)
+ </para>
+
+ <para>
+ This was triggered by occurrence of <literal>IS NULL</> tests for
+ the same relation in all arms of an upper <literal>OR</> clause.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner bug with nested sub-select expressions (Tom)
+ </para>
+
+ <para>
+ If the outer sub-select has no direct dependency on the parent query,
+ but the inner one does, the outer value might not get recalculated
+ for new parent query rows.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+ boolean results always result in two groups, regardless of the
+ expressions' contents (Tom)
+ </para>
+
+ <para>
+ This is very substantially more accurate than the regular <literal>GROUP
+ BY</> estimate for certain boolean tests like <replaceable>col</>
+ <literal>IS NULL</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/PgSQL to not fail when a <literal>FOR</> loop's target variable
+ is a record containing composite-type fields (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
+ about the encoding of data sent to or from Tcl (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of <function>PQescapeBytea()</> (Rudolf Leitgeb)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ On Windows, work around a Microsoft bug by preventing
+ <application>libpq</> from trying to send more than 64kB per system call
+ (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>ecpg</> to handle variables properly in <command>SET</>
+ commands (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve <application>pg_dump</> and <application>pg_restore</>'s
+ error reporting after failure to send a SQL command (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <application>pg_ctl</> to properly preserve postmaster
+ command-line arguments across a <literal>restart</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix erroneous WAL file cutoff point calculation in
+ <application>pg_standby</> (Simon)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update time zone data files to <application>tzdata</> release 2008f (for
+ DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
+ Pakistan, Palestine, and Paraguay)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-3-3">
+ <title>Release 8.3.3</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2008-06-12</simpara>
+ </note>
+
+ <para>
+ This release contains one serious and one minor bug fix over 8.3.2.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.3</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.1,
+ see the release notes for 8.3.1.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+ </para>
+
+ <para>
+ Before this fix, a negative constant in a view or rule might be dumped
+ as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+ be <literal>(-42)::integer</> due to operator precedence rules.
+ Usually this would make little difference, but it could interact with
+ another recent patch to cause
+ <productname>PostgreSQL</> to reject what had been a valid
+ <command>SELECT DISTINCT</> view query. Since this could result in
+ <application>pg_dump</> output failing to reload, it is being treated
+ as a high-priority fix. The only released versions in which dump
+ output is actually incorrect are 8.3.1 and 8.2.7.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Make <command>ALTER AGGREGATE ... OWNER TO</> update
+ <structname>pg_shdepend</> (Tom)
+ </para>
+
+ <para>
+ This oversight could lead to problems if the aggregate was later
+ involved in a <command>DROP OWNED</> or <command>REASSIGN OWNED</>
+ operation.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="release-8-3-2">
+ <title>Release 8.3.2</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>never released</simpara>
+ </note>
+
+ <para>
+ This release contains a variety of fixes from 8.3.1.
+ For information about new features in the 8.3 major release, see
+ <xref linkend="release-8-3">.
+ </para>
+
+ <sect2>
+ <title>Migration to Version 8.3.2</title>
+
+ <para>
+ A dump/restore is not required for those running 8.3.X.
+ However, if you are upgrading from a version earlier than 8.3.1,
+ see the release notes for 8.3.1.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
+ occurred on Windows when using UTF-8 database encoding and a different
+ client encoding (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix incorrect archive truncation point calculation for the
+ <literal>%r</> macro in <varname>recovery_command</> parameters
+ (Simon)
+ </para>
+
+ <para>
+ This could lead to data loss if a warm-standby script relied on
+ <literal>%r</> to decide when to throw away WAL segment files.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
+ column is correctly checked to see if it's been initialized to all
+ non-nulls (Brendan Jurd)
+ </para>
+
+ <para>
+ Previous versions neglected to check this requirement at all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <command>REASSIGN OWNED</> so that it works on procedural
+ languages too (Alvaro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix problems with <command>SELECT FOR UPDATE/SHARE</> occurring as a
+ subquery in a query with a non-<command>SELECT</> top-level operation
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible <command>CREATE TABLE</> failure when inheriting the
+ <quote>same</> constraint from multiple parent relations that
+ inherited that constraint from a common ancestor (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
+ to the target table of an <command>UPDATE</> or <command>DELETE</>
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restore the pre-8.3 behavior that an out-of-range block number in a
+ TID being used in a TidScan plan results in silently not matching any
+ rows (Tom)
+ </para>
+
+ <para>
+ 8.3.0 and 8.3.1 threw an error instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix GIN bug that could result in a <literal>too many LWLocks
+ taken</literal> failure (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix broken GiST comparison function for <type>tsquery</> (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix <function>tsvector_update_trigger()</> and <function>ts_stat()</>
+ to accept domains over the types they expect to work with (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix failure to support enum data types as foreign keys (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid possible crash when decompressing corrupted data
+ (Zdenek Kotala)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix race conditions between delayed unlinks and <command>DROP
+ DATABASE</> (Heikki)
+ </para>
+
+ <para>
+ In the worst case this could result in deleting a newly created table
+ in a new database that happened to get the same OID as the
+ recently-dropped one; but of course that is an extremely
+ low-probability scenario.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Repair two places where SIGTERM exit of a backend could leave corrupted
+ state in shared memory (Tom)
+ </para>
+
+ <para>
+ Neither case is very important if SIGTERM is used to shut down the
+ whole database cluster together, but there was a problem if someone
+ tried to SIGTERM individual backends.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix possible crash due to incorrect plan generated for an
+ <literal><replaceable>x</> IN (SELECT <replaceable>y</>
+ FROM ...)</literal> clause when <replaceable>x</> and <replaceable>y</>
+ have different data types; and make sure the behavior is semantically
+ correct when the conversion from <replaceable>y</>'s type to
+ <replaceable>x</>'s type is lossy (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix oversight that prevented the planner from substituting known Param
+ values as if they were constants (Tom)
+ </para>
+
+ <para>
+ This mistake partially disabled optimization of unnamed
+ extended-Query statements in 8.3.0 and 8.3.1: in particular the
+ LIKE-to-indexscan optimization would never be applied if the LIKE
+ pattern was passed as a parameter, and constraint exclusion
+ depending on a parameter value didn't work either.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner failure when an indexable <function>MIN</> or
+ <function>MAX</> aggregate is used with <literal>DISTINCT</> or
+ <literal>ORDER BY</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Fix planner to ensure it never uses a <quote>physical tlist</> for a
+ plan node that is feeding a Sort node (Tom)
+ </para>
+
+ <para>
+ This led to the sort having to push around more data than it really
+ needed to, since unused column values were included in the sorted
+ data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Avoid unnec