diff options
Diffstat (limited to 'doc/src')
| -rw-r--r-- | doc/src/sgml/Makefile | 14 | ||||
| -rw-r--r-- | doc/src/sgml/filelist.sgml | 11 | ||||
| -rw-r--r-- | doc/src/sgml/generate_history.pl | 58 | ||||
| -rw-r--r-- | doc/src/sgml/release-7.4.sgml | 3975 | ||||
| -rw-r--r-- | doc/src/sgml/release-8.0.sgml | 4561 | ||||
| -rw-r--r-- | doc/src/sgml/release-8.1.sgml | 4318 | ||||
| -rw-r--r-- | doc/src/sgml/release-8.2.sgml | 4802 | ||||
| -rw-r--r-- | doc/src/sgml/release-8.3.sgml | 4481 | ||||
| -rw-r--r-- | doc/src/sgml/release-8.4.sgml | 3208 | ||||
| -rw-r--r-- | doc/src/sgml/release-old.sgml | 6657 | ||||
| -rw-r--r-- | doc/src/sgml/release.sgml | 32003 |
11 files changed, 32090 insertions, 31998 deletions
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile index a61d541a4c9..82aacfe38c4 100644 --- a/doc/src/sgml/Makefile +++ b/doc/src/sgml/Makefile @@ -2,7 +2,7 @@ # # 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 $ # #---------------------------------------------------------------------------- @@ -173,13 +173,13 @@ JADE.tex.call = $(JADE) $(JADEFLAGS) $(SGMLINCLUDE) $(CATALOG) -d $(srcdir)/styl # 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 @@ -208,12 +208,8 @@ INSTALL HISTORY regress_README: % : %.html 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 diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index 591f1e86da5..385b8815f30 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -1,4 +1,4 @@ -<!-- $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"> @@ -138,7 +138,16 @@ <!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"> diff --git a/doc/src/sgml/generate_history.pl b/doc/src/sgml/generate_history.pl new file mode 100644 index 00000000000..20f3d0e87c9 --- /dev/null +++ b/doc/src/sgml/generate_history.pl @@ -0,0 +1,58 @@ +#! /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); +} diff --git a/doc/src/sgml/release-7.4.sgml b/doc/src/sgml/release-7.4.sgml new file mode 100644 index 00000000000..7fa8ee7a907 --- /dev/null +++ b/doc/src/sgml/release-7.4.sgml @@ -0,0 +1,3975 @@ +<!-- $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> diff --git a/doc/src/sgml/release-8.0.sgml b/doc/src/sgml/release-8.0.sgml new file mode 100644 index 00000000000..eca4ebdf5df --- /dev/null +++ b/doc/src/sgml/release-8.0.sgml @@ -0,0 +1,4561 @@ +<!-- $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> diff --git a/doc/src/sgml/release-8.1.sgml b/doc/src/sgml/release-8.1.sgml new file mode 100644 index 00000000000..5785b1dd8ee --- /dev/null +++ b/doc/src/sgml/release-8.1.sgml @@ -0,0 +1,4318 @@ +<!-- $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> diff --git a/doc/src/sgml/release-8.2.sgml b/doc/src/sgml/release-8.2.sgml new file mode 100644 index 00000000000..b636d99886a --- /dev/null +++ b/doc/src/sgml/release-8.2.sgml @@ -0,0 +1,4802 @@ +<!-- $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> diff --git a/doc/src/sgml/release-8.3.sgml b/doc/src/sgml/release-8.3.sgml new file mode 100644 index 00000000000..dd16cd3f12b --- /dev/null +++ b/doc/src/sgml/release-8.3.sgml @@ -0,0 +1,4481 @@ +<!-- $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 unnecessary copying of query strings (Tom) + </para> + + <para> + This fixes a performance problem introduced in 8.3.0 when a very large + number of commands are submitted as a single query string. + </para> + </listitem> + + <listitem> + <para> + Make <function>TransactionIdIsCurrentTransactionId()</> use binary + search instead of linear search when checking child-transaction XIDs + (Heikki) + </para> + + <para> + This fixes some cases in which 8.3.0 was significantly + slower than earlier releases. + </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> + Prevent cancellation of an auto-vacuum that was launched to prevent + XID wraparound (Alvaro) + </para> + </listitem> + + <listitem> + <para> + Improve <command>ANALYZE</>'s handling of in-doubt tuples (those + inserted or deleted by a not-yet-committed transaction) so that the + counts it reports to the stats collector are more likely to be correct + (Pavan Deolasee) + </para> + </listitem> + + <listitem> + <para> + Fix <application>initdb</> to reject a relative path for its + <literal>--xlogdir</> (<literal>-X</>) option (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <application>psql</> print tab characters as an appropriate + number of spaces, rather than <literal>\x09</literal> as was done in + 8.3.0 and 8.3.1 (Bruce) + </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> + Add <function>ECPGget_PGconn()</> function to + <application>ecpglib</> (Michael) + </para> + </listitem> + + <listitem> + <para> + Fix incorrect result from <application>ecpg</>'s + <function>PGTYPEStimestamp_sub()</> function (Michael) + </para> + </listitem> + + <listitem> + <para> + Fix handling of continuation line markers in <application>ecpg</> + (Michael) + </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</>, and make it auto-configure properly for + <application>libxslt</> present or not (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-8-3-1"> + <title>Release 8.3.1</title> + + <note> + <title>Release date</title> + <simpara>2008-03-17</simpara> + </note> + + <para> + This release contains a variety of fixes from 8.3.0. + 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.1</title> + + <para> + A dump/restore is not required for those running 8.3.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 corner-case bugs in <command>VACUUM FULL</> (Tom) + </para> + + <para> + A potential deadlock between concurrent <command>VACUUM FULL</> + operations on different system catalogs was introduced in 8.2. + This has now been corrected. 8.3 made this worse because the + deadlock could occur within a critical code section, making it + a PANIC rather than just ERROR condition. + </para> + + <para> + Also, a <command>VACUUM FULL</> that failed partway through + vacuuming a system catalog could result in cache corruption in + concurrent database sessions. + </para> + + <para> + Another <command>VACUUM FULL</> bug introduced in 8.3 could + result in a crash or out-of-memory report when dealing with + pages containing no live tuples. + </para> + </listitem> + + <listitem> + <para> + Fix misbehavior of foreign key checks involving <type>character</> + or <type>bit</> columns (Tom) + </para> + + <para> + If the referencing column were of a different but compatible type + (for instance <type>varchar</>), the constraint was enforced incorrectly. + </para> + </listitem> + + <listitem> + <para> + Avoid needless deadlock failures in no-op foreign-key checks (Stephan + Szabo, Tom) + </para> + </listitem> + + <listitem> + <para> + Fix possible core dump when re-planning a prepared query (Tom) + </para> + + <para> + This bug affected only protocol-level prepare operations, not + SQL <command>PREPARE</>, and so tended to be seen only with + JDBC, DBI, and other client-side drivers that use prepared + statements heavily. + </para> + </listitem> + + <listitem> + <para> + Fix possible failure when re-planning a query that calls an SPI-using + function (Tom) + </para> + </listitem> + + <listitem> + <para> + Fix failure in row-wise comparisons involving columns of different + datatypes (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 and 8.3. + </para> + </listitem> + + <listitem> + <para> + Fix rare crash when an error occurs during a query using a hash index + (Heikki) + </para> + </listitem> + + <listitem> + <para> + Fix incorrect comparison of <type>tsquery</> values (Teodor) + </para> + </listitem> + + <listitem> + <para> + Fix incorrect behavior of <literal>LIKE</> with non-ASCII characters + in single-byte encodings (Rolf Jentsch) + </para> + </listitem> + + <listitem> + <para> + Disable <function>xmlvalidate</> (Tom) + </para> + + <para> + This function should have been removed before 8.3 release, but + was inadvertently left in the source code. It poses a small + security risk since unprivileged users could use it to read the + first few characters of any file accessible to the server. + </para> + </listitem> + + <listitem> + <para> + Fix memory leaks in certain usages of set-returning functions (Neil) + </para> + </listitem> + + <listitem> + <para> + Make <function>encode(<replaceable>bytea</>, 'escape')</> convert all + high-bit-set byte values into <literal>\</><replaceable>nnn</> octal + escape sequences (Tom) + </para> + + <para> + This is necessary to avoid encoding problems when the database + encoding is multi-byte. This change could pose compatibility issues + for applications that are expecting specific results from + <function>encode</>. + </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> + Avoid tablespace permissions errors in <command>CREATE TABLE LIKE + INCLUDING INDEXES</> (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>ecpg</> problems with arrays (Michael) + </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> + Enable building <filename>contrib/uuid-ossp</> with MSVC (Hiroshi Saito) + </para> + </listitem> + + </itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-8-3"> + <title>Release 8.3</title> + + <note> + <title>Release date</title> + <simpara>2008-02-04</simpara> + </note> + + <sect2> + <title>Overview</title> + + <para> + With significant new functionality and performance enhancements, + this release represents a major leap forward for + <productname>PostgreSQL</>. This was made possible by a growing + community that has dramatically accelerated the pace of + development. This release adds the following major features: + </para> + + <itemizedlist> + + <listitem> + <para> + Full text search is integrated into the core database system + </para> + </listitem> + + <listitem> + <para> + Support for the SQL/XML standard, including new operators and an + <type>XML</type> data type + </para> + </listitem> + + <listitem> + <para> + Enumerated data types (<type>ENUM</type>) + </para> + </listitem> + + <listitem> + <para> + Arrays of composite types + </para> + </listitem> + + <listitem> + <para> + Universally Unique Identifier (<type>UUID</>) data type + </para> + </listitem> + + <listitem> + <para> + Add control over whether <literal>NULL</>s sort first or last + </para> + </listitem> + + <listitem> + <para> + Updatable cursors + </para> + </listitem> + + <listitem> + <para> + Server configuration parameters can now be set on a per-function + basis + </para> + </listitem> + + <listitem> + <para> + User-defined types can now have type modifiers + </para> + </listitem> + + <listitem> + <para> + Automatically re-plan cached queries when table + definitions change or statistics are updated + </para> + </listitem> + + <listitem> + <para> + Numerous improvements in logging and statistics collection + </para> + </listitem> + + <listitem> + <para> + Support Security Service Provider Interface (<acronym>SSPI</>) for + authentication on Windows + </para> + </listitem> + + <listitem> + <para> + Support multiple concurrent autovacuum processes, and other + autovacuum improvements + </para> + </listitem> + + <listitem> + <para> + Allow the whole <productname>PostgreSQL</> distribution to be compiled + with <productname>Microsoft Visual C++</> + </para> + </listitem> + + </itemizedlist> + + <para> + Major performance improvements are listed below. Most of + these enhancements are automatic and do not require user changes or + tuning: + </para> + + <itemizedlist> + + <listitem> + <para> + Asynchronous commit delays writes to WAL during transaction commit + </para> + </listitem> + + <listitem> + <para> + Checkpoint writes can be spread over a longer time period to smooth + the I/O spike during each checkpoint + </para> + </listitem> + + <listitem> + <para> + Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for + most <command>UPDATE</>s and <command>DELETE</>s + </para> + </listitem> + + <listitem> + <para> + Just-in-time background writer strategy improves disk write + efficiency + </para> + </listitem> + + <listitem> + <para> + Using non-persistent transaction IDs for read-only transactions + reduces overhead and <command>VACUUM</> requirements + </para> + </listitem> + + <listitem> + <para> + Per-field and per-row storage overhead has been reduced + </para> + </listitem> + + <listitem> + <para> + Large sequential scans no longer force out frequently used + cached pages + </para> + </listitem> + + <listitem> + <para> + Concurrent large sequential scans can now share disk reads + </para> + </listitem> + + <listitem> + <para> + <literal>ORDER BY ... LIMIT</> can be done without sorting + </para> + </listitem> + + </itemizedlist> + + <para> + The above items are explained in more detail in the sections below. + </para> + + </sect2> + + <sect2> + <title>Migration to Version 8.3</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> + + <sect3> + <title>General</title> + <itemizedlist> + + <listitem> + <para> + Non-character data types are no longer automatically cast to + <type>TEXT</> (Peter, Tom) + </para> + + <para> + Previously, if a non-character value was supplied to an operator or + function that requires <type>text</> input, it was automatically + cast to <type>text</>, for most (though not all) built-in data types. + This no longer happens: an explicit cast to <type>text</> is now + required for all non-character-string types. For example, these + expressions formerly worked: + +<programlisting> +substr(current_date, 1, 4) +23 LIKE '2%' +</programlisting> + + but will now draw <quote>function does not exist</> and <quote>operator + does not exist</> errors respectively. Use an explicit cast instead: + +<programlisting> +substr(current_date::text, 1, 4) +23::text LIKE '2%' +</programlisting> + + (Of course, you can use the more verbose <literal>CAST()</> syntax too.) + The reason for the change is that these automatic casts too often caused + surprising behavior. An example is that in previous releases, this + expression was accepted but did not do what was expected: + +<programlisting> +current_date < 2017-11-17 +</programlisting> + + This is actually comparing a date to an integer, which should be + (and now is) rejected — but in the presence of automatic + casts both sides were cast to <type>text</> and a textual comparison + was done, because the <literal>text < text</> operator was able + to match the expression when no other <literal><</> operator could. + </para> + + <para> + Types <type>char(<replaceable>n</>)</type> and + <type>varchar(<replaceable>n</>)</type> still cast to <type>text</> + automatically. Also, automatic casting to <type>text</> still works for + inputs to the concatenation (<literal>||</>) operator, so long as least + one input is a character-string type. + </para> + </listitem> + + <listitem> + <para> + Full text search features from <filename>contrib/tsearch2</> have + been moved into the core server, with some minor syntax changes + </para> + + <para> + <filename>contrib/tsearch2</> now contains a compatibility + interface. + </para> + </listitem> + + <listitem> + <para> + <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</> + returns no rows, now returns an empty array, rather than NULL + (Tom) + </para> + </listitem> + + <listitem> + <para> + The array type name for a base data type is no longer always the base + type's name with an underscore prefix + </para> + + <para> + The old naming convention is still honored when possible, but + application code should no longer depend on it. Instead + use the new <literal>pg_type.typarray</literal> column to + identify the array data type associated with a given type. + </para> + </listitem> + + <listitem> + <para> + <literal>ORDER BY ... USING</> <replaceable>operator</> must now + use a less-than or greater-than <replaceable>operator</> that is + defined in a btree operator class + </para> + + <para> + This restriction was added to prevent inconsistent results. + </para> + </listitem> + + <listitem> + <para> + <command>SET LOCAL</command> changes now persist until + the end of the outermost transaction, unless rolled back (Tom) + </para> + + <para> + Previously <command>SET LOCAL</command>'s effects were lost + after subtransaction commit (<command>RELEASE SAVEPOINT</> + or exit from a PL/pgSQL exception block). + </para> + </listitem> + + <listitem> + <para> + Commands rejected in transaction blocks are now also rejected in + multiple-statement query strings (Tom) + </para> + + <para> + For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be + rejected even if submitted as a single query message. + </para> + </listitem> + + <listitem> + <para> + <command>ROLLBACK</> outside a transaction block now + issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce) + </para> + </listitem> + + <listitem> + <para> + Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command> + from accepting schema-qualified names (Bruce) + </para> + + <para> + Formerly, these commands accepted <literal>schema.relation</> but + ignored the schema part, which was confusing. + </para> + </listitem> + + <listitem> + <para> + <command>ALTER SEQUENCE</> no longer affects the sequence's + <function>currval()</> state (Tom) + </para> + </listitem> + + <listitem> + <para> + Foreign keys now must match indexable conditions for + cross-data-type references (Tom) + </para> + + <para> + This improves semantic consistency and helps avoid + performance problems. + </para> + </listitem> + + <listitem> + <para> + Restrict object size functions to users who have reasonable + permissions to view such information (Tom) + </para> + + <para> + For example, <function>pg_database_size()</function> now requires + <literal>CONNECT</> permission, which is granted to everyone by + default. <function>pg_tablespace_size()</function> requires + <literal>CREATE</> permission in the tablespace, or is allowed if + the tablespace is the default tablespace for the database. + </para> + </listitem> + + <listitem> + <para> + Remove the undocumented <literal>!!=</> (not in) operator (Tom) + </para> + + <para> + <literal>NOT IN (SELECT ...)</literal> is the proper way to + perform this operation. + </para> + </listitem> + + <listitem> + <para> + Internal hashing functions are now more uniformly-distributed (Tom) + </para> + + <para> + If application code was computing and storing hash values using + internal <productname>PostgreSQL</> hashing functions, the hash + values must be regenerated. + </para> + </listitem> + + <listitem> + <para> + C-code conventions for handling variable-length data values + have changed (Greg Stark, Tom) + </para> + + <para> + The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used + to set the length of generated <type>varlena</> values. Also, it + might be necessary to expand (<quote>de-TOAST</quote>) input values + in more cases. + </para> + </listitem> + + <listitem> + <para> + Continuous archiving no longer reports each successful archive + operation to the server logs unless <literal>DEBUG</> level is used + (Simon) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Configuration Parameters</title> + + <itemizedlist> + + <listitem> + <para> + Numerous changes in administrative server parameters + </para> + + <para> + <varname>bgwriter_lru_percent</>, + <varname>bgwriter_all_percent</>, + <varname>bgwriter_all_maxpages</>, + <varname>stats_start_collector</>, and + <varname>stats_reset_on_server_start</> are removed. + <varname>redirect_stderr</> is renamed to + <varname>logging_collector</>. + <varname>stats_command_string</> is renamed to + <varname>track_activities</>. + <varname>stats_block_level</> and <varname>stats_row_level</> + are merged into <varname>track_counts</>. + A new boolean configuration parameter, <varname>archive_mode</>, + controls archiving. Autovacuum's default settings have changed. + </para> + </listitem> + + <listitem> + <para> + Remove <varname>stats_start_collector</varname> parameter (Tom) + </para> + + <para> + We now always start the collector process, unless <acronym>UDP</> + socket creation fails. + </para> + </listitem> + + <listitem> + <para> + Remove <varname>stats_reset_on_server_start</varname> parameter (Tom) + </para> + + <para> + This was removed because <function>pg_stat_reset()</function> + can be used for this purpose. + </para> + </listitem> + + <listitem> + <para> + Commenting out a parameter in <filename>postgresql.conf</> now + causes it to revert to its default value (Joachim Wieland) + </para> + + <para> + Previously, commenting out an entry left the parameter's value unchanged + until the next server restart. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + + <sect3> + <title>Character Encodings</title> + + <itemizedlist> + + <listitem> + <para> + Add more checks for invalidly-encoded data (Andrew) + </para> + + <para> + This change plugs some holes that existed in literal backslash + escape string processing and <command>COPY</command> escape + processing. Now the de-escaped string is rechecked to see if the + result created an invalid multi-byte character. + </para> + </listitem> + + <listitem> + <para> + Disallow database encodings that are inconsistent with the server's + locale setting (Tom) + </para> + + <para> + On most platforms, <literal>C</> locale is the only locale that + will work with any database encoding. Other locale settings imply + a specific encoding and will misbehave if the database encoding + is something different. (Typical symptoms include bogus textual + sort order and wrong results from <function>upper()</> or + <function>lower()</>.) The server now rejects attempts to create + databases that have an incompatible encoding. + </para> + </listitem> + + <listitem> + <para> + Ensure that <function>chr()</function> cannot create + invalidly-encoded values (Andrew) + </para> + + <para> + In UTF8-encoded databases the argument of <function>chr()</function> is + now treated as a Unicode code point. In other multi-byte encodings + <function>chr()</function>'s argument must designate a 7-bit ASCII + character. Zero is no longer accepted. + <function>ascii()</function> has been adjusted to match. + </para> + </listitem> + + <listitem> + <para> + Adjust <function>convert()</function> behavior to ensure encoding + validity (Andrew) + </para> + + <para> + The two argument form of <function>convert()</function> has been + removed. The three argument form now takes a <type>bytea</type> + first argument and returns a <type>bytea</type>. To cover the + loss of functionality, three new functions have been added: + </para> + + <itemizedlist> + <listitem> + <para> + <function>convert_from(bytea, name)</function> returns + <type>text</> — converts the first argument from the named + encoding to the database encoding + </para> + </listitem> + + <listitem> + <para> + <function>convert_to(text, name)</function> returns + <type>bytea</> — converts the first argument from the + database encoding to the named encoding + </para> + </listitem> + + <listitem> + <para> + <function>length(bytea, name)</function> returns + <type>integer</> — gives the length of the first + argument in characters in the named encoding + </para> + </listitem> + </itemizedlist> + </listitem> + + <listitem> + <para> + Remove <literal>convert(argument USING conversion_name)</literal> + (Andrew) + </para> + + <para> + Its behavior did not match the SQL standard. + </para> + </listitem> + + <listitem> + <para> + Make JOHAB encoding client-only (Tatsuo) + </para> + + <para> + JOHAB is not safe as a server-side encoding. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + </sect2> + + <sect2> + <title>Changes</title> + + <para> + Below you will find a detailed account of the + changes between <productname>PostgreSQL</productname> 8.3 and + the previous major release. + </para> + + <sect3> + <title>Performance</title> + <itemizedlist> + + <listitem> + <para> + Asynchronous commit delays writes to WAL during transaction commit + (Simon) + </para> + + <para> + This feature dramatically increases performance for short data-modifying + transactions. The disadvantage is that because disk writes are delayed, + if the database or operating system crashes before data is written to + the disk, committed data will be lost. This feature is useful for + applications that can accept some data loss. Unlike turning off + <varname>fsync</varname>, using asynchronous commit does not put + database consistency at risk; the worst case is that after a crash the + last few reportedly-committed transactions might not be committed after + all. + This feature is enabled by turning off <varname>synchronous_commit</> + (which can be done per-session or per-transaction, if some transactions + are critical and others are not). + <varname>wal_writer_delay</> can be adjusted to control the maximum + delay before transactions actually reach disk. + </para> + </listitem> + + <listitem> + <para> + Checkpoint writes can be spread over a longer time period to smooth + the I/O spike during each checkpoint (Itagaki Takahiro and Heikki + Linnakangas) + </para> + + <para> + Previously all modified buffers were forced to disk as quickly as + possible during a + checkpoint, causing an I/O spike that decreased server performance. + This new approach spreads out disk writes during checkpoints, + reducing peak I/O usage. (User-requested and shutdown checkpoints + are still written as quickly as possible.) + </para> + </listitem> + + <listitem> + <para> + Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for most + <command>UPDATE</>s and <command>DELETE</>s (Pavan Deolasee, with + ideas from many others) + </para> + + <para> + <command>UPDATE</>s and <command>DELETE</>s leave dead tuples + behind, as do failed <command>INSERT</>s. Previously only + <command>VACUUM</> could reclaim space taken by dead tuples. With + <acronym>HOT</> dead tuple space can be automatically reclaimed at + the time of <command>INSERT</> or <command>UPDATE</> if no changes + are made to indexed columns. This allows for more consistent + performance. Also, <acronym>HOT</> avoids adding duplicate index + entries. + </para> + </listitem> + + <listitem> + <para> + Just-in-time background writer strategy improves disk write + efficiency (Greg Smith, Itagaki Takahiro) + </para> + + <para> + This greatly reduces the need for manual tuning of the background + writer. + </para> + </listitem> + + <listitem> + <para> + Per-field and per-row storage overhead have been reduced + (Greg Stark, Heikki Linnakangas) + </para> + + <para> + Variable-length data types with data values less than 128 bytes long + will see a storage decrease of 3 to 6 bytes. For example, two adjacent + <type>char(1)</type> fields now use 4 bytes instead of 16. Row headers + are also 4 bytes shorter than before. + </para> + </listitem> + + <listitem> + <para> + Using non-persistent transaction IDs for read-only transactions + reduces overhead and <command>VACUUM</> requirements (Florian Pflug) + </para> + + <para> + Non-persistent transaction IDs do not increment the global + transaction counter. Therefore, they reduce the load on + <structname>pg_clog</> and increase the time between forced + vacuums to prevent transaction ID wraparound. + Other performance + improvements were also made that should improve concurrency. + </para> + </listitem> + + <listitem> + <para> + Avoid incrementing the command counter after a read-only command (Tom) + </para> + + <para> + There was formerly a hard limit of 2<superscript>32</> + (4 billion) commands per transaction. Now only commands that + actually changed the database count, so while this limit still + exists, it should be significantly less annoying. + </para> + </listitem> + + <listitem> + <para> + Create a dedicated <acronym>WAL</> writer process to off-load + work from backends (Simon) + </para> + </listitem> + + <listitem> + <para> + Skip unnecessary WAL writes for <command>CLUSTER</command> and + <command>COPY</command> (Simon) + </para> + + <para> + Unless WAL archiving is enabled, the system now avoids WAL writes + for <command>CLUSTER</command> and just <function>fsync()</>s the + table at the end of the command. It also does the same for + <command>COPY</command> if the table was created in the same + transaction. + </para> + </listitem> + + <listitem> + <para> + Large sequential scans no longer force out frequently used + cached pages (Simon, Heikki, Tom) + </para> + </listitem> + + <listitem> + <para> + Concurrent large sequential scans can now share disk reads (Jeff Davis) + </para> + + <para> + This is accomplished by starting the new sequential scan in the + middle of the table (where another sequential scan is already + in-progress) and wrapping around to the beginning to finish. This + can affect the order of returned rows in a query that does not + specify <literal>ORDER BY</>. The <varname>synchronize_seqscans</> + configuration parameter can be used to disable this if necessary. + </para> + </listitem> + + <listitem> + <para> + <literal>ORDER BY ... LIMIT</> can be done without sorting + (Greg Stark) + </para> + + <para> + This is done by sequentially scanning the table and tracking just + the <quote>top N</> candidate rows, rather than performing a + full sort of the entire table. This is useful when there is no + matching index and the <literal>LIMIT</> is not large. + </para> + </listitem> + + <listitem> + <para> + Put a rate limit on messages sent to the statistics + collector by backends + (Tom) + </para> + + <para> + This reduces overhead for short transactions, but might sometimes + increase the delay before statistics are tallied. + </para> + </listitem> + + <listitem> + <para> + Improve hash join performance for cases with many NULLs (Tom) + </para> + </listitem> + + <listitem> + <para> + Speed up operator lookup for cases with non-exact datatype matches (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Server</title> + <itemizedlist> + + <listitem> + <para> + Autovacuum is now enabled by default (Alvaro) + </para> + + <para> + Several changes were made to eliminate disadvantages of having + autovacuum enabled, thereby justifying the change in default. + Several other autovacuum parameter defaults were also modified. + </para> + </listitem> + + <listitem> + <para> + Support multiple concurrent autovacuum processes (Alvaro, Itagaki + Takahiro) + </para> + + <para> + This allows multiple vacuums to run concurrently. This prevents + vacuuming of a large table from delaying vacuuming of smaller tables. + </para> + </listitem> + + <listitem> + <para> + Automatically re-plan cached queries when table + definitions change or statistics are updated (Tom) + </para> + + <para> + Previously PL/PgSQL functions that referenced temporary tables + would fail if the temporary table was dropped and recreated + between function invocations, unless <literal>EXECUTE</> was + used. This improvement fixes that problem and many related issues. + </para> + </listitem> + + <listitem> + <para> + Add a <varname>temp_tablespaces</varname> parameter to control + the tablespaces for temporary tables and files (Jaime Casanova, + Albert Cervera, Bernd Helmle) + </para> + + <para> + This parameter defines a list of tablespaces to be used. This + enables spreading the I/O load across multiple tablespaces. A random + tablespace is chosen each time a temporary object is created. + Temporary files are no longer stored in per-database + <filename>pgsql_tmp/</filename> directories but in per-tablespace + directories. + </para> + </listitem> + + <listitem> + <para> + Place temporary tables' TOAST tables in special schemas named + <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom) + </para> + + <para> + This allows low-level code to recognize these tables as temporary, + which enables various optimizations such as not WAL-logging changes + and using local rather than shared buffers for access. This also + fixes a bug wherein backends unexpectedly held open file references + to temporary TOAST tables. + </para> + </listitem> + + <listitem> + <para> + Fix problem that a constant flow of new connection requests could + indefinitely delay the postmaster from completing a shutdown or + a crash restart (Tom) + </para> + </listitem> + + <listitem> + <para> + Guard against a very-low-probability data loss scenario by preventing + re-use of a deleted table's relfilenode until after the next + checkpoint (Heikki) + </para> + </listitem> + + <listitem> + <para> + Fix <command>CREATE CONSTRAINT TRIGGER</> + to convert old-style foreign key trigger definitions into regular + foreign key constraints (Tom) + </para> + + <para> + This will ease porting of foreign key constraints carried forward from + pre-7.3 databases, if they were never converted using + <filename>contrib/adddepend</>. + </para> + </listitem> + + <listitem> + <para> + Fix <literal>DEFAULT NULL</> to override inherited defaults (Tom) + </para> + + <para> + <literal>DEFAULT NULL</> was formerly considered a noise phrase, but it + should (and now does) override non-null defaults that would otherwise + be inherited from a parent table or domain. + </para> + </listitem> + + <listitem> + <para> + Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004 (Tatsuo) + </para> + + <para> + These new encodings can be converted to and from UTF-8. + </para> + </listitem> + + <listitem> + <para> + Change server startup log message from <quote>database system is + ready</quote> to <quote>database system is ready to accept + connections</quote>, and adjust its timing + </para> + + <para> + The message now appears only when the postmaster is really ready + to accept connections. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Monitoring</title> + <itemizedlist> + + <listitem> + <para> + Add <varname>log_autovacuum_min_duration</varname> parameter to + support configurable logging of autovacuum activity (Simon, Alvaro) + </para> + </listitem> + + <listitem> + <para> + Add <varname>log_lock_waits</varname> parameter to log lock waiting + (Simon) + </para> + </listitem> + + <listitem> + <para> + Add <varname>log_temp_files</varname> parameter to log temporary + file usage (Bill Moran) + </para> + </listitem> + + <listitem> + <para> + Add <varname>log_checkpoints</varname> parameter to improve logging + of checkpoints (Greg Smith, Heikki) + </para> + </listitem> + + <listitem> + <para> + <varname>log_line_prefix</varname> now supports + <literal>%s</literal> and <literal>%c</literal> escapes in all + processes (Andrew) + </para> + + <para> + Previously these escapes worked only for user sessions, not for + background database processes. + </para> + </listitem> + + <listitem> + <para> + Add <varname>log_restartpoints</varname> to control logging of + point-in-time recovery restart points (Simon) + </para> + </listitem> + + <listitem> + <para> + Last transaction end time is now logged at end of recovery and at + each logged restart point (Simon) + </para> + </listitem> + + <listitem> + <para> + Autovacuum now reports its activity start time in + <literal>pg_stat_activity</literal> (Tom) + </para> + </listitem> + + <listitem> + <para> + Allow server log output in comma-separated value (CSV) format (Arul + Shaji, Greg Smith, Andrew Dunstan) + </para> + + <para> + CSV-format log files can easily be loaded into a database table for + subsequent analysis. + </para> + </listitem> + + <listitem> + <para> + Use PostgreSQL-supplied timezone support for formatting timestamps + displayed in the server log (Tom) + </para> + + <para> + This avoids Windows-specific problems with localized time zone + names that are in the wrong encoding. There is a new + <varname>log_timezone</> parameter that controls the timezone + used in log messages, independently of the client-visible + <varname>timezone</> parameter. + </para> + </listitem> + + <listitem> + <para> + New system view <literal>pg_stat_bgwriter</literal> displays + statistics about background writer activity (Magnus) + </para> + </listitem> + + <listitem> + <para> + Add new columns for database-wide tuple statistics to + <literal>pg_stat_database</literal> (Magnus) + </para> + </listitem> + + <listitem> + <para> + Add an <literal>xact_start</literal> (transaction start time) column to + <literal>pg_stat_activity</literal> (Neil) + </para> + + <para> + This makes it easier to identify long-running transactions. + </para> + </listitem> + + <listitem> + <para> + Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns + to <literal>pg_stat_all_tables</literal> and related views (Glen + Parker) + </para> + </listitem> + + <listitem> + <para> + Merge <varname>stats_block_level</> and <varname>stats_row_level</> + parameters into a single parameter <varname>track_counts</>, which + controls all messages sent to the statistics collector process + (Tom) + </para> + </listitem> + + <listitem> + <para> + Rename <varname>stats_command_string</varname> parameter to + <varname>track_activities</varname> (Tom) + </para> + </listitem> + + <listitem> + <para> + Fix statistical counting of live and dead tuples to recognize that + committed and aborted transactions have different effects (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Authentication</title> + <itemizedlist> + + <listitem> + <para> + Support Security Service Provider Interface (<acronym>SSPI</>) for + authentication on Windows (Magnus) + </para> + </listitem> + + <listitem> + <para> + Support GSSAPI authentication (Henry Hotz, Magnus) + </para> + + <para> + This should be preferred to native Kerberos authentication because + GSSAPI is an industry standard. + </para> + </listitem> + + <listitem> + <para> + Support a global SSL configuration file (Victor Wagner) + </para> + </listitem> + + <listitem> + <para> + Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers + (Victor Wagner) + </para> + </listitem> + + <listitem> + <para> + Add a Kerberos realm parameter, <varname>krb_realm</> (Magnus) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Write-Ahead Log (<acronym>WAL</>) and Continuous Archiving</title> + <itemizedlist> + + <listitem> + <para> + Change the timestamps recorded in transaction WAL records from + time_t to TimestampTz representation (Tom) + </para> + + <para> + This provides sub-second resolution in WAL, which can be useful for + point-in-time recovery. + </para> + </listitem> + + <listitem> + <para> + Reduce WAL disk space needed by warm standby servers (Simon) + </para> + + <para> + This change allows a warm standby server to pass the name of the earliest + still-needed WAL file to the recovery script, allowing automatic removal + of no-longer-needed WAL files. This is done using <literal>%r</> in + the <varname>restore_command</varname> parameter of + <filename>recovery.conf</filename>. + </para> + </listitem> + + <listitem> + <para> + New boolean configuration parameter, <varname>archive_mode</>, + controls archiving (Simon) + </para> + + <para> + Previously setting <varname>archive_command</> to an empty string + turned off archiving. Now <varname>archive_mode</> turns archiving + on and off, independently of <varname>archive_command</>. This is + useful for stopping archiving temporarily. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Queries</title> + <itemizedlist> + + <listitem> + <para> + Full text search is integrated into the core database + system (Teodor, Oleg) + </para> + + <para> + Text search has been improved, moved into the core code, and is now + installed by default. <filename>contrib/tsearch2</> now contains + a compatibility interface. + </para> + </listitem> + + <listitem> + <para> + Add control over whether <literal>NULL</>s sort first or last (Teodor, Tom) + </para> + + <para> + The syntax is <literal>ORDER BY ... NULLS FIRST/LAST</>. + </para> + </listitem> + + <listitem> + <para> + Allow per-column ascending/descending (<literal>ASC</>/<literal>DESC</>) + ordering options for indexes (Teodor, Tom) + </para> + + <para> + Previously a query using <literal>ORDER BY</> with mixed + <literal>ASC</>/<literal>DESC</> specifiers could not fully use + an index. Now an index can be fully used in such cases if the + index was created with matching + <literal>ASC</>/<literal>DESC</> specifications. + <literal>NULL</> sort order within an index can be controlled, too. + </para> + </listitem> + + <listitem> + <para> + Allow <literal>col IS NULL</> to use an index (Teodor) + </para> + </listitem> + + <listitem> + <para> + Updatable cursors (Arul Shaji, Tom) + </para> + + <para> + This eliminates the need to reference a primary key to + <command>UPDATE</> or <command>DELETE</> rows returned by a cursor. + The syntax is <literal>UPDATE/DELETE WHERE CURRENT OF</>. + </para> + </listitem> + + <listitem> + <para> + Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom) + </para> + </listitem> + + <listitem> + <para> + Create a general mechanism that supports casts to and from the + standard string types (<type>TEXT</type>, <type>VARCHAR</type>, + <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by + invoking the datatype's I/O functions (Tom) + </para> + + <para> + Previously, such casts were available only for types that had + specialized function(s) for the purpose. + These new casts are assignment-only in the to-string direction, + explicit-only in the other direction, and therefore should create no + surprising behavior. + </para> + </listitem> + + <listitem> + <para> + Allow <literal>UNION</> and related constructs to return a domain + type, when all inputs are of that domain type (Tom) + </para> + + <para> + Formerly, the output would be considered to be of the domain's base + type. + </para> + </listitem> + + <listitem> + <para> + Allow limited hashing when using two different data types (Tom) + </para> + + <para> + This allows hash joins, hash indexes, hashed subplans, and hash + aggregation to be used in situations involving cross-data-type + comparisons, if the data types have compatible hash functions. + Currently, cross-data-type hashing support exists for + <type>smallint</type>/<type>integer</type>/<type>bigint</type>, + and for <type>float4</type>/<type>float8</type>. + </para> + </listitem> + + <listitem> + <para> + Improve optimizer logic for detecting when variables are equal + in a <literal>WHERE</> clause (Tom) + </para> + + <para> + This allows mergejoins to work with descending sort orders, and + improves recognition of redundant sort columns. + </para> + </listitem> + + <listitem> + <para> + Improve performance when planning large inheritance trees in + cases where most tables are excluded by constraints (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Object Manipulation</title> + <itemizedlist> + + <listitem> + + <para> + Arrays of composite types (David Fetter, Andrew, Tom) + </para> + + <para> + In addition to arrays of explicitly-declared composite types, + arrays of the rowtypes of regular tables and views are now + supported, except for rowtypes of system catalogs, sequences, and TOAST + tables. + </para> + + </listitem> + + <listitem> + <para> + Server configuration parameters can now be set on a per-function + basis (Tom) + </para> + + <para> + For example, functions can now set their own + <varname>search_path</> to prevent unexpected behavior if a + different <varname>search_path</> exists at run-time. Security + definer functions should set <varname>search_path</varname> to + avoid security loopholes. + </para> + </listitem> + + <listitem> + <para> + <command>CREATE/ALTER FUNCTION</command> now supports + <literal>COST</literal> and <literal>ROWS</literal> options (Tom) + </para> + + <para> + <literal>COST</literal> allows specification of the cost of a + function call. <literal>ROWS</literal> allows specification of + the average number or rows returned by a set-returning function. + These values are used by the optimizer in choosing the best plan. + </para> + </listitem> + + <listitem> + <para> + Implement <command>CREATE TABLE LIKE ... INCLUDING + INDEXES</command> (Trevor Hardcastle, Nikhil Sontakke, Neil) + </para> + </listitem> + + <listitem> + <para> + Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore + transactions in other databases (Simon) + </para> + </listitem> + + <listitem> + <para> + Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER + SEQUENCE ... RENAME TO</command> (David Fetter, Neil) + </para> + + <para> + Previously this could only be done via <command>ALTER TABLE ... + RENAME TO</command>. + </para> + </listitem> + + <listitem> + <para> + Make <command>CREATE/DROP/RENAME DATABASE</> wait briefly for + conflicting backends to exit before failing (Tom) + </para> + + <para> + This increases the likelihood that these commands will succeed. + </para> + </listitem> + + <listitem> + <para> + Allow triggers and rules to be deactivated in groups using a + configuration parameter, for replication purposes (Jan) + </para> + + <para> + This allows replication systems to disable triggers and rewrite + rules as a group without modifying the system catalogs directly. + The behavior is controlled by <command>ALTER TABLE</> and a new + parameter <varname>session_replication_role</varname>. + </para> + </listitem> + + <listitem> + <para> + User-defined types can now have type modifiers (Teodor, Tom) + </para> + + <para> + This allows a user-defined type to take a modifier, like + <type>ssnum(7)</>. Previously only built-in + data types could have modifiers. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Utility Commands</title> + <itemizedlist> + + <listitem> + <para> + Non-superuser database owners now are able to add trusted procedural + languages to their databases by default (Jeremy Drake) + </para> + + <para> + While this is reasonably safe, some administrators might wish to + revoke the privilege. It is controlled by + <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>. + </para> + </listitem> + + <listitem> + <para> + Allow a session's current parameter setting to be used as the + default for future sessions (Tom) + </para> + + <para> + This is done with <literal>SET ... FROM CURRENT</literal> in + <command>CREATE/ALTER FUNCTION</command>, <command>ALTER + DATABASE</command>, or <command>ALTER ROLE</command>. + </para> + </listitem> + + <listitem> + <para> + Implement new commands <command>DISCARD ALL</command>, + <command>DISCARD PLANS</command>, <command>DISCARD + TEMPORARY</command>, <command>CLOSE ALL</command>, and + <command>DEALLOCATE ALL</command> (Marko Kreen, Neil) + </para> + + <para> + These commands simplify resetting a database session to its initial + state, and are particularly useful for connection-pooling software. + </para> + </listitem> + + <listitem> + <para> + Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas) + </para> + + <para> + Formerly, <command>CLUSTER</command> would discard all tuples + that were committed dead, even if there were still transactions + that should be able to see them under MVCC visibility rules. + </para> + </listitem> + + <listitem> + <para> + Add new <command>CLUSTER</command> syntax: <literal>CLUSTER + <replaceable>table</> USING <replaceable>index</></literal> + (Holger Schurig) + </para> + + <para> + The old <command>CLUSTER</command> syntax is still supported, but + the new form is considered more logical. + </para> + </listitem> + + <listitem> + <para> + Fix <command>EXPLAIN</command> so it can show complex plans + more accurately (Tom) + </para> + + <para> + References to subplan outputs are now always shown correctly, + instead of using <literal>?column<replaceable>N</>?</literal> + for complicated cases. + </para> + </listitem> + + <listitem> + <para> + Limit the amount of information reported when a user is dropped + (Alvaro) + </para> + + <para> + Previously, dropping (or attempting to drop) a user who owned many + objects could result in large <literal>NOTICE</literal> or + <literal>ERROR</literal> messages listing all these objects; this + caused problems for some client applications. The length of the + message is now limited, although a full list is still sent to the + server log. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Data Types</title> + <itemizedlist> + + <listitem> + <para> + Support for the SQL/XML standard, including new operators and an + <type>XML</type> data type (Nikolay Samokhvalov, Pavel Stehule, Peter) + </para> + </listitem> + + <listitem> + <para> + Enumerated data types (<type>ENUM</type>) (Tom Dunstan) + </para> + + <para> + This feature provides convenient support for fields that have a + small, fixed set of allowed values. An example of creating an + <literal>ENUM</> type is + <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>. + </para> + </listitem> + + <listitem> + <para> + Universally Unique Identifier (<type>UUID</>) data type (Gevik + Babakhani, Neil) + </para> + + <para> + This closely matches <acronym>RFC</> 4122. + </para> + </listitem> + + <listitem> + <para> + Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain) + </para> + + <para> + This greatly increases the range of supported <type>MONEY</> + values. + </para> + </listitem> + + <listitem> + <para> + Fix <type>float4</type>/<type>float8</type> to handle + <literal>Infinity</> and <literal>NAN</> (Not A Number) + consistently (Bruce) + </para> + + <para> + The code formerly was not consistent about distinguishing + <literal>Infinity</> from overflow conditions. + </para> + </listitem> + + <listitem> + <para> + Allow leading and trailing whitespace during input of + <type>boolean</type> values (Neil) + </para> + </listitem> + + <listitem> + <para> + Prevent <command>COPY</> from using digits and lowercase letters as + delimiters (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Functions</title> + <itemizedlist> + + <listitem> + <para> + Add new regular expression functions + <function>regexp_matches()</function>, + <function>regexp_split_to_array()</function>, and + <function>regexp_split_to_table()</function> (Jeremy Drake, Neil) + </para> + + <para> + These functions provide extraction of regular expression + subexpressions and allow splitting a string using a POSIX regular + expression. + </para> + </listitem> + + <listitem> + <para> + Add <function>lo_truncate()</function> for large object truncation + (Kris Jurka) + </para> + </listitem> + + <listitem> + <para> + Implement <function>width_bucket()</function> for the <type>float8</> + data type (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_stat_clear_snapshot()</function> to discard + statistics snapshots collected during the current transaction + (Tom) + </para> + + <para> + The first request for statistics in a transaction takes a statistics + snapshot that does not change during the transaction. This function + allows the snapshot to be discarded and a new snapshot loaded during + the next statistics query. This is particularly useful for PL/PgSQL + functions, which are confined to a single transaction. + </para> + </listitem> + + <listitem> + <para> + Add <literal>isodow</> option to <function>EXTRACT()</> and + <function>date_part()</> (Bruce) + </para> + + <para> + This returns the day of the week, with Sunday as seven. + (<literal>dow</> returns Sunday as zero.) + </para> + </listitem> + + <listitem> + <para> + Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO + day of year) format codes for <function>to_char()</>, + <function>to_date()</>, and <function>to_timestamp()</> (Brendan + Jurd) + </para> + </listitem> + + <listitem> + <para> + Make <function>to_timestamp()</> and <function>to_date()</> + assume <literal>TM</literal> (trim) option for potentially + variable-width fields (Bruce) + </para> + + <para> + This matches <productname>Oracle</>'s behavior. + </para> + </listitem> + + <listitem> + <para> + Fix off-by-one conversion error in + <function>to_date()</function>/<function>to_timestamp()</function> + <literal>D</> (non-ISO day of week) fields (Bruce) + </para> + </listitem> + + <listitem> + <para> + Make <function>setseed()</function> return void, rather than a + useless integer value (Neil) + </para> + </listitem> + + <listitem> + <para> + Add a hash function for <type>NUMERIC</type> (Neil) + </para> + + <para> + This allows hash indexes and hash-based plans to be used with + <type>NUMERIC</type> columns. + </para> + </listitem> + + <listitem> + <para> + Improve efficiency of + <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for + multi-byte character sets like UTF-8 (Andrew, Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Make <function>currtid()</function> functions require + <literal>SELECT</literal> privileges on the target table (Tom) + </para> + </listitem> + + <listitem> + <para> + Add several <function>txid_*()</function> functions to query + active transaction IDs (Jan) + </para> + + <para> + This is useful for various replication solutions. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>PL/PgSQL Server-Side Language</title> + <itemizedlist> + + <listitem> + <para> + Add scrollable cursor support, including directional control in + <command>FETCH</command> (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Allow <literal>IN</literal> as an alternative to + <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command> + statement, for consistency with the backend's + <command>FETCH</command> command (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Add <command>MOVE</command> to PL/PgSQL (Magnus, Pavel Stehule, + Neil) + </para> + </listitem> + + <listitem> + <para> + Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil) + </para> + + <para> + This adds convenient syntax for PL/PgSQL set-returning functions + that want to return the result of a query. <command>RETURN QUERY</> + is easier and more efficient than a loop + around <command>RETURN NEXT</command>. + </para> + </listitem> + + <listitem> + <para> + Allow function parameter names to be qualified with the + function's name (Tom) + </para> + + <para> + For example, <literal>myfunc.myvar</>. This is particularly + useful for specifying variables in a query where the variable + name might match a column name. + </para> + </listitem> + + <listitem> + <para> + Make qualification of variables with block labels work properly (Tom) + </para> + + <para> + Formerly, outer-level block labels could unexpectedly interfere with + recognition of inner-level record or row references. + </para> + </listitem> + + <listitem> + <para> + Tighten requirements for <literal>FOR</literal> loop + <literal>STEP</> values (Tom) + </para> + + <para> + Prevent non-positive <literal>STEP</> values, and handle + loop overflows. + </para> + </listitem> + + <listitem> + <para> + Improve accuracy when reporting syntax error locations (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Other Server-Side Languages</title> + <itemizedlist> + + <listitem> + <para> + Allow type-name arguments to PL/Perl + <function>spi_prepare()</function> to be data type aliases in + addition to names found in <literal>pg_type</literal> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Allow type-name arguments to PL/Python + <function>plpy.prepare()</function> to be data type aliases in + addition to names found in <literal>pg_type</literal> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Allow type-name arguments to PL/Tcl <function>spi_prepare</> to + be data type aliases in addition to names found in + <literal>pg_type</literal> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Enable PL/PythonU to compile on Python 2.5 (Marko Kreen) + </para> + </listitem> + + <listitem> + <para> + Support a true PL/Python boolean type in compatible Python versions + (Python 2.3 and later) (Marko Kreen) + </para> + </listitem> + + <listitem> + <para> + Fix PL/Tcl problems with thread-enabled <filename>libtcl</> spawning + multiple threads within the backend (Steve Marshall, Paul Bayer, + Doug Knight) + </para> + + <para> + This caused all sorts of unpleasantness. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title><link linkend="APP-PSQL"><application>psql</></link></title> + <itemizedlist> + + <listitem> + <para> + List disabled triggers separately in <literal>\d</literal> output + (Brendan Jurd) + </para> + </listitem> + + <listitem> + <para> + In <literal>\d</literal> patterns, always match <literal>$</literal> + literally (Tom) + </para> + </listitem> + + <listitem> + <para> + Show aggregate return types in <literal>\da</literal> output + (Greg Sabino Mullane) + </para> + </listitem> + + <listitem> + <para> + Add the function's volatility status to the output of + <literal>\df+</literal> (Neil) + </para> + </listitem> + + <listitem> + <para> + Add <literal>\prompt</literal> capability (Chad Wagner) + </para> + </listitem> + + <listitem> + <para> + Allow <literal>\pset</literal>, <literal>\t</literal>, and + <literal>\x</literal> to specify <literal>on</> or <literal>off</>, + rather than just toggling (Chad Wagner) + </para> + </listitem> + + <listitem> + <para> + Add <literal>\sleep</> capability (Jan) + </para> + </listitem> + + <listitem> + <para> + Enable <literal>\timing</> output for <literal>\copy</> (Andrew) + </para> + </listitem> + + <listitem> + <para> + Improve <literal>\timing</literal> resolution on Windows + (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Flush <literal>\o</> output after each backslash command (Tom) + </para> + </listitem> + + <listitem> + <para> + Correctly detect and report errors while reading a <literal>-f</> + input file (Peter) + </para> + </listitem> + + <listitem> + <para> + Remove <literal>-u</> option (this option has long been deprecated) + (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title> + <itemizedlist> + + <listitem> + <para> + Add <literal>--tablespaces-only</> and <literal>--roles-only</> + options to <application>pg_dumpall</application> (Dave Page) + </para> + </listitem> + + <listitem> + <para> + Add an output file option to + <application>pg_dumpall</application> (Dave Page) + </para> + + <para> + This is primarily useful on Windows, where output redirection of + child <application>pg_dump</application> processes does not work. + </para> + </listitem> + + <listitem> + <para> + Allow <application>pg_dumpall</> to accept an initial-connection + database name rather than the default + <literal>template1</literal> (Dave Page) + </para> + </listitem> + + <listitem> + <para> + In <literal>-n</> and <literal>-t</> switches, always match + <literal>$</literal> literally (Tom) + </para> + </listitem> + + <listitem> + <para> + Improve performance when a database has thousands of objects (Tom) + </para> + </listitem> + + <listitem> + <para> + Remove <literal>-u</> option (this option has long been deprecated) + (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Other Client Applications</title> + <itemizedlist> + + <listitem> + <para> + In <application>initdb</>, allow the location of the + <filename>pg_xlog</filename> directory to be specified + (Euler Taveira de Oliveira) + </para> + </listitem> + + <listitem> + <para> + Enable server core dump generation in <application>pg_regress</> + on supported operating systems (Andrew) + </para> + </listitem> + + <listitem> + <para> + Add a <literal>-t</> (timeout) parameter to <application>pg_ctl</> + (Bruce) + </para> + + <para> + This controls how long <application>pg_ctl</> will wait when waiting + for server startup or shutdown. Formerly the timeout was hard-wired + as 60 seconds. + </para> + </listitem> + + <listitem> + <para> + Add a <application>pg_ctl</> option to control generation + of server core dumps (Andrew) + </para> + </listitem> + + <listitem> + <para> + Allow Control-C to cancel <application>clusterdb</>, + <application>reindexdb</>, and <application>vacuumdb</> (Itagaki + Takahiro, Magnus) + </para> + </listitem> + + <listitem> + <para> + Suppress command tag output for <application>createdb</>, + <application>createuser</>, <application>dropdb</>, and + <application>dropuser</> (Peter) + </para> + + <para> + The <literal>--quiet</> option is ignored and will be removed in 8.4. + Progress messages when acting on all databases now go to stdout + instead of stderr because they are not actually errors. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title><link linkend="libpq"><application>libpq</></link></title> + <itemizedlist> + + <listitem> + <para> + Interpret the <literal>dbName</> parameter of + <function>PQsetdbLogin()</> as a <literal>conninfo</> string if + it contains an equals sign (Andrew) + </para> + + <para> + This allows use of <literal>conninfo</> strings in client + programs that still use <literal>PQsetdbLogin()</>. + </para> + </listitem> + + <listitem> + <para> + Support a global <acronym>SSL</> configuration file (Victor + Wagner) + </para> + </listitem> + + <listitem> + <para> + Add environment variable <varname>PGSSLKEY</> to control + <acronym>SSL</> hardware keys (Victor Wagner) + </para> + </listitem> + + <listitem> + <para> + Add <function>lo_truncate()</function> for large object + truncation (Kris Jurka) + </para> + </listitem> + + <listitem> + <para> + Add <function>PQconnectionNeedsPassword()</function> that returns + true if the server required a password but none was supplied + (Joe Conway, Tom) + </para> + + <para> + If this returns true after a failed connection attempt, a client + application should prompt the user for a password. In the past + applications have had to check for a specific error message string to + decide whether a password is needed; that approach is now + deprecated. + </para> + </listitem> + + <listitem> + <para> + Add <function>PQconnectionUsedPassword()</function> that returns + true if the supplied password was actually used + (Joe Conway, Tom) + </para> + + <para> + This is useful in some security contexts where it is important + to know whether a user-supplied password is actually valid. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title><link linkend="ecpg"><application>ecpg</></link></title> + <itemizedlist> + + <listitem> + <para> + Use V3 frontend/backend protocol (Michael) + </para> + + <para> + This adds support for server-side prepared statements. + </para> + </listitem> + + <listitem> + <para> + Use native threads, instead of pthreads, on Windows (Magnus) + </para> + </listitem> + + <listitem> + <para> + Improve thread-safety of ecpglib (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Make the ecpg libraries export only necessary API symbols (Michael) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title><application>Windows</> Port</title> + <itemizedlist> + + <listitem> + <para> + Allow the whole <productname>PostgreSQL</> distribution to be compiled + with <productname>Microsoft Visual C++</> (Magnus and others) + </para> + + <para> + This allows Windows-based developers to use familiar development + and debugging tools. + Windows executables made with Visual C++ might also have better + stability and performance than those made with other tool sets. + The client-only Visual C++ build scripts have been removed. + </para> + </listitem> + + <listitem> + <para> + Drastically reduce postmaster's memory usage when it has many child + processes (Magnus) + </para> + </listitem> + + <listitem> + <para> + Allow regression tests to be started by an administrative + user (Magnus) + </para> + </listitem> + + <listitem> + <para> + Add native shared memory implementation (Magnus) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Server Programming Interface (<acronym>SPI</>)</title> + <itemizedlist> + + <listitem> + <para> + Add cursor-related functionality in SPI (Pavel Stehule) + </para> + + <para> + Allow access to the cursor-related planning options, and add + <command>FETCH</>/<command>MOVE</> routines. + </para> + </listitem> + + <listitem> + <para> + Allow execution of cursor commands through + <function>SPI_execute</function> (Tom) + </para> + + <para> + The macro <literal>SPI_ERROR_CURSOR</> still exists but will + never be returned. + </para> + </listitem> + + <listitem> + <para> + SPI plan pointers are now declared as <literal>SPIPlanPtr</> instead of + <literal>void *</> (Tom) + </para> + + <para> + This does not break application code, but switching is + recommended to help catch simple programming mistakes. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Build Options</title> + <itemizedlist> + + <listitem> + <para> + Add <application>configure</> option <literal>--enable-profiling</> + to enable code profiling (works only with <application>gcc</>) + (Korry Douglas and Nikhil Sontakke) + </para> + </listitem> + + <listitem> + <para> + Add <application>configure</> option <literal>--with-system-tzdata</> + to use the operating system's time zone database (Peter) + </para> + </listitem> + + <listitem> + <para> + Fix <acronym>PGXS</> so extensions can be built against PostgreSQL + installations whose <application>pg_config</> program does not + appear first in the <varname>PATH</> (Tom) + </para> + </listitem> + + <listitem> + <para> + Support <command>gmake draft</command> when building the + <acronym>SGML</> documentation (Bruce) + </para> + + <para> + Unless <literal>draft</> is used, the documentation build will + now be repeated if necessary to ensure the index is up-to-date. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Source Code</title> + <itemizedlist> + + <listitem> + <para> + Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to + avoid conflicting with third party includes (like Tcl) that + define <literal>DLLIMPORT</> (Magnus) + </para> + </listitem> + + <listitem> + <para> + Create <quote>operator families</quote> to improve planning of + queries involving cross-data-type comparisons (Tom) + </para> + </listitem> + + <listitem> + <para> + Update GIN <function>extractQuery()</> API to allow signalling + that nothing can satisfy the query (Teodor) + </para> + </listitem> + + <listitem> + <para> + Move <literal>NAMEDATALEN</> definition from + <filename>postgres_ext.h</> to <filename>pg_config_manual.h</> + (Peter) + </para> + </listitem> + + <listitem> + <para> + Provide <function>strlcpy()</function> and + <function>strlcat()</function> on all platforms, and replace + error-prone uses of <function>strncpy()</function>, + <function>strncat()</function>, etc (Peter) + </para> + </listitem> + + <listitem> + <para> + Create hooks to let an external plugin monitor (or even replace) the + planner and create plans for hypothetical situations (Gurjeet + Singh, Tom) + </para> + </listitem> + + <listitem> + <para> + Create a function variable <literal>join_search_hook</> to let plugins + override the join search order portion of the planner (Julius + Stroffek) + </para> + </listitem> + + <listitem> + <para> + Add <function>tas()</> support for Renesas' M32R processor + (Kazuhiro Inaoka) + </para> + </listitem> + + <listitem> + <para> + <function>quote_identifier()</function> and + <application>pg_dump</application> no longer quote keywords that are + unreserved according to the grammar (Tom) + </para> + </listitem> + + <listitem> + <para> + Change the on-disk representation of the <type>NUMERIC</type> + data type so that the <structfield>sign_dscale</> word comes + before the weight (Tom) + </para> + </listitem> + + <listitem> + <para> + Use <acronym>SYSV</> semaphores rather than POSIX on Darwin + >= 6.0, i.e., OS X 10.2 and up (Chris Marcellino) + </para> + </listitem> + + <listitem> + <para> + Add <link linkend="acronyms">acronym</link> and <link + linkend="creating-cluster-nfs">NFS</link> documentation + sections (Bruce) + </para> + </listitem> + + <listitem> + <para> + "Postgres" is now documented as an accepted alias for + "PostgreSQL" (Peter) + </para> + </listitem> + + <listitem> + <para> + Add documentation about preventing database server spoofing when + the server is down (Bruce) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Contrib</title> + <itemizedlist> + + <listitem> + <para> + Move <filename>contrib</> <filename>README</> content into the + main <productname>PostgreSQL</> documentation (Albert Cervera i + Areny) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/pageinspect</filename> module for low-level + page inspection (Simon, Heikki) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/pg_standby</filename> module for controlling + warm standby operation (Simon) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/uuid-ossp</filename> module for generating + <type>UUID</> values using the OSSP UUID library (Peter) + </para> + + <para> + Use <application>configure</> + <literal>--with-ossp-uuid</literal> to activate. This takes + advantage of the new <type>UUID</type> builtin type. + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/dict_int</filename>, + <filename>contrib/dict_xsyn</filename>, and + <filename>contrib/test_parser</filename> modules to provide + sample add-on text search dictionary templates and parsers + (Sergey Karpov) + </para> + </listitem> + + <listitem> + <para> + Allow <application>contrib/pgbench</> to set the fillfactor (Pavan + Deolasee) + </para> + </listitem> + + <listitem> + <para> + Add timestamps to <application>contrib/pgbench</> <literal>-l</> + (Greg Smith) + </para> + </listitem> + + <listitem> + <para> + Add usage count statistics to + <filename>contrib/pgbuffercache</filename> (Greg Smith) + </para> + </listitem> + + <listitem> + <para> + Add GIN support for <filename>contrib/hstore</> (Teodor) + </para> + </listitem> + + <listitem> + <para> + Add GIN support for <filename>contrib/pg_trgm</> (Guillaume Smet, Teodor) + </para> + </listitem> + + <listitem> + <para> + Update OS/X startup scripts in + <filename>contrib/start-scripts</filename> (Mark Cotner, David + Fetter) + </para> + </listitem> + + <listitem> + <para> + Restrict <function>pgrowlocks()</function> and + <function>dblink_get_pkey()</function> to users who have + <literal>SELECT</literal> privilege on the target table (Tom) + </para> + </listitem> + + <listitem> + <para> + Restrict <filename>contrib/pgstattuple</filename> functions to + superusers (Tom) + </para> + </listitem> + + <listitem> + <para> + <filename>contrib/xml2</filename> is deprecated and planned for + removal in 8.4 (Peter) + </para> + + <para> + The new XML support in core PostgreSQL supersedes this module. + </para> + </listitem> + + </itemizedlist> + + </sect3> + </sect2> + </sect1> diff --git a/doc/src/sgml/release-8.4.sgml b/doc/src/sgml/release-8.4.sgml new file mode 100644 index 00000000000..be3d1d9cb02 --- /dev/null +++ b/doc/src/sgml/release-8.4.sgml @@ -0,0 +1,3208 @@ +<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.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-8-4"> + <title>Release 8.4</title> + + <note> + <title>Release date</title> + <simpara>2009-??-??, ITEMS CURRENT AS OF 2009-04-08</simpara> + </note> + + <sect2> + <title>Overview</title> + + <para> + After many years of development, <productname>PostgreSQL</> has + become feature-complete in many areas. This release shows a + targeted approach to adding features (e.g., authentication, + monitoring, space reuse), and adds capabilities defined in the + later SQL standards. The major areas of enhancement are: + </para> + + <itemizedlist> + + <!-- This list duplicates items below, but without authors or details--> + + <listitem> + <para> + Windowing Functions + </para> + </listitem> + + <listitem> + <para> + Common Table Expressions and Recursive Joins + </para> + </listitem> + + <listitem> + <para> + Default and variadic parameters for functions + </para> + </listitem> + + <listitem> + <para> + Parallel Restore + </para> + </listitem> + + <listitem> + <para> + Column Permissions + </para> + </listitem> + + <listitem> + <para> + Per-database locale settings + </para> + </listitem> + + <listitem> + <para> + Improved hash indexes + </para> + </listitem> + + <listitem> + <para> + Improved join performance for <literal>EXISTS</> and <literal>NOT EXISTS</> queries + </para> + </listitem> + + <listitem> + <para> + Easier-to-use Warm Standby + </para> + </listitem> + + <listitem> + <para> + Automatic sizing of the Free Space Map + </para> + </listitem> + + <listitem> + <para> + Visibility Map (greatly reduces vacuum overhead for slowly-changing tables) + </para> + </listitem> + + <listitem> + <para> + Version-aware psql (backslash commands work against older servers) + </para> + </listitem> + + <listitem> + <para> + Support SSL certificates for user authentication + </para> + </listitem> + + <listitem> + <para> + Per-function runtime statistics + </para> + </listitem> + + <listitem> + <para> + Easy editing of functions in psql + </para> + </listitem> + + <listitem> + <para> + New contrib modules: pg_stat_statements, auto_explain, citext, btree_gin + </para> + </listitem> + + </itemizedlist> + + <para> + The above items are explained in more detail in the sections below. + </para> + + </sect2> + + <sect2> + <title>Migration to Version 8.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> + + <sect3> + <title>General</title> + <itemizedlist> + + <listitem> + <para> + Use 64-bit integer datetimes by default (Neil Conway) + </para> + + <para> + Previously this was selected by <application>configure</>'s + <option>--enable-integer-datetimes</> option. To retain + the old behavior, build with <option>--disable-integer-datetimes</>. + </para> + </listitem> + + <listitem> + <para> + Remove <application>ipcclean</> utility command (Bruce) + </para> + + <para> + The utility only worked on a few platforms. Users should use + their operating system tools instead. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Server Settings</title> + <itemizedlist> + + <listitem> + <para> + Change default setting for + <literal>log_min_messages</> to <literal>warning</> (previously + it was <literal>notice</>) to reduce log file volume (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <literal>debug_print_parse</>, <literal>debug_print_rewritten</>, + and <literal>debug_print_plan</> + output appear at <literal>LOG</> message level, not + <literal>DEBUG1</> as formerly (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <literal>debug_pretty_print</> default to <literal>on</> (Tom) + </para> + </listitem> + + <listitem> + <para> + Remove <varname>explain_pretty_print</> parameter (no longer needed) (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <varname>log_temp_files</> settable by superusers only, like other + logging options (Simon Riggs) + </para> + </listitem> + + <listitem> + <para> + Remove automatic appending of the epoch timestamp when no <literal>%</> + escapes are present in <literal>log_filename</> (Robert Haas) + </para> + + <para> + This change was made because some users wanted a fixed log filename, + for use with an external log rotation tool. + </para> + </listitem> + + <listitem> + <para> + Remove <varname>log_restartpoints</> from <filename>recovery.conf</>; + instead use <varname>log_checkpoints</> (Simon) + </para> + </listitem> + + <listitem> + <para> + Remove support for the (insecure) <literal>crypt</> authentication method + (Magnus) + </para> + + <para> + This effectively obsoletes pre-<productname>PostgreSQL</> 7.2 client + libraries, as there is no longer any non-plaintext password method that + they can use. + </para> + </listitem> + + <listitem> + <para> + Remove <varname>krb_realm</> and <varname>krb_server_hostname</>; + these are now set in <filename>pg_hba.conf</> instead (Magnus) + </para> + </listitem> + + <listitem> + <para> + There are also significant changes in <link + linkend="release-8-4-pg-hba-conf"><filename>pg_hba.conf</></link>, + as described below. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Queries</title> + + <itemizedlist> + + <listitem> + <para> + Change <command>TRUNCATE</> and <command>LOCK</> to + apply to child tables of the specified table(s) (Peter) + </para> + + <para> + These commands now accept an <literal>ONLY</> option that prevents + processing child tables; this option must be used if the old + behavior is needed. + </para> + </listitem> + + <listitem> + <para> + <command>SELECT DISTINCT</> and + <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> + no longer always produce sorted output (Tom) + </para> + + <para> + Previously, these types of queries always removed duplicate rows + by means of Sort/Unique processing (i.e., sort then remove adjacent + duplicates). Now they can be implemented by hashing, which will not + produce sorted output. If an application relied on the output being + in sorted order, the recommended fix is to add an <literal>ORDER BY</> + clause. As a short-term workaround, the previous behavior can be + restored by disabling <literal>enable_hashagg</>, but that is a very + performance-expensive fix. <literal>SELECT DISTINCT ON</> never uses + hashing, however, so its behavior is unchanged. + </para> + </listitem> + + <listitem> + <para> + Force child tables to inherit <literal>CHECK</> constraints from parents + (Alex Hunsaker, Nikhil Sontakke, Tom) + </para> + + <para> + Formerly it was possible to drop such a constraint from a child + table, allowing rows that violate the constraint to be visible + when scanning the parent table. This was deemed inconsistent, + as well as contrary to SQL standard. + </para> + </listitem> + + <listitem> + <para> + Disallow negative <literal>LIMIT</> or <literal>OFFSET</> + values, rather than treating them as zero (Simon) + </para> + </listitem> + + <listitem> + <para> + Disallow <command>LOCK TABLE</> outside a transaction block + (Tom) + </para> + + <para> + Such an operation is useless because the lock would be released + immediately. + </para> + </listitem> + + <listitem> + <para> + Sequences now contain an additional <structfield>start_value</> column + (Zoltan Boszormenyi) + </para> + + <para> + This supports <command>ALTER SEQUENCE ... RESTART</>. + </para> + </listitem> + + </itemizedlist> + + </sect3> + + + <sect3> + <title>Functions and Operators</title> + + <itemizedlist> + + <listitem> + <para> + Make <type>numeric</> zero raised to a fractional power return + <literal>0</>, rather than throwing an error, and make + <type>numeric</> zero raised to the zero power return <literal>1</>, + rather than error (Bruce) + </para> + + <para> + This matches the longstanding <type>float8</> behavior. + </para> + </listitem> + + <listitem> + <para> + Allow unary minus of floating-point values to produce minus zero (Tom) + </para> + + <para> + The changed behavior is more <acronym>IEEE</>-standard + compliant. + </para> + </listitem> + + <listitem> + <para> + Throw an error if an escape character is the last character in + a <literal>LIKE</> pattern (i.e., it has nothing to escape) (Tom) + </para> + + <para> + Previously, such an escape character was silently ignored, + thus possibly masking application logic errors. + </para> + </listitem> + + <listitem> + <para> + Remove <literal>~=~</> and <literal>~<>~</> operators + formerly used for <literal>LIKE</> index comparisons (Tom) + </para> + + <para> + Pattern indexes now use the regular equality operator. + </para> + </listitem> + + <listitem> + <para> + <function>xpath()</> now passes its arguments to <application>libxml</> + without any changes (Andrew) + </para> + + <para> + This means that the XML argument must be a well-formed XML document. + The previous coding attempted to allow XML fragments, but it did not + work well. + </para> + </listitem> + + <listitem> + <para> + Make <function>xmlelement()</> format attribute values just like + content values (Peter) + </para> + + <para> + Previously, attribute values were formatted according to the + normal SQL output behavior, which is sometimes at odds with + XML rules. + </para> + </listitem> + + <listitem> + <para> + Adopt a faster algorithm for hash functions (Kenneth Marshall, + based on work of Bob Jenkins) + </para> + + <para> + Many of the built-in hash functions now deliver different results on + little-endian and big-endian platforms. + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title>Temporal Functions and Operators</title> + + <itemizedlist> + + <listitem> + <para> + <varname>DateStyle</> no longer controls <type>interval</> output + formatting; instead there is a new variable <varname>IntervalStyle</> + (Ron Mayer) + </para> + </listitem> + + <listitem> + <para> + Improve consistency of handling of fractional seconds in + <type>timestamp</> and <type>interval</> output (Ron Mayer) + </para> + + <para> + This may result in displaying a different number of fractional + digits than before, or rounding instead of truncating. + </para> + </listitem> + + <listitem> + <para> + Make <function>to_char()</>'s localized month/day names depend + on <varname>LC_TIME</>, not <varname>LC_MESSAGES</> (Euler + Taveira de Oliveira) + </para> + </listitem> + + <listitem> + <para> + Cause <function>to_date()</> and <function>to_timestamp()</> + to more consistently report errors for invalid input (Brendan + Jurd) + </para> + + <para> + Previous versions would often ignore or silently misread input + that did not match the format string. Such cases will now + result in an error. + </para> + </listitem> + + <listitem> + <para> + Fix <function>to_timestamp()</> to not require upper/lower case + matching for meridian (<literal>AM</>/<literal>PM</>) and era + (<literal>BC</>/<literal>AD</>) format designations (Brendan + Jurd) + </para> + + <para> + For example, input value <literal>ad</> now matches the format + string <literal>AD</>. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + </sect2> + + <sect2> + <title>Changes</title> + + <para> + Below you will find a detailed account of the changes between + <productname>PostgreSQL</productname> 8.4 and the previous major + release. + </para> + + <sect3> + <title>Performance</title> + <itemizedlist> + + <listitem> + <para> + Improve optimizer statistics calculations (Jan Urbanski, Tom) + </para> + + <para> + In particular, estimates for full-text-search operators are + greatly improved. + </para> + </listitem> + + <listitem> + <para> + Allow <command>SELECT DISTINCT</> and + <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> to + use hashing (Tom) + </para> + + <para> + This means that these types of queries no longer automatically + produce sorted output. + </para> + </listitem> + + <listitem> + <para> + Create explicit concepts of semi-joins and anti-joins (Tom) + </para> + + <para> + This work formalizes our previous ad-hoc treatment of <literal>IN + (SELECT ...)</> clauses, and extends it to <literal>EXISTS</> and + <literal>NOT EXISTS</> clauses. It should result in significantly + better planning of <literal>EXISTS</> and <literal>NOT EXISTS</> + queries. In general, logically equivalent <literal>IN</> and + <literal>EXISTS</> clauses should now have similar performance, + whereas previously <literal>IN</> often won. + </para> + </listitem> + + <listitem> + <para> + Improve optimization of sub-selects beneath outer joins (Tom) + </para> + + <para> + Formerly, a sub-select or view could not be optimized very well if it + appeared within the nullable side of an outer join and contained + non-strict expressions (for instance, constants) in its result list. + </para> + </listitem> + + <listitem> + <para> + Improve the performance of <function>text_position()</> and + related functions by using Boyer-Moore-Horspool searching (David + Rowley) + </para> + + <para> + This is particularly helpful for long search patterns. + </para> + </listitem> + + <listitem> + <para> + Reduce I/O load of writing the statistics collection file + by writing the file only when requested (Martin Pihlak) + </para> + </listitem> + + <listitem> + <para> + Improve performance for bulk inserts (Robert Haas, Simon) + </para> + </listitem> + + <listitem> + <para> + Increase the default value of <varname>default_statistics_target</> + from <literal>10</> to <literal>100</> (Greg Sabino Mullane, + Tom) + </para> + + <para> + The maximum value was also increased from <literal>1000</> to + <literal>10000</>. + </para> + </listitem> + + <listitem> + <para> + Perform <varname>constraint_exclusion</> checking by default + in queries involving inheritance or <literal>UNION ALL</> (Tom) + </para> + + <para> + A new <varname>constraint_exclusion</> setting, + <literal>partition</>, was added to specify this behavior. + </para> + </listitem> + + <listitem> + <para> + Allow I/O read-ahead for bitmap index scans (Greg Stark) + </para> + + <para> + The amount of read-ahead is controlled by + <varname>effective_io_concurrency</>. This feature is available only + if the kernel has <function>posix_fadvise()</> support. + </para> + </listitem> + + <listitem> + <para> + Inline simple set-returning <acronym>SQL</> functions in + <literal>FROM</> clauses (Richard Rowell) + </para> + </listitem> + + <listitem> + <para> + Improve performance of multi-batch hash joins by providing a special + case for join key values that are especially common in the outer + relation (Bryce Cutt, Ramon Lawrence) + </para> + </listitem> + + <listitem> + <para> + Reduce volume of temporary data in multi-batch hash joins + by suppressing <quote>physical tlist</> optimization (Michael + Henderson, Ramon Lawrence) + </para> + </listitem> + + <listitem> + <para> + Avoid waiting for idle-in-transaction sessions during + <command>CREATE INDEX CONCURRENTLY</> (Simon) + </para> + </listitem> + + <listitem> + <para> + Improve performance of shared cache invalidation (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Server</title> + + <sect4> + <title>Settings</title> + + <itemizedlist> + + <listitem> + <para> + Convert many <filename>postgresql.conf</> settings to enumerated + values so that <literal>pg_settings</> can display the valid + values (Magnus) + </para> + </listitem> + + <listitem> + <para> + Add <varname>cursor_tuple_fraction</> parameter to control the + fraction of a cursor's rows that the planner assumes will be + fetched (Robert Hell) + </para> + </listitem> + + <listitem> + <para> + Allow underscores in the names of custom variable + classes in <filename>postgresql.conf</> (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Authentication</title> + <itemizedlist> + + <listitem> + <para> + Report appropriate error message for combination of <literal>MD5</> + authentication and <varname>db_user_namespace</> enabled (Bruce) + </para> + </listitem> + + <listitem> + <para> + Support regular expressions in <filename>pg_ident.conf</> + (Magnus) + </para> + </listitem> + + <listitem> + <para> + Allow <productname>Kerberos</>/<acronym>GSSAPI</> parameters + to be changed without restarting the postmaster (Magnus) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4 id="release-8-4-pg-hba-conf"> + <title><filename>pg_hba.conf</></title> + <itemizedlist> + + <listitem> + <para> + Parse <filename>pg_hba.conf</> fully when it is loaded, + so that errors are reported immediately (Magnus) + </para> + + <para> + Previously, most errors in the file wouldn't be detected until clients + tried to connect, so an erroneous file could render the system + unusable. With the new behavior, if an error is detected during + reload then the bad file is rejected and the postmaster continues + to use its old copy. + </para> + </listitem> + + <listitem> + <para> + Show all parsing errors in <filename>pg_hba.conf</> instead of + aborting after the first one (Selena Deckelmann) + </para> + </listitem> + + <listitem> + <para> + Remove the <literal>ident sameuser</> option, instead making that + behavior the default if no usermap is specified (Magnus) + </para> + </listitem> + + <listitem> + <para> + Change all authentication options to use <literal>name=value</> + syntax (Magnus) + </para> + </listitem> + + <listitem> + <para> + Allow a usermap parameter for all external authentication methods + (Magnus) + </para> + + <para> + Previously a usermap was only supported for <literal>ident</> + authentication. + </para> + </listitem> + + <listitem> + <para> + Add <literal>clientcert</> option to control requesting of a + client certificate (Magnus) + </para> + + <para> + Previously this was controlled by the presence of a root + certificate file in the server's data directory. + </para> + </listitem> + + <listitem> + <para> + Add <literal>cert</> authentication method to allow + <emphasis>user</> authentication via <acronym>SSL</> certificates + (Magnus) + </para> + + <para> + Previously <acronym>SSL</> certificates could only verify that + the client had access to a certificate, not authenticate a + user. + </para> + </listitem> + + <listitem> + <para> + Allow <literal>krb5</>, <literal>gssapi</> and <literal>sspi</> + realm and <literal>krb5</> host settings to be specified in + <filename>pg_hba.conf</> (Magnus) + </para> + + <para> + These override the settings in <filename>postgresql.conf</>. + </para> + </listitem> + + <listitem> + <para> + Add <varname>include_realm</> parameter for <literal>krb5</>, + <literal>gssapi</>, and <literal>sspi</> methods (Magnus) + </para> + + <para> + This allows identical usernames from different realms to be + authenticated as different database users using usermaps. + </para> + </listitem> + + <listitem> + <para> + Support <literal>ident</> authentication over Unix-domain sockets + on <productname>Solaris</> (Garick Hamlin) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Continuous Archiving</title> + <itemizedlist> + + <listitem> + <para> + Provide an option to <function>pg_start_backup()</> to force its + implied checkpoint to finish as quickly as possible (Tom) + </para> + + <para> + The default behavior avoids excess I/O consumption, but that is + pointless if no concurrent query activity is going on. + </para> + </listitem> + + <listitem> + <para> + Make <function>pg_stop_backup()</> wait for modified <acronym>WAL</> + files to be archived (Simon) + </para> + + <para> + This guarantees that the backup is valid at the time + <function>pg_stop_backup()</> completes. + </para> + </listitem> + + <listitem> + <para> + Delay <quote>smart</> shutdown while a continuous archiving base backup + is in progress (Laurenz Albe) + </para> + </listitem> + + <listitem> + <para> + Cancel a continuous archiving base backup if <quote>fast</> shutdown + is requested (Laurenz Albe) + </para> + </listitem> + + <listitem> + <para> + Allow <filename>recovery.conf</> boolean variables to take the + same range of string values as <filename>postgresql.conf</> + boolean variables + (Bruce) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Monitoring</title> + <itemizedlist> + + <listitem> + <para> + Add <function>pg_conf_load_time()</> to report when + the <productname>PostgreSQL</> configuration files were last loaded + (George Gensure) + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_terminate_backend()</> to safely terminate a + backend (the <literal>SIGTERM</> signal works also) (Tom, Bruce) + </para> + + <para> + While it's always been possible to <literal>SIGTERM</> a single + backend, this was previously considered unsupported; and testing + of the case found some bugs that are now fixed. + </para> + </listitem> + + <listitem> + <para> + Add ability to track user-defined functions' call counts and + runtimes (Martin Pihlak) + </para> + + <para> + Function statistics appear in a new system view, + <literal>pg_stat_user_functions</>. Tracking is controlled + by the new parameter <varname>track_functions</>. + </para> + </listitem> + + <listitem> + <para> + Allow specification of the maximum query string size in + <literal>pg_stat_activity</> via new + <varname>track_activity_query_size</> parameter (Thomas Lee) + </para> + </listitem> + + <listitem> + <para> + Increase the maximum line length sent to <application>syslog</>, in + hopes of improving performance (Tom) + </para> + </listitem> + + <listitem> + <para> + Add read-only configuration variables <varname>segment_size</>, + <varname>wal_block_size</>, and <varname>wal_segment_size</> + (Bernd Helmle) + </para> + </listitem> + + <listitem> + <para> + When reporting a deadlock, report the text of all queries involved + in the deadlock to the server log (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_stat_get_activity(pid)</> function to return + information about a specific process id (Magnus) + </para> + </listitem> + + <listitem> + <para> + Allow the location of the server's statistics file to be specified + via <varname>stats_temp_directory</> (Magnus) + </para> + + <para> + This allows the statistics file to be placed in a + <acronym>RAM</>-resident directory to reduce I/O requirements. + On startup/shutdown, the file is copied to its traditional location + (<literal>$PGDATA/global/</>) so it is preserved across restarts. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Queries</title> + <itemizedlist> + + <listitem> + <para> + Add support for <literal>WINDOW</> functions (Hitoshi Harada) + </para> + </listitem> + + <listitem> + <para> + Add support for <literal>WITH</> clauses (CTEs), including <literal>WITH + RECURSIVE</> (Yoshiyuki Asaba, Tatsuo Ishii, Tom) + </para> + </listitem> + + <listitem> + <para> + Add <command>TABLE</> command (Peter) + </para> + + <para> + <literal>TABLE tablename</> is a SQL standard short-hand for + <literal>SELECT * FROM tablename</>. + </para> + </listitem> + + <listitem> + <para> + Allow <literal>AS</> to be optional when specifying a + <command>SELECT</> (or <literal>RETURNING</>) column output + label (Hiroshi Saito) + </para> + + <para> + This works so long as the column label is not any + <productname>PostgreSQL</> keyword; otherwise <literal>AS</> is still + needed. + </para> + </listitem> + + <listitem> + <para> + Support set-returning functions in <command>SELECT</> result lists + even for functions that return their result via a tuplestore (Tom) + </para> + + <para> + In particular, this means that functions written in PL/PgSQL + and other PL languages can now be called this way. + </para> + </listitem> + + <listitem> + <para> + Support set-returning functions in the output of aggregation + and grouping queries (Tom) + </para> + </listitem> + + <listitem> + <para> + Allow <command>SELECT FOR UPDATE</>/<literal>SHARE</> to work + on inheritance trees (Tom) + </para> + </listitem> + + <listitem> + <para> + Add infrastructure for <acronym>SQL/MED</> (Martin Pihlak, + Peter) + </para> + + <para> + There are no remote or external <acronym>SQL/MED</> capabilities + yet, but this change provides a standardized and future-proof + system for managing connection information for modules like + <filename>dblink</> and <filename>plproxy</>. + </para> + </listitem> + + <listitem> + <para> + Invalidate cached plans when referenced schemas, functions, operators, + or operator classes are modified (Martin Pihlak, Tom) + </para> + + <para> + This improves the system's ability to respond to on-the-fly + DDL changes. + </para> + </listitem> + <listitem> + <para> + Allow comparison of composite types and allow arrays of + anonymous composite types (Tom) + </para> + + <para> + This allows constructs such as + <literal>row(1, 1.1) = any (array[row(7, 7.7), row(1, 1.0)])</>. + This is particularly useful in recursive queries. + </para> + </listitem> + + <listitem> + <para> + Add support for Unicode string literal and identifier specifications + using code points, e.g. <literal>U&'d\0061t\+000061'</> + (Peter) + </para> + </listitem> + + <listitem> + <para> + Improve the parser's ability to report error locations (Tom) + </para> + + <para> + An error location is now reported for many semantic errors, + such as mismatched datatypes, that previously could not be localized. + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title><command>TRUNCATE</></title> + <itemizedlist> + + <listitem> + <para> + Support statement-level <literal>ON TRUNCATE</> triggers (Simon) + </para> + </listitem> + + <listitem> + <para> + Add <literal>RESTART</>/<literal>CONTINUE IDENTITY</> options + for <command>TRUNCATE TABLE</> + (Zoltan Boszormenyi) + </para> + + <para> + The start value of a sequence can be changed by <command>ALTER + SEQUENCE START WITH</>. + </para> + </listitem> + + <listitem> + <para> + Allow <command>TRUNCATE tab1, tab1</> to succeed (Bruce) + </para> + </listitem> + + <listitem> + <para> + Add a separate <command>TRUNCATE</> permission (Robert Haas) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><command>EXPLAIN</></title> + <itemizedlist> + + <listitem> + <para> + Make <command>EXPLAIN VERBOSE</> show the output columns of each + plan node (Tom) + </para> + + <para> + Previously <command>EXPLAIN VERBOSE</> output an internal + representation of the query plan. (That behavior is now + available via <varname>debug_print_plan</>.) + </para> + </listitem> + + <listitem> + <para> + Make <command>EXPLAIN</> identify subplans and initplans with + individual labels (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <command>EXPLAIN</> honor <varname>debug_print_plan</> (Tom) + </para> + </listitem> + + <listitem> + <para> + Allow <command>EXPLAIN</> on <command>CREATE TABLE AS</> (Peter) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><literal>LIMIT</>/<literal>OFFSET</></title> + <itemizedlist> + + <listitem> + <para> + Allow sub-selects in <literal>LIMIT</> and <literal>OFFSET</> (Tom) + </para> + </listitem> + + <listitem> + <para> + Add <acronym>SQL</>-standard syntax for + <literal>LIMIT</>/<literal>OFFSET</> capabilities (Peter) + </para> + + <para> + To wit, + <literal>OFFSET num {ROW|ROWS} FETCH {FIRST|NEXT} [num] {ROW|ROWS} + ONLY</>. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Object Manipulation</title> + <itemizedlist> + + <listitem> + <para> + Add support for column-level privileges (Stephen Frost, KaiGai + Kohei) + </para> + </listitem> + + <listitem> + <para> + Refactor multi-object <command>DROP</> operations to reduce the + need for <literal>CASCADE</> (Alex Hunsaker) + </para> + + <para> + For example, if table <literal>B</> has a dependency on table + <literal>A</>, the command <literal>DROP TABLE A, B</> no longer + requires the <literal>CASCADE</> option. + </para> + </listitem> + + <listitem> + <para> + Fix various problems with concurrent <command>DROP</> commands + by ensuring that locks are taken before we begin to drop dependencies + of an object (Tom) + </para> + </listitem> + + <listitem> + <para> + Improve reporting of dependencies during <command>DROP</> + commands (Tom) + </para> + </listitem> + + <listitem> + <para> + Add <literal>WITH [NO] DATA</> clause to <command>CREATE TABLE + AS</>, per the <acronym>SQL</> standard (Peter, Tom) + </para> + </listitem> + + <listitem> + <para> + Add support for user-defined I/O conversion casts (Heikki) + </para> + </listitem> + + <listitem> + <para> + Allow <command>CREATE AGGREGATE</> to use an <type>internal</> + transition datatype (Tom) + </para> + </listitem> + + <listitem> + <para> + Add <literal>LIKE</> clause to <command>CREATE TYPE</> (Tom) + </para> + + <para> + This simplifies creation of data types that use the same internal + representation as an existing type. + </para> + </listitem> + + <listitem> + <para> + Allow specification of the type category and <quote>preferred</> + status for user-defined base types (Tom) + </para> + + <para> + This allows more control over the coercion behavior of user-defined + types. + </para> + </listitem> + + <listitem> + <para> + Allow <command>CREATE OR REPLACE VIEW</> to add columns to the + end of a view (Robert Haas) + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title><command>ALTER</></title> + <itemizedlist> + + <listitem> + <para> + Add <command>ALTER TYPE RENAME</> (Petr Jelinek) + </para> + </listitem> + + <listitem> + <para> + Add <command>ALTER SEQUENCE ... RESTART</> (with no parameter) to + reset a sequence to its initial value (Zoltan Boszormenyi) + </para> + </listitem> + + <listitem> + <para> + Modify the <command>ALTER TABLE</> syntax to allow all reasonable + combinations for tables, indexes, sequences, and views (Tom) + </para> + + <para> + This change allows the following new syntaxes: + + <itemizedlist> + <listitem> + <para> + <command>ALTER SEQUENCE OWNER TO</> + </para> + </listitem> + <listitem> + <para> + <command>ALTER VIEW ALTER COLUMN SET/DROP DEFAULT</> + </para> + </listitem> + <listitem> + <para> + <command>ALTER VIEW OWNER TO</> + </para> + </listitem> + <listitem> + <para> + <command>ALTER VIEW SET SCHEMA</> + </para> + </listitem> + </itemizedlist> + + There is no actual new functionality here, but formerly + you had to say <command>ALTER TABLE</> to do these things, + which was confusing. + </para> + </listitem> + + <listitem> + <para> + Add support for the syntax <command>ALTER TABLE ... ALTER COLUMN + ... SET DATA TYPE</> (Peter) + </para> + + <para> + This is <acronym>SQL</>-standard syntax for functionality that + was already supported. + </para> + </listitem> + + <listitem> + <para> + Make <command>ALTER TABLE SET WITHOUT OIDS</> rewrite the table + to physically remove <type>OID</> values (Tom) + </para> + + <para> + Also, add <command>ALTER TABLE SET WITH OIDS</> to rewrite the + table to add <type>OID</>s. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Database Manipulation</title> + <itemizedlist> + + <listitem> + <para> + Improve reporting of + <command>CREATE</>/<command>DROP</>/<command>RENAME DATABASE</> + failure when uncommitted prepared transactions are the cause + (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <varname>LC_COLLATE</> and <varname>LC_CTYPE</> into + per-database settings (Radek Strnad, Heikki) + </para> + + <para> + This makes collation similar to encoding, which was always + configurable per database. + </para> + </listitem> + + <listitem> + <para> + Improve checks that the database encoding, collation + (<varname>LC_COLLATE</>), and character classes + (<varname>LC_CTYPE</>) match (Heikki) + </para> + </listitem> + + <listitem> + <para> + Add <command>ALTER DATABASE SET TABLESPACE</> to move a database + to a new tablespace (Guillaume Lelarge, Bernd Helmle) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Utility Operations</title> + + <itemizedlist> + + <listitem> + <para> + Add a <literal>VERBOSE</> option to the <command>CLUSTER</> command and + <application>clusterdb</> (Jim Cox) + </para> + </listitem> + + <listitem> + <para> + Decrease memory requirements for recording pending trigger + events (Tom) + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title>Indexes</title> + <itemizedlist> + + <listitem> + <para> + Dramatically improve the speed of building and accessing hash + indexes (Tom Raney, Shreya Bhargava) + </para> + + <para> + This allows hash indexes to be sometimes faster than btree + indexes. However, hash indexes are still not crash-safe. + </para> + </listitem> + + <listitem> + <para> + Make hash indexes store only the hash code, not the full value of + the indexed column (Xiao Meng) + </para> + + <para> + This greatly reduces the size of hash indexes for long indexed + values, improving performance. + </para> + </listitem> + + <listitem> + <para> + Implement fast update option for GIN indexes (Teodor, Oleg) + </para> + + <para> + This option greatly improves update speed at a small penalty in search + speed. + </para> + </listitem> + + <listitem> + <para> + <literal>xxx_pattern_ops</> indexes can now be used for simple + equality comparisons, not only for <literal>LIKE</> (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Full Text Indexes</title> + <itemizedlist> + + <listitem> + <para> + Remove the requirement to use <literal>@@@</> when doing + <acronym>GIN</> weighted lookups on full text indexes (Tom, Teodor) + </para> + + <para> + The normal <literal>@@</> text search operator can be used + instead. + </para> + </listitem> + + <listitem> + <para> + Add an optimizer selectivity function for <literal>@@</> text + search operations (Jan Urbanski) + </para> + </listitem> + + <listitem> + <para> + Allow prefix matching in full text searches (Teodor Sigaev, + Oleg Bartunov) + </para> + </listitem> + + <listitem> + <para> + Support multi-column <acronym>GIN</> indexes (Teodor Sigaev) + </para> + </listitem> + + <listitem> + <para> + Improve support for Nepali language and Devanagari alphabet (Teodor) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><command>VACUUM</></title> + <itemizedlist> + + <listitem> + <para> + Track free space in separate per-relation <quote>fork</> files (Heikki) + </para> + + <para> + Free space discovered by <command>VACUUM</> is now recorded in + <filename>*_fsm</> files, rather than in a fixed-sized shared memory + area. The <varname>max_fsm_pages</> and <varname>max_fsm_relations</> + settings have been removed, greatly simplifying administration of + free space management. + </para> + </listitem> + + <listitem> + <para> + Add a visibility map to track pages that do not require + vacuuming (Heikki) + </para> + + <para> + This allows <command>VACUUM</> to avoid scanning all of + a table when only a portion of the table needs vacuuming. + The visibility map is stored in per-relation <quote>fork</> files. + </para> + </listitem> + + <listitem> + <para> + Add <varname>vacuum_freeze_table_age</> parameter to control + when <command>VACUUM</> should ignore the visibility map and + do a full table scan to freeze tuples (Heikki) + </para> + </listitem> + + <listitem> + <para> + Track transaction snapshots more carefully (Alvaro) + </para> + + <para> + This improves <command>VACUUM</>'s ability to reclaim space + in the presence of long-running transactions. + </para> + </listitem> + + <listitem> + <para> + Add ability to specify per-relation autovacuum and <acronym>TOAST</> + parameters in <command>CREATE TABLE</> (Alvaro, Euler Taveira de + Oliveira) + </para> + + <para> + Autovacuum options used to be stored in a system table. + </para> + </listitem> + + <listitem> + <para> + Add <literal>--freeze</> option to <application>vacuumdb</> + (Bruce) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Data Types</title> + <itemizedlist> + + <listitem> + <para> + Add a <literal>CaseSensitive</> option for text search synonym + dictionaries (Simon) + </para> + </listitem> + + <listitem> + <para> + Improve the precision of <type>NUMERIC</> division (Tom) + </para> + </listitem> + + <listitem> + <para> + Add basic arithmetic operators for <type>int2</> with <type>int8</> + (Tom) + </para> + + <para> + This eliminates the need for explicit casting in some situations. + </para> + </listitem> + + <listitem> + <para> + Allow <type>UUID</> input to accept an optional hyphen after + every fourth digit (Robert Haas) + </para> + </listitem> + + <listitem> + <para> + Allow <literal>on</>/<literal>off</> as input for the boolean data type + (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Allow spaces around <literal>NaN</> in the input string for + type <type>numeric</> (Sam Mason) + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title>Temporal Data Types</title> + <itemizedlist> + + <listitem> + <para> + Reject year <literal>0 BC</> and years <literal>000</> and + <literal>0000</> (Tom) + </para> + + <para> + Previously these were interpreted as <literal>1 BC</>. + (Note: years <literal>0</> and <literal>00</> are still assumed to be + the year 2000.) + </para> + </listitem> + + <listitem> + <para> + Include <literal>SGT</> (Singapore time) in the default list of + known time zone abbreviations (Tom) + </para> + </listitem> + + <listitem> + <para> + Support <literal>infinity</> and <literal>-infinity</> as + values of type <type>date</> (Tom) + </para> + </listitem> + + <listitem> + <para> + Make parsing of <type>interval</> literals more standard-compliant (Tom) + </para> + + <para> + For example, <literal>INTERVAL '1' YEAR</> now does what it's + supposed to. + </para> + </listitem> + + <listitem> + <para> + Allow <type>interval</> fractional-seconds precision to be specified + after the <literal>second</> keyword, for <acronym>SQL</> standard + compliance (Tom) + </para> + + <para> + Formerly the precision had to be specified after the keyword + <type>interval</>. (For backwards compatibility, this syntax is still + supported, though deprecated.) Data type definitions will now be + output using the standard format. + </para> + </listitem> + + <listitem> + <para> + Support the <acronym>IS0 8601</> <type>interval</> syntax (Ron + Mayer, Kevin Grittner) + </para> + + <para> + For example, <literal>INTERVAL 'P1Y2M3DT4H5M6.7S'</> is now + supported. + </para> + </listitem> + + <listitem> + <para> + Add <varname>IntervalStyle</> parameter + which controls how <type>interval</> values are output (Ron Mayer) + </para> + + <para> + Valid values are: <literal>postgres</>, <literal>postgres_verbose</>, + <literal>sql_standard</>, <literal>iso_8601</>. This setting also + controls the handling of negative <type>interval</> input when only + some fields have positive/negative designations. + </para> + </listitem> + + <listitem> + <para> + Improve consistency of handling of fractional seconds in + <type>timestamp</> and <type>interval</> output (Ron Mayer) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Arrays</title> + <itemizedlist> + + <listitem> + <para> + Improve the handling of casts applied to <literal>ARRAY[]</> + constructs, such as <literal>ARRAY[...]::integer[]</> + (Brendan Jurd) + </para> + + <para> + Formerly <productname>PostgreSQL</> attempted to determine a data type + for the <literal>ARRAY[]</> construct without reference to the ensuing + cast. This could fail unnecessarily in many cases, in particular when + the <literal>ARRAY[]</> construct was empty or contained only + ambiguous entries such as <literal>NULL</>. Now the cast is consulted + to determine the type that the array elements must be. + </para> + </listitem> + + <listitem> + <para> + Make <acronym>SQL</>-syntax <type>ARRAY</> dimensions optional + to match the <acronym>SQL</> standard (Peter) + </para> + </listitem> + + <listitem> + <para> + Add <function>array_ndims()</> to return the number + of dimensions of an array (Robert Haas) + </para> + </listitem> + + <listitem> + <para> + Add <function>array_length()</> to return the length + of an array for a specified dimension (Jim Nasby, Robert + Haas, Peter Eisentraut) + </para> + </listitem> + + <listitem> + <para> + Add aggregate function <function>array_agg()</>, which + returns all aggregated values as a single array (Robert Haas, + Jeff Davis, Peter) + </para> + </listitem> + + <listitem> + <para> + Add <function>unnest()</>, which converts an array to + individual row values (Tom) + </para> + + <para> + This is the opposite of <function>array_agg()</>. + </para> + </listitem> + + <listitem> + <para> + Add <function>array_fill()</> to create arrays initialized with + a value (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Add <function>generate_subscripts()</> to simplify generating + the range of an array's subscripts (Pavel Stehule) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Wide-Value Storage (<acronym>TOAST</>)</title> + <itemizedlist> + + <listitem> + <para> + Consider <acronym>TOAST</> compression on values as short as + 32 bytes (previously 256 bytes) (Greg Stark) + </para> + </listitem> + + <listitem> + <para> + Require 25% minimum space savings before using <acronym>TOAST</> + compression (previously 20% for small values and any-savings-at-all + for large values) (Greg) + </para> + </listitem> + + <listitem> + <para> + Improve <acronym>TOAST</> heuristics for rows that have a mix of large + and small toastable fields, so that we prefer to push large values out + of line and don't compress small values unnecessarily (Greg, Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Functions</title> + <itemizedlist> + + <listitem> + <para> + Document that <function>setseed()</> allows values from + <literal>-1</> to <literal>1</> (not just <literal>0</> to + <literal>1</>), and enforce the valid range (Kris Jurka) + </para> + </listitem> + + <listitem> + <para> + Add server-side function <function>lo_import(filename, oid)</> + (Tatsuo) + </para> + </listitem> + + <listitem> + <para> + Add <function>quote_nullable()</>, which behaves like + <function>quote_literal()</> but returns the string <literal>NULL</> for + a null argument (Brendan Jurd) + </para> + </listitem> + + <listitem> + <para> + Improve full text search <function>headline()</> function to + allow extracting several fragments of text (Sushant Sinha) + </para> + </listitem> + + <listitem> + <para> + Add <function>suppress_redundant_updates_trigger()</> trigger + function to avoid overhead for non-data-changing updates (Andrew) + </para> + </listitem> + + <listitem> + <para> + Add <function>div(numeric, numeric)</> to perform <type>numeric</> + division without rounding (Tom) + </para> + </listitem> + + <listitem> + <para> + Add <type>timestamp</> and <type>timestamptz</> versions of + <function>generate_series()</> (Hitoshi Harada) + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title>Object Information Functions</title> + <itemizedlist> + + <listitem> + <para> + Implement <function>current_query()</> for use by functions + that need to know the currently running query (Tomas Doran) + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_get_keywords()</> to return a list of the + parser keywords (Dave Page) + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_get_functiondef()</> to see a function's + definition (Abhijit Menon-Sen) + </para> + </listitem> + + <listitem> + <para> + Modify <function>pg_relation_size()</> to use <literal>regclass</> + (Heikki) + </para> + + <para> + <function>pg_relation_size(data_type_name)</> no longer works. + </para> + </listitem> + + <listitem> + <para> + Add <literal>boot_val</> and <literal>reset_val</> columns to + <literal>pg_settings</> output (Greg Smith) + </para> + </listitem> + + <listitem> + <para> + Add source file name and line number columns to + <literal>pg_settings</> output for variables set in a configuration + file (Magnus, Alvaro) + </para> + + <para> + For security reasons, these columns are only visible to superusers. + </para> + </listitem> + + <listitem> + <para> + Add support for <varname>CURRENT_CATALOG</>, + <varname>CURRENT_SCHEMA</>, <varname>SET CATALOG</>, <varname>SET + SCHEMA</> (Peter) + </para> + + <para> + These provide <acronym>SQL</>-standard syntax for existing features. + </para> + </listitem> + + <listitem> + <para> + Add <function>pg_typeof()</> which returns the data type + of any value (Brendan Jurd) + </para> + </listitem> + + <listitem> + <para> + Make <function>version()</> return information about whether + the server is a 32- or 64-bit binary (Bruce) + </para> + </listitem> + + <listitem> + <para> + Fix the behavior of information schema columns + <literal>is_insertable_into</> and <literal>is_updatable</> to + be consistent (Peter) + </para> + </listitem> + + <listitem> + <para> + Convert remaining builtin set-returning functions to use + <literal>OUT</> parameters (Jaime Casanova) + </para> + + <para> + This makes it possible to call these functions without specifying + a column list: <function>pg_show_all_settings()</>, + <function>pg_lock_status()</>, <function>pg_prepared_xact()</>, + <function>pg_prepared_statement()</>, <function>pg_cursor()</> + </para> + </listitem> + + <listitem> + <para> + Make <function>pg_*_is_visible()</> and + <function>has_*_privilege()</> functions return <literal>NULL</> + for invalid OIDs, rather than reporting an error (Tom) + </para> + </listitem> + + <listitem> + <para> + Extend <function>has_*_privilege()</> functions to allow inquiring + about the OR of multiple privileges in one call (Stephen + Frost, Tom) + </para> + </listitem> + + <listitem> + <para> + Add <function>has_column_privilege()</> and + <function>has_any_column_privilege()</> functions (Stephen + Frost, Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Function Creation</title> + <itemizedlist> + + <listitem> + <para> + Support variadic functions (functions with a variable number + of arguments) (Pavel Stehule) + </para> + + <para> + Only trailing arguments can be optional, and they all must be + of the same data type. + </para> + </listitem> + + <listitem> + <para> + Support default values for function arguments (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Add <command>CREATE FUNCTION ... RETURNS TABLE</> clause (Pavel + Stehule) + </para> + </listitem> + + <listitem> + <para> + Allow <acronym>SQL</>-language functions to return the output + of an <command>INSERT</>/<command>UPDATE</>/<command>DELETE</> + <literal>RETURNING</> clause (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>PL/PgSQL Server-Side Language</title> + <itemizedlist> + + <listitem> + <para> + Support <literal>EXECUTE USING</> for easier insertion of data + values into a dynamic query string (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Allow looping over the results of a cursor using a <literal>FOR</> + loop (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Support <literal>RETURN QUERY EXECUTE</> (Pavel + Stehule) + </para> + </listitem> + + <listitem> + <para> + Improve the <literal>RAISE</> command (Pavel Stehule) + + <itemizedlist> + <listitem> + <para> + Support <literal>DETAIL</> and <literal>HINT</> fields + </para> + </listitem> + <listitem> + <para> + Support specification of the <literal>SQLSTATE</> error code + </para> + </listitem> + <listitem> + <para> + Support an exception name parameter + </para> + </listitem> + <listitem> + <para> + Allow <literal>RAISE</> without parameters in an exception + block to re-throw the current error + </para> + </listitem> + </itemizedlist> + </para> + </listitem> + + <listitem> + <para> + Allow specification of <varname>SQLSTATE</> codes + in <literal>EXCEPTION</> lists (Pavel Stehule) + </para> + + <para> + This is useful for handling custom <varname>SQLSTATE</> codes. + </para> + </listitem> + + <listitem> + <para> + Support the <literal>CASE</> statement (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Make <command>RETURN QUERY</> set the special <literal>FOUND</> and + <command>GET DIAGNOSTICS</> <literal>ROW_COUNT</> variables + (Pavel Stehule) + </para> + </listitem> + + <listitem> + <para> + Make <command>FETCH</> and <command>MOVE</> set the + <command>GET DIAGNOSTICS</> <literal>ROW_COUNT</> variable + (Andrew Gierth) + </para> + </listitem> + + <listitem> + <para> + Avoid memory leakage when the same function is called at varying + exception-block nesting depths (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Client Applications</title> + + <itemizedlist> + + <listitem> + <para> + Fix <literal>pg_ctl restart</> to preserve command-line arguments + (Bruce) + </para> + </listitem> + + <listitem> + <para> + Add <literal>-w</>/<literal>--no-password</> option that + prevents password prompting in all utilities that have a + <literal>-W</>/<literal>--password</> option (Peter) + </para> + </listitem> + + <listitem> + <para> + Remove <option>-q</> (quiet) option of <application>createdb</>, + <application>createuser</>, <application>dropdb</>, + <application>dropuser</> (Peter) + </para> + + <para> + These options have had no effect since <productname>PostgreSQL</> + 8.3. + </para> + </listitem> + + </itemizedlist> + + <sect4> + <title><application>psql</></title> + <itemizedlist> + + <listitem> + <para> + Remove verbose startup banner; now just suggest <literal>help</> + (Joshua Drake) + </para> + </listitem> + + <listitem> + <para> + Make <literal>help</> show common backslash commands (Greg + Sabino Mullane) + </para> + </listitem> + + <listitem> + <para> + Add <literal>\pset format wrapped</> mode to wrap output to the + screen width, or file/pipe output too if <literal>\pset columns</> + is set (Bryce Nesbitt) + </para> + </listitem> + + <listitem> + <para> + Allow all supported spellings of boolean values in <command>\pset</>, + rather than just <literal>on</> and <literal>off</> (Bruce) + </para> + + <para> + Formerly, any string other than <quote>off</> was silently taken + to mean <literal>true</>. <application>psql</> will now complain + about unrecognized spellings (but still take them as <literal>true</>). + </para> + </listitem> + + <listitem> + <para> + Use the pager for wide output (Bruce) + </para> + </listitem> + + <listitem> + <para> + Require a space between a one-letter backslash command and its first + argument (Bernd Helmle) + </para> + + <para> + This removes a historical source of ambiguity. + </para> + </listitem> + + <listitem> + <para> + Improve tab completion support for schema-qualified and + quoted identifiers (Greg Sabino Mullane) + </para> + </listitem> + + <listitem> + <para> + Add optional <literal>on</>/<literal>off</> argument for + <command>\timing</> (David Fetter) + </para> + </listitem> + + <listitem> + <para> + Display access control rights on multiple lines (Brendan + Jurd, Andreas Scherbaum) + </para> + </listitem> + + <listitem> + <para> + Make <command>\l</> show database access privileges (Andrew Gilligan) + </para> + </listitem> + + <listitem> + <para> + Make <command>\l+</> show database sizes, if permissions + allow (Andrew Gilligan) + </para> + </listitem> + + <listitem> + <para> + Add the <command>\ef</> command to edit function definitions + (Abhijit Menon-Sen) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><application>psql</> \d* commands</title> + + <itemizedlist> + + <listitem> + <para> + Make <command>\d*</> commands that do not have a pattern argument + show system objects only if the <literal>S</> modifier is specified + (Greg Sabino Mullane, Bruce) + </para> + + <para> + The former behavior was inconsistent across different variants + of <command>\d</>, and in most cases it provided no easy way to see + just user objects. + </para> + </listitem> + + <listitem> + <para> + Improve <command>\d*</> commands to work with older + <productname>PostgreSQL</> server versions (back to 7.4), + not only the current server version + (Guillaume Lelarge) + </para> + </listitem> + + <listitem> + <para> + Make <command>\d</> show foreign-key constraints that reference + the selected table (Kenneth D'Souza) + </para> + </listitem> + + <listitem> + <para> + Make <command>\d</> on a sequence show its column values + (Euler Taveira de Oliveira) + </para> + </listitem> + + <listitem> + <para> + Add column storage type and other relation options to the + <command>\d+</> display (Gregory Stark, Euler Taveira de + Oliveira) + </para> + </listitem> + + <listitem> + <para> + Show relation size in <command>\dt+</> output (Dickson S. + Guedes) + </para> + </listitem> + + <listitem> + <para> + Show the possible values of <literal>enum</> types in <command>\dT+</> + (David Fetter) + </para> + </listitem> + + <listitem> + <para> + Allow <command>\dC</> to accept a wildcard pattern, which matches + either datatype involved in the cast (Tom) + </para> + </listitem> + + <listitem> + <para> + Make <command>\df</> not hide functions that take or return + type <type>cstring</> (Tom) + </para> + + <para> + Previously, such functions were hidden because most of them are + datatype I/O functions, which were deemed uninteresting. The new + policy about hiding system functions by default makes this wart + unnecessary. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><application>pg_dump</></title> + <itemizedlist> + + <listitem> + <para> + Add a <literal>--no-tablespaces</> option to + <application>pg_dump</>/<application>pg_dumpall</>/<application>pg_restore</> + so that dumps can be restored to clusters that have non-matching + tablespace layouts (Gavin Roy) + </para> + </listitem> + + <listitem> + <para> + Remove <option>-d</> and <option>-D</> options from + <application>pg_dump</> and <application>pg_dumpall</> (Tom) + </para> + + <para> + These options were too frequently confused with the option to + select a database name in other <productname>PostgreSQL</> + client applications. The functionality is still available, + but you must now spell out the long option name + <option>--inserts</> or <option>--column-inserts</>. + </para> + </listitem> + + <listitem> + <para> + Remove <option>-i</>/<option>--ignore-version</> option from + <application>pg_dump</> and <application>pg_dumpall</> (Tom) + </para> + + <para> + Use of this option does not throw an error, but it has no + effect. This option was removed because the version checks + are necessary for safety. + </para> + </listitem> + + <listitem> + <para> + Disable <varname>statement_timeout</> during dump and restore + (Joshua Drake) + </para> + </listitem> + + <listitem> + <para> + Add <application>pg_dump</>/<application>pg_dumpall</> option + <option>--lock-wait-timeout</> (David Gould) + </para> + + <para> + This allows dumps to fail if unable to acquire a shared lock + within the specified amount of time. + </para> + </listitem> + + <listitem> + <para> + Reorder <application>pg_dump</> <literal>--data-only</> output + to dump tables referenced by foreign keys before + the referencing tables (Tom) + </para> + + <para> + This allows data loads when foreign keys are already present. + If circular references make a safe ordering impossible, a + <literal>NOTICE</> is issued. + </para> + </listitem> + + <listitem> + <para> + Allow <application>pg_dump</>, <application>pg_dumpall</>, and + <application>pg_restore</> to use a specified role (Benedek + László) + </para> + </listitem> + + <listitem> + <para> + Allow <application>pg_restore</> to use multiple concurrent + connections to do the restore (Andrew) + </para> + + <para> + The number of concurrent connections is controlled by the option + <literal>--jobs</>. This is supported only for custom-format archives. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Programming Tools</title> + + <sect4> + <title><application>libpq</></title> + <itemizedlist> + + <listitem> + <para> + Allow the <type>OID</> to be specified when importing a large + object, via new function <function>lo_import_with_oid()</> (Tatsuo) + </para> + </listitem> + + <listitem> + <para> + Add <quote>events</> support (Andrew Chernow, Merlin Moncure) + </para> + + <para> + This adds the ability to register callbacks to manage private + data associated with <structname>PGconn</> and <structname>PGresult</> + objects. + </para> + </listitem> + + <listitem> + <para> + Improve error handling to allow the return of multiple + error messages as multi-line error reports (Magnus) + </para> + </listitem> + + <listitem> + <para> + Make <function>PQexecParams()</> and related functions return + <varname>PGRES_EMPTY_QUERY</> for an empty query (Tom) + </para> + + <para> + They previously returned <varname>PGRES_COMMAND_OK</>. + </para> + </listitem> + + <listitem> + <para> + Document how to avoid the overhead of <function>WSACleanup()</> + on Windows (Andrew Chernow) + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><application>libpq</> <acronym>SSL</> (Secure Sockets Layer) + support</title> + <itemizedlist> + + <listitem> + <para> + Fix certificate validation for <acronym>SSL</> connections + (Magnus) + </para> + + <para> + <application>libpq</> now supports verifying both the certificate + and the name of the server when making <acronym>SSL</> + connections. If a root certificate is not available to use for + verification, <acronym>SSL</> connections will fail. The + <literal>sslmode</> parameter is used to enable the certificate + verification. + </para> + + <para> + The default is still not to do any verification. + </para> + </listitem> + + <listitem> + <para> + Allow the file locations for client certificates to be specified + (Mark Woodward, Alvaro, Magnus) + </para> + </listitem> + + <listitem> + <para> + Add a <function>PQinitOpenSSL</> function to allow greater control + over OpenSSL/libcrypto initialization (Andrew Chernow) + </para> + </listitem> + + <listitem> + <para> + Make <application>libpq</> unregister its <application>OpenSSL</> + callbacks when no database connections remain open + (Bruce, Magnus, Russell Smith) + </para> + + <para> + This is required for applications that unload the libpq library, + otherwise invalid <application>OpenSSL</> callbacks will remain. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title><application>ecpg</></title> + <itemizedlist> + + <listitem> + <para> + Add localization support for messages (Euler Taveira de + Oliveira) + </para> + </listitem> + + <listitem> + <para> + ecpg parser is now automatically generated from the server + parser (Michael) + </para> + + <para> + Previously the ecpg parser was hand-maintained. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + <sect4> + <title>Server Programming Interface (<acronym>SPI</>)</title> + <itemizedlist> + + <listitem> + <para> + Add support for single-use plans with out-of-line + parameters (Tom) + </para> + </listitem> + + <listitem> + <para> + Add new <varname>SPI_OK_REWRITTEN</> return code for + <function>SPI_execute()</> (Heikki) + </para> + + <para> + This is used when a command is rewritten to another type of + command. + </para> + </listitem> + + <listitem> + <para> + Remove unnecessary inclusions from <filename>executor/spi.h</> (Tom) + </para> + + <para> + SPI-using modules might need to add some <literal>#include</> + lines if they were depending on <filename>spi.h</> to include + things for them. + </para> + </listitem> + + </itemizedlist> + + </sect4> + + </sect3> + + <sect3> + <title>Build Options</title> + <itemizedlist> + + <listitem> + <para> + Update build system to use <productname>Autoconf</> 2.61 (Peter) + </para> + </listitem> + + <listitem> + <para> + Require <productname>GNU bison</> for source code builds (Peter) + </para> + + <para> + This has effectively been required for several years, but now there + is no infrastructure claiming to support other parser tools. + </para> + </listitem> + + <listitem> + <para> + Add <application>pg_config</> <literal>--htmldir</> option + (Peter) + </para> + </listitem> + + <listitem> + <para> + Pass <type>float4</> by value inside the server (Zoltan + Boszormenyi) + </para> + + <para> + Add <application>configure</> option + <literal>--disable-float4-byval</> to use the old behavior. + External C functions that use old-style (version 0) call convention + and pass or return <type>float4</> values will be broken by this + change, so you may need the <application>configure</> option if you + have such functions and don't want to update them. + </para> + </listitem> + + <listitem> + <para> + Pass <type>float8</>, <type>int8</>, and related datatypes + by value inside the server on 64-bit platforms (Zoltan Boszormenyi) + </para> + + <para> + Add <application>configure</> option + <literal>--disable-float8-byval</> to use the old behavior. + As above, this change might break old-style external C functions. + </para> + </listitem> + + <listitem> + <para> + Add configure options <literal>--with-segsize</>, + <literal>--with-blocksize</>, <literal>--with-wal-blocksize</>, + <literal>--with-wal-segsize</> (Zdenek Kotala, Tom) + </para> + + <para> + This simplifies build-time control over several constants that + previously could only be changed by editing + <filename>pg_config_manual.h</>. + </para> + </listitem> + + <listitem> + <para> + Allow threaded builds on <productname>Solaris</> 2.5 (Bruce) + </para> + </listitem> + + <listitem> + <para> + Use the system's <function>getopt_long()</> on <productname>Solaris</> + (Zdenek Kotala, Tom) + </para> + + <para> + This makes option processing more consistent with what Solaris users + expect. + </para> + </listitem> + + <listitem> + <para> + Add support for the <productname>Sun Studio</> compiler on + <productname>Linux</> (Julius Stroffek) + </para> + </listitem> + + <listitem> + <para> + Append the major version number to the backend <application>gettext</> + domain, and the <literal>soname</> major version number to + libraries' <application>gettext</> domain (Peter) + </para> + + <para> + This simplifies parallel installations of multiple versions. + </para> + </listitem> + + <listitem> + <para> + Add support for code coverage testing with <application>gcov</> + (Michelle Caisse) + </para> + </listitem> + + <listitem> + <para> + Allow out-of-tree builds on <productname>Mingw</> and + <productname>Cygwin</> (Richard Evans) + </para> + </listitem> + + <listitem> + <para> + Fix the use of <productname>Mingw</> as a cross-compiling source + platform (Peter) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Source Code</title> + <itemizedlist> + + <listitem> + <para> + Support 64-bit time zone data files (Heikki) + </para> + + <para> + This adds support for daylight saving time (<acronym>DST</>) + calculations beyond the year 2038. + </para> + </listitem> + + <listitem> + <para> + Deprecate use of platform's <type>time_t</> data type (Tom) + </para> + + <para> + Some platforms have migrated to 64-bit <type>time_t</>, some have + not, and Windows can't make up its mind what it's doing. Define + <type>pg_time_t</> to have the same meaning as <type>time_t</>, + but always be 64 bits (unless the platform has no 64-bit integer type), + and use that type in all module APIs and on-disk data formats. + </para> + </listitem> + + <listitem> + <para> + Fix bug in handling of the time zone database when cross-compiling + (Richard Evans) + </para> + </listitem> + + <listitem> + <para> + Link backend object files in one step, rather than in stages + (Peter) + </para> + </listitem> + + <listitem> + <para> + Improve <application>gettext</> support to allow better translation + of plurals (Peter) + </para> + </listitem> + + <listitem> + <para> + Add message translation support to the PL languages (Alvaro, Peter) + </para> + </listitem> + + <listitem> + <para> + Add more <application>DTrace</> probes (Robert Lor) + </para> + </listitem> + + <listitem> + <para> + Enable <application>DTrace</> support on <application>Mac OS X + Leopard</> and other non-Solaris platforms (Robert Lor) + </para> + </listitem> + + <listitem> + <para> + Simplify and standardize conversions between C strings and + <type>text</> datums, by providing common functions for the purpose + (Brendan Jurd, Tom) + </para> + </listitem> + + <listitem> + <para> + Clean up the <filename>include/catalog/</> header files so that + frontend programs can include them without including + <filename>postgres.h</> + (Zdenek Kotala) + </para> + </listitem> + + <listitem> + <para> + Make <type>name</> char-aligned, and suppress zero-padding of + <type>name</> entries in indexes (Tom) + </para> + </listitem> + + <listitem> + <para> + Add a hook to let plug-ins monitor the executor (Itagaki + Takahiro) + </para> + </listitem> + + <listitem> + <para> + Add a hook to allow the planner's statistics lookup behavior to + be overridden (Simon Riggs) + </para> + </listitem> + + <listitem> + <para> + Add <function>shmem_startup_hook()</> for custom shared memory + requirements (Tom) + </para> + </listitem> + + <listitem> + <para> + Replace the index access method <function>amgetmulti</> entry point + with <function>amgetbitmap</>, and extend the API for + <function>amgettuple</> to support run-time determination of + operator lossiness (Heikki, Tom, Teodor) + </para> + + <para> + The API for GIN and GiST opclass <function>consistent</> functions + has been extended as well. + </para> + </listitem> + + <listitem> + <para> + Add support for partial-match searches in <acronym>GIN</> indexes + (Teodor Sigaev, Oleg Bartunov) + </para> + </listitem> + + <listitem> + <para> + Replace <structname>pg_class</> column <structfield>reltriggers</> + with boolean <structfield>relhastriggers</> (Simon) + </para> + + <para> + Also remove unused <structname>pg_class</> columns + <structfield>relukeys</>, <structfield>relfkeys</>, and + <structfield>relrefs</>. + </para> + </listitem> + + <listitem> + <para> + Add a <structfield>relistemp</> column to <structname>pg_class</> + to ease identification of temporary tables (Tom) + </para> + </listitem> + + <listitem> + <para> + Move platform <acronym>FAQ</>s into the main documentation + (Peter) + </para> + </listitem> + + <listitem> + <para> + Prevent parser input files from being built with any conflicts + (Peter) + </para> + </listitem> + + <listitem> + <para> + Add support for the <literal>KOI8U</> (Ukrainian) encoding + (Peter) + </para> + </listitem> + + <listitem> + <para> + Add Japanese message translations (Japan PostgreSQL Users Group) + </para> + + <para> + This used to be maintained as a separate project. + </para> + </listitem> + + <listitem> + <para> + Fix problem when setting <varname>LC_MESSAGES</> on + <application>MSVC</>-built systems (Hiroshi Inoue, Hiroshi + Saito, Magnus) + </para> + </listitem> + + </itemizedlist> + + </sect3> + + <sect3> + <title>Contrib</title> + + <itemizedlist> + + <listitem> + <para> + Add <filename>contrib/auto_explain</> to automatically run + <command>EXPLAIN</> on queries exceeding a specified duration + (Itagaki Takahiro, Tom) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/btree_gin</> to allow GIN indexes to + handle more datatypes (Oleg, Teodor) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/citext</> to provide a case-insensitive, + multibyte-aware text data type (David Wheeler) + </para> + </listitem> + + <listitem> + <para> + Add <filename>contrib/pg_stat_statements</> for server-wide + tracking of statement execution statistics (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Add duration and query mode options to <filename>contrib/pgbench</> + (Itagaki Takahiro) + </para> + </listitem> + + <listitem> + <para> + Fix <filename>contrib/pgstattuple</> to handle tables and + indexes with over 2 billion pages (Tatsuhito Kasahara) + </para> + </listitem> + + <listitem> + <para> + In <filename>contrib/fuzzystrmatch</>, add a version of the + Levenshtein string-distance function that allows the user to + specify the costs of insertion, deletion, and substitution + (Volkan Yazici) + </para> + </listitem> + + <listitem> + <para> + Make <filename>contrib/ltree</> support multibyte encodings + (laser) + </para> + </listitem> + + <listitem> + <para> + Improve <filename>contrib/dblink</>'s reporting of errors from + the remote server (Joe Conway) + </para> + </listitem> + + <listitem> + <para> + Make sure <filename>contrib/dblink</> uses a password supplied + by the user, and not accidentally taken from the server's + <filename>.pgpass</> file (Joe Conway) + </para> + + <para> + This is a minor security enhancement. + </para> + </listitem> + + <listitem> + <para> + Add <function>fsm_page_contents()</> + to <filename>contrib/pageinspect</> (Heikki) + </para> + </listitem> + + <listitem> + <para> + Modify <function>get_raw_page()</> to support free space map + (<filename>*_fsm</>) files. Also update + <filename>contrib/pg_freespacemap</>. + </para> + </listitem> + + <listitem> + <para> + Add support for multibyte encodings to <filename>contrib/pg_trgm</> + (Teodor) + </para> + </listitem> + + <listitem> + <para> + Rewrite <filename>contrib/intagg</> to use new + functions <function>array_agg()</> and <function>unnest()</> + (Tom) + </para> + </listitem> + + <listitem> + <para> + Remove <filename>contrib/intarray</>'s definitions of the + <literal><@</> and <literal>@></> operators (Tom) + </para> + + <para> + This avoids confusion with the equivalent built-in operators. + If needed, the <filename>contrib/intarray</> implementations + are still available under their historical names <literal>@</> + and <literal>~</>. + </para> + </listitem> + + </itemizedlist> + + </sect3> + </sect2> + </sect1> diff --git a/doc/src/sgml/release-old.sgml b/doc/src/sgml/release-old.sgml new file mode 100644 index 00000000000..54fa37d9841 --- /dev/null +++ b/doc/src/sgml/release-old.sgml @@ -0,0 +1,6657 @@ +<!-- $PostgreSQL: pgsql/doc/src/sgml/release-old.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-3-21"> + <title>Release 7.3.21</title> + + <note> + <title>Release date</title> + <simpara>2008-01-07</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.20, + including fixes for significant security issues. + </para> + + <para> + This is expected to be the last <productname>PostgreSQL</> release + in the 7.3.X series. Users are encouraged to update to a newer + release branch soon. + </para> + + <sect2> + <title>Migration to Version 7.3.21</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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> + 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.3.20 was incomplete, as it plugged + the hole for only some <filename>dblink</> functions. (CVE-2007-6601, + CVE-2007-3278) + </para> + </listitem> + + <listitem> + <para> + Fix potential crash in <function>translate()</> when using a multibyte + database encoding (Tom) + </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> + 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-3-20"> + <title>Release 7.3.20</title> + + <note> + <title>Release date</title> + <simpara>2007-09-17</simpara> + </note> + + <para> + This release contains fixes from 7.3.19. + </para> + + <sect2> + <title>Migration to Version 7.3.20</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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 crash when <varname>log_min_error_statement</> logging runs out + of memory (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-7-3-19"> + <title>Release 7.3.19</title> + + <note> + <title>Release date</title> + <simpara>2007-04-23</simpara> + </note> + + <para> + This release contains fixes from 7.3.18, + including a security fix. + </para> + + <sect2> + <title>Migration to Version 7.3.19</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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 potential-data-corruption bug in how <command>VACUUM FULL</> handles + <command>UPDATE</> chains (Tom, Pavan Deolasee) + </para> + </listitem> + + </itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-7-3-18"> + <title>Release 7.3.18</title> + + <note> + <title>Release date</title> + <simpara>2007-02-05</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.17, including + a security fix. + </para> + + <sect2> + <title>Migration to Version 7.3.18</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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 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> + Tighten security of multi-byte character processing for UTF8 sequences + over three bytes long (Tom) + </para> + </listitem> + + </itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-7-3-17"> + <title>Release 7.3.17</title> + + <note> + <title>Release date</title> + <simpara>2007-01-08</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.16. + </para> + + <sect2> + <title>Migration to Version 7.3.17</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </para> + + </sect2> + + <sect2> + <title>Changes</title> + + <itemizedlist> + + <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-3-16"> + <title>Release 7.3.16</title> + + <note> + <title>Release date</title> + <simpara>2006-10-16</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.15. + </para> + + <sect2> + <title>Migration to Version 7.3.16</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </para> + + </sect2> + + <sect2> + <title>Changes</title> + +<itemizedlist> +<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>Back-port 7.4 spinlock code to improve performance and support +64-bit architectures better</para> </listitem> +<listitem><para>Fix SSL-related memory leak in libpq</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-3-15"> + <title>Release 7.3.15</title> + + <note> + <title>Release date</title> + <simpara>2006-05-23</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.14, + including patches for extremely serious security issues. + </para> + + <sect2> + <title>Migration to Version 7.3.15</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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</para> +<para>This fixes <application>libpq</>-using applications for the security +issues described in CVE-2006-2313 and CVE-2006-2314. +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 server to use custom DH SSL parameters correctly (Michael +Fuhr)</para></listitem> + +<listitem><para>Fix various minor memory leaks</para></listitem> +</itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-7-3-14"> + <title>Release 7.3.14</title> + + <note> + <title>Release date</title> + <simpara>2006-02-14</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.13. + </para> + + <sect2> + <title>Migration to Version 7.3.14</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.13, see the release + notes for 7.3.13. + </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.3.11 release. +</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>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-3-13"> + <title>Release 7.3.13</title> + + <note> + <title>Release date</title> + <simpara>2006-01-09</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.12. + </para> + + <sect2> + <title>Migration to Version 7.3.13</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.10, see the release + notes for 7.3.10. + 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 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-3-12"> + <title>Release 7.3.12</title> + + <note> + <title>Release date</title> + <simpara>2005-12-12</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.11. + </para> + + <sect2> + <title>Migration to Version 7.3.12</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.10, see the release + notes for 7.3.10. + </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><filename>/contrib/ltree</> fixes (Teodor)</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-3-11"> + <title>Release 7.3.11</title> + + <note> + <title>Release date</title> + <simpara>2005-10-04</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.10. + </para> + + <sect2> + <title>Migration to Version 7.3.11</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + if you are upgrading from a version earlier than 7.3.10, see the release + notes for 7.3.10. + </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 missing rows in queries like <literal>UPDATE a=... WHERE +a...</> with GiST index on column <literal>a</></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>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> +</itemizedlist> + + </sect2> + </sect1> + + <sect1 id="release-7-3-10"> + <title>Release 7.3.10</title> + + <note> + <title>Release date</title> + <simpara>2005-05-09</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.9, including several + security-related issues. + </para> + + <sect2> + <title>Migration to Version 7.3.10</title> + + <para> + A dump/restore is not required for those running 7.3.X. However, + it is one possible way of handling a significant security problem + that has been found in the initial contents of 7.3.X system + catalogs. A dump/initdb/reload sequence using 7.3.10's initdb will + automatically correct this problem. + </para> + + <para> + The 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.) + It is strongly recommended that all installations repair this error, + either by initdb or by following the manual repair procedure given + below. The error at least allows 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 procedure 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> + </para> + + <para> + The above procedure 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 error. <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 + procedure. 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>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>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>Prevent <function>to_char(interval)</> from dumping core for +month-related formats</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> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-9"> + <title>Release 7.3.9</title> + + <note> + <title>Release date</title> + <simpara>2005-01-31</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.8, including several + security-related issues. + </para> + + <sect2> + <title>Migration to Version 7.3.9</title> + + <para> + A dump/restore is not required for those running 7.3.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> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-8"> + <title>Release 7.3.8</title> + + <note> + <title>Release date</title> + <simpara>2004-10-22</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.7. + </para> + + + <sect2> + <title>Migration to Version 7.3.8</title> + + <para> + A dump/restore is not required for those running 7.3.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 pg_ctl as root</para> +<para> +This is to guard against any possible security issues. +</para></listitem> +<listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</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> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-7"> + <title>Release 7.3.7</title> + + <note> + <title>Release date</title> + <simpara>2004-08-16</simpara> + </note> + + <para> + This release contains one critical fix over 7.3.6, and some minor items. + </para> + + + <sect2> + <title>Migration to Version 7.3.7</title> + + <para> + A dump/restore is not required for those running 7.3.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>Remove asymmetrical word processing in tsearch (Teodor)</para></listitem> +<listitem><para>Properly schema-qualify function names when pg_dump'ing a CAST</para></listitem> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-6"> + <title>Release 7.3.6</title> + + <note> + <title>Release date</title> + <simpara>2004-03-02</simpara> + </note> + + <para> + This release contains a variety of fixes from 7.3.5. + </para> + + + <sect2> + <title>Migration to Version 7.3.6</title> + + <para> + A dump/restore is <emphasis>not</emphasis> required for those + running 7.3.*. + </para> + + </sect2> + + <sect2> + <title>Changes</title> + +<itemizedlist> +<listitem><para>Revert erroneous changes in rule permissions checking</para> +<para>A patch applied in 7.3.3 to fix a corner case in rule permissions checks +turns out to have disabled rule-related permissions checks in many +not-so-corner cases. This would for example allow users to insert into views +they weren't supposed to have permission to insert into. We have therefore +reverted the 7.3.3 patch. The original bug will be fixed in 8.0. +</para></listitem> +<listitem><para>Repair incorrect order of operations in +GetNewTransactionId()</para> +<para> +This bug could result in failure under out-of-disk-space conditions, including +inability to restart even after disk space is freed. +</para></listitem> +<listitem><para>Ensure configure selects -fno-strict-aliasing even when +an external value for CFLAGS is supplied</para> +<para> +On some platforms, building with -fstrict-aliasing causes bugs. +</para></listitem> +<listitem><para>Make pg_restore handle 64-bit off_t correctly</para> +<para> +This bug prevented proper restoration from archive files exceeding 4 GB. +</para></listitem> +<listitem><para>Make contrib/dblink not assume that local and remote type OIDs +match (Joe)</para></listitem> +<listitem><para>Quote connectby()'s start_with argument properly (Joe)</para></listitem> +<listitem><para>Don't crash when a rowtype argument to a plpgsql function is +NULL</para></listitem> +<listitem><para>Avoid generating invalid character encoding sequences in +corner cases when planning LIKE operations</para></listitem> +<listitem><para>Ensure text_position() cannot scan past end of source string +in multibyte cases (Korea PostgreSQL Users' Group)</para></listitem> +<listitem><para>Fix index optimization and selectivity estimates for LIKE +operations on bytea columns (Joe)</para></listitem> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-5"> + <title>Release 7.3.5</title> + + <note> + <title>Release date</title> + <simpara>2003-12-03</simpara> + </note> + + <para> + This has a variety of fixes from 7.3.4. + </para> + + + <sect2> + <title>Migration to Version 7.3.5</title> + + <para> + A dump/restore is <emphasis>not</emphasis> required for those + running 7.3.*. + </para> + </sect2> + + <sect2> + <title>Changes</title> + +<itemizedlist> +<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>Force stats processes to detach from shared memory, ensuring cleaner shutdown</para></listitem> +<listitem><para>Make PQescapeBytea and byteaout consistent with each other (Joe)</para></listitem> +<listitem><para>Added missing SPI_finish() calls to dblink's get_tuple_of_interest() (Joe)</para></listitem> +<listitem><para>Fix for possible foreign key violation when rule rewrites INSERT (Jan)</para></listitem> +<listitem><para>Support qualified type names in PL/Tcl's spi_prepare command (Jan)</para></listitem> +<listitem><para>Make pg_dump handle a procedural language handler located in pg_catalog</para></listitem> +<listitem><para>Make pg_dump handle cases where a custom opclass is in another schema</para></listitem> +<listitem><para>Make pg_dump dump binary-compatible casts correctly (Jan)</para></listitem> +<listitem><para>Fix insertion of expressions containing subqueries into rule bodies</para></listitem> +<listitem><para>Fix incorrect argument processing in clusterdb script (Anand Ranganathan)</para></listitem> +<listitem><para>Fix problems with dropped columns in plpython triggers</para></listitem> +<listitem><para>Repair problems with to_char() reading past end of its input string (Karel)</para></listitem> +<listitem><para>Fix GB18030 mapping errors (Tatsuo)</para></listitem> +<listitem><para>Fix several problems with SSL error handling and asynchronous SSL I/O</para></listitem> +<listitem><para>Remove ability to bind a list of values to a single parameter in JDBC +(prevents possible SQL-injection attacks)</para></listitem> +<listitem><para>Fix some errors in HAVE_INT64_TIMESTAMP code paths</para></listitem> +<listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem> +</itemizedlist> + + </sect2> +</sect1> + + <sect1 id="release-7-3-4"> + <title>Release 7.3.4</title> + + <note> + <title>Release date</title> + <simpara>2003-07-24</simpara> + </note> + + <para> + This has a variety of fixes from 7.3.3. + </para> + + + <sect2> + <title>Migration to Version 7.3.4</title> + + <para> + A dump/restore is <emphasis>not</emphasis> required for those + running 7.3.*. + </para> + </sect2> + + <sect2> + <title>Changes</title> + +<itemizedlist> +<listitem><para>Repair breakage in timestamp-to-date conversion for dates before 2000</para></listitem> +<listitem><para>Prevent rare possibility of server startup failure (Tom)</para></listitem> +<listitem><para>Fix bugs in interval-to-time conversion (Tom)</para></listitem> +<listitem><para>Add constraint names in a few places in pg_dump (Rod)</para></listitem> +<listitem><para>Improve performance of functions with many parameters (Tom)</para></listitem> +<listitem><para>Fix to_ascii() buffer overruns (Tom)</para></listitem> +<listitem><para>Prevent restore of database comments from throwing an error (Tom)</para></listitem> +<listitem><para>Work around buggy strxfrm() present in some Solaris releases (Tom)</para></listitem> +<listitem><para>Properly escape jdbc setObject() strings to improve security (Barry)</para></listitem> +</itemizedlist> + </sect2> + </sect1> + + +<sect1 id="release-7-3-3"> + <title>Release 7.3.3</title> + + <note> + <title>Release date</title> + <simpara>2003-05-22</simpara> + </note> + + <para> + This release contains a variety of fixes for version 7.3.2. + </para> + + <sect2> + <title>Migration to Version 7.3.3</title> + + <para> + A dump/restore is <emphasis>not</emphasis> required for those + running version 7.3.*. + </para> + </sect2> + + <sect2> + <title>Changes</title> + +<itemizedlist> +<listitem><para>Repair sometimes-incorrect computation of StartUpID after a crash</para></listitem> +<listitem><para>Avoid slowness with lots of deferred triggers in one transaction (Stephan)</para></listitem> +<listitem><para>Don't lock referenced row when <command>UPDATE</command> doesn't change foreign key's value (Jan)</para></listitem> +<listitem><para>Use <command>-fPIC</command> not <command>-fpic</command> on Sparc (Tom Callaway)</para></listitem> +<listitem><para>Repair lack of schema-awareness in contrib/reindexdb</para></listitem> +<listitem><para>Fix contrib/intarray error for zero-element result array (Teodor)</para></listitem> +<listitem><para>Ensure createuser script will exit on control-C (Oliver)</para></listitem> +<listitem><para>Fix errors when the type of a dropped column has itself been dropped</para></listitem> +<listitem><para><command>CHECKPOINT</command> does not cause database panic on failure in noncritical steps</para></listitem> +<listitem><para>Accept 60 in seconds fields of timestamp, time, interval input values</para></listitem> +<listitem><para>Issue notice, not error, if <type>TIMESTAMP</type>, +<type> TIME</type>, or <type>INTERVAL</type> precision too large</para></listitem> +<listitem><para>Fix <function>abstime-to-time</function> cast function (fix is + not applied unless you <application>initdb</application>)</para></listitem> +<listitem><para>Fix <application>pg_proc</application> entry for + <type>timestampt_izone</type> (fix is not applied unless you + <application>initdb</application>)</para></listitem> +<listitem><para>Make <function>EXTRACT(EPOCH FROM timestamp without time zone)</function> treat input as local time</para></listitem> +<listitem><para><command>'now'::timestamptz</command> gave wrong answer if timezone changed earlier in transaction</para></listitem> +<listitem><para><envar>HAVE_INT64_TIMESTAMP</envar> code for time with timezone overwrote its input</para></listitem> +<listitem><para>Accept <command>GLOBAL TEMP/TEMPORARY</command> as a + synonym for <command>TEMPORARY</command></para></listitem> +<listitem><para>Avoid improper schema-privilege-check failure in foreign-key triggers</para></listitem> +<listitem><para>Fix bugs in foreign-key triggers for <command>SET DEFAULT</command> action</para></listitem> +<listitem><para>Fix incorrect time-qual check in row fetch for + <command>UPDATE</command> and <command>DELETE</command> triggers</para></listitem> +<listitem><para>Foreign-key clauses were parsed but ignored in + <command>ALTER TABLE ADD COLUMN</command></para></listitem> +<listitem><para>Fix createlang script breakage for case where handler function already exists</para></listitem> +<listitem><para>Fix misbehavior on zero-column tables in <application>pg_dump</application>, COPY, ANALYZE, other places</para></listitem> +<listitem><para>Fix misbehavior of <function>func_error()</function> on type names containing '%'</para></listitem> +<listitem><para>Fix misbehavior of <function>replace()</function> on strings containing '%'</para></listitem> +<listitem><para>Regular-expression patterns containing certain multibyte characters failed</para></listitem> +<listitem><para>Account correctly for <command>NULL</command>s in more cases in join size estimation</para></listitem> +<listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem> +<listitem><para>Fix failure to convert large code point values in EUC_TW conversions (Tatsuo)</para></listitem> +<listitem><para>Fix error recovery for <function>SSL_read</function>/<function>SSL_write</function> calls</para></listitem> +<listitem><para>Don't do early constant-folding of type coercion expressions</para></listitem> +<listitem><para>Validate page header fields immediately after reading in any page</para></listitem> +<listitem><para>Repair incorrect check for ungrouped variables in unnamed joins</para></listitem> +<listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem> +<listitem><para>contrib/ltree fixes (Teodor)</para></listitem> +<listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem> +<listitem><para>Avoid running out of buffers in many-way indexscan (bug introduced in 7.3)</para></listitem> +<listitem><para>Fix planner's selectivity estimation functions to handle domains properly</para></listitem> +<listitem><para>Fix <application>dbmirror</application> memory-allocation bug (Steven Singer)</para></listitem> +<listitem><para>Prevent infinite loop in <function>ln(numeric)</function> due to roundoff error</para></listitem> +<listitem><para><command>GROUP BY</command> got confused if there were multiple equal GROUP BY items</para></listitem> +<listitem><para>Fix bad plan when inherited <command>UPDATE</command>/<command>DELETE</command> references another inherited table</para></listitem> +<listitem><para>Prevent clustering on incomplete (partial or non-NULL-storing) indexes</para></listitem> +<listitem><para>Service shutdown request at proper time if it arrives while still starting up</para></listitem> +<listitem><para>Fix left-links in temporary indexes (could make backwards scans miss entries)</para></listitem> +<listitem><para>Fix incorrect handling of client_encoding setting in postgresql.conf (Tatsuo)</para></listitem> +<listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem> +<listitem><para>Fix SPI for case where rule contains multiple statements of the same type</para></listitem> +<listitem><para>Fix problem with checking for wrong type of access privilege in rule query</para></listitem> +<listitem><para>Fix problem with <command>EXCEPT</command> in <command>CREATE RULE</command></para></listitem> +<listitem><para |
