Typical markup:
&<> use & escapes
+PostgreSQL <productname>
+postgresql.conf, pg_hba.conf <filename>
[A-Z][A-Z ]+[A-Z] <command>
[A-Za-z_][A-Za-z0-9_]+() <function>
[A-Za-z_]/[A-Za-z_]+ <filename>
-PostgreSQL <productname>
pg_[A-Za-z0-9_] <application>
-[A-Z][A-Z] <type>, <envar>, <literal>
+[A-Z][A-Z][A-Z_ ]* <type>, <envar>, <literal>
non-ASCII characters convert to HTML4 entity (&) escapes
wrap long lines
For new features, add links to the documentation sections. Use </link>
-so that Perl can remove it so HISTORY.html can be created with no
-links to the main documentation. This was added only in 8.2, so don't
-do it for earlier branch release files.
+not just </> so that generate_history.pl can remove it, so HISTORY.html
+can be created without links to the main documentation.
-->
<para>
A complete list of changes for each release can be obtained by
- viewing the CVS logs for each release.
+ viewing the <link linkend="cvs">CVS</link> logs for each release.
The <ulink
url="http://archives.postgresql.org/pgsql-committers/">pgsql-committers
email list</ulink> records all source code changes as well. There is also
review, so each item is truly a community effort.
</para>
- <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.
- </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>
+<!--
+ To add a new major-release series, add an entry here and in filelist.sgml.
+ Follow the naming convention, or you'll confuse generate_history.pl.
- <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>
-
- <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.
- </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 eve