]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release-8.3.sgml
Update release notes for 9.2.3, 9.1.8, 9.0.12, 8.4.16, 8.3.23.
[postgresql] / doc / src / sgml / release-8.3.sgml
1 <!-- doc/src/sgml/release-8.3.sgml -->
2 <!-- See header comment in release.sgml about typical markup -->
3
4  <sect1 id="release-8-3-23">
5   <title>Release 8.3.23</title>
6
7   <note>
8   <title>Release Date</title>
9   <simpara>2013-02-07</simpara>
10   </note>
11
12   <para>
13    This release contains a variety of fixes from 8.3.22.
14    For information about new features in the 8.3 major release, see
15    <xref linkend="release-8-3">.
16   </para>
17
18   <para>
19    This is expected to be the last <productname>PostgreSQL</> release
20    in the 8.3.X series.  Users are encouraged to update to a newer
21    release branch soon.
22   </para>
23
24   <sect2>
25    <title>Migration to Version 8.3.23</title>
26
27    <para>
28     A dump/restore is not required for those running 8.3.X.
29    </para>
30
31    <para>
32     However, if you are upgrading from a version earlier than 8.3.17,
33     see the release notes for 8.3.17.
34    </para>
35
36   </sect2>
37
38   <sect2>
39    <title>Changes</title>
40
41    <itemizedlist>
42
43     <listitem>
44      <para>
45       Fix SQL grammar to allow subscripting or field selection from a
46       sub-SELECT result (Tom Lane)
47      </para>
48     </listitem>
49
50     <listitem>
51      <para>
52       Protect against race conditions when scanning
53       <structname>pg_tablespace</> (Stephen Frost, Tom Lane)
54      </para>
55
56      <para>
57       <command>CREATE DATABASE</> and <command>DROP DATABASE</> could
58       misbehave if there were concurrent updates of
59       <structname>pg_tablespace</> entries.
60      </para>
61     </listitem>
62
63     <listitem>
64      <para>
65       Prevent <command>DROP OWNED</> from trying to drop whole databases or
66       tablespaces (&Aacute;lvaro Herrera)
67      </para>
68
69      <para>
70       For safety, ownership of these objects must be reassigned, not dropped.
71      </para>
72     </listitem>
73
74     <listitem>
75      <para>
76       Prevent misbehavior when a <symbol>RowExpr</> or <symbol>XmlExpr</>
77       is parse-analyzed twice (Andres Freund, Tom Lane)
78      </para>
79
80      <para>
81       This mistake could be user-visible in contexts such as
82       <literal>CREATE TABLE LIKE INCLUDING INDEXES</>.
83      </para>
84     </listitem>
85
86     <listitem>
87      <para>
88       Improve defenses against integer overflow in hashtable sizing
89       calculations (Jeff Davis)
90      </para>
91     </listitem>
92
93     <listitem>
94      <para>
95       Ensure that non-ASCII prompt strings are translated to the correct
96       code page on Windows (Alexander Law, Noah Misch)
97      </para>
98
99      <para>
100       This bug affected <application>psql</> and some other client programs.
101      </para>
102     </listitem>
103
104     <listitem>
105      <para>
106       Fix possible crash in <application>psql</>'s <command>\?</> command
107       when not connected to a database (Meng Qingzhong)
108      </para>
109     </listitem>
110
111     <listitem>
112      <para>
113       Fix one-byte buffer overrun in <application>libpq</>'s
114       <function>PQprintTuples</> (Xi Wang)
115      </para>
116
117      <para>
118       This ancient function is not used anywhere by
119       <productname>PostgreSQL</> itself, but it might still be used by some
120       client code.
121      </para>
122     </listitem>
123
124     <listitem>
125      <para>
126       Rearrange configure's tests for supplied functions so it is not
127       fooled by bogus exports from libedit/libreadline (Christoph Berg)
128      </para>
129     </listitem>
130
131     <listitem>
132      <para>
133       Ensure Windows build number increases over time (Magnus Hagander)
134      </para>
135     </listitem>
136
137     <listitem>
138      <para>
139       Make <application>pgxs</> build executables with the right
140       <literal>.exe</> suffix when cross-compiling for Windows
141       (Zoltan Boszormenyi)
142      </para>
143     </listitem>
144
145     <listitem>
146      <para>
147       Add new timezone abbreviation <literal>FET</> (Tom Lane)
148      </para>
149
150      <para>
151       This is now used in some eastern-European time zones.
152      </para>
153     </listitem>
154
155    </itemizedlist>
156
157   </sect2>
158  </sect1>
159
160  <sect1 id="release-8-3-22">
161   <title>Release 8.3.22</title>
162
163   <note>
164   <title>Release Date</title>
165   <simpara>2012-12-06</simpara>
166   </note>
167
168   <para>
169    This release contains a variety of fixes from 8.3.21.
170    For information about new features in the 8.3 major release, see
171    <xref linkend="release-8-3">.
172   </para>
173
174   <para>
175    The <productname>PostgreSQL</> community will stop releasing updates
176    for the 8.3.X release series in February 2013.
177    Users are encouraged to update to a newer release branch soon.
178   </para>
179
180   <sect2>
181    <title>Migration to Version 8.3.22</title>
182
183    <para>
184     A dump/restore is not required for those running 8.3.X.
185    </para>
186
187    <para>
188     However, if you are upgrading from a version earlier than 8.3.17,
189     see the release notes for 8.3.17.
190    </para>
191
192   </sect2>
193
194   <sect2>
195    <title>Changes</title>
196
197    <itemizedlist>
198
199     <listitem>
200      <para>
201       Fix multiple bugs associated with <command>CREATE INDEX
202       CONCURRENTLY</> (Andres Freund, Tom Lane)
203      </para>
204
205      <para>
206       Fix <command>CREATE INDEX CONCURRENTLY</> to use
207       in-place updates when changing the state of an index's
208       <structname>pg_index</> row.  This prevents race conditions that could
209       cause concurrent sessions to miss updating the target index, thus
210       resulting in corrupt concurrently-created indexes.
211      </para>
212
213      <para>
214       Also, fix various other operations to ensure that they ignore
215       invalid indexes resulting from a failed <command>CREATE INDEX
216       CONCURRENTLY</> command.  The most important of these is
217       <command>VACUUM</>, because an auto-vacuum could easily be launched
218       on the table before corrective action can be taken to fix or remove
219       the invalid index.
220      </para>
221     </listitem>
222
223     <listitem>
224      <para>
225       Avoid corruption of internal hash tables when out of memory
226       (Hitoshi Harada)
227      </para>
228     </listitem>
229
230     <listitem>
231      <para>
232       Fix planning of non-strict equivalence clauses above outer joins
233       (Tom Lane)
234      </para>
235
236      <para>
237       The planner could derive incorrect constraints from a clause equating
238       a non-strict construct to something else, for example
239       <literal>WHERE COALESCE(foo, 0) = 0</>
240       when <literal>foo</> is coming from the nullable side of an outer join.
241      </para>
242     </listitem>
243
244     <listitem>
245      <para>
246       Improve planner's ability to prove exclusion constraints from
247       equivalence classes (Tom Lane)
248      </para>
249     </listitem>
250
251     <listitem>
252      <para>
253       Fix partial-row matching in hashed subplans to handle cross-type cases
254       correctly (Tom Lane)
255      </para>
256
257      <para>
258       This affects multicolumn <literal>NOT IN</> subplans, such as
259       <literal>WHERE (a, b) NOT IN (SELECT x, y FROM ...)</>
260       when for instance <literal>b</> and <literal>y</> are <type>int4</>
261       and <type>int8</> respectively.  This mistake led to wrong answers
262       or crashes depending on the specific datatypes involved.
263      </para>
264     </listitem>
265
266     <listitem>
267      <para>
268       Acquire buffer lock when re-fetching the old tuple for an
269       <literal>AFTER ROW UPDATE/DELETE</> trigger (Andres Freund)
270      </para>
271
272      <para>
273       In very unusual circumstances, this oversight could result in passing
274       incorrect data to the precheck logic for a foreign-key enforcement
275       trigger.  That could result in a crash, or in an incorrect decision
276       about whether to fire the trigger.
277      </para>
278     </listitem>
279
280     <listitem>
281      <para>
282       Fix <command>REASSIGN OWNED</> to handle grants on tablespaces
283       (&Aacute;lvaro Herrera)
284      </para>
285     </listitem>
286
287     <listitem>
288      <para>
289       Ignore incorrect <structname>pg_attribute</> entries for system
290       columns for views (Tom Lane)
291      </para>
292
293      <para>
294       Views do not have any system columns.  However, we forgot to
295       remove such entries when converting a table to a view.  That's fixed
296       properly for 9.3 and later, but in previous branches we need to defend
297       against existing mis-converted views.
298      </para>
299     </listitem>
300
301     <listitem>
302      <para>
303       Fix rule printing to dump <literal>INSERT INTO <replaceable>table</>
304       DEFAULT VALUES</literal> correctly (Tom Lane)
305      </para>
306     </listitem>
307
308     <listitem>
309      <para>
310       Guard against stack overflow when there are too many
311       <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> clauses
312       in a query (Tom Lane)
313      </para>
314     </listitem>
315
316     <listitem>
317      <para>
318       Prevent platform-dependent failures when dividing the minimum possible
319       integer value by -1 (Xi Wang, Tom Lane)
320      </para>
321     </listitem>
322
323     <listitem>
324      <para>
325       Fix possible access past end of string in date parsing
326       (Hitoshi Harada)
327      </para>
328     </listitem>
329
330     <listitem>
331      <para>
332       Produce an understandable error message if the length of the path name
333       for a Unix-domain socket exceeds the platform-specific limit
334       (Tom Lane, Andrew Dunstan)
335      </para>
336
337      <para>
338       Formerly, this would result in something quite unhelpful, such as
339       <quote>Non-recoverable failure in name resolution</>.
340      </para>
341     </listitem>
342
343     <listitem>
344      <para>
345       Fix memory leaks when sending composite column values to the client
346       (Tom Lane)
347      </para>
348     </listitem>
349
350     <listitem>
351      <para>
352       Make <application>pg_ctl</> more robust about reading the
353       <filename>postmaster.pid</> file (Heikki Linnakangas)
354      </para>
355
356      <para>
357       Fix race conditions and possible file descriptor leakage.
358      </para>
359     </listitem>
360
361     <listitem>
362      <para>
363       Fix possible crash in <application>psql</> if incorrectly-encoded data
364       is presented and the <varname>client_encoding</> setting is a
365       client-only encoding, such as SJIS (Jiang Guiqing)
366      </para>
367     </listitem>
368
369     <listitem>
370      <para>
371       Fix bugs in the <filename>restore.sql</> script emitted by
372       <application>pg_dump</> in <literal>tar</> output format (Tom Lane)
373      </para>
374
375      <para>
376       The script would fail outright on tables whose names include
377       upper-case characters.  Also, make the script capable of restoring
378       data in <option>--inserts</> mode as well as the regular COPY mode.
379      </para>
380     </listitem>
381
382     <listitem>
383      <para>
384       Fix <application>pg_restore</> to accept POSIX-conformant
385       <literal>tar</> files (Brian Weaver, Tom Lane)
386      </para>
387
388      <para>
389       The original coding of <application>pg_dump</>'s <literal>tar</>
390       output mode produced files that are not fully conformant with the
391       POSIX standard.  This has been corrected for version 9.3.  This
392       patch updates previous branches so that they will accept both the
393       incorrect and the corrected formats, in hopes of avoiding
394       compatibility problems when 9.3 comes out.
395      </para>
396     </listitem>
397
398     <listitem>
399      <para>
400       Fix <application>pg_resetxlog</> to locate <filename>postmaster.pid</>
401       correctly when given a relative path to the data directory (Tom Lane)
402      </para>
403
404      <para>
405       This mistake could lead to <application>pg_resetxlog</> not noticing
406       that there is an active postmaster using the data directory.
407      </para>
408     </listitem>
409
410     <listitem>
411      <para>
412       Fix <application>libpq</>'s <function>lo_import()</> and
413       <function>lo_export()</> functions to report file I/O errors properly
414       (Tom Lane)
415      </para>
416     </listitem>
417
418     <listitem>
419      <para>
420       Fix <application>ecpg</>'s processing of nested structure pointer
421       variables (Muhammad Usama)
422      </para>
423     </listitem>
424
425     <listitem>
426      <para>
427       Make <filename>contrib/pageinspect</>'s btree page inspection
428       functions take buffer locks while examining pages (Tom Lane)
429      </para>
430     </listitem>
431
432     <listitem>
433      <para>
434       Fix <application>pgxs</> support for building loadable modules on AIX
435       (Tom Lane)
436      </para>
437
438      <para>
439       Building modules outside the original source tree didn't work on AIX.
440      </para>
441     </listitem>
442
443     <listitem>
444      <para>
445       Update time zone data files to <application>tzdata</> release 2012j
446       for DST law changes in Cuba, Israel, Jordan, Libya, Palestine, Western
447       Samoa, and portions of Brazil.
448      </para>
449     </listitem>
450
451    </itemizedlist>
452
453   </sect2>
454  </sect1>
455
456  <sect1 id="release-8-3-21">
457   <title>Release 8.3.21</title>
458
459   <note>
460   <title>Release Date</title>
461   <simpara>2012-09-24</simpara>
462   </note>
463
464   <para>
465    This release contains a variety of fixes from 8.3.20.
466    For information about new features in the 8.3 major release, see
467    <xref linkend="release-8-3">.
468   </para>
469
470   <para>
471    The <productname>PostgreSQL</> community will stop releasing updates
472    for the 8.3.X release series in February 2013.
473    Users are encouraged to update to a newer release branch soon.
474   </para>
475
476   <sect2>
477    <title>Migration to Version 8.3.21</title>
478
479    <para>
480     A dump/restore is not required for those running 8.3.X.
481    </para>
482
483    <para>
484     However, if you are upgrading from a version earlier than 8.3.17,
485     see the release notes for 8.3.17.
486    </para>
487
488   </sect2>
489
490   <sect2>
491    <title>Changes</title>
492
493    <itemizedlist>
494
495     <listitem>
496      <para>
497       Improve page-splitting decisions in GiST indexes (Alexander Korotkov,
498       Robert Haas, Tom Lane)
499      </para>
500
501      <para>
502       Multi-column GiST indexes might suffer unexpected bloat due to this
503       error.
504      </para>
505     </listitem>
506
507     <listitem>
508      <para>
509       Fix cascading privilege revoke to stop if privileges are still held
510       (Tom Lane)
511      </para>
512
513      <para>
514       If we revoke a grant option from some role <replaceable>X</>, but
515       <replaceable>X</> still holds that option via a grant from someone
516       else, we should not recursively revoke the corresponding privilege
517       from role(s) <replaceable>Y</> that <replaceable>X</> had granted it
518       to.
519      </para>
520     </listitem>
521
522     <listitem>
523      <para>
524       Fix handling of <literal>SIGFPE</> when PL/Perl is in use (Andres Freund)
525      </para>
526
527      <para>
528       Perl resets the process's <literal>SIGFPE</> handler to
529       <literal>SIG_IGN</>, which could result in crashes later on.  Restore
530       the normal Postgres signal handler after initializing PL/Perl.
531      </para>
532     </listitem>
533
534     <listitem>
535      <para>
536       Prevent PL/Perl from crashing if a recursive PL/Perl function is
537       redefined while being executed (Tom Lane)
538      </para>
539     </listitem>
540
541     <listitem>
542      <para>
543       Work around possible misoptimization in PL/Perl (Tom Lane)
544      </para>
545
546      <para>
547       Some Linux distributions contain an incorrect version of
548       <filename>pthread.h</> that results in incorrect compiled code in
549       PL/Perl, leading to crashes if a PL/Perl function calls another one
550       that throws an error.
551      </para>
552     </listitem>
553
554     <listitem>
555      <para>
556       Update time zone data files to <application>tzdata</> release 2012f
557       for DST law changes in Fiji
558      </para>
559     </listitem>
560
561    </itemizedlist>
562
563   </sect2>
564  </sect1>
565
566  <sect1 id="release-8-3-20">
567   <title>Release 8.3.20</title>
568
569   <note>
570   <title>Release Date</title>
571   <simpara>2012-08-17</simpara>
572   </note>
573
574   <para>
575    This release contains a variety of fixes from 8.3.19.
576    For information about new features in the 8.3 major release, see
577    <xref linkend="release-8-3">.
578   </para>
579
580   <para>
581    The <productname>PostgreSQL</> community will stop releasing updates
582    for the 8.3.X release series in February 2013.
583    Users are encouraged to update to a newer release branch soon.
584   </para>
585
586   <sect2>
587    <title>Migration to Version 8.3.20</title>
588
589    <para>
590     A dump/restore is not required for those running 8.3.X.
591    </para>
592
593    <para>
594     However, if you are upgrading from a version earlier than 8.3.17,
595     see the release notes for 8.3.17.
596    </para>
597
598   </sect2>
599
600   <sect2>
601    <title>Changes</title>
602
603    <itemizedlist>
604
605     <listitem>
606      <para>
607       Prevent access to external files/URLs via XML entity references
608       (Noah Misch, Tom Lane)
609      </para>
610
611      <para>
612       <function>xml_parse()</> would attempt to fetch external files or
613       URLs as needed to resolve DTD and entity references in an XML value,
614       thus allowing unprivileged database users to attempt to fetch data
615       with the privileges of the database server.  While the external data
616       wouldn't get returned directly to the user, portions of it could be
617       exposed in error messages if the data didn't parse as valid XML; and
618       in any case the mere ability to check existence of a file might be
619       useful to an attacker.  (CVE-2012-3489)
620      </para>
621     </listitem>
622
623     <listitem>
624      <para>
625       Prevent access to external files/URLs via <filename>contrib/xml2</>'s
626       <function>xslt_process()</> (Peter Eisentraut)
627      </para>
628
629      <para>
630       <application>libxslt</> offers the ability to read and write both
631       files and URLs through stylesheet commands, thus allowing
632       unprivileged database users to both read and write data with the
633       privileges of the database server.  Disable that through proper use
634       of <application>libxslt</>'s security options.  (CVE-2012-3488)
635      </para>
636
637      <para>
638       Also, remove <function>xslt_process()</>'s ability to fetch documents
639       and stylesheets from external files/URLs.  While this was a
640       documented <quote>feature</>, it was long regarded as a bad idea.
641       The fix for CVE-2012-3489 broke that capability, and rather than
642       expend effort on trying to fix it, we're just going to summarily
643       remove it.
644      </para>
645     </listitem>
646
647     <listitem>
648      <para>
649       Prevent too-early recycling of btree index pages (Noah Misch)
650      </para>
651
652      <para>
653       When we allowed read-only transactions to skip assigning XIDs, we
654       introduced the possibility that a deleted btree page could be
655       recycled while a read-only transaction was still in flight to it.
656       This would result in incorrect index search results.  The probability
657       of such an error occurring in the field seems very low because of the
658       timing requirements, but nonetheless it should be fixed.
659      </para>
660     </listitem>
661
662     <listitem>
663      <para>
664       Fix crash-safety bug with newly-created-or-reset sequences (Tom Lane)
665      </para>
666
667      <para>
668       If <command>ALTER SEQUENCE</> was executed on a freshly created or
669       reset sequence, and then precisely one <function>nextval()</> call
670       was made on it, and then the server crashed, WAL replay would restore
671       the sequence to a state in which it appeared that no
672       <function>nextval()</> had been done, thus allowing the first
673       sequence value to be returned again by the next
674       <function>nextval()</> call.  In particular this could manifest for
675       <type>serial</> columns, since creation of a serial column's sequence
676       includes an <command>ALTER SEQUENCE OWNED BY</> step.
677      </para>
678     </listitem>
679
680     <listitem>
681      <para>
682       Ensure the <filename>backup_label</> file is fsync'd after
683       <function>pg_start_backup()</> (Dave Kerr)
684      </para>
685     </listitem>
686
687     <listitem>
688      <para>
689       Back-patch 9.1 improvement to compress the fsync request queue
690       (Robert Haas)
691      </para>
692
693      <para>
694       This improves performance during checkpoints.  The 9.1 change
695       has now seen enough field testing to seem safe to back-patch.
696      </para>
697     </listitem>
698
699     <listitem>
700      <para>
701       Only allow autovacuum to be auto-canceled by a directly blocked
702       process (Tom Lane)
703      </para>
704
705      <para>
706       The original coding could allow inconsistent behavior in some cases;
707       in particular, an autovacuum could get canceled after less than
708       <literal>deadlock_timeout</> grace period.
709      </para>
710     </listitem>
711
712     <listitem>
713      <para>
714       Improve logging of autovacuum cancels (Robert Haas)
715      </para>
716     </listitem>
717
718     <listitem>
719      <para>
720       Fix log collector so that <literal>log_truncate_on_rotation</> works
721       during the very first log rotation after server start (Tom Lane)
722      </para>
723     </listitem>
724
725     <listitem>
726      <para>
727       Ensure that a whole-row reference to a subquery doesn't include any
728       extra <literal>GROUP BY</> or <literal>ORDER BY</> columns (Tom Lane)
729      </para>
730     </listitem>
731
732     <listitem>
733      <para>
734       Disallow copying whole-row references in <literal>CHECK</>
735       constraints and index definitions during <command>CREATE TABLE</>
736       (Tom Lane)
737      </para>
738
739      <para>
740       This situation can arise in <command>CREATE TABLE</> with
741       <literal>LIKE</> or <literal>INHERITS</>.  The copied whole-row
742       variable was incorrectly labeled with the row type of the original
743       table not the new one.  Rejecting the case seems reasonable for
744       <literal>LIKE</>, since the row types might well diverge later.  For
745       <literal>INHERITS</> we should ideally allow it, with an implicit
746       coercion to the parent table's row type; but that will require more
747       work than seems safe to back-patch.
748      </para>
749     </listitem>
750
751     <listitem>
752      <para>
753       Fix memory leak in <literal>ARRAY(SELECT ...)</> subqueries (Heikki
754       Linnakangas, Tom Lane)
755      </para>
756     </listitem>
757
758     <listitem>
759      <para>
760       Fix extraction of common prefixes from regular expressions (Tom Lane)
761      </para>
762
763      <para>
764       The code could get confused by quantified parenthesized
765       subexpressions, such as <literal>^(foo)?bar</>.  This would lead to
766       incorrect index optimization of searches for such patterns.
767      </para>
768     </listitem>
769
770     <listitem>
771      <para>
772       Report errors properly in <filename>contrib/xml2</>'s
773       <function>xslt_process()</> (Tom Lane)
774      </para>
775     </listitem>
776
777     <listitem>
778      <para>
779       Update time zone data files to <application>tzdata</> release 2012e
780       for DST law changes in Morocco and Tokelau
781      </para>
782     </listitem>
783
784    </itemizedlist>
785
786   </sect2>
787  </sect1>
788
789  <sect1 id="release-8-3-19">
790   <title>Release 8.3.19</title>
791
792   <note>
793   <title>Release Date</title>
794   <simpara>2012-06-04</simpara>
795   </note>
796
797   <para>
798    This release contains a variety of fixes from 8.3.18.
799    For information about new features in the 8.3 major release, see
800    <xref linkend="release-8-3">.
801   </para>
802
803   <sect2>
804    <title>Migration to Version 8.3.19</title>
805
806    <para>
807     A dump/restore is not required for those running 8.3.X.
808    </para>
809
810    <para>
811     However, if you are upgrading from a version earlier than 8.3.17,
812     see the release notes for 8.3.17.
813    </para>
814
815   </sect2>
816
817   <sect2>
818    <title>Changes</title>
819
820    <itemizedlist>
821
822     <listitem>
823      <para>
824       Fix incorrect password transformation in
825       <filename>contrib/pgcrypto</>'s DES <function>crypt()</> function
826       (Solar Designer)
827      </para>
828
829      <para>
830       If a password string contained the byte value <literal>0x80</>, the
831       remainder of the password was ignored, causing the password to be much
832       weaker than it appeared.  With this fix, the rest of the string is
833       properly included in the DES hash.  Any stored password values that are
834       affected by this bug will thus no longer match, so the stored values may
835       need to be updated.  (CVE-2012-2143)
836      </para>
837     </listitem>
838
839     <listitem>
840      <para>
841       Ignore <literal>SECURITY DEFINER</> and <literal>SET</> attributes for
842       a procedural language's call handler (Tom Lane)
843      </para>
844
845      <para>
846       Applying such attributes to a call handler could crash the server.
847       (CVE-2012-2655)
848      </para>
849     </listitem>
850
851     <listitem>
852      <para>
853       Allow numeric timezone offsets in <type>timestamp</> input to be up to
854       16 hours away from UTC (Tom Lane)
855      </para>
856
857      <para>
858       Some historical time zones have offsets larger than 15 hours, the
859       previous limit.  This could result in dumped data values being rejected
860       during reload.
861      </para>
862     </listitem>
863
864     <listitem>
865      <para>
866       Fix timestamp conversion to cope when the given time is exactly the
867       last DST transition time for the current timezone (Tom Lane)
868      </para>
869
870      <para>
871       This oversight has been there a long time, but was not noticed
872       previously because most DST-using zones are presumed to have an
873       indefinite sequence of future DST transitions.
874      </para>
875     </listitem>
876
877     <listitem>
878      <para>
879       Fix <type>text</> to <type>name</> and <type>char</> to <type>name</>
880       casts to perform string truncation correctly in multibyte encodings
881       (Karl Schnaitter)
882      </para>
883     </listitem>
884
885     <listitem>
886      <para>
887       Fix memory copying bug in <function>to_tsquery()</> (Heikki Linnakangas)
888      </para>
889     </listitem>
890
891     <listitem>
892      <para>
893       Fix slow session startup when <structname>pg_attribute</> is very large
894       (Tom Lane)
895      </para>
896
897      <para>
898       If <structname>pg_attribute</> exceeds one-fourth of
899       <varname>shared_buffers</>, cache rebuilding code that is sometimes
900       needed during session start would trigger the synchronized-scan logic,
901       causing it to take many times longer than normal.  The problem was
902       particularly acute if many new sessions were starting at once.
903      </para>
904     </listitem>
905
906     <listitem>
907      <para>
908       Ensure sequential scans check for query cancel reasonably often (Merlin
909       Moncure)
910      </para>
911
912      <para>
913       A scan encountering many consecutive pages that contain no live tuples
914       would not respond to interrupts meanwhile.
915      </para>
916     </listitem>
917
918     <listitem>
919      <para>
920       Ensure the Windows implementation of <function>PGSemaphoreLock()</>
921       clears <varname>ImmediateInterruptOK</> before returning (Tom Lane)
922      </para>
923
924      <para>
925       This oversight meant that a query-cancel interrupt received later
926       in the same query could be accepted at an unsafe time, with
927       unpredictable but not good consequences.
928      </para>
929     </listitem>
930
931     <listitem>
932      <para>
933       Show whole-row variables safely when printing views or rules
934       (Abbas Butt, Tom Lane)
935      </para>
936
937      <para>
938       Corner cases involving ambiguous names (that is, the name could be
939       either a table or column name of the query) were printed in an
940       ambiguous way, risking that the view or rule would be interpreted
941       differently after dump and reload.  Avoid the ambiguous case by
942       attaching a no-op cast.
943      </para>
944     </listitem>
945
946     <listitem>
947      <para>
948       Ensure autovacuum worker processes perform stack depth checking
949       properly (Heikki Linnakangas)
950      </para>
951
952      <para>
953       Previously, infinite recursion in a function invoked by
954       auto-<command>ANALYZE</> could crash worker processes.
955      </para>
956     </listitem>
957
958     <listitem>
959      <para>
960       Fix logging collector to not lose log coherency under high load (Andrew
961       Dunstan)
962      </para>
963
964      <para>
965       The collector previously could fail to reassemble large messages if it
966       got too busy.
967      </para>
968     </listitem>
969
970     <listitem>
971      <para>
972       Fix logging collector to ensure it will restart file rotation
973       after receiving <systemitem>SIGHUP</> (Tom Lane)
974      </para>
975     </listitem>
976
977     <listitem>
978      <para>
979       Fix PL/pgSQL's <command>GET DIAGNOSTICS</> command when the target
980       is the function's first variable (Tom Lane)
981      </para>
982     </listitem>
983
984     <listitem>
985      <para>
986       Fix several performance problems in <application>pg_dump</> when
987       the database contains many objects (Jeff Janes, Tom Lane)
988      </para>
989
990      <para>
991       <application>pg_dump</> could get very slow if the database contained
992       many schemas, or if many objects are in dependency loops, or if there
993       are many owned sequences.
994      </para>
995     </listitem>
996
997     <listitem>
998      <para>
999       Fix <filename>contrib/dblink</>'s <function>dblink_exec()</> to not leak
1000       temporary database connections upon error (Tom Lane)
1001      </para>
1002     </listitem>
1003
1004     <listitem>
1005      <para>
1006       Update time zone data files to <application>tzdata</> release 2012c
1007       for DST law changes in Antarctica, Armenia, Chile, Cuba, Falkland
1008       Islands, Gaza, Haiti, Hebron, Morocco, Syria, and Tokelau Islands;
1009       also historical corrections for Canada.
1010      </para>
1011     </listitem>
1012
1013    </itemizedlist>
1014
1015   </sect2>
1016  </sect1>
1017
1018  <sect1 id="release-8-3-18">
1019   <title>Release 8.3.18</title>
1020
1021   <note>
1022   <title>Release Date</title>
1023   <simpara>2012-02-27</simpara>
1024   </note>
1025
1026   <para>
1027    This release contains a variety of fixes from 8.3.17.
1028    For information about new features in the 8.3 major release, see
1029    <xref linkend="release-8-3">.
1030   </para>
1031
1032   <sect2>
1033    <title>Migration to Version 8.3.18</title>
1034
1035    <para>
1036     A dump/restore is not required for those running 8.3.X.
1037    </para>
1038
1039    <para>
1040     However, if you are upgrading from a version earlier than 8.3.17,
1041     see the release notes for 8.3.17.
1042    </para>
1043
1044   </sect2>
1045
1046   <sect2>
1047    <title>Changes</title>
1048
1049    <itemizedlist>
1050
1051     <listitem>
1052      <para>
1053       Require execute permission on the trigger function for
1054       <command>CREATE TRIGGER</> (Robert Haas)
1055      </para>
1056
1057      <para>
1058       This missing check could allow another user to execute a trigger
1059       function with forged input data, by installing it on a table he owns.
1060       This is only of significance for trigger functions marked
1061       <literal>SECURITY DEFINER</>, since otherwise trigger functions run
1062       as the table owner anyway.  (CVE-2012-0866)
1063      </para>
1064     </listitem>
1065
1066     <listitem>
1067      <para>
1068       Convert newlines to spaces in names written in <application>pg_dump</>
1069       comments (Robert Haas)
1070      </para>
1071
1072      <para>
1073       <application>pg_dump</> was incautious about sanitizing object names
1074       that are emitted within SQL comments in its output script.  A name
1075       containing a newline would at least render the script syntactically
1076       incorrect.  Maliciously crafted object names could present a SQL
1077       injection risk when the script is reloaded.  (CVE-2012-0868)
1078      </para>
1079     </listitem>
1080
1081     <listitem>
1082      <para>
1083       Fix btree index corruption from insertions concurrent with vacuuming
1084       (Tom Lane)
1085      </para>
1086
1087      <para>
1088       An index page split caused by an insertion could sometimes cause a
1089       concurrently-running <command>VACUUM</> to miss removing index entries
1090       that it should remove.  After the corresponding table rows are removed,
1091       the dangling index entries would cause errors (such as <quote>could not
1092       read block N in file ...</>) or worse, silently wrong query results
1093       after unrelated rows are re-inserted at the now-free table locations.
1094       This bug has been present since release 8.2, but occurs so infrequently
1095       that it was not diagnosed until now.  If you have reason to suspect
1096       that it has happened in your database, reindexing the affected index
1097       will fix things.
1098      </para>
1099     </listitem>
1100
1101     <listitem>
1102      <para>
1103       Allow non-existent values for some settings in <command>ALTER
1104       USER/DATABASE SET</> (Heikki Linnakangas)
1105      </para>
1106
1107      <para>
1108       Allow <varname>default_text_search_config</>,
1109       <varname>default_tablespace</>, and <varname>temp_tablespaces</> to be
1110       set to names that are not known.  This is because they might be known
1111       in another database where the setting is intended to be used, or for the
1112       tablespace cases because the tablespace might not be created yet.  The
1113       same issue was previously recognized for <varname>search_path</>, and
1114       these settings now act like that one.
1115      </para>
1116     </listitem>
1117
1118     <listitem>
1119      <para>
1120       Track the OID counter correctly during WAL replay, even when it wraps
1121       around (Tom Lane)
1122      </para>
1123
1124      <para>
1125       Previously the OID counter would remain stuck at a high value until the
1126       system exited replay mode.  The practical consequences of that are
1127       usually nil, but there are scenarios wherein a standby server that's
1128       been promoted to master might take a long time to advance the OID
1129       counter to a reasonable value once values are needed.
1130      </para>
1131     </listitem>
1132
1133     <listitem>
1134      <para>
1135       Fix regular expression back-references with <literal>*</> attached
1136       (Tom Lane)
1137      </para>
1138
1139      <para>
1140       Rather than enforcing an exact string match, the code would effectively
1141       accept any string that satisfies the pattern sub-expression referenced
1142       by the back-reference symbol.
1143      </para>
1144
1145      <para>
1146       A similar problem still afflicts back-references that are embedded in a
1147       larger quantified expression, rather than being the immediate subject
1148       of the quantifier.  This will be addressed in a future
1149       <productname>PostgreSQL</> release.
1150      </para>
1151     </listitem>
1152
1153     <listitem>
1154      <para>
1155       Fix recently-introduced memory leak in processing of
1156       <type>inet</>/<type>cidr</> values (Heikki Linnakangas)
1157      </para>
1158
1159      <para>
1160       A patch in the December 2011 releases of <productname>PostgreSQL</>
1161       caused memory leakage in these operations, which could be significant
1162       in scenarios such as building a btree index on such a column.
1163      </para>
1164     </listitem>
1165
1166     <listitem>
1167      <para>
1168       Avoid double close of file handle in syslogger on Windows (MauMau)
1169      </para>
1170
1171      <para>
1172       Ordinarily this error was invisible, but it would cause an exception
1173       when running on a debug version of Windows.
1174      </para>
1175     </listitem>
1176
1177     <listitem>
1178      <para>
1179       Fix I/O-conversion-related memory leaks in plpgsql
1180       (Andres Freund, Jan Urbanski, Tom Lane)
1181      </para>
1182
1183      <para>
1184       Certain operations would leak memory until the end of the current
1185       function.
1186      </para>
1187     </listitem>
1188
1189     <listitem>
1190      <para>
1191       Improve <application>pg_dump</>'s handling of inherited table columns
1192       (Tom Lane)
1193      </para>
1194
1195      <para>
1196       <application>pg_dump</> mishandled situations where a child column has
1197       a different default expression than its parent column.  If the default
1198       is textually identical to the parent's default, but not actually the
1199       same (for instance, because of schema search path differences) it would
1200       not be recognized as different, so that after dump and restore the
1201       child would be allowed to inherit the parent's default.  Child columns
1202       that are <literal>NOT NULL</> where their parent is not could also be
1203       restored subtly incorrectly.
1204      </para>
1205     </listitem>
1206
1207     <listitem>
1208      <para>
1209       Fix <application>pg_restore</>'s direct-to-database mode for
1210       INSERT-style table data (Tom Lane)
1211      </para>
1212
1213      <para>
1214       Direct-to-database restores from archive files made with
1215       <option>--inserts</> or <option>--column-inserts</> options fail when
1216       using <application>pg_restore</> from a release dated September or
1217       December 2011, as a result of an oversight in a fix for another
1218       problem.  The archive file itself is not at fault, and text-mode
1219       output is okay.
1220      </para>
1221     </listitem>
1222
1223     <listitem>
1224      <para>
1225       Fix error in <filename>contrib/intarray</>'s <literal>int[] &amp;
1226       int[]</> operator (Guillaume Lelarge)
1227      </para>
1228
1229      <para>
1230       If the smallest integer the two input arrays have in common is 1,
1231       and there are smaller values in either array, then 1 would be
1232       incorrectly omitted from the result.
1233      </para>
1234     </listitem>
1235
1236     <listitem>
1237      <para>
1238       Fix error detection in <filename>contrib/pgcrypto</>'s
1239       <function>encrypt_iv()</> and <function>decrypt_iv()</>
1240       (Marko Kreen)
1241      </para>
1242
1243      <para>
1244       These functions failed to report certain types of invalid-input errors,
1245       and would instead return random garbage values for incorrect input.
1246      </para>
1247     </listitem>
1248
1249     <listitem>
1250      <para>
1251       Fix one-byte buffer overrun in <filename>contrib/test_parser</>
1252       (Paul Guyot)
1253      </para>
1254
1255      <para>
1256       The code would try to read one more byte than it should, which would
1257       crash in corner cases.
1258       Since <filename>contrib/test_parser</> is only example code, this is
1259       not a security issue in itself, but bad example code is still bad.
1260      </para>
1261     </listitem>
1262
1263     <listitem>
1264      <para>
1265       Use <function>__sync_lock_test_and_set()</> for spinlocks on ARM, if
1266       available (Martin Pitt)
1267      </para>
1268
1269      <para>
1270       This function replaces our previous use of the <literal>SWPB</>
1271       instruction, which is deprecated and not available on ARMv6 and later.
1272       Reports suggest that the old code doesn't fail in an obvious way on
1273       recent ARM boards, but simply doesn't interlock concurrent accesses,
1274       leading to bizarre failures in multiprocess operation.
1275      </para>
1276     </listitem>
1277
1278     <listitem>
1279      <para>
1280       Use <option>-fexcess-precision=standard</> option when building with
1281       gcc versions that accept it (Andrew Dunstan)
1282      </para>
1283
1284      <para>
1285       This prevents assorted scenarios wherein recent versions of gcc will
1286       produce creative results.
1287      </para>
1288     </listitem>
1289
1290     <listitem>
1291      <para>
1292       Allow use of threaded Python on FreeBSD (Chris Rees)
1293      </para>
1294
1295      <para>
1296       Our configure script previously believed that this combination wouldn't
1297       work; but FreeBSD fixed the problem, so remove that error check.
1298      </para>
1299     </listitem>
1300
1301    </itemizedlist>
1302
1303   </sect2>
1304  </sect1>
1305
1306  <sect1 id="release-8-3-17">
1307   <title>Release 8.3.17</title>
1308
1309   <note>
1310   <title>Release Date</title>
1311   <simpara>2011-12-05</simpara>
1312   </note>
1313
1314   <para>
1315    This release contains a variety of fixes from 8.3.16.
1316    For information about new features in the 8.3 major release, see
1317    <xref linkend="release-8-3">.
1318   </para>
1319
1320   <sect2>
1321    <title>Migration to Version 8.3.17</title>
1322
1323    <para>
1324     A dump/restore is not required for those running 8.3.X.
1325    </para>
1326
1327    <para>
1328     However, a longstanding error was discovered in the definition of the
1329     <literal>information_schema.referential_constraints</> view.  If you
1330     rely on correct results from that view, you should replace its
1331     definition as explained in the first changelog item below.
1332    </para>
1333
1334    <para>
1335     Also, if you are upgrading from a version earlier than 8.3.8,
1336     see the release notes for 8.3.8.
1337    </para>
1338
1339   </sect2>
1340
1341   <sect2>
1342    <title>Changes</title>
1343
1344    <itemizedlist>
1345
1346     <listitem>
1347      <para>
1348       Fix bugs in <literal>information_schema.referential_constraints</> view
1349       (Tom Lane)
1350      </para>
1351
1352      <para>
1353       This view was being insufficiently careful about matching the
1354       foreign-key constraint to the depended-on primary or unique key
1355       constraint.  That could result in failure to show a foreign key
1356       constraint at all, or showing it multiple times, or claiming that it
1357       depends on a different constraint than the one it really does.
1358      </para>
1359
1360      <para>
1361       Since the view definition is installed by <application>initdb</>,
1362       merely upgrading will not fix the problem.  If you need to fix this
1363       in an existing installation, you can (as a superuser) drop the
1364       <literal>information_schema</> schema then re-create it by sourcing
1365       <filename><replaceable>SHAREDIR</>/information_schema.sql</filename>.
1366       (Run <literal>pg_config --sharedir</> if you're uncertain where
1367       <replaceable>SHAREDIR</> is.)  This must be repeated in each database
1368       to be fixed.
1369      </para>
1370     </listitem>
1371
1372     <listitem>
1373      <para>
1374       Fix TOAST-related data corruption during <literal>CREATE TABLE dest AS
1375       SELECT * FROM src</> or <literal>INSERT INTO dest SELECT * FROM src</>
1376       (Tom Lane)
1377      </para>
1378
1379      <para>
1380       If a table has been modified by <command>ALTER TABLE ADD COLUMN</>,
1381       attempts to copy its data verbatim to another table could produce
1382       corrupt results in certain corner cases.
1383       The problem can only manifest in this precise form in 8.4 and later,
1384       but we patched earlier versions as well in case there are other code
1385       paths that could trigger the same bug.
1386      </para>
1387     </listitem>
1388
1389     <listitem>
1390      <para>
1391       Fix race condition during toast table access from stale syscache entries
1392       (Tom Lane)
1393      </para>
1394
1395      <para>
1396       The typical symptom was transient errors like <quote>missing chunk
1397       number 0 for toast value NNNNN in pg_toast_2619</>, where the cited
1398       toast table would always belong to a system catalog.
1399      </para>
1400     </listitem>
1401
1402     <listitem>
1403      <para>
1404       Make <function>DatumGetInetP()</> unpack inet datums that have a 1-byte
1405       header, and add a new macro, <function>DatumGetInetPP()</>, that does
1406       not (Heikki Linnakangas)
1407      </para>
1408
1409      <para>
1410       This change affects no core code, but might prevent crashes in add-on
1411       code that expects <function>DatumGetInetP()</> to produce an unpacked
1412       datum as per usual convention.
1413      </para>
1414     </listitem>
1415
1416     <listitem>
1417      <para>
1418       Improve locale support in <type>money</> type's input and output
1419       (Tom Lane)
1420      </para>
1421
1422      <para>
1423       Aside from not supporting all standard
1424       <link linkend="guc-lc-monetary"><varname>lc_monetary</></link>
1425       formatting options, the input and output functions were inconsistent,
1426       meaning there were locales in which dumped <type>money</> values could
1427       not be re-read.
1428      </para>
1429     </listitem>
1430
1431     <listitem>
1432      <para>
1433       Don't let <link
1434       linkend="guc-transform-null-equals"><varname>transform_null_equals</></link>
1435       affect <literal>CASE foo WHEN NULL ...</> constructs
1436       (Heikki Linnakangas)
1437      </para>
1438
1439      <para>
1440       <varname>transform_null_equals</> is only supposed to affect
1441       <literal>foo = NULL</> expressions written directly by the user, not
1442       equality checks generated internally by this form of <literal>CASE</>.
1443      </para>
1444     </listitem>
1445
1446     <listitem>
1447      <para>
1448       Change foreign-key trigger creation order to better support
1449       self-referential foreign keys (Tom Lane)
1450      </para>
1451
1452      <para>
1453       For a cascading foreign key that references its own table, a row update
1454       will fire both the <literal>ON UPDATE</> trigger and the
1455       <literal>CHECK</> trigger as one event.  The <literal>ON UPDATE</>
1456       trigger must execute first, else the <literal>CHECK</> will check a
1457       non-final state of the row and possibly throw an inappropriate error.
1458       However, the firing order of these triggers is determined by their
1459       names, which generally sort in creation order since the triggers have
1460       auto-generated names following the convention
1461       <quote>RI_ConstraintTrigger_NNNN</>.  A proper fix would require
1462       modifying that convention, which we will do in 9.2, but it seems risky
1463       to change it in existing releases.  So this patch just changes the
1464       creation order of the triggers.  Users encountering this type of error
1465       should drop and re-create the foreign key constraint to get its
1466       triggers into the right order.
1467      </para>
1468     </listitem>
1469
1470     <listitem>
1471      <para>
1472       Avoid floating-point underflow while tracking buffer allocation rate
1473       (Greg Matthews)
1474      </para>
1475
1476      <para>
1477       While harmless in itself, on certain platforms this would result in
1478       annoying kernel log messages.
1479      </para>
1480     </listitem>
1481
1482     <listitem>
1483      <para>
1484       Preserve blank lines within commands in <application>psql</>'s command
1485       history (Robert Haas)
1486      </para>
1487
1488      <para>
1489       The former behavior could cause problems if an empty line was removed
1490       from within a string literal, for example.
1491      </para>
1492     </listitem>
1493
1494     <listitem>
1495      <para>
1496       Fix <application>pg_dump</> to dump user-defined casts between
1497       auto-generated types, such as table rowtypes (Tom Lane)
1498      </para>
1499     </listitem>
1500
1501     <listitem>
1502      <para>
1503       Use the preferred version of <application>xsubpp</> to build PL/Perl,
1504       not necessarily the operating system's main copy
1505       (David Wheeler and Alex Hunsaker)
1506      </para>
1507     </listitem>
1508
1509     <listitem>
1510      <para>
1511       Fix incorrect coding in <filename>contrib/dict_int</> and
1512       <filename>contrib/dict_xsyn</> (Tom Lane)
1513      </para>
1514
1515      <para>
1516       Some functions incorrectly assumed that memory returned by
1517       <function>palloc()</> is guaranteed zeroed.
1518      </para>
1519     </listitem>
1520
1521     <listitem>
1522      <para>
1523       Honor query cancel interrupts promptly in <function>pgstatindex()</>
1524       (Robert Haas)
1525      </para>
1526     </listitem>
1527
1528     <listitem>
1529      <para>
1530       Ensure VPATH builds properly install all server header files
1531       (Peter Eisentraut)
1532      </para>
1533     </listitem>
1534
1535     <listitem>
1536      <para>
1537       Shorten file names reported in verbose error messages (Peter Eisentraut)
1538      </para>
1539
1540      <para>
1541       Regular builds have always reported just the name of the C file
1542       containing the error message call, but VPATH builds formerly
1543       reported an absolute path name.
1544      </para>
1545     </listitem>
1546
1547     <listitem>
1548      <para>
1549       Fix interpretation of Windows timezone names for Central America
1550       (Tom Lane)
1551      </para>
1552
1553      <para>
1554       Map <quote>Central America Standard Time</> to <literal>CST6</>, not
1555       <literal>CST6CDT</>, because DST is generally not observed anywhere in
1556       Central America.
1557      </para>
1558     </listitem>
1559
1560     <listitem>
1561      <para>
1562       Update time zone data files to <application>tzdata</> release 2011n
1563       for DST law changes in Brazil, Cuba, Fiji, Palestine, Russia, and Samoa;
1564       also historical corrections for Alaska and British East Africa.
1565      </para>
1566     </listitem>
1567
1568    </itemizedlist>
1569
1570   </sect2>
1571  </sect1>
1572
1573  <sect1 id="release-8-3-16">
1574   <title>Release 8.3.16</title>
1575
1576   <note>
1577   <title>Release Date</title>
1578   <simpara>2011-09-26</simpara>
1579   </note>
1580
1581   <para>
1582    This release contains a variety of fixes from 8.3.15.
1583    For information about new features in the 8.3 major release, see
1584    <xref linkend="release-8-3">.
1585   </para>
1586
1587   <sect2>
1588    <title>Migration to Version 8.3.16</title>
1589
1590    <para>
1591     A dump/restore is not required for those running 8.3.X.
1592     However, if you are upgrading from a version earlier than 8.3.8,
1593     see the release notes for 8.3.8.
1594    </para>
1595
1596   </sect2>
1597
1598   <sect2>
1599    <title>Changes</title>
1600
1601    <itemizedlist>
1602
1603     <listitem>
1604      <para>
1605       Fix bugs in indexing of in-doubt HOT-updated tuples (Tom Lane)
1606      </para>
1607
1608      <para>
1609       These bugs could result in index corruption after reindexing a system
1610       catalog.  They are not believed to affect user indexes.
1611      </para>
1612     </listitem>
1613
1614     <listitem>
1615      <para>
1616       Fix multiple bugs in GiST index page split processing (Heikki
1617       Linnakangas)
1618      </para>
1619
1620      <para>
1621       The probability of occurrence was low, but these could lead to index
1622       corruption.
1623      </para>
1624     </listitem>
1625
1626     <listitem>
1627      <para>
1628       Fix possible buffer overrun in <function>tsvector_concat()</>
1629       (Tom Lane)
1630      </para>
1631
1632      <para>
1633       The function could underestimate the amount of memory needed for its
1634       result, leading to server crashes.
1635      </para>
1636     </listitem>
1637
1638     <listitem>
1639      <para>
1640       Fix crash in <function>xml_recv</> when processing a
1641       <quote>standalone</> parameter (Tom Lane)
1642      </para>
1643     </listitem>
1644
1645     <listitem>
1646      <para>
1647       Avoid possibly accessing off the end of memory in <command>ANALYZE</>
1648       and in SJIS-2004 encoding conversion (Noah Misch)
1649      </para>
1650
1651      <para>
1652       This fixes some very-low-probability server crash scenarios.
1653      </para>
1654     </listitem>
1655
1656     <listitem>
1657      <para>
1658       Fix race condition in relcache init file invalidation (Tom Lane)
1659      </para>
1660
1661      <para>
1662       There was a window wherein a new backend process could read a stale init
1663       file but miss the inval messages that would tell it the data is stale.
1664       The result would be bizarre failures in catalog accesses, typically
1665       <quote>could not read block 0 in file ...</> later during startup.
1666      </para>
1667     </listitem>
1668
1669     <listitem>
1670      <para>
1671       Fix memory leak at end of a GiST index scan (Tom Lane)
1672      </para>
1673
1674      <para>
1675       Commands that perform many separate GiST index scans, such as
1676       verification of a new GiST-based exclusion constraint on a table
1677       already containing many rows, could transiently require large amounts of
1678       memory due to this leak.
1679      </para>
1680     </listitem>
1681
1682     <listitem>
1683      <para>
1684       Fix performance problem when constructing a large, lossy bitmap
1685       (Tom Lane)
1686      </para>
1687     </listitem>
1688
1689     <listitem>
1690      <para>
1691       Fix array- and path-creating functions to ensure padding bytes are
1692       zeroes (Tom Lane)
1693      </para>
1694
1695      <para>
1696       This avoids some situations where the planner will think that
1697       semantically-equal constants are not equal, resulting in poor
1698       optimization.
1699      </para>
1700     </listitem>
1701
1702     <listitem>
1703      <para>
1704       Work around gcc 4.6.0 bug that breaks WAL replay (Tom Lane)
1705      </para>
1706
1707      <para>
1708       This could lead to loss of committed transactions after a server crash.
1709      </para>
1710     </listitem>
1711
1712     <listitem>
1713      <para>
1714       Fix dump bug for <literal>VALUES</> in a view (Tom Lane)
1715      </para>
1716     </listitem>
1717
1718     <listitem>
1719      <para>
1720       Disallow <literal>SELECT FOR UPDATE/SHARE</> on sequences (Tom Lane)
1721      </para>
1722
1723      <para>
1724       This operation doesn't work as expected and can lead to failures.
1725      </para>
1726     </listitem>
1727
1728     <listitem>
1729      <para>
1730       Defend against integer overflow when computing size of a hash table (Tom
1731       Lane)
1732      </para>
1733     </listitem>
1734
1735     <listitem>
1736      <para>
1737       Fix cases where <command>CLUSTER</> might attempt to access
1738       already-removed TOAST data (Tom Lane)
1739      </para>
1740     </listitem>
1741
1742     <listitem>
1743      <para>
1744       Fix portability bugs in use of credentials control messages for
1745       <quote>peer</> authentication (Tom Lane)
1746      </para>
1747     </listitem>
1748
1749     <listitem>
1750      <para>
1751       Fix SSPI login when multiple roundtrips are required (Ahmed Shinwari,
1752       Magnus Hagander)
1753      </para>
1754
1755      <para>
1756       The typical symptom of this problem was <quote>The function requested is
1757       not supported</> errors during SSPI login.
1758      </para>
1759     </listitem>
1760
1761     <listitem>
1762      <para>
1763       Fix typo in <function>pg_srand48</> seed initialization (Andres Freund)
1764      </para>
1765
1766      <para>
1767       This led to failure to use all bits of the provided seed.  This function
1768       is not used on most platforms (only those without <function>srandom</>),
1769       and the potential security exposure from a less-random-than-expected
1770       seed seems minimal in any case.
1771      </para>
1772     </listitem>
1773
1774     <listitem>
1775      <para>
1776       Avoid integer overflow when the sum of <literal>LIMIT</> and
1777       <literal>OFFSET</> values exceeds 2^63 (Heikki Linnakangas)
1778      </para>
1779     </listitem>
1780
1781     <listitem>
1782      <para>
1783       Add overflow checks to <type>int4</> and <type>int8</> versions of
1784       <function>generate_series()</> (Robert Haas)
1785      </para>
1786     </listitem>
1787
1788     <listitem>
1789      <para>
1790       Fix trailing-zero removal in <function>to_char()</> (Marti Raudsepp)
1791      </para>
1792
1793      <para>
1794       In a format with <literal>FM</> and no digit positions
1795       after the decimal point, zeroes to the left of the decimal point could
1796       be removed incorrectly.
1797      </para>
1798     </listitem>
1799
1800     <listitem>
1801      <para>
1802       Fix <function>pg_size_pretty()</> to avoid overflow for inputs close to
1803       2^63 (Tom Lane)
1804      </para>
1805     </listitem>
1806
1807     <listitem>
1808      <para>
1809       In <application>pg_ctl</>, support silent mode for service registrations
1810       on Windows (MauMau)
1811      </para>
1812     </listitem>
1813
1814     <listitem>
1815      <para>
1816       Fix <application>psql</>'s counting of script file line numbers during
1817       <literal>COPY</> from a different file (Tom Lane)
1818      </para>
1819     </listitem>
1820
1821     <listitem>
1822      <para>
1823       Fix <application>pg_restore</>'s direct-to-database mode for
1824       <varname>standard_conforming_strings</> (Tom Lane)
1825      </para>
1826
1827      <para>
1828       <application>pg_restore</> could emit incorrect commands when restoring
1829       directly to a database server from an archive file that had been made
1830       with <varname>standard_conforming_strings</> set to <literal>on</>.
1831      </para>
1832     </listitem>
1833
1834     <listitem>
1835      <para>
1836       Fix write-past-buffer-end and memory leak in <application>libpq</>'s
1837       LDAP service lookup code (Albe Laurenz)
1838      </para>
1839     </listitem>
1840
1841     <listitem>
1842      <para>
1843       In <application>libpq</>, avoid failures when using nonblocking I/O
1844       and an SSL connection (Martin Pihlak, Tom Lane)
1845      </para>
1846     </listitem>
1847
1848     <listitem>
1849      <para>
1850       Improve libpq's handling of failures during connection startup
1851       (Tom Lane)
1852      </para>
1853
1854      <para>
1855       In particular, the response to a server report of <function>fork()</>
1856       failure during SSL connection startup is now saner.
1857      </para>
1858     </listitem>
1859
1860     <listitem>
1861      <para>
1862       Improve <application>libpq</>'s error reporting for SSL failures (Tom
1863       Lane)
1864      </para>
1865     </listitem>
1866
1867     <listitem>
1868      <para>
1869       Make <application>ecpglib</> write <type>double</> values with 15 digits
1870       precision (Akira Kurosawa)
1871      </para>
1872     </listitem>
1873
1874     <listitem>
1875      <para>
1876       In <application>ecpglib</>, be sure <literal>LC_NUMERIC</> setting is
1877       restored after an error (Michael Meskes)
1878      </para>
1879     </listitem>
1880
1881     <listitem>
1882      <para>
1883       Apply upstream fix for blowfish signed-character bug (CVE-2011-2483)
1884       (Tom Lane)
1885      </para>
1886
1887      <para>
1888       <filename>contrib/pg_crypto</>'s blowfish encryption code could give
1889       wrong results on platforms where char is signed (which is most),
1890       leading to encrypted passwords being weaker than they should be.
1891      </para>
1892     </listitem>
1893
1894     <listitem>
1895      <para>
1896       Fix memory leak in <filename>contrib/seg</> (Heikki Linnakangas)
1897      </para>
1898     </listitem>
1899
1900     <listitem>
1901      <para>
1902       Fix <function>pgstatindex()</> to give consistent results for empty
1903       indexes (Tom Lane)
1904      </para>
1905     </listitem>
1906
1907     <listitem>
1908      <para>
1909       Allow building with perl 5.14 (Alex Hunsaker)
1910      </para>
1911     </listitem>
1912
1913     <listitem>
1914      <para>
1915       Update configure script's method for probing existence of system
1916       functions (Tom Lane)
1917      </para>
1918
1919      <para>
1920       The version of autoconf we used in 8.3 and 8.2 could be fooled by
1921       compilers that perform link-time optimization.
1922      </para>
1923     </listitem>
1924
1925     <listitem>
1926      <para>
1927       Fix assorted issues with build and install file paths containing spaces
1928       (Tom Lane)
1929      </para>
1930     </listitem>
1931
1932     <listitem>
1933      <para>
1934       Update time zone data files to <application>tzdata</> release 2011i
1935       for DST law changes in Canada, Egypt, Russia, Samoa, and South Sudan.
1936      </para>
1937     </listitem>
1938
1939    </itemizedlist>
1940
1941   </sect2>
1942  </sect1>
1943
1944  <sect1 id="release-8-3-15">
1945   <title>Release 8.3.15</title>
1946
1947   <note>
1948   <title>Release Date</title>
1949   <simpara>2011-04-18</simpara>
1950   </note>
1951
1952   <para>
1953    This release contains a variety of fixes from 8.3.14.
1954    For information about new features in the 8.3 major release, see
1955    <xref linkend="release-8-3">.
1956   </para>
1957
1958   <sect2>
1959    <title>Migration to Version 8.3.15</title>
1960
1961    <para>
1962     A dump/restore is not required for those running 8.3.X.
1963     However, if you are upgrading from a version earlier than 8.3.8,
1964     see the release notes for 8.3.8.
1965    </para>
1966
1967   </sect2>
1968
1969   <sect2>
1970    <title>Changes</title>
1971
1972    <itemizedlist>
1973
1974     <listitem>
1975      <para>
1976       Disallow including a composite type in itself (Tom Lane)
1977      </para>
1978
1979      <para>
1980       This prevents scenarios wherein the server could recurse infinitely
1981       while processing the composite type.  While there are some possible
1982       uses for such a structure, they don't seem compelling enough to
1983       justify the effort required to make sure it always works safely.
1984      </para>
1985     </listitem>
1986
1987     <listitem>
1988      <para>
1989       Avoid potential deadlock during catalog cache initialization
1990       (Nikhil Sontakke)
1991      </para>
1992
1993      <para>
1994       In some cases the cache loading code would acquire share lock on a
1995       system index before locking the index's catalog.  This could deadlock
1996       against processes trying to acquire exclusive locks in the other,
1997       more standard order.
1998      </para>
1999     </listitem>
2000
2001     <listitem>
2002      <para>
2003       Fix dangling-pointer problem in <literal>BEFORE ROW UPDATE</> trigger
2004       handling when there was a concurrent update to the target tuple
2005       (Tom Lane)
2006      </para>
2007
2008      <para>
2009       This bug has been observed to result in intermittent <quote>cannot
2010       extract system attribute from virtual tuple</> failures while trying to
2011       do <literal>UPDATE RETURNING ctid</>.  There is a very small probability
2012       of more serious errors, such as generating incorrect index entries for
2013       the updated tuple.
2014      </para>
2015     </listitem>
2016
2017     <listitem>
2018      <para>
2019       Disallow <command>DROP TABLE</> when there are pending deferred trigger
2020       events for the table (Tom Lane)
2021      </para>
2022
2023      <para>
2024       Formerly the <command>DROP</> would go through, leading to
2025       <quote>could not open relation with OID nnn</> errors when the
2026       triggers were eventually fired.
2027      </para>
2028     </listitem>
2029
2030     <listitem>
2031      <para>
2032       Fix PL/Python memory leak involving array slices (Daniel Popowich)
2033      </para>
2034     </listitem>
2035
2036     <listitem>
2037      <para>
2038       Fix <application>pg_restore</> to cope with long lines (over 1KB) in
2039       TOC files (Tom Lane)
2040      </para>
2041     </listitem>
2042
2043     <listitem>
2044      <para>
2045       Put in more safeguards against crashing due to division-by-zero
2046       with overly enthusiastic compiler optimization (Aurelien Jarno)
2047      </para>
2048     </listitem>
2049
2050     <listitem>
2051      <para>
2052       Support use of dlopen() in FreeBSD and OpenBSD on MIPS (Tom Lane)
2053      </para>
2054
2055      <para>
2056       There was a hard-wired assumption that this system function was not
2057       available on MIPS hardware on these systems.  Use a compile-time test
2058       instead, since more recent versions have it.
2059      </para>
2060     </listitem>
2061
2062     <listitem>
2063      <para>
2064       Fix compilation failures on HP-UX (Heikki Linnakangas)
2065      </para>
2066     </listitem>
2067
2068     <listitem>
2069      <para>
2070       Fix version-incompatibility problem with <application>libintl</> on
2071       Windows (Hiroshi Inoue)
2072      </para>
2073     </listitem>
2074
2075     <listitem>
2076      <para>
2077       Fix usage of <application>xcopy</> in Windows build scripts to
2078       work correctly under Windows 7 (Andrew Dunstan)
2079      </para>
2080
2081      <para>
2082       This affects the build scripts only, not installation or usage.
2083      </para>
2084     </listitem>
2085
2086     <listitem>
2087      <para>
2088       Fix path separator used by <application>pg_regress</> on Cygwin
2089       (Andrew Dunstan)
2090      </para>
2091     </listitem>
2092
2093     <listitem>
2094      <para>
2095       Update time zone data files to <application>tzdata</> release 2011f
2096       for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa,
2097       and Turkey; also historical corrections for South Australia, Alaska,
2098       and Hawaii.
2099      </para>
2100     </listitem>
2101
2102    </itemizedlist>
2103
2104   </sect2>
2105  </sect1>
2106
2107  <sect1 id="release-8-3-14">
2108   <title>Release 8.3.14</title>
2109
2110   <note>
2111   <title>Release Date</title>
2112   <simpara>2011-01-31</simpara>
2113   </note>
2114
2115   <para>
2116    This release contains a variety of fixes from 8.3.13.
2117    For information about new features in the 8.3 major release, see
2118    <xref linkend="release-8-3">.
2119   </para>
2120
2121   <sect2>
2122    <title>Migration to Version 8.3.14</title>
2123
2124    <para>
2125     A dump/restore is not required for those running 8.3.X.
2126     However, if you are upgrading from a version earlier than 8.3.8,
2127     see the release notes for 8.3.8.
2128    </para>
2129
2130   </sect2>
2131
2132   <sect2>
2133    <title>Changes</title>
2134
2135    <itemizedlist>
2136
2137     <listitem>
2138      <para>
2139       Avoid failures when <command>EXPLAIN</> tries to display a simple-form
2140       <literal>CASE</> expression (Tom Lane)
2141      </para>
2142
2143      <para>
2144       If the <literal>CASE</>'s test expression was a constant, the planner
2145       could simplify the <literal>CASE</> into a form that confused the
2146       expression-display code, resulting in <quote>unexpected CASE WHEN
2147       clause</> errors.
2148      </para>
2149     </listitem>
2150
2151     <listitem>
2152      <para>
2153       Fix assignment to an array slice that is before the existing range
2154       of subscripts (Tom Lane)
2155      </para>
2156
2157      <para>
2158       If there was a gap between the newly added subscripts and the first
2159       pre-existing subscript, the code miscalculated how many entries needed
2160       to be copied from the old array's null bitmap, potentially leading to
2161       data corruption or crash.
2162      </para>
2163     </listitem>
2164
2165     <listitem>
2166      <para>
2167       Avoid unexpected conversion overflow in planner for very distant date
2168       values (Tom Lane)
2169      </para>
2170
2171      <para>
2172       The <type>date</> type supports a wider range of dates than can be
2173       represented by the <type>timestamp</> types, but the planner assumed it
2174       could always convert a date to timestamp with impunity.
2175      </para>
2176     </listitem>
2177
2178     <listitem>
2179      <para>
2180       Fix <application>pg_restore</>'s text output for large objects (BLOBs)
2181       when <varname>standard_conforming_strings</> is on (Tom Lane)
2182      </para>
2183
2184      <para>
2185       Although restoring directly to a database worked correctly, string
2186       escaping was incorrect if <application>pg_restore</> was asked for
2187       SQL text output and <varname>standard_conforming_strings</> had been
2188       enabled in the source database.
2189      </para>
2190     </listitem>
2191
2192     <listitem>
2193      <para>
2194       Fix erroneous parsing of <type>tsquery</> values containing
2195       <literal>... &amp; !(subexpression) | ...</literal> (Tom Lane)
2196      </para>
2197
2198      <para>
2199       Queries containing this combination of operators were not executed
2200       correctly.  The same error existed in <filename>contrib/intarray</>'s
2201       <type>query_int</> type and <filename>contrib/ltree</>'s
2202       <type>ltxtquery</> type.
2203      </para>
2204     </listitem>
2205
2206     <listitem>
2207      <para>
2208       Fix buffer overrun in <filename>contrib/intarray</>'s input function
2209       for the <type>query_int</> type (Apple)
2210      </para>
2211
2212      <para>
2213       This bug is a security risk since the function's return address could
2214       be overwritten.  Thanks to Apple Inc's security team for reporting this
2215       issue and supplying the fix.  (CVE-2010-4015)
2216      </para>
2217     </listitem>
2218
2219     <listitem>
2220      <para>
2221       Fix bug in <filename>contrib/seg</>'s GiST picksplit algorithm
2222       (Alexander Korotkov)
2223      </para>
2224
2225      <para>
2226       This could result in considerable inefficiency, though not actually
2227       incorrect answers, in a GiST index on a <type>seg</> column.
2228       If you have such an index, consider <command>REINDEX</>ing it after
2229       installing this update.  (This is identical to the bug that was fixed in
2230       <filename>contrib/cube</> in the previous update.)
2231      </para>
2232     </listitem>
2233
2234    </itemizedlist>
2235
2236   </sect2>
2237  </sect1>
2238
2239  <sect1 id="release-8-3-13">
2240   <title>Release 8.3.13</title>
2241
2242   <note>
2243   <title>Release Date</title>
2244   <simpara>2010-12-16</simpara>
2245   </note>
2246
2247   <para>
2248    This release contains a variety of fixes from 8.3.12.
2249    For information about new features in the 8.3 major release, see
2250    <xref linkend="release-8-3">.
2251   </para>
2252
2253   <sect2>
2254    <title>Migration to Version 8.3.13</title>
2255
2256    <para>
2257     A dump/restore is not required for those running 8.3.X.
2258     However, if you are upgrading from a version earlier than 8.3.8,
2259     see the release notes for 8.3.8.
2260    </para>
2261
2262   </sect2>
2263
2264   <sect2>
2265    <title>Changes</title>
2266
2267    <itemizedlist>
2268
2269     <listitem>
2270      <para>
2271       Force the default
2272       <link linkend="guc-wal-sync-method"><varname>wal_sync_method</></link>
2273       to be <literal>fdatasync</> on Linux (Tom Lane, Marti Raudsepp)
2274      </para>
2275
2276      <para>
2277       The default on Linux has actually been <literal>fdatasync</> for many
2278       years, but recent kernel changes caused <productname>PostgreSQL</> to
2279       choose <literal>open_datasync</> instead.  This choice did not result
2280       in any performance improvement, and caused outright failures on
2281       certain filesystems, notably <literal>ext4</> with the
2282       <literal>data=journal</> mount option.
2283      </para>
2284     </listitem>
2285
2286     <listitem>
2287      <para>
2288       Fix assorted bugs in WAL replay logic for GIN indexes (Tom Lane)
2289      </para>
2290
2291      <para>
2292       This could result in <quote>bad buffer id: 0</> failures or
2293       corruption of index contents during replication.
2294      </para>
2295     </listitem>
2296
2297     <listitem>
2298      <para>
2299       Fix recovery from base backup when the starting checkpoint WAL record
2300       is not in the same WAL segment as its redo point (Jeff Davis)
2301      </para>
2302     </listitem>
2303
2304     <listitem>
2305      <para>
2306       Fix persistent slowdown of autovacuum workers when multiple workers
2307       remain active for a long time (Tom Lane)
2308      </para>
2309
2310      <para>
2311       The effective <varname>vacuum_cost_limit</> for an autovacuum worker
2312       could drop to nearly zero if it processed enough tables, causing it
2313       to run extremely slowly.
2314      </para>
2315     </listitem>
2316
2317     <listitem>
2318      <para>
2319       Add support for detecting register-stack overrun on <literal>IA64</>
2320       (Tom Lane)
2321      </para>
2322
2323      <para>
2324       The <literal>IA64</> architecture has two hardware stacks.  Full
2325       prevention of stack-overrun failures requires checking both.
2326      </para>
2327     </listitem>
2328
2329     <listitem>
2330      <para>
2331       Add a check for stack overflow in <function>copyObject()</> (Tom Lane)
2332      </para>
2333
2334      <para>
2335       Certain code paths could crash due to stack overflow given a
2336       sufficiently complex query.
2337      </para>
2338     </listitem>
2339
2340     <listitem>
2341      <para>
2342       Fix detection of page splits in temporary GiST indexes (Heikki
2343       Linnakangas)
2344      </para>
2345
2346      <para>
2347       It is possible to have a <quote>concurrent</> page split in a
2348       temporary index, if for example there is an open cursor scanning the
2349       index when an insertion is done.  GiST failed to detect this case and
2350       hence could deliver wrong results when execution of the cursor
2351       continued.
2352      </para>
2353     </listitem>
2354
2355     <listitem>
2356      <para>
2357       Avoid memory leakage while <command>ANALYZE</>'ing complex index
2358       expressions (Tom Lane)
2359      </para>
2360     </listitem>
2361
2362     <listitem>
2363      <para>
2364       Ensure an index that uses a whole-row Var still depends on its table
2365       (Tom Lane)
2366      </para>
2367
2368      <para>
2369       An index declared like <literal>create index i on t (foo(t.*))</>
2370       would not automatically get dropped when its table was dropped.
2371      </para>
2372     </listitem>
2373
2374     <listitem>
2375      <para>
2376       Do not <quote>inline</> a SQL function with multiple <literal>OUT</>
2377       parameters (Tom Lane)
2378      </para>
2379
2380      <para>
2381       This avoids a possible crash due to loss of information about the
2382       expected result rowtype.
2383      </para>
2384     </listitem>
2385
2386     <listitem>
2387      <para>
2388       Behave correctly if <literal>ORDER BY</>, <literal>LIMIT</>,
2389       <literal>FOR UPDATE</>, or <literal>WITH</> is attached to the
2390       <literal>VALUES</> part of <literal>INSERT ... VALUES</> (Tom Lane)
2391      </para>
2392     </listitem>
2393
2394     <listitem>
2395      <para>
2396       Fix constant-folding of <literal>COALESCE()</> expressions (Tom Lane)
2397      </para>
2398
2399      <para>
2400       The planner would sometimes attempt to evaluate sub-expressions that
2401       in fact could never be reached, possibly leading to unexpected errors.
2402      </para>
2403     </listitem>
2404
2405     <listitem>
2406      <para>
2407       Fix postmaster crash when connection acceptance
2408       (<function>accept()</> or one of the calls made immediately after it)
2409       fails, and the postmaster was compiled with GSSAPI support (Alexander
2410       Chernikov)
2411      </para>
2412     </listitem>
2413
2414     <listitem>
2415      <para>
2416       Fix missed unlink of temporary files when <varname>log_temp_files</>
2417       is active (Tom Lane)
2418      </para>
2419
2420      <para>
2421       If an error occurred while attempting to emit the log message, the
2422       unlink was not done, resulting in accumulation of temp files.
2423      </para>
2424     </listitem>
2425
2426     <listitem>
2427      <para>
2428       Add print functionality for <structname>InhRelation</> nodes (Tom Lane)
2429      </para>
2430
2431      <para>
2432       This avoids a failure when <varname>debug_print_parse</> is enabled
2433       and certain types of query are executed.
2434      </para>
2435     </listitem>
2436
2437     <listitem>
2438      <para>
2439       Fix incorrect calculation of distance from a point to a horizontal
2440       line segment (Tom Lane)
2441      </para>
2442
2443      <para>
2444       This bug affected several different geometric distance-measurement
2445       operators.
2446      </para>
2447     </listitem>
2448
2449     <listitem>
2450      <para>
2451       Fix <application>PL/pgSQL</>'s handling of <quote>simple</>
2452       expressions to not fail in recursion or error-recovery cases (Tom Lane)
2453      </para>
2454     </listitem>
2455
2456     <listitem>
2457      <para>
2458       Fix <application>PL/Python</>'s handling of set-returning functions
2459       (Jan Urbanski)
2460      </para>
2461
2462      <para>
2463       Attempts to call SPI functions within the iterator generating a set
2464       result would fail.
2465      </para>
2466     </listitem>
2467
2468     <listitem>
2469      <para>
2470       Fix bug in <filename>contrib/cube</>'s GiST picksplit algorithm
2471       (Alexander Korotkov)
2472      </para>
2473
2474      <para>
2475       This could result in considerable inefficiency, though not actually
2476       incorrect answers, in a GiST index on a <type>cube</> column.
2477       If you have such an index, consider <command>REINDEX</>ing it after
2478       installing this update.
2479      </para>
2480     </listitem>
2481
2482     <listitem>
2483      <para>
2484       Don't emit <quote>identifier will be truncated</> notices in
2485       <filename>contrib/dblink</> except when creating new connections
2486       (Itagaki Takahiro)
2487      </para>
2488     </listitem>
2489
2490     <listitem>
2491      <para>
2492       Fix potential coredump on missing public key in
2493       <filename>contrib/pgcrypto</> (Marti Raudsepp)
2494      </para>
2495     </listitem>
2496
2497     <listitem>
2498      <para>
2499       Fix memory leak in <filename>contrib/xml2</>'s XPath query functions
2500       (Tom Lane)
2501      </para>
2502     </listitem>
2503
2504     <listitem>
2505      <para>
2506       Update time zone data files to <application>tzdata</> release 2010o
2507       for DST law changes in Fiji and Samoa;
2508       also historical corrections for Hong Kong.
2509      </para>
2510     </listitem>
2511
2512    </itemizedlist>
2513
2514   </sect2>
2515  </sect1>
2516
2517  <sect1 id="release-8-3-12">
2518   <title>Release 8.3.12</title>
2519
2520   <note>
2521   <title>Release Date</title>
2522   <simpara>2010-10-04</simpara>
2523   </note>
2524
2525   <para>
2526    This release contains a variety of fixes from 8.3.11.
2527    For information about new features in the 8.3 major release, see
2528    <xref linkend="release-8-3">.
2529   </para>
2530
2531   <sect2>
2532    <title>Migration to Version 8.3.12</title>
2533
2534    <para>
2535     A dump/restore is not required for those running 8.3.X.
2536     However, if you are upgrading from a version earlier than 8.3.8,
2537     see the release notes for 8.3.8.
2538    </para>
2539
2540   </sect2>
2541
2542   <sect2>
2543    <title>Changes</title>
2544
2545    <itemizedlist>
2546
2547     <listitem>
2548      <para>
2549       Use a separate interpreter for each calling SQL userid in PL/Perl and
2550       PL/Tcl (Tom Lane)
2551      </para>
2552
2553      <para>
2554       This change prevents security problems that can be caused by subverting
2555       Perl or Tcl code that will be executed later in the same session under
2556       another SQL user identity (for example, within a <literal>SECURITY
2557       DEFINER</> function).  Most scripting languages offer numerous ways that
2558       that might be done, such as redefining standard functions or operators
2559       called by the target function.  Without this change, any SQL user with
2560       Perl or Tcl language usage rights can do essentially anything with the
2561       SQL privileges of the target function's owner.
2562      </para>
2563
2564      <para>
2565       The cost of this change is that intentional communication among Perl
2566       and Tcl functions becomes more difficult.  To provide an escape hatch,
2567       PL/PerlU and PL/TclU functions continue to use only one interpreter
2568       per session.  This is not considered a security issue since all such
2569       functions execute at the trust level of a database superuser already.
2570      </para>
2571
2572      <para>
2573       It is likely that third-party procedural languages that claim to offer
2574       trusted execution have similar security issues.  We advise contacting
2575       the authors of any PL you are depending on for security-critical
2576       purposes.
2577      </para>
2578
2579      <para>
2580       Our thanks to Tim Bunce for pointing out this issue (CVE-2010-3433).
2581      </para>
2582     </listitem>
2583
2584     <listitem>
2585      <para>
2586       Prevent possible crashes in <function>pg_get_expr()</> by disallowing
2587       it from being called with an argument that is not one of the system
2588       catalog columns it's intended to be used with
2589       (Heikki Linnakangas, Tom Lane)
2590      </para>
2591     </listitem>
2592
2593     <listitem>
2594      <para>
2595       Treat exit code 128 (<literal>ERROR_WAIT_NO_CHILDREN</>) as non-fatal on
2596       Windows (Magnus Hagander)
2597      </para>
2598
2599      <para>
2600       Under high load, Windows processes will sometimes fail at startup with
2601       this error code.  Formerly the postmaster treated this as a panic
2602       condition and restarted the whole database, but that seems to be
2603       an overreaction.
2604      </para>
2605     </listitem>
2606
2607     <listitem>
2608      <para>
2609       Fix incorrect usage of non-strict OR joinclauses in Append indexscans
2610       (Tom Lane)
2611      </para>
2612
2613      <para>
2614       This is a back-patch of an 8.4 fix that was missed in the 8.3 branch.
2615       This corrects an error introduced in 8.3.8 that could cause incorrect
2616       results for outer joins when the inner relation is an inheritance tree
2617       or <literal>UNION ALL</> subquery.
2618      </para>
2619     </listitem>
2620
2621     <listitem>
2622      <para>
2623       Fix possible duplicate scans of <literal>UNION ALL</> member relations
2624       (Tom Lane)
2625      </para>
2626     </listitem>
2627
2628     <listitem>
2629      <para>
2630       Fix <quote>cannot handle unplanned sub-select</quote> error (Tom Lane)
2631      </para>
2632
2633      <para>
2634       This occurred when a sub-select contains a join alias reference that
2635       expands into an expression containing another sub-select.
2636      </para>
2637     </listitem>
2638
2639     <listitem>
2640      <para>
2641       Fix failure to mark cached plans as transient (Tom Lane)
2642      </para>
2643
2644      <para>
2645       If a plan is prepared while <command>CREATE INDEX CONCURRENTLY</> is
2646       in progress for one of the referenced tables, it is supposed to be
2647       re-planned once the index is ready for use.  This was not happening
2648       reliably.
2649      </para>
2650     </listitem>
2651
2652     <listitem>
2653      <para>
2654       Reduce PANIC to ERROR in some occasionally-reported btree failure cases,
2655       and provide additional detail in the resulting error messages
2656       (Tom Lane)
2657      </para>
2658
2659      <para>
2660       This should improve the system's robustness with corrupted indexes.
2661      </para>
2662     </listitem>
2663
2664     <listitem>
2665      <para>
2666       Prevent show_session_authorization() from crashing within autovacuum
2667       processes (Tom Lane)
2668      </para>
2669     </listitem>
2670
2671     <listitem>
2672      <para>
2673       Defend against functions returning setof record where not all the
2674       returned rows are actually of the same rowtype (Tom Lane)
2675      </para>
2676     </listitem>
2677
2678     <listitem>
2679      <para>
2680       Fix possible failure when hashing a pass-by-reference function result
2681       (Tao Ma, Tom Lane)
2682      </para>
2683     </listitem>
2684
2685     <listitem>
2686      <para>
2687       Improve merge join's handling of NULLs in the join columns (Tom Lane)
2688      </para>
2689
2690      <para>
2691       A merge join can now stop entirely upon reaching the first NULL,
2692       if the sort order is such that NULLs sort high.
2693      </para>
2694     </listitem>
2695
2696     <listitem>
2697      <para>
2698       Take care to fsync the contents of lockfiles (both
2699       <filename>postmaster.pid</> and the socket lockfile) while writing them
2700       (Tom Lane)
2701      </para>
2702
2703      <para>
2704       This omission could result in corrupted lockfile contents if the
2705       machine crashes shortly after postmaster start.  That could in turn
2706       prevent subsequent attempts to start the postmaster from succeeding,
2707       until the lockfile is manually removed.
2708      </para>
2709     </listitem>
2710
2711     <listitem>
2712      <para>
2713       Avoid recursion while assigning XIDs to heavily-nested
2714       subtransactions (Andres Freund, Robert Haas)
2715      </para>
2716
2717      <para>
2718       The original coding could result in a crash if there was limited
2719       stack space.
2720      </para>
2721     </listitem>
2722
2723     <listitem>
2724      <para>
2725       Avoid holding open old WAL segments in the walwriter process
2726       (Magnus Hagander, Heikki Linnakangas)
2727      </para>
2728
2729      <para>
2730       The previous coding would prevent removal of no-longer-needed segments.
2731      </para>
2732     </listitem>
2733
2734     <listitem>
2735      <para>
2736       Fix <varname>log_line_prefix</>'s <literal>%i</> escape,
2737       which could produce junk early in backend startup (Tom Lane)
2738      </para>
2739     </listitem>
2740
2741     <listitem>
2742      <para>
2743       Fix possible data corruption in <command>ALTER TABLE ... SET
2744       TABLESPACE</> when archiving is enabled (Jeff Davis)
2745      </para>
2746     </listitem>
2747
2748     <listitem>
2749      <para>
2750       Allow <command>CREATE DATABASE</> and <command>ALTER DATABASE ... SET
2751       TABLESPACE</> to be interrupted by query-cancel (Guillaume Lelarge)
2752      </para>
2753     </listitem>
2754
2755     <listitem>
2756      <para>
2757       Fix <command>REASSIGN OWNED</> to handle operator classes and families
2758       (Asko Tiidumaa)
2759      </para>
2760     </listitem>
2761
2762     <listitem>
2763      <para>
2764       Fix possible core dump when comparing two empty <type>tsquery</> values
2765       (Tom Lane)
2766      </para>
2767     </listitem>
2768
2769     <listitem>
2770      <para>
2771       Fix <literal>LIKE</>'s handling of patterns containing <literal>%</>
2772       followed by <literal>_</> (Tom Lane)
2773      </para>
2774
2775      <para>
2776       We've fixed this before, but there were still some incorrectly-handled
2777       cases.
2778      </para>
2779     </listitem>
2780
2781     <listitem>
2782      <para>
2783       In PL/Python, defend against null pointer results from
2784       <function>PyCObject_AsVoidPtr</> and <function>PyCObject_FromVoidPtr</>
2785       (Peter Eisentraut)
2786      </para>
2787     </listitem>
2788
2789     <listitem>
2790      <para>
2791       Make psql recognize <command>DISCARD ALL</> as a command that should
2792       not be encased in a transaction block in autocommit-off mode
2793       (Itagaki Takahiro)
2794      </para>
2795     </listitem>
2796
2797     <listitem>
2798      <para>
2799       Fix <application>ecpg</> to process data from <literal>RETURNING</>
2800       clauses correctly (Michael Meskes)
2801      </para>
2802     </listitem>
2803
2804     <listitem>
2805      <para>
2806       Improve <filename>contrib/dblink</>'s handling of tables containing
2807       dropped columns (Tom Lane)
2808      </para>
2809     </listitem>
2810
2811     <listitem>
2812      <para>
2813       Fix connection leak after <quote>duplicate connection name</quote>
2814       errors in <filename>contrib/dblink</> (Itagaki Takahiro)
2815      </para>
2816     </listitem>
2817
2818     <listitem>
2819      <para>
2820       Fix <filename>contrib/dblink</> to handle connection names longer than
2821       62 bytes correctly (Itagaki Takahiro)
2822      </para>
2823     </listitem>
2824
2825     <listitem>
2826      <para>
2827       Add <function>hstore(text, text)</>
2828       function to <filename>contrib/hstore</> (Robert Haas)
2829      </para>
2830
2831      <para>
2832       This function is the recommended substitute for the now-deprecated
2833       <literal>=&gt;</> operator.  It was back-patched so that future-proofed
2834       code can be used with older server versions.  Note that the patch will
2835       be effective only after <filename>contrib/hstore</> is installed or
2836       reinstalled in a particular database.  Users might prefer to execute
2837       the <command>CREATE FUNCTION</> command by hand, instead.
2838      </para>
2839     </listitem>
2840
2841     <listitem>
2842      <para>
2843       Update build infrastructure and documentation to reflect the source code
2844       repository's move from CVS to Git (Magnus Hagander and others)
2845      </para>
2846     </listitem>
2847
2848     <listitem>
2849      <para>
2850       Update time zone data files to <application>tzdata</> release 2010l
2851       for DST law changes in Egypt and Palestine; also historical corrections
2852       for Finland.
2853      </para>
2854
2855      <para>
2856       This change also adds new names for two Micronesian timezones:
2857       Pacific/Chuuk is now preferred over Pacific/Truk (and the preferred
2858       abbreviation is CHUT not TRUT) and Pacific/Pohnpei is preferred over
2859       Pacific/Ponape.
2860      </para>
2861     </listitem>
2862
2863     <listitem>
2864      <para>
2865       Make Windows' <quote>N. Central Asia Standard Time</> timezone map to
2866       Asia/Novosibirsk, not Asia/Almaty (Magnus Hagander)
2867      </para>
2868
2869      <para>
2870       Microsoft changed the DST behavior of this zone in the timezone update
2871       from KB976098. Asia/Novosibirsk is a better match to its new behavior.
2872      </para>
2873     </listitem>
2874
2875    </itemizedlist>
2876
2877   </sect2>
2878  </sect1>
2879
2880  <sect1 id="release-8-3-11">
2881   <title>Release 8.3.11</title>
2882
2883   <note>
2884   <title>Release Date</title>
2885   <simpara>2010-05-17</simpara>
2886   </note>
2887
2888   <para>
2889    This release contains a variety of fixes from 8.3.10.
2890    For information about new features in the 8.3 major release, see
2891    <xref linkend="release-8-3">.
2892   </para>
2893
2894   <sect2>
2895    <title>Migration to Version 8.3.11</title>
2896
2897    <para>
2898     A dump/restore is not required for those running 8.3.X.
2899     However, if you are upgrading from a version earlier than 8.3.8,
2900     see the release notes for 8.3.8.
2901    </para>
2902
2903   </sect2>
2904
2905   <sect2>
2906    <title>Changes</title>
2907
2908    <itemizedlist>
2909
2910     <listitem>
2911      <para>
2912       Enforce restrictions in <literal>plperl</> using an opmask applied to
2913       the whole interpreter, instead of using <filename>Safe.pm</>
2914       (Tim Bunce, Andrew Dunstan)
2915      </para>
2916
2917      <para>
2918       Recent developments have convinced us that <filename>Safe.pm</> is too
2919       insecure to rely on for making <literal>plperl</> trustable.  This
2920       change removes use of <filename>Safe.pm</> altogether, in favor of using
2921       a separate interpreter with an opcode mask that is always applied.
2922       Pleasant side effects of the change include that it is now possible to
2923       use Perl's <literal>strict</> pragma in a natural way in
2924       <literal>plperl</>, and that Perl's <literal>$a</> and <literal>$b</>
2925       variables work as expected in sort routines, and that function
2926       compilation is significantly faster.  (CVE-2010-1169)
2927      </para>
2928     </listitem>
2929
2930     <listitem>
2931      <para>
2932       Prevent PL/Tcl from executing untrustworthy code from
2933       <structname>pltcl_modules</> (Tom)
2934      </para>
2935
2936      <para>
2937       PL/Tcl's feature for autoloading Tcl code from a database table
2938       could be exploited for trojan-horse attacks, because there was no
2939       restriction on who could create or insert into that table.  This change
2940       disables the feature unless <structname>pltcl_modules</> is owned by a
2941       superuser.  (However, the permissions on the table are not checked, so
2942       installations that really need a less-than-secure modules table can
2943       still grant suitable privileges to trusted non-superusers.)  Also,
2944       prevent loading code into the unrestricted <quote>normal</> Tcl
2945       interpreter unless we are really going to execute a <literal>pltclu</>
2946       function.  (CVE-2010-1170)
2947      </para>
2948     </listitem>
2949
2950     <listitem>
2951      <para>
2952       Fix possible crash if a cache reset message is received during
2953       rebuild of a relcache entry (Heikki)
2954      </para>
2955
2956      <para>
2957       This error was introduced in 8.3.10 while fixing a related failure.
2958      </para>
2959     </listitem>
2960
2961     <listitem>
2962      <para>
2963       Apply per-function GUC settings while running the language validator
2964       for the function (Itagaki Takahiro)
2965      </para>
2966
2967      <para>
2968       This avoids failures if the function's code is invalid without the
2969       setting; an example is that SQL functions may not parse if the
2970       <varname>search_path</> is not correct.
2971      </para>
2972     </listitem>
2973
2974     <listitem>
2975      <para>
2976       Do not allow an unprivileged user to reset superuser-only parameter
2977       settings (Alvaro)
2978      </para>
2979
2980      <para>
2981       Previously, if an unprivileged user ran <literal>ALTER USER ... RESET
2982       ALL</> for himself, or <literal>ALTER DATABASE ... RESET ALL</> for
2983       a database he owns, this would remove all special parameter settings
2984       for the user or database, even ones that are only supposed to be
2985       changeable by a superuser.  Now, the <command>ALTER</> will only
2986       remove the parameters that the user has permission to change.
2987      </para>
2988     </listitem>
2989
2990     <listitem>
2991      <para>
2992       Avoid possible crash during backend shutdown if shutdown occurs
2993       when a <literal>CONTEXT</> addition would be made to log entries (Tom)
2994      </para>
2995
2996      <para>
2997       In some cases the context-printing function would fail because the
2998       current transaction had already been rolled back when it came time
2999       to print a log message.
3000      </para>
3001     </listitem>
3002
3003     <listitem>
3004      <para>
3005       Ensure the archiver process responds to changes in
3006       <varname>archive_command</> as soon as possible (Tom)
3007      </para>
3008     </listitem>
3009
3010     <listitem>
3011      <para>
3012       Update pl/perl's <filename>ppport.h</> for modern Perl versions
3013       (Andrew)
3014      </para>
3015     </listitem>
3016
3017     <listitem>
3018      <para>
3019       Fix assorted memory leaks in pl/python (Andreas Freund, Tom)
3020      </para>
3021     </listitem>
3022
3023     <listitem>
3024      <para>
3025       Prevent infinite recursion in <application>psql</> when expanding
3026       a variable that refers to itself (Tom)
3027      </para>
3028     </listitem>
3029
3030     <listitem>
3031      <para>
3032       Fix <application>psql</>'s <literal>\copy</> to not add spaces around
3033       a dot within <literal>\copy (select ...)</> (Tom)
3034      </para>
3035
3036      <para>
3037       Addition of spaces around the decimal point in a numeric literal would
3038       result in a syntax error.
3039      </para>
3040     </listitem>
3041
3042     <listitem>
3043      <para>
3044       Fix unnecessary <quote>GIN indexes do not support whole-index scans</>
3045       errors for unsatisfiable queries using <filename>contrib/intarray</>
3046       operators (Tom)
3047      </para>
3048     </listitem>
3049
3050     <listitem>
3051      <para>
3052       Ensure that <filename>contrib/pgstattuple</> functions respond to cancel
3053       interrupts promptly (Tatsuhito Kasahara)
3054      </para>
3055     </listitem>
3056
3057     <listitem>
3058      <para>
3059       Make server startup deal properly with the case that
3060       <function>shmget()</> returns <literal>EINVAL</> for an existing
3061       shared memory segment (Tom)
3062      </para>
3063
3064      <para>
3065       This behavior has been observed on BSD-derived kernels including OS X.
3066       It resulted in an entirely-misleading startup failure complaining that
3067       the shared memory request size was too large.
3068      </para>
3069     </listitem>
3070
3071     <listitem>
3072      <para>
3073       Avoid possible crashes in syslogger process on Windows (Heikki)
3074      </para>
3075     </listitem>
3076
3077     <listitem>
3078      <para>
3079       Deal more robustly with incomplete time zone information in the
3080       Windows registry (Magnus)
3081      </para>
3082     </listitem>
3083
3084     <listitem>
3085      <para>
3086       Update the set of known Windows time zone names (Magnus)
3087      </para>
3088     </listitem>
3089
3090     <listitem>
3091      <para>
3092       Update time zone data files to <application>tzdata</> release 2010j
3093       for DST law changes in Argentina, Australian Antarctic, Bangladesh,
3094       Mexico, Morocco, Pakistan, Palestine, Russia, Syria, Tunisia;
3095       also historical corrections for Taiwan.
3096      </para>
3097
3098      <para>
3099       Also, add <literal>PKST</> (Pakistan Summer Time) to the default set of
3100       timezone abbreviations.
3101      </para>
3102     </listitem>
3103
3104    </itemizedlist>
3105
3106   </sect2>
3107  </sect1>
3108
3109  <sect1 id="release-8-3-10">
3110   <title>Release 8.3.10</title>
3111
3112   <note>
3113   <title>Release Date</title>
3114   <simpara>2010-03-15</simpara>
3115   </note>
3116
3117   <para>
3118    This release contains a variety of fixes from 8.3.9.
3119    For information about new features in the 8.3 major release, see
3120    <xref linkend="release-8-3">.
3121   </para>
3122
3123   <sect2>
3124    <title>Migration to Version 8.3.10</title>
3125
3126    <para>
3127     A dump/restore is not required for those running 8.3.X.
3128     However, if you are upgrading from a version earlier than 8.3.8,
3129     see the release notes for 8.3.8.
3130    </para>
3131
3132   </sect2>
3133
3134   <sect2>
3135    <title>Changes</title>
3136
3137    <itemizedlist>
3138
3139     <listitem>
3140      <para>
3141       Add new configuration parameter <varname>ssl_renegotiation_limit</> to
3142       control how often we do session key renegotiation for an SSL connection
3143       (Magnus)
3144      </para>
3145
3146      <para>
3147       This can be set to zero to disable renegotiation completely, which may
3148       be required if a broken SSL library is used.  In particular, some
3149       vendors are shipping stopgap patches for CVE-2009-3555 that cause
3150       renegotiation attempts to fail.
3151      </para>
3152     </listitem>
3153
3154     <listitem>
3155      <para>
3156       Fix possible deadlock during backend startup (Tom)
3157      </para>
3158     </listitem>
3159
3160     <listitem>
3161      <para>
3162       Fix possible crashes due to not handling errors during relcache reload
3163       cleanly (Tom)
3164      </para>
3165     </listitem>
3166
3167     <listitem>
3168      <para>
3169       Fix possible crash due to use of dangling pointer to a cached plan
3170       (Tatsuo)
3171      </para>
3172     </listitem>
3173
3174     <listitem>
3175      <para>
3176       Fix possible crashes when trying to recover from a failure in
3177       subtransaction start (Tom)
3178      </para>
3179     </listitem>
3180
3181     <listitem>
3182      <para>
3183       Fix server memory leak associated with use of savepoints and a client
3184       encoding different from server's encoding (Tom)
3185      </para>
3186     </listitem>
3187
3188     <listitem>
3189      <para>
3190       Fix incorrect WAL data emitted during end-of-recovery cleanup of a GIST
3191       index page split (Yoichi Hirai)
3192      </para>
3193
3194      <para>
3195       This would result in index corruption, or even more likely an error
3196       during WAL replay, if we were unlucky enough to crash during
3197       end-of-recovery cleanup after having completed an incomplete GIST
3198       insertion.
3199      </para>
3200     </listitem>
3201
3202     <listitem>
3203      <para>
3204       Make <function>substring()</> for <type>bit</> types treat any negative
3205       length as meaning <quote>all the rest of the string</> (Tom)
3206      </para>
3207
3208      <para>
3209       The previous coding treated only -1 that way, and would produce an
3210       invalid result value for other negative values, possibly leading to
3211       a crash (CVE-2010-0442).
3212      </para>
3213     </listitem>
3214
3215     <listitem>
3216      <para>
3217       Fix integer-to-bit-string conversions to handle the first fractional
3218       byte correctly when the output bit width is wider than the given
3219       integer by something other than a multiple of 8 bits (Tom)
3220      </para>
3221     </listitem>
3222
3223     <listitem>
3224      <para>
3225       Fix some cases of pathologically slow regular expression matching (Tom)
3226      </para>
3227     </listitem>
3228
3229     <listitem>
3230      <para>
3231       Fix assorted crashes in <type>xml</> processing caused by sloppy
3232       memory management (Tom)
3233      </para>
3234
3235      <para>
3236       This is a back-patch of changes first applied in 8.4.  The 8.3 code
3237       was known buggy, but the new code was sufficiently different to not
3238       want to back-patch it until it had gotten some field testing.
3239      </para>
3240     </listitem>
3241
3242     <listitem>
3243      <para>
3244       Fix bug with trying to update a field of an element of a
3245       composite-type array column (Tom)
3246      </para>
3247     </listitem>
3248
3249     <listitem>
3250      <para>
3251       Fix the <literal>STOP WAL LOCATION</> entry in backup history files to
3252       report the next WAL segment's name when the end location is exactly at a
3253       segment boundary (Itagaki Takahiro)
3254      </para>
3255     </listitem>
3256
3257     <listitem>
3258      <para>
3259       Fix some more cases of temporary-file leakage (Heikki)
3260      </para>
3261
3262      <para>
3263       This corrects a problem introduced in the previous minor release.
3264       One case that failed is when a plpgsql function returning set is
3265       called within another function's exception handler.
3266      </para>
3267     </listitem>
3268
3269     <listitem>
3270      <para>
3271       Improve constraint exclusion processing of boolean-variable cases,
3272       in particular make it possible to exclude a partition that has a
3273       <quote>bool_column = false</> constraint (Tom)
3274      </para>
3275     </listitem>
3276
3277     <listitem>
3278      <para>
3279       When reading <filename>pg_hba.conf</> and related files, do not treat
3280       <literal>@something</> as a file inclusion request if the <literal>@</>
3281       appears inside quote marks; also, never treat <literal>@</> by itself
3282       as a file inclusion request (Tom)
3283      </para>
3284
3285      <para>
3286       This prevents erratic behavior if a role or database name starts with
3287       <literal>@</>.  If you need to include a file whose path name
3288       contains spaces, you can still do so, but you must write
3289       <literal>@"/path to/file"</> rather than putting the quotes around
3290       the whole construct.
3291      </para>
3292     </listitem>
3293
3294     <listitem>
3295      <para>
3296       Prevent infinite loop on some platforms if a directory is named as
3297       an inclusion target in <filename>pg_hba.conf</> and related files
3298       (Tom)
3299      </para>
3300     </listitem>
3301
3302     <listitem>
3303      <para>
3304       Fix possible infinite loop if <function>SSL_read</> or
3305       <function>SSL_write</> fails without setting <varname>errno</> (Tom)
3306      </para>
3307
3308      <para>
3309       This is reportedly possible with some Windows versions of
3310       <application>openssl</>.
3311      </para>
3312     </listitem>
3313
3314     <listitem>
3315      <para>
3316       Disallow <acronym>GSSAPI</> authentication on local connections,
3317       since it requires a hostname to function correctly (Magnus)
3318      </para>
3319     </listitem>
3320
3321     <listitem>
3322      <para>
3323       Make <application>ecpg</> report the proper SQLSTATE if the connection
3324       disappears (Michael)
3325      </para>
3326     </listitem>
3327
3328     <listitem>
3329      <para>
3330       Fix <application>psql</>'s <literal>numericlocale</> option to not
3331       format strings it shouldn't in latex and troff output formats (Heikki)
3332      </para>
3333     </listitem>
3334
3335     <listitem>
3336      <para>
3337       Make <application>psql</> return the correct exit status (3) when
3338       <literal>ON_ERROR_STOP</> and <literal>--single-transaction</> are
3339       both specified and an error occurs during the implied <command>COMMIT</>
3340       (Bruce)
3341      </para>
3342     </listitem>
3343
3344     <listitem>
3345      <para>
3346       Fix plpgsql failure in one case where a composite column is set to NULL
3347       (Tom)
3348      </para>
3349     </listitem>
3350
3351     <listitem>
3352      <para>
3353       Fix possible failure when calling PL/Perl functions from PL/PerlU
3354       or vice versa (Tim Bunce)
3355      </para>
3356     </listitem>
3357
3358     <listitem>
3359      <para>
3360       Add <literal>volatile</> markings in PL/Python to avoid possible
3361       compiler-specific misbehavior (Zdenek Kotala)
3362      </para>
3363     </listitem>
3364
3365     <listitem>
3366      <para>
3367       Ensure PL/Tcl initializes the Tcl interpreter fully (Tom)
3368      </para>
3369
3370      <para>
3371       The only known symptom of this oversight is that the Tcl
3372       <literal>clock</> command misbehaves if using Tcl 8.5 or later.
3373      </para>
3374     </listitem>
3375
3376     <listitem>
3377      <para>
3378       Prevent crash in <filename>contrib/dblink</> when too many key
3379       columns are specified to a <function>dblink_build_sql_*</> function
3380       (Rushabh Lathia, Joe Conway)
3381      </para>
3382     </listitem>
3383
3384     <listitem>
3385      <para>
3386       Allow zero-dimensional arrays in <filename>contrib/ltree</> operations
3387       (Tom)
3388      </para>
3389
3390      <para>
3391       This case was formerly rejected as an error, but it's more convenient to
3392       treat it the same as a zero-element array.  In particular this avoids
3393       unnecessary failures when an <type>ltree</> operation is applied to the
3394       result of <literal>ARRAY(SELECT ...)</> and the sub-select returns no
3395       rows.
3396      </para>
3397     </listitem>
3398
3399     <listitem>
3400      <para>
3401       Fix assorted crashes in <filename>contrib/xml2</> caused by sloppy
3402       memory management (Tom)
3403      </para>
3404     </listitem>
3405
3406     <listitem>
3407      <para>
3408       Make building of <filename>contrib/xml2</> more robust on Windows
3409       (Andrew)
3410      </para>
3411     </listitem>
3412
3413     <listitem>
3414      <para>
3415       Fix race condition in Windows signal handling (Radu Ilie)
3416      </para>
3417
3418      <para>
3419       One known symptom of this bug is that rows in <structname>pg_listener</>
3420       could be dropped under heavy load.
3421      </para>
3422     </listitem>
3423
3424     <listitem>
3425      <para>
3426       Update time zone data files to <application>tzdata</> release 2010e
3427       for DST law changes in Bangladesh, Chile, Fiji, Mexico, Paraguay, Samoa.
3428      </para>
3429     </listitem>
3430
3431    </itemizedlist>
3432
3433   </sect2>
3434  </sect1>
3435
3436  <sect1 id="release-8-3-9">
3437   <title>Release 8.3.9</title>
3438
3439   <note>
3440   <title>Release Date</title>
3441   <simpara>2009-12-14</simpara>
3442   </note>
3443
3444   <para>
3445    This release contains a variety of fixes from 8.3.8.
3446    For information about new features in the 8.3 major release, see
3447    <xref linkend="release-8-3">.
3448   </para>
3449
3450   <sect2>
3451    <title>Migration to Version 8.3.9</title>
3452
3453    <para>
3454     A dump/restore is not required for those running 8.3.X.
3455     However, if you are upgrading from a version earlier than 8.3.8,
3456     see the release notes for 8.3.8.
3457    </para>
3458
3459   </sect2>
3460
3461   <sect2>
3462    <title>Changes</title>
3463
3464    <itemizedlist>
3465
3466     <listitem>
3467      <para>
3468       Protect against indirect security threats caused by index functions
3469       changing session-local state (Gurjeet Singh, Tom)
3470      </para>
3471
3472      <para>
3473       This change prevents allegedly-immutable index functions from possibly
3474       subverting a superuser's session (CVE-2009-4136).
3475      </para>
3476     </listitem>
3477
3478     <listitem>
3479      <para>
3480       Reject SSL certificates containing an embedded null byte in the common
3481       name (CN) field (Magnus)
3482      </para>
3483
3484      <para>
3485       This prevents unintended matching of a certificate to a server or client
3486       name during SSL validation (CVE-2009-4034).
3487      </para>
3488     </listitem>
3489
3490     <listitem>
3491      <para>
3492       Fix possible crash during backend-startup-time cache initialization (Tom)
3493      </para>
3494     </listitem>
3495
3496     <listitem>
3497      <para>
3498       Avoid crash on empty thesaurus dictionary (Tom)
3499      </para>
3500     </listitem>
3501
3502     <listitem>
3503      <para>
3504       Prevent signals from interrupting <literal>VACUUM</> at unsafe times
3505       (Alvaro)
3506      </para>
3507
3508      <para>
3509       This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
3510       after it's already committed its tuple movements, as well as transient
3511       errors if a plain <literal>VACUUM</> is interrupted after having
3512       truncated the table.
3513      </para>
3514     </listitem>
3515
3516     <listitem>
3517      <para>
3518       Fix possible crash due to integer overflow in hash table size
3519       calculation (Tom)
3520      </para>
3521
3522      <para>
3523       This could occur with extremely large planner estimates for the size of
3524       a hashjoin's result.
3525      </para>
3526     </listitem>
3527
3528     <listitem>
3529      <para>
3530       Fix very rare crash in <type>inet</>/<type>cidr</> comparisons (Chris
3531       Mikkelson)
3532      </para>
3533     </listitem>
3534
3535     <listitem>
3536      <para>
3537       Ensure that shared tuple-level locks held by prepared transactions are
3538       not ignored (Heikki)
3539      </para>
3540     </listitem>
3541
3542     <listitem>
3543      <para>
3544       Fix premature drop of temporary files used for a cursor that is accessed
3545       within a subtransaction (Heikki)
3546      </para>
3547     </listitem>
3548
3549     <listitem>
3550      <para>
3551       Fix memory leak in syslogger process when rotating to a new CSV logfile
3552       (Tom)
3553      </para>
3554     </listitem>
3555
3556     <listitem>
3557      <para>
3558       Fix Windows permission-downgrade logic (Jesse Morris)
3559      </para>
3560
3561      <para>
3562       This fixes some cases where the database failed to start on Windows,
3563       often with misleading error messages such as <quote>could not locate
3564       matching postgres executable</quote>.
3565      </para>
3566     </listitem>
3567
3568     <listitem>
3569      <para>
3570       Fix incorrect logic for GiST index page splits, when the split depends
3571       on a non-first column of the index (Paul Ramsey)
3572      </para>
3573     </listitem>
3574
3575     <listitem>
3576      <para>
3577       Don't error out if recycling or removing an old WAL file fails at the
3578       end of checkpoint (Heikki)
3579      </para>
3580
3581      <para>
3582       It's better to treat the problem as non-fatal and allow the checkpoint
3583       to complete.  Future checkpoints will retry the removal.  Such problems
3584       are not expected in normal operation, but have been seen to be
3585       caused by misdesigned Windows anti-virus and backup software.
3586      </para>
3587     </listitem>
3588
3589     <listitem>
3590      <para>
3591       Ensure WAL files aren't repeatedly archived on Windows (Heikki)
3592      </para>
3593
3594      <para>
3595       This is another symptom that could happen if some other process
3596       interfered with deletion of a no-longer-needed file.
3597      </para>
3598     </listitem>
3599
3600     <listitem>
3601      <para>
3602       Fix PAM password processing to be more robust (Tom)
3603      </para>
3604
3605      <para>
3606       The previous code is known to fail with the combination of the Linux
3607       <literal>pam_krb5</> PAM module with Microsoft Active Directory as the
3608       domain controller.  It might have problems elsewhere too, since it was
3609       making unjustified assumptions about what arguments the PAM stack would
3610       pass to it.
3611      </para>
3612     </listitem>
3613
3614     <listitem>
3615      <para>
3616       Raise the maximum authentication token (Kerberos ticket) size in GSSAPI
3617       and SSPI authentication methods (Ian Turner)
3618      </para>
3619
3620      <para>
3621       While the old 2000-byte limit was more than enough for Unix Kerberos
3622       implementations, tickets issued by Windows Domain Controllers can be
3623       much larger.
3624      </para>
3625     </listitem>
3626
3627     <listitem>
3628      <para>
3629       Re-enable collection of access statistics for sequences (Akira Kurosawa)
3630      </para>
3631
3632      <para>
3633       This used to work but was broken in 8.3.
3634      </para>
3635     </listitem>
3636
3637     <listitem>
3638      <para>
3639       Fix processing of ownership dependencies during <literal>CREATE OR
3640       REPLACE FUNCTION</> (Tom)
3641      </para>
3642     </listitem>
3643
3644     <listitem>
3645      <para>
3646       Fix incorrect handling of <literal>WHERE</>
3647       <replaceable>x</>=<replaceable>x</> conditions (Tom)
3648      </para>
3649
3650      <para>
3651       In some cases these could get ignored as redundant, but they aren't
3652       &mdash; they're equivalent to <replaceable>x</> <literal>IS NOT NULL</>.
3653      </para>
3654     </listitem>
3655
3656     <listitem>
3657      <para>
3658       Make text search parser accept underscores in XML attributes (Peter)
3659      </para>
3660     </listitem>
3661
3662     <listitem>
3663      <para>
3664       Fix encoding handling in <type>xml</> binary input (Heikki)
3665      </para>
3666
3667      <para>
3668       If the XML header doesn't specify an encoding, we now assume UTF-8 by
3669       default; the previous handling was inconsistent.
3670      </para>
3671     </listitem>
3672
3673     <listitem>
3674      <para>
3675       Fix bug with calling <literal>plperl</> from <literal>plperlu</> or vice
3676       versa (Tom)
3677      </para>
3678
3679      <para>
3680       An error exit from the inner function could result in crashes due to
3681       failure to re-select the correct Perl interpreter for the outer function.
3682      </para>
3683     </listitem>
3684
3685     <listitem>
3686      <para>
3687       Fix session-lifespan memory leak when a PL/Perl function is redefined
3688       (Tom)
3689      </para>
3690     </listitem>
3691
3692     <listitem>
3693      <para>
3694       Ensure that Perl arrays are properly converted to
3695       <productname>PostgreSQL</> arrays when returned by a set-returning
3696       PL/Perl function (Andrew Dunstan, Abhijit Menon-Sen)
3697      </para>
3698
3699      <para>
3700       This worked correctly already for non-set-returning functions.
3701      </para>
3702     </listitem>
3703
3704     <listitem>
3705      <para>
3706       Fix rare crash in exception processing in PL/Python (Peter)
3707      </para>
3708     </listitem>
3709
3710     <listitem>
3711      <para>
3712       In <filename>contrib/pg_standby</>, disable triggering failover with a
3713       signal on Windows (Fujii Masao)
3714      </para>
3715
3716      <para>
3717       This never did anything useful, because Windows doesn't have Unix-style
3718       signals, but recent changes made it actually crash.
3719      </para>
3720     </listitem>
3721
3722     <listitem>
3723      <para>
3724       Ensure <application>psql</>'s flex module is compiled with the correct
3725       system header definitions (Tom)
3726      </para>
3727
3728      <para>
3729       This fixes build failures on platforms where
3730       <literal>--enable-largefile</> causes incompatible changes in the
3731       generated code.
3732      </para>
3733     </listitem>
3734
3735     <listitem>
3736      <para>
3737       Make the postmaster ignore any <literal>application_name</> parameter in
3738       connection request packets, to improve compatibility with future libpq
3739       versions (Tom)
3740      </para>
3741     </listitem>
3742
3743     <listitem>
3744      <para>
3745       Update the timezone abbreviation files to match current reality (Joachim
3746       Wieland)
3747      </para>
3748
3749      <para>
3750       This includes adding <literal>IDT</> and <literal>SGT</> to the default
3751       timezone abbreviation set.
3752      </para>
3753     </listitem>
3754
3755     <listitem>
3756      <para>
3757       Update time zone data files to <application>tzdata</> release 2009s
3758       for DST law changes in Antarctica, Argentina, Bangladesh, Fiji,
3759       Novokuznetsk, Pakistan, Palestine, Samoa, Syria; also historical
3760       corrections for Hong Kong.
3761      </para>
3762     </listitem>
3763
3764    </itemizedlist>
3765
3766   </sect2>
3767  </sect1>
3768
3769  <sect1 id="release-8-3-8">
3770   <title>Release 8.3.8</title>
3771
3772   <note>
3773   <title>Release Date</title>
3774   <simpara>2009-09-09</simpara>
3775   </note>
3776
3777   <para>
3778    This release contains a variety of fixes from 8.3.7.
3779    For information about new features in the 8.3 major release, see
3780    <xref linkend="release-8-3">.
3781   </para>
3782
3783   <sect2>
3784    <title>Migration to Version 8.3.8</title>
3785
3786    <para>
3787     A dump/restore is not required for those running 8.3.X.
3788     However, if you have any hash indexes on <type>interval</> columns,
3789     you must <command>REINDEX</> them after updating to 8.3.8.
3790     Also, if you are upgrading from a version earlier than 8.3.5,
3791     see the release notes for 8.3.5.
3792    </para>
3793
3794   </sect2>
3795
3796   <sect2>
3797    <title>Changes</title>
3798
3799    <itemizedlist>
3800
3801     <listitem>
3802      <para>
3803       Fix Windows shared-memory allocation code (Tsutomu Yamada, Magnus)
3804      </para>
3805
3806      <para>
3807       This bug led to the often-reported <quote>could not reattach
3808       to shared memory</> error message.
3809      </para>
3810     </listitem>
3811
3812     <listitem>
3813      <para>
3814       Force WAL segment switch during <function>pg_start_backup()</>
3815       (Heikki)
3816      </para>
3817
3818      <para>
3819       This avoids corner cases that could render a base backup unusable.
3820      </para>
3821     </listitem>
3822
3823     <listitem>
3824      <para>
3825       Disallow <command>RESET ROLE</> and <command>RESET SESSION
3826       AUTHORIZATION</> inside security-definer functions (Tom, Heikki)
3827      </para>
3828
3829      <para>
3830       This covers a case that was missed in the previous patch that
3831       disallowed <command>SET ROLE</> and <command>SET SESSION
3832       AUTHORIZATION</> inside security-definer functions.
3833       (See CVE-2007-6600)
3834      </para>
3835     </listitem>
3836
3837     <listitem>
3838      <para>
3839       Make <command>LOAD</> of an already-loaded loadable module
3840       into a no-op (Tom)
3841      </para>
3842
3843      <para>
3844       Formerly, <command>LOAD</> would attempt to unload and re-load the
3845       module, but this is unsafe and not all that useful.
3846      </para>
3847     </listitem>
3848
3849     <listitem>
3850      <para>
3851       Disallow empty passwords during LDAP authentication (Magnus)
3852      </para>
3853     </listitem>
3854
3855     <listitem>
3856      <para>
3857       Fix handling of sub-SELECTs appearing in the arguments of
3858       an outer-level aggregate function (Tom)
3859      </para>
3860     </listitem>
3861
3862     <listitem>
3863      <para>
3864       Fix bugs associated with fetching a whole-row value from the
3865       output of a Sort or Materialize plan node (Tom)
3866      </para>
3867     </listitem>
3868
3869     <listitem>
3870      <para>
3871       Prevent <varname>synchronize_seqscans</> from changing the results of
3872       scrollable and <literal>WITH HOLD</> cursors (Tom)
3873      </para>
3874     </listitem>
3875
3876     <listitem>
3877      <para>
3878       Revert planner change that disabled partial-index and constraint
3879       exclusion optimizations when there were more than 100 clauses in
3880       an AND or OR list (Tom)
3881      </para>
3882     </listitem>
3883
3884     <listitem>
3885      <para>
3886       Fix hash calculation for data type <type>interval</> (Tom)
3887      </para>
3888
3889      <para>
3890       This corrects wrong results for hash joins on interval values.
3891       It also changes the contents of hash indexes on interval columns.
3892       If you have any such indexes, you must <command>REINDEX</> them
3893       after updating.
3894      </para>
3895     </listitem>
3896
3897     <listitem>
3898      <para>
3899       Treat <function>to_char(..., 'TH')</> as an uppercase ordinal
3900       suffix with <literal>'HH'</>/<literal>'HH12'</> (Heikki)
3901      </para>
3902
3903      <para>
3904       It was previously handled as <literal>'th'</> (lowercase).
3905      </para>
3906     </listitem>
3907
3908     <listitem>
3909      <para>
3910       Fix overflow for <literal>INTERVAL '<replaceable>x</> ms'</literal>
3911       when <replaceable>x</> is more than 2 million and integer
3912       datetimes are in use (Alex Hunsaker)
3913      </para>
3914     </listitem>
3915
3916     <listitem>
3917      <para>
3918       Fix calculation of distance between a point and a line segment (Tom)
3919      </para>
3920
3921      <para>
3922       This led to incorrect results from a number of geometric operators.
3923      </para>
3924     </listitem>
3925
3926     <listitem>
3927      <para>
3928       Fix <type>money</> data type to work in locales where currency
3929       amounts have no fractional digits, e.g. Japan (Itagaki Takahiro)
3930      </para>
3931     </listitem>
3932
3933     <listitem>
3934      <para>
3935       Fix <literal>LIKE</> for case where pattern contains <literal>%_</>
3936       (Tom)
3937      </para>
3938     </listitem>
3939
3940     <listitem>
3941      <para>
3942       Properly round datetime input like
3943       <literal>00:12:57.9999999999999999999999999999</> (Tom)
3944      </para>
3945     </listitem>
3946
3947     <listitem>
3948      <para>
3949       Fix memory leaks in XML operations (Tom)
3950      </para>
3951     </listitem>
3952
3953     <listitem>
3954      <para>
3955       Fix poor choice of page split point in GiST R-tree operator classes
3956       (Teodor)
3957      </para>
3958     </listitem>
3959
3960     <listitem>
3961      <para>
3962       Ensure that a <quote>fast shutdown</> request will forcibly terminate
3963       open sessions, even if a <quote>smart shutdown</> was already in progress
3964       (Fujii Masao)
3965      </para>
3966     </listitem>
3967
3968     <listitem>
3969      <para>
3970       Avoid performance degradation in bulk inserts into GIN indexes
3971       when the input values are (nearly) in sorted order (Tom)
3972      </para>
3973     </listitem>
3974
3975     <listitem>
3976      <para>
3977       Correctly enforce NOT NULL domain constraints in some contexts in
3978       PL/pgSQL (Tom)
3979      </para>
3980     </listitem>
3981
3982     <listitem>
3983      <para>
3984       Fix portability issues in plperl initialization (Andrew Dunstan)
3985      </para>
3986     </listitem>
3987
3988     <listitem>
3989      <para>
3990       Fix <application>pg_ctl</> to not go into an infinite loop if
3991       <filename>postgresql.conf</> is empty (Jeff Davis)
3992      </para>
3993     </listitem>
3994
3995     <listitem>
3996      <para>
3997       Improve <application>pg_dump</>'s efficiency when there are
3998       many large objects (Tamas Vincze)
3999      </para>
4000     </listitem>
4001
4002     <listitem>
4003      <para>
4004       Use <literal>SIGUSR1</>, not <literal>SIGQUIT</>, as the
4005       failover signal for <application>pg_standby</> (Heikki)
4006      </para>
4007     </listitem>
4008
4009     <listitem>
4010      <para>
4011       Make <application>pg_standby</>'s <literal>maxretries</> option
4012       behave as documented (Fujii Masao)
4013      </para>
4014     </listitem>
4015
4016     <listitem>
4017      <para>
4018       Make <filename>contrib/hstore</> throw an error when a key or
4019       value is too long to fit in its data structure, rather than
4020       silently truncating it (Andrew Gierth)
4021      </para>
4022     </listitem>
4023
4024     <listitem>
4025      <para>
4026       Fix <filename>contrib/xml2</>'s <function>xslt_process()</> to
4027       properly handle the maximum number of parameters (twenty) (Tom)
4028      </para>
4029     </listitem>
4030
4031     <listitem>
4032      <para>
4033       Improve robustness of <application>libpq</>'s code to recover
4034       from errors during <command>COPY FROM STDIN</> (Tom)
4035      </para>
4036     </listitem>
4037
4038     <listitem>
4039      <para>
4040       Avoid including conflicting readline and editline header files
4041       when both libraries are installed (Zdenek Kotala)
4042      </para>
4043     </listitem>
4044
4045     <listitem>
4046      <para>
4047       Update time zone data files to <application>tzdata</> release 2009l
4048       for DST law changes in Bangladesh, Egypt, Jordan, Pakistan,
4049       Argentina/San_Luis, Cuba, Jordan (historical correction only),
4050       Mauritius, Morocco, Palestine, Syria, Tunisia.
4051      </para>
4052     </listitem>
4053
4054    </itemizedlist>
4055
4056   </sect2>
4057  </sect1>
4058
4059  <sect1 id="release-8-3-7">
4060   <title>Release 8.3.7</title>
4061
4062   <note>
4063   <title>Release Date</title>
4064   <simpara>2009-03-16</simpara>
4065   </note>
4066
4067   <para>
4068    This release contains a variety of fixes from 8.3.6.
4069    For information about new features in the 8.3 major release, see
4070    <xref linkend="release-8-3">.
4071   </para>
4072
4073   <sect2>
4074    <title>Migration to Version 8.3.7</title>
4075
4076    <para>
4077     A dump/restore is not required for those running 8.3.X.
4078     However, if you are upgrading from a version earlier than 8.3.5,
4079     see the release notes for 8.3.5.
4080    </para>
4081
4082   </sect2>
4083
4084   <sect2>
4085    <title>Changes</title>
4086
4087    <itemizedlist>
4088
4089     <listitem>
4090      <para>
4091       Prevent error recursion crashes when encoding conversion fails (Tom)
4092      </para>
4093
4094      <para>
4095       This change extends fixes made in the last two minor releases for
4096       related failure scenarios.  The previous fixes were narrowly tailored
4097       for the original problem reports, but we have now recognized that
4098       <emphasis>any</> error thrown by an encoding conversion function could
4099       potentially lead to infinite recursion while trying to report the
4100       error.  The solution therefore is to disable translation and encoding
4101       conversion and report the plain-ASCII form of any error message,
4102       if we find we have gotten into a recursive error reporting situation.
4103       (CVE-2009-0922)
4104      </para>
4105     </listitem>
4106
4107     <listitem>
4108      <para>
4109       Disallow <command>CREATE CONVERSION</> with the wrong encodings
4110       for the specified conversion function (Heikki)
4111      </para>
4112
4113      <para>
4114       This prevents one possible scenario for encoding conversion failure.
4115       The previous change is a backstop to guard against other kinds of
4116       failures in the same area.
4117      </para>
4118     </listitem>
4119
4120     <listitem>
4121      <para>
4122       Fix <function>xpath()</> to not modify the path expression unless
4123       necessary, and to make a saner attempt at it when necessary (Andrew)
4124      </para>
4125
4126      <para>
4127       The SQL standard suggests that <function>xpath</> should work on data
4128       that is a document fragment, but <application>libxml</> doesn't support
4129       that, and indeed it's not clear that this is sensible according to the
4130       XPath standard.  <function>xpath</> attempted to work around this
4131       mismatch by modifying both the data and the path expression, but the
4132       modification was buggy and could cause valid searches to fail.  Now,
4133       <function>xpath</> checks whether the data is in fact a well-formed
4134       document, and if so invokes <application>libxml</> with no change to the
4135       data or path expression.  Otherwise, a different modification method
4136       that is somewhat less likely to fail is used.
4137      </para>
4138
4139      <note>
4140       <para>
4141        The new modification method is still not 100% satisfactory, and it
4142        seems likely that no real solution is possible.  This patch should
4143        therefore be viewed as a band-aid to keep from breaking existing
4144        applications unnecessarily.  It is likely that
4145        <productname>PostgreSQL</> 8.4 will simply reject use of
4146        <function>xpath</> on data that is not a well-formed document.
4147       </para>
4148      </note>
4149     </listitem>
4150
4151     <listitem>
4152      <para>
4153       Fix core dump when <function>to_char()</> is given format codes that
4154       are inappropriate for the type of the data argument (Tom)
4155      </para>
4156     </listitem>
4157
4158     <listitem>
4159      <para>
4160       Fix possible failure in text search when C locale is used with
4161       a multi-byte encoding (Teodor)
4162      </para>
4163
4164      <para>
4165       Crashes were possible on platforms where <type>wchar_t</> is narrower
4166       than <type>int</>; Windows in particular.
4167      </para>
4168     </listitem>
4169
4170     <listitem>
4171      <para>
4172       Fix extreme inefficiency in text search parser's handling of an
4173       email-like string containing multiple <literal>@</> characters (Heikki)
4174      </para>
4175     </listitem>
4176
4177     <listitem>
4178      <para>
4179       Fix planner problem with sub-<command>SELECT</> in the output list
4180       of a larger subquery (Tom)
4181      </para>
4182
4183      <para>
4184       The known symptom of this bug is a <quote>failed to locate grouping
4185       columns</> error that is dependent on the datatype involved;
4186       but there could be other issues as well.
4187      </para>
4188     </listitem>
4189
4190     <listitem>
4191      <para>
4192       Fix decompilation of <literal>CASE WHEN</> with an implicit coercion
4193       (Tom)
4194      </para>
4195
4196      <para>
4197       This mistake could lead to Assert failures in an Assert-enabled build,
4198       or an <quote>unexpected CASE WHEN clause</> error message in other
4199       cases, when trying to examine or dump a view.
4200      </para>
4201     </listitem>
4202
4203     <listitem>
4204      <para>
4205       Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
4206      </para>
4207
4208      <para>
4209       If <command>CLUSTER</> or a rewriting variant of <command>ALTER TABLE</>
4210       were executed by someone other than the table owner, the
4211       <structname>pg_type</> entry for the table's TOAST table would end up
4212       marked as owned by that someone.  This caused no immediate problems,
4213       since the permissions on the TOAST rowtype aren't examined by any
4214       ordinary database operation.  However, it could lead to unexpected
4215       failures if one later tried to drop the role that issued the command
4216       (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</>
4217       warnings from <application>pg_dump</> after having done so (in 8.3).
4218      </para>
4219     </listitem>
4220
4221     <listitem>
4222      <para>
4223       Change <command>UNLISTEN</> to exit quickly if the current session has
4224       never executed any <command>LISTEN</> command (Tom)
4225      </para>
4226
4227      <para>
4228       Most of the time this is not a particularly useful optimization, but
4229       since <command>DISCARD ALL</> invokes <command>UNLISTEN</>, the previous
4230       coding caused a substantial performance problem for applications that
4231       made heavy use of <command>DISCARD ALL</>.
4232      </para>
4233     </listitem>
4234
4235     <listitem>
4236      <para>
4237       Fix PL/pgSQL to not treat <literal>INTO</> after <command>INSERT</> as
4238       an INTO-variables clause anywhere in the string, not only at the start;
4239       in particular, don't fail for <command>INSERT INTO</> within
4240       <command>CREATE RULE</> (Tom)
4241      </para>
4242     </listitem>
4243
4244     <listitem>
4245      <para>
4246       Clean up PL/pgSQL error status variables fully at block exit
4247       (Ashesh Vashi and Dave Page)
4248      </para>
4249
4250      <para>
4251       This is not a problem for PL/pgSQL itself, but the omission could cause
4252       the PL/pgSQL Debugger to crash while examining the state of a function.
4253      </para>
4254     </listitem>
4255
4256     <listitem>
4257      <para>
4258       Retry failed calls to <function>CallNamedPipe()</> on Windows
4259       (Steve Marshall, Magnus)
4260      </para>
4261
4262      <para>
4263       It appears that this function can sometimes fail transiently;
4264       we previously treated any failure as a hard error, which could
4265       confuse <command>LISTEN</>/<command>NOTIFY</> as well as other
4266       operations.
4267      </para>
4268     </listitem>
4269
4270     <listitem>
4271      <para>
4272       Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
4273       of known timezone abbreviations (Xavier Bugaud)
4274      </para>
4275     </listitem>
4276
4277    </itemizedlist>
4278
4279   </sect2>
4280  </sect1>
4281
4282  <sect1 id="release-8-3-6">
4283   <title>Release 8.3.6</title>
4284
4285   <note>
4286   <title>Release Date</title>
4287   <simpara>2009-02-02</simpara>
4288   </note>
4289
4290   <para>
4291    This release contains a variety of fixes from 8.3.5.
4292    For information about new features in the 8.3 major release, see
4293    <xref linkend="release-8-3">.
4294   </para>
4295
4296   <sect2>
4297    <title>Migration to Version 8.3.6</title>
4298
4299    <para>
4300     A dump/restore is not required for those running 8.3.X.
4301     However, if you are upgrading from a version earlier than 8.3.5,
4302     see the release notes for 8.3.5.
4303    </para>
4304
4305   </sect2>
4306
4307   <sect2>
4308    <title>Changes</title>
4309
4310    <itemizedlist>
4311
4312     <listitem>
4313      <para>
4314       Make <command>DISCARD ALL</> release advisory locks, in addition
4315       to everything it already did (Tom)
4316      </para>
4317
4318      <para>
4319       This was decided to be the most appropriate behavior.  This could
4320       affect existing applications, however.
4321      </para>
4322     </listitem>
4323
4324     <listitem>
4325      <para>
4326       Fix whole-index GiST scans to work correctly (Teodor)
4327      </para>
4328
4329      <para>
4330       This error could cause rows to be lost if a table is clustered
4331       on a GiST index.
4332      </para>
4333     </listitem>
4334
4335     <listitem>
4336      <para>
4337       Fix crash of <literal>xmlconcat(NULL)</> (Peter)
4338      </para>
4339     </listitem>
4340
4341     <listitem>
4342      <para>
4343       Fix possible crash in <literal>ispell</> dictionary if high-bit-set
4344       characters are used as flags (Teodor)
4345      </para>
4346
4347      <para>
4348       This is known to be done by one widely available Norwegian dictionary,
4349       and the same condition may exist in others.
4350      </para>
4351     </listitem>
4352
4353     <listitem>
4354      <para>
4355       Fix misordering of <application>pg_dump</> output for composite types
4356       (Tom)
4357      </para>
4358
4359      <para>
4360       The most likely problem was for user-defined operator classes to
4361       be dumped after indexes or views that needed them.
4362      </para>
4363     </listitem>
4364
4365     <listitem>
4366      <para>
4367       Improve handling of URLs in <function>headline()</> function (Teodor)
4368      </para>
4369     </listitem>
4370
4371     <listitem>
4372      <para>
4373       Improve handling of overlength headlines in <function>headline()</>
4374       function (Teodor)
4375      </para>
4376     </listitem>
4377
4378     <listitem>
4379      <para>
4380       Prevent possible Assert failure or misconversion if an encoding
4381       conversion is created with the wrong conversion function for the
4382       specified pair of encodings (Tom, Heikki)
4383      </para>
4384     </listitem>
4385
4386     <listitem>
4387      <para>
4388       Fix possible Assert failure if a statement executed in PL/pgSQL is
4389       rewritten into another kind of statement, for example if an
4390       <command>INSERT</> is rewritten into an <command>UPDATE</> (Heikki)
4391      </para>
4392     </listitem>
4393
4394     <listitem>
4395      <para>
4396       Ensure that a snapshot is available to datatype input functions (Tom)
4397      </para>
4398
4399      <para>
4400       This primarily affects domains that are declared with <literal>CHECK</>
4401       constraints involving user-defined stable or immutable functions.  Such
4402       functions typically fail if no snapshot has been set.
4403      </para>
4404     </listitem>
4405
4406     <listitem>
4407      <para>
4408       Make it safer for SPI-using functions to be used within datatype I/O;
4409       in particular, to be used in domain check constraints (Tom)
4410      </para>
4411     </listitem>
4412
4413     <listitem>
4414      <para>
4415       Avoid unnecessary locking of small tables in <command>VACUUM</>
4416       (Heikki)
4417      </para>
4418     </listitem>
4419
4420     <listitem>
4421      <para>
4422       Fix a problem that sometimes kept <command>ALTER TABLE ENABLE/DISABLE
4423       RULE</> from being recognized by active sessions (Tom)
4424      </para>
4425     </listitem>
4426
4427     <listitem>
4428      <para>
4429       Fix a problem that made <literal>UPDATE RETURNING tableoid</>
4430       return zero instead of the correct OID (Tom)
4431      </para>
4432     </listitem>
4433
4434     <listitem>
4435      <para>
4436       Allow functions declared as taking <type>ANYARRAY</> to work on
4437       the <structname>pg_statistic</> columns of that type (Tom)
4438      </para>
4439
4440      <para>
4441       This used to work, but was unintentionally broken in 8.3.
4442      </para>
4443     </listitem>
4444
4445     <listitem>
4446      <para>
4447       Fix planner misestimation of selectivity when transitive equality
4448       is applied to an outer-join clause (Tom)
4449      </para>
4450
4451      <para>
4452       This could result in bad plans for queries like
4453       <literal>... from a left join b on a.a1 = b.b1 where a.a1 = 42 ...</>
4454      </para>
4455     </listitem>
4456
4457     <listitem>
4458      <para>
4459       Improve optimizer's handling of long <literal>IN</> lists (Tom)
4460      </para>
4461
4462      <para>
4463       This change avoids wasting large amounts of time on such lists
4464       when constraint exclusion is enabled.
4465      </para>
4466     </listitem>
4467
4468     <listitem>
4469      <para>
4470       Prevent synchronous scan during GIN index build (Tom)
4471      </para>
4472
4473      <para>
4474       Because GIN is optimized for inserting tuples in increasing TID order,
4475       choosing to use a synchronous scan could slow the build by a factor of
4476       three or more.
4477      </para>
4478     </listitem>
4479
4480     <listitem>
4481      <para>
4482       Ensure that the contents of a holdable cursor don't depend on the
4483       contents of TOAST tables (Tom)
4484      </para>
4485
4486      <para>
4487       Previously, large field values in a cursor result might be represented
4488       as TOAST pointers, which would fail if the referenced table got dropped
4489       before the cursor is read, or if the large value is deleted and then
4490       vacuumed away.  This cannot happen with an ordinary cursor,
4491       but it could with a cursor that is held past its creating transaction.
4492      </para>
4493     </listitem>
4494
4495     <listitem>
4496      <para>
4497       Fix memory leak when a set-returning function is terminated without
4498       reading its whole result (Tom)
4499      </para>
4500     </listitem>
4501
4502     <listitem>
4503      <para>
4504       Fix encoding conversion problems in XML functions when the database
4505       encoding isn't UTF-8 (Tom)
4506      </para>
4507     </listitem>
4508
4509     <listitem>
4510      <para>
4511       Fix <filename>contrib/dblink</>'s
4512       <function>dblink_get_result(text,bool)</> function (Joe)
4513      </para>
4514     </listitem>
4515
4516     <listitem>
4517      <para>
4518       Fix possible garbage output from <filename>contrib/sslinfo</> functions
4519       (Tom)
4520      </para>
4521     </listitem>
4522
4523     <listitem>
4524      <para>
4525       Fix incorrect behavior of <filename>contrib/tsearch2</> compatibility
4526       trigger when it's fired more than once in a command (Teodor)
4527      </para>
4528     </listitem>
4529
4530     <listitem>
4531      <para>
4532       Fix possible mis-signaling in autovacuum (Heikki)
4533      </para>
4534     </listitem>
4535
4536     <listitem>
4537      <para>
4538       Support running as a service on Windows 7 beta (Dave and Magnus)
4539      </para>
4540     </listitem>
4541
4542     <listitem>
4543      <para>
4544       Fix <application>ecpg</>'s handling of varchar structs (Michael)
4545      </para>
4546     </listitem>
4547
4548     <listitem>
4549      <para>
4550       Fix <application>configure</> script to properly report failure when
4551       unable to obtain linkage information for PL/Perl (Andrew)
4552      </para>
4553     </listitem>
4554
4555     <listitem>
4556      <para>
4557       Make all documentation reference <literal>pgsql-bugs</> and/or
4558       <literal>pgsql-hackers</> as appropriate, instead of the
4559       now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
4560       mailing lists (Tom)
4561      </para>
4562     </listitem>
4563
4564     <listitem>
4565      <para>
4566       Update time zone data files to <application>tzdata</> release 2009a (for
4567       Kathmandu and historical DST corrections in Switzerland, Cuba)
4568      </para>
4569     </listitem>
4570
4571    </itemizedlist>
4572
4573   </sect2>
4574  </sect1>
4575
4576  <sect1 id="release-8-3-5">
4577   <title>Release 8.3.5</title>
4578
4579   <note>
4580   <title>Release Date</title>
4581   <simpara>2008-11-03</simpara>
4582   </note>
4583
4584   <para>
4585    This release contains a variety of fixes from 8.3.4.
4586    For information about new features in the 8.3 major release, see
4587    <xref linkend="release-8-3">.
4588   </para>
4589
4590   <sect2>
4591    <title>Migration to Version 8.3.5</title>
4592
4593    <para>
4594     A dump/restore is not required for those running 8.3.X.
4595     However, if you are upgrading from a version earlier than 8.3.1,
4596     see the release notes for 8.3.1.  Also, if you were running a previous
4597     8.3.X release, it is recommended to <command>REINDEX</> all GiST
4598     indexes after the upgrade.
4599    </para>
4600
4601   </sect2>
4602
4603   <sect2>
4604    <title>Changes</title>
4605
4606    <itemizedlist>
4607
4608     <listitem>
4609      <para>
4610       Fix GiST index corruption due to marking the wrong index entry
4611       <quote>dead</> after a deletion (Teodor)
4612      </para>
4613
4614      <para>
4615       This would result in index searches failing to find rows they
4616       should have found.  Corrupted indexes can be fixed with
4617       <command>REINDEX</>.
4618      </para>
4619     </listitem>
4620
4621     <listitem>
4622      <para>
4623       Fix backend crash when the client encoding cannot represent a localized
4624       error message (Tom)
4625      </para>
4626
4627      <para>
4628       We have addressed similar issues before, but it would still fail if
4629       the <quote>character has no equivalent</> message itself couldn't
4630       be converted.  The fix is to disable localization and send the plain
4631       ASCII error message when we detect such a situation.
4632      </para>
4633     </listitem>
4634
4635     <listitem>
4636      <para>
4637       Fix possible crash in <type>bytea</>-to-XML mapping (Michael McMaster)
4638      </para>
4639     </listitem>
4640
4641     <listitem>
4642      <para>
4643       Fix possible crash when deeply nested functions are invoked from
4644       a trigger (Tom)
4645      </para>
4646     </listitem>
4647
4648     <listitem>
4649      <para>
4650       Improve optimization of <replaceable>expression</> <literal>IN</>
4651       (<replaceable>expression-list</>) queries (Tom, per an idea from Robert
4652       Haas)
4653      </para>
4654
4655      <para>
4656       Cases in which there are query variables on the right-hand side had been
4657       handled less efficiently in 8.2.x and 8.3.x than in prior versions.
4658       The fix restores 8.1 behavior for such cases.
4659      </para>
4660     </listitem>
4661
4662     <listitem>
4663      <para>
4664       Fix mis-expansion of rule queries when a sub-<literal>SELECT</> appears
4665       in a function call in <literal>FROM</>,  a multi-row <literal>VALUES</>
4666       list, or a <literal>RETURNING</> list (Tom)
4667      </para>
4668
4669      <para>
4670       The usual symptom of this problem is an <quote>unrecognized node type</>
4671       error.
4672      </para>
4673     </listitem>
4674
4675     <listitem>
4676      <para>
4677       Fix Assert failure during rescan of an <literal>IS NULL</>
4678       search of a GiST index (Teodor)
4679      </para>
4680     </listitem>
4681
4682     <listitem>
4683      <para>
4684       Fix memory leak during rescan of a hashed aggregation plan (Neil)
4685      </para>
4686     </listitem>
4687
4688     <listitem>
4689      <para>
4690       Ensure an error is reported when a newly-defined PL/pgSQL trigger
4691       function is invoked as a normal function (Tom)
4692      </para>
4693     </listitem>
4694
4695     <listitem>
4696      <para>
4697       Force a checkpoint before <command>CREATE DATABASE</> starts to copy
4698       files (Heikki)
4699      </para>
4700
4701      <para>
4702       This prevents a possible failure if files had recently been deleted
4703       in the source database.
4704      </para>
4705     </listitem>
4706
4707     <listitem>
4708      <para>
4709       Prevent possible collision of <structfield>relfilenode</> numbers
4710       when moving a table to another tablespace with <command>ALTER SET
4711       TABLESPACE</> (Heikki)
4712      </para>
4713
4714      <para>
4715       The command tried to re-use the existing filename, instead of
4716       picking one that is known unused in the destination directory.
4717      </para>
4718     </listitem>
4719
4720     <listitem>
4721      <para>
4722       Fix incorrect text search headline generation when single query
4723       item matches first word of text (Sushant Sinha)
4724      </para>
4725     </listitem>
4726
4727     <listitem>
4728      <para>
4729       Fix improper display of fractional seconds in interval values when
4730       using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
4731       build (Ron Mayer)
4732      </para>
4733     </listitem>
4734
4735     <listitem>
4736      <para>
4737       Make <literal>ILIKE</> compare characters case-insensitively
4738       even when they're escaped (Andrew)
4739      </para>
4740     </listitem>
4741
4742     <listitem>
4743      <para>
4744       Ensure <command>DISCARD</> is handled properly by statement logging (Tom)
4745      </para>
4746     </listitem>
4747
4748     <listitem>
4749      <para>
4750       Fix incorrect logging of last-completed-transaction time during
4751       PITR recovery (Tom)
4752      </para>
4753     </listitem>
4754
4755     <listitem>
4756      <para>
4757       Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
4758       behave correctly when the passed tuple and tuple descriptor have
4759       different numbers of columns (Tom)
4760      </para>
4761
4762      <para>
4763       This situation is normal when a table has had columns added or removed,
4764       but these two functions didn't handle it properly.
4765       The only likely consequence is an incorrect error indication.
4766      </para>
4767     </listitem>
4768
4769     <listitem>
4770      <para>
4771       Mark <varname>SessionReplicationRole</> as <literal>PGDLLIMPORT</>
4772       so it can be used by <application>Slony</> on Windows (Magnus)
4773      </para>
4774     </listitem>
4775
4776     <listitem>
4777      <para>
4778       Fix small memory leak when using <application>libpq</>'s
4779       <literal>gsslib</> parameter (Magnus)
4780      </para>
4781
4782      <para>
4783       The space used by the parameter string was not freed at connection
4784       close.
4785      </para>
4786     </listitem>
4787
4788     <listitem>
4789      <para>
4790       Ensure <application>libgssapi</> is linked into <application>libpq</>
4791       if needed (Markus Schaaf)
4792      </para>
4793     </listitem>
4794
4795     <listitem>
4796      <para>
4797       Fix <application>ecpg</>'s parsing of <command>CREATE ROLE</> (Michael)
4798      </para>
4799     </listitem>
4800
4801     <listitem>
4802      <para>
4803       Fix recent breakage of <literal>pg_ctl restart</> (Tom)
4804      </para>
4805     </listitem>
4806
4807     <listitem>
4808      <para>
4809       Ensure <filename>pg_control</> is opened in binary mode
4810       (Itagaki Takahiro)
4811      </para>
4812
4813      <para>
4814       <application>pg_controldata</> and <application>pg_resetxlog</>
4815       did this incorrectly, and so could fail on Windows.
4816      </para>
4817     </listitem>
4818
4819     <listitem>
4820      <para>
4821       Update time zone data files to <application>tzdata</> release 2008i (for
4822       DST law changes in Argentina, Brazil, Mauritius, Syria)
4823      </para>
4824     </listitem>
4825
4826    </itemizedlist>
4827
4828   </sect2>
4829  </sect1>
4830
4831  <sect1 id="release-8-3-4">
4832   <title>Release 8.3.4</title>
4833
4834   <note>
4835   <title>Release Date</title>
4836   <simpara>2008-09-22</simpara>
4837   </note>
4838
4839   <para>
4840    This release contains a variety of fixes from 8.3.3.
4841    For information about new features in the 8.3 major release, see
4842    <xref linkend="release-8-3">.
4843   </para>
4844
4845   <sect2>
4846    <title>Migration to Version 8.3.4</title>
4847
4848    <para>
4849     A dump/restore is not required for those running 8.3.X.
4850     However, if you are upgrading from a version earlier than 8.3.1,
4851     see the release notes for 8.3.1.
4852    </para>
4853
4854   </sect2>
4855
4856   <sect2>
4857    <title>Changes</title>
4858
4859    <itemizedlist>
4860
4861     <listitem>
4862      <para>
4863       Fix bug in btree WAL recovery code (Heikki)
4864      </para>
4865
4866      <para>
4867       Recovery failed if the WAL ended partway through a page split operation.
4868      </para>
4869     </listitem>
4870
4871     <listitem>
4872      <para>
4873       Fix potential use of wrong cutoff XID for HOT page pruning (Alvaro)
4874      </para>
4875
4876      <para>
4877       This error created a risk of corruption in system
4878       catalogs that are consulted by <command>VACUUM</>: dead tuple versions
4879       might be removed too soon.  The impact of this on actual database
4880       operations would be minimal, since the system doesn't follow MVCC
4881       rules while examining catalogs, but it might result in transiently
4882       wrong output from <application>pg_dump</> or other client programs.
4883      </para>
4884     </listitem>
4885
4886     <listitem>
4887      <para>
4888       Fix potential miscalculation of <structfield>datfrozenxid</> (Alvaro)
4889      </para>
4890
4891      <para>
4892       This error may explain some recent reports of failure to remove old
4893       <structname>pg_clog</> data.
4894      </para>
4895     </listitem>
4896
4897     <listitem>
4898      <para>
4899       Fix incorrect HOT updates after <structname>pg_class</> is reindexed
4900       (Tom)
4901      </para>
4902
4903      <para>
4904       Corruption of <structname>pg_class</> could occur if <literal>REINDEX
4905       TABLE pg_class</> was followed in the same session by an <literal>ALTER
4906       TABLE RENAME</> or <literal>ALTER TABLE SET SCHEMA</> command.
4907      </para>
4908     </listitem>
4909
4910     <listitem>
4911      <para>
4912       Fix missed <quote>combo cid</> case (Karl Schnaitter)
4913      </para>
4914
4915      <para>
4916       This error made rows incorrectly invisible to a transaction in which they
4917       had been deleted by multiple subtransactions that all aborted.
4918      </para>
4919     </listitem>
4920
4921     <listitem>
4922      <para>
4923       Prevent autovacuum from crashing if the table it's currently
4924       checking is deleted at just the wrong time (Alvaro)
4925      </para>
4926     </listitem>
4927
4928     <listitem>
4929      <para>
4930       Widen local lock counters from 32 to 64 bits (Tom)
4931      </para>
4932
4933      <para>
4934       This responds to reports that the counters could overflow in
4935       sufficiently long transactions, leading to unexpected <quote>lock is
4936       already held</> errors.
4937      </para>
4938     </listitem>
4939
4940     <listitem>
4941      <para>
4942       Fix possible duplicate output of tuples during a GiST index scan (Teodor)
4943      </para>
4944     </listitem>
4945
4946     <listitem>
4947      <para>
4948       Regenerate foreign key checking queries from scratch when either
4949       table is modified (Tom)
4950      </para>
4951
4952      <para>
4953       Previously, 8.3 would attempt to replan the query, but would work from
4954       previously generated query text.  This led to failures if a
4955       table or column was renamed.
4956      </para>
4957     </listitem>
4958
4959     <listitem>
4960      <para>
4961       Fix missed permissions checks when a view contains a simple
4962       <literal>UNION ALL</> construct (Heikki)
4963      </para>
4964
4965      <para>
4966       Permissions for the referenced tables were checked properly, but not
4967       permissions for the view itself.
4968      </para>
4969     </listitem>
4970
4971     <listitem>
4972      <para>
4973       Add checks in executor startup to ensure that the tuples produced by an
4974       <command>INSERT</> or <command>UPDATE</> will match the target table's
4975       current rowtype (Tom)
4976      </para>
4977
4978      <para>
4979       This situation is believed to be impossible in 8.3, but it can happen in
4980       prior releases, so a check seems prudent.
4981      </para>
4982     </listitem>
4983
4984     <listitem>
4985      <para>
4986       Fix possible repeated drops during <command>DROP OWNED</> (Tom)
4987      </para>
4988
4989      <para>
4990       This would typically result in strange errors such as <quote>cache
4991       lookup failed for relation NNN</>.
4992      </para>
4993     </listitem>
4994
4995     <listitem>
4996      <para>
4997       Fix several memory leaks in XML operations (Kris Jurka, Tom)
4998      </para>
4999     </listitem>
5000
5001     <listitem>
5002      <para>
5003       Fix <function>xmlserialize()</> to raise error properly for
5004       unacceptable target data type (Tom)
5005      </para>
5006     </listitem>
5007
5008     <listitem>
5009      <para>
5010       Fix a couple of places that mis-handled multibyte characters in text
5011       search configuration file parsing (Tom)
5012      </para>
5013
5014      <para>
5015       Certain characters occurring in configuration files would always cause
5016       <quote>invalid byte sequence for encoding</> failures.
5017      </para>
5018     </listitem>
5019
5020     <listitem>
5021      <para>
5022       Provide file name and line number location for all errors reported
5023       in text search configuration files (Tom)
5024      </para>
5025     </listitem>
5026
5027     <listitem>
5028      <para>
5029       Fix <literal>AT TIME ZONE</> to first try to interpret its timezone
5030       argument as a timezone abbreviation, and only try it as a full timezone
5031       name if that fails, rather than the other way around as formerly (Tom)
5032      </para>
5033
5034      <para>
5035       The timestamp input functions have always resolved ambiguous zone names
5036       in this order.  Making <literal>AT TIME ZONE</> do so as well improves
5037       consistency, and fixes a compatibility bug introduced in 8.1:
5038       in ambiguous cases we now behave the same as 8.0 and before did,
5039       since in the older versions <literal>AT TIME ZONE</> accepted
5040       <emphasis>only</> abbreviations.
5041      </para>
5042     </listitem>
5043
5044     <listitem>
5045      <para>
5046       Fix datetime input functions to correctly detect integer overflow when
5047       running on a 64-bit platform (Tom)
5048      </para>
5049     </listitem>
5050
5051     <listitem>
5052      <para>
5053       Prevent integer overflows during units conversion when displaying a
5054       configuration parameter that has units (Tom)
5055      </para>
5056     </listitem>
5057
5058     <listitem>
5059      <para>
5060       Improve performance of writing very long log messages to syslog (Tom)
5061      </para>
5062     </listitem>
5063
5064     <listitem>
5065      <para>
5066       Allow spaces in the suffix part of an LDAP URL in
5067       <filename>pg_hba.conf</> (Tom)
5068      </para>
5069     </listitem>
5070
5071     <listitem>
5072      <para>
5073       Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
5074       ON</> query (Tom)
5075      </para>
5076     </listitem>
5077
5078     <listitem>
5079      <para>
5080       Fix planner bug that could improperly push down <literal>IS NULL</>
5081       tests below an outer join (Tom)
5082      </para>
5083
5084      <para>
5085       This was triggered by occurrence of <literal>IS NULL</> tests for
5086       the same relation in all arms of an upper <literal>OR</> clause.
5087      </para>
5088     </listitem>
5089
5090     <listitem>
5091      <para>
5092       Fix planner bug with nested sub-select expressions (Tom)
5093      </para>
5094
5095      <para>
5096       If the outer sub-select has no direct dependency on the parent query,
5097       but the inner one does, the outer value might not get recalculated
5098       for new parent query rows.
5099      </para>
5100     </listitem>
5101
5102     <listitem>
5103      <para>
5104       Fix planner to estimate that <literal>GROUP BY</> expressions yielding
5105       boolean results always result in two groups, regardless of the
5106       expressions' contents (Tom)
5107      </para>
5108
5109      <para>
5110       This is very substantially more accurate than the regular <literal>GROUP
5111       BY</> estimate for certain boolean tests like <replaceable>col</>
5112       <literal>IS NULL</>.
5113      </para>
5114     </listitem>
5115
5116     <listitem>
5117      <para>
5118       Fix PL/pgSQL to not fail when a <literal>FOR</> loop's target variable
5119       is a record containing composite-type fields (Tom)
5120      </para>
5121     </listitem>
5122
5123     <listitem>
5124      <para>
5125       Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
5126       about the encoding of data sent to or from Tcl (Tom)
5127      </para>
5128     </listitem>
5129
5130     <listitem>
5131      <para>
5132       Improve performance of <function>PQescapeBytea()</> (Rudolf Leitgeb)
5133      </para>
5134     </listitem>
5135
5136     <listitem>
5137      <para>
5138       On Windows, work around a Microsoft bug by preventing
5139       <application>libpq</> from trying to send more than 64kB per system call
5140       (Magnus)
5141      </para>
5142     </listitem>
5143
5144     <listitem>
5145      <para>
5146       Fix <application>ecpg</> to handle variables properly in <command>SET</>
5147       commands (Michael)
5148      </para>
5149     </listitem>
5150
5151     <listitem>
5152      <para>
5153       Improve <application>pg_dump</> and <application>pg_restore</>'s
5154       error reporting after failure to send a SQL command (Tom)
5155      </para>
5156     </listitem>
5157
5158     <listitem>
5159      <para>
5160       Fix <application>pg_ctl</> to properly preserve postmaster
5161       command-line arguments across a <literal>restart</> (Bruce)
5162      </para>
5163     </listitem>
5164
5165     <listitem>
5166      <para>
5167       Fix erroneous WAL file cutoff point calculation in
5168       <application>pg_standby</> (Simon)
5169      </para>
5170     </listitem>
5171
5172     <listitem>
5173      <para>
5174       Update time zone data files to <application>tzdata</> release 2008f (for
5175       DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
5176       Pakistan, Palestine, and Paraguay)
5177      </para>
5178     </listitem>
5179
5180    </itemizedlist>
5181
5182   </sect2>
5183  </sect1>
5184
5185  <sect1 id="release-8-3-3">
5186   <title>Release 8.3.3</title>
5187
5188   <note>
5189   <title>Release Date</title>
5190   <simpara>2008-06-12</simpara>
5191   </note>
5192
5193   <para>
5194    This release contains one serious and one minor bug fix over 8.3.2.
5195    For information about new features in the 8.3 major release, see
5196    <xref linkend="release-8-3">.
5197   </para>
5198
5199   <sect2>
5200    <title>Migration to Version 8.3.3</title>
5201
5202    <para>
5203     A dump/restore is not required for those running 8.3.X.
5204     However, if you are upgrading from a version earlier than 8.3.1,
5205     see the release notes for 8.3.1.
5206    </para>
5207
5208   </sect2>
5209
5210   <sect2>
5211    <title>Changes</title>
5212
5213    <itemizedlist>
5214
5215     <listitem>
5216      <para>
5217       Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
5218      </para>
5219
5220      <para>
5221       Before this fix, a negative constant in a view or rule might be dumped
5222       as, say, <literal>-42::integer</>, which is subtly incorrect: it should
5223       be <literal>(-42)::integer</> due to operator precedence rules.
5224       Usually this would make little difference, but it could interact with
5225       another recent patch to cause
5226       <productname>PostgreSQL</> to reject what had been a valid
5227       <command>SELECT DISTINCT</> view query.  Since this could result in
5228       <application>pg_dump</> output failing to reload, it is being treated
5229       as a high-priority fix.  The only released versions in which dump
5230       output is actually incorrect are 8.3.1 and 8.2.7.
5231      </para>
5232     </listitem>
5233
5234     <listitem>
5235      <para>
5236       Make <command>ALTER AGGREGATE ... OWNER TO</> update
5237       <structname>pg_shdepend</> (Tom)
5238      </para>
5239
5240      <para>
5241       This oversight could lead to problems if the aggregate was later
5242       involved in a <command>DROP OWNED</> or <command>REASSIGN OWNED</>
5243       operation.
5244      </para>
5245     </listitem>
5246
5247    </itemizedlist>
5248
5249   </sect2>
5250  </sect1>
5251
5252  <sect1 id="release-8-3-2">
5253   <title>Release 8.3.2</title>
5254
5255   <note>
5256   <title>Release Date</title>
5257   <simpara>never released</simpara>
5258   </note>
5259
5260   <para>
5261    This release contains a variety of fixes from 8.3.1.
5262    For information about new features in the 8.3 major release, see
5263    <xref linkend="release-8-3">.
5264   </para>
5265
5266   <sect2>
5267    <title>Migration to Version 8.3.2</title>
5268
5269    <para>
5270     A dump/restore is not required for those running 8.3.X.
5271     However, if you are upgrading from a version earlier than 8.3.1,
5272     see the release notes for 8.3.1.
5273    </para>
5274
5275   </sect2>
5276
5277   <sect2>
5278    <title>Changes</title>
5279
5280    <itemizedlist>
5281
5282     <listitem>
5283      <para>
5284       Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
5285       occurred on Windows when using UTF-8 database encoding and a different
5286       client encoding (Tom)
5287      </para>
5288     </listitem>
5289
5290     <listitem>
5291      <para>
5292       Fix incorrect archive truncation point calculation for the
5293       <literal>%r</> macro in <varname>recovery_command</> parameters
5294       (Simon)
5295      </para>
5296
5297      <para>
5298       This could lead to data loss if a warm-standby script relied on
5299       <literal>%r</> to decide when to throw away WAL segment files.
5300      </para>
5301     </listitem>
5302
5303     <listitem>
5304      <para>
5305       Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
5306       column is correctly checked to see if it's been initialized to all
5307       non-nulls (Brendan Jurd)
5308      </para>
5309
5310      <para>
5311       Previous versions neglected to check this requirement at all.
5312      </para>
5313     </listitem>
5314
5315     <listitem>
5316      <para>
5317       Fix <command>REASSIGN OWNED</> so that it works on procedural
5318       languages too (Alvaro)
5319      </para>
5320     </listitem>
5321
5322     <listitem>
5323      <para>
5324       Fix problems with <command>SELECT FOR UPDATE/SHARE</> occurring as a
5325       subquery in a query with a non-<command>SELECT</> top-level operation
5326       (Tom)
5327      </para>
5328     </listitem>
5329
5330     <listitem>
5331      <para>
5332       Fix possible <command>CREATE TABLE</> failure when inheriting the
5333       <quote>same</> constraint from multiple parent relations that
5334       inherited that constraint from a common ancestor (Tom)
5335      </para>
5336     </listitem>
5337
5338     <listitem>
5339      <para>
5340       Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
5341       to the target table of an <command>UPDATE</> or <command>DELETE</>
5342       (Tom)
5343      </para>
5344     </listitem>
5345
5346     <listitem>
5347      <para>
5348       Restore the pre-8.3 behavior that an out-of-range block number in a
5349       TID being used in a TidScan plan results in silently not matching any
5350       rows (Tom)
5351      </para>
5352
5353      <para>
5354       8.3.0 and 8.3.1 threw an error instead.
5355      </para>
5356     </listitem>
5357
5358     <listitem>
5359      <para>
5360       Fix GIN bug that could result in a <literal>too many LWLocks
5361       taken</literal> failure (Teodor)
5362      </para>
5363     </listitem>
5364
5365     <listitem>
5366      <para>
5367       Fix broken GiST comparison function for <type>tsquery</> (Teodor)
5368      </para>
5369     </listitem>
5370
5371     <listitem>
5372      <para>
5373       Fix <function>tsvector_update_trigger()</> and <function>ts_stat()</>
5374       to accept domains over the types they expect to work with (Tom)
5375      </para>
5376     </listitem>
5377
5378     <listitem>
5379      <para>
5380       Fix failure to support enum data types as foreign keys (Tom)
5381      </para>
5382     </listitem>
5383
5384     <listitem>
5385      <para>
5386       Avoid possible crash when decompressing corrupted data
5387       (Zdenek Kotala)
5388      </para>
5389     </listitem>
5390
5391     <listitem>
5392      <para>
5393       Fix race conditions between delayed unlinks and <command>DROP
5394       DATABASE</> (Heikki)
5395      </para>
5396
5397      <para>
5398       In the worst case this could result in deleting a newly created table
5399       in a new database that happened to get the same OID as the
5400       recently-dropped one; but of course that is an extremely
5401       low-probability scenario.
5402      </para>
5403     </listitem>
5404
5405     <listitem>
5406      <para>
5407       Repair two places where SIGTERM exit of a backend could leave corrupted
5408       state in shared memory (Tom)
5409      </para>
5410
5411      <para>
5412       Neither case is very important if SIGTERM is used to shut down the
5413       whole database cluster together, but there was a problem if someone
5414       tried to SIGTERM individual backends.
5415      </para>
5416     </listitem>
5417
5418     <listitem>
5419      <para>
5420       Fix possible crash due to incorrect plan generated for an
5421       <literal><replaceable>x</> IN (SELECT <replaceable>y</>
5422       FROM ...)</literal> clause when <replaceable>x</> and <replaceable>y</>
5423       have different data types; and make sure the behavior is semantically
5424       correct when the conversion from <replaceable>y</>'s type to
5425       <replaceable>x</>'s type is lossy (Tom)
5426      </para>
5427     </listitem>
5428
5429     <listitem>
5430      <para>
5431       Fix oversight that prevented the planner from substituting known Param
5432       values as if they were constants (Tom)
5433      </para>
5434
5435      <para>
5436       This mistake partially disabled optimization of unnamed
5437       extended-Query statements in 8.3.0 and 8.3.1: in particular the
5438       LIKE-to-indexscan optimization would never be applied if the LIKE
5439       pattern was passed as a parameter, and constraint exclusion
5440       depending on a parameter value didn't work either.
5441      </para>
5442     </listitem>
5443
5444     <listitem>
5445      <para>
5446       Fix planner failure when an indexable <function>MIN</> or
5447       <function>MAX</> aggregate is used with <literal>DISTINCT</> or
5448       <literal>ORDER BY</> (Tom)
5449      </para>
5450     </listitem>
5451
5452     <listitem>
5453      <para>
5454       Fix planner to ensure it never uses a <quote>physical tlist</> for a
5455       plan node that is feeding a Sort node (Tom)
5456      </para>
5457
5458      <para>
5459       This led to the sort having to push around more data than it really
5460       needed to, since unused column values were included in the sorted
5461       data.
5462      </para>
5463     </listitem>
5464
5465     <listitem>
5466      <para>
5467       Avoid unnecessary copying of query strings (Tom)
5468      </para>
5469
5470      <para>
5471       This fixes a performance problem introduced in 8.3.0 when a very large
5472       number of commands are submitted as a single query string.
5473      </para>
5474     </listitem>
5475
5476     <listitem>
5477      <para>
5478       Make <function>TransactionIdIsCurrentTransactionId()</> use binary
5479       search instead of linear search when checking child-transaction XIDs
5480       (Heikki)
5481      </para>
5482
5483      <para>
5484       This fixes some cases in which 8.3.0 was significantly
5485       slower than earlier releases.
5486      </para>
5487     </listitem>
5488
5489     <listitem>
5490      <para>
5491       Fix conversions between ISO-8859-5 and other encodings to handle
5492       Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
5493       two dots) (Sergey Burladyan)
5494      </para>
5495     </listitem>
5496
5497     <listitem>
5498      <para>
5499       Fix several datatype input functions, notably <function>array_in()</>,
5500       that were allowing unused bytes in their results to contain
5501       uninitialized, unpredictable values (Tom)
5502      </para>
5503
5504      <para>
5505       This could lead to failures in which two apparently identical literal
5506       values were not seen as equal, resulting in the parser complaining
5507       about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
5508       expressions.
5509      </para>
5510     </listitem>
5511
5512     <listitem>
5513      <para>
5514       Fix a corner case in regular-expression substring matching
5515       (<literal>substring(<replaceable>string</> from
5516       <replaceable>pattern</>)</literal>) (Tom)
5517      </para>
5518
5519      <para>
5520       The problem occurs when there is a match to the pattern overall but
5521       the user has specified a parenthesized subexpression and that
5522       subexpression hasn't got a match.  An example is
5523       <literal>substring('foo' from 'foo(bar)?')</>.
5524       This should return NULL, since <literal>(bar)</> isn't matched, but
5525       it was mistakenly returning the whole-pattern match instead (ie,
5526       <literal>foo</>).
5527      </para>
5528     </listitem>
5529
5530     <listitem>
5531      <para>
5532       Prevent cancellation of an auto-vacuum that was launched to prevent
5533       XID wraparound (Alvaro)
5534      </para>
5535     </listitem>
5536
5537     <listitem>
5538      <para>
5539       Improve <command>ANALYZE</>'s handling of in-doubt tuples (those
5540       inserted or deleted by a not-yet-committed transaction) so that the
5541       counts it reports to the stats collector are more likely to be correct
5542       (Pavan Deolasee)
5543      </para>
5544     </listitem>
5545
5546     <listitem>
5547      <para>
5548       Fix <application>initdb</> to reject a relative path for its
5549       <literal>--xlogdir</> (<literal>-X</>) option (Tom)
5550      </para>
5551     </listitem>
5552
5553     <listitem>
5554      <para>
5555       Make <application>psql</> print tab characters as an appropriate
5556       number of spaces, rather than <literal>\x09</literal> as was done in
5557       8.3.0 and 8.3.1 (Bruce)
5558      </para>
5559     </listitem>
5560
5561     <listitem>
5562      <para>
5563       Update time zone data files to <application>tzdata</> release 2008c (for
5564       DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
5565       Argentina/San_Luis)
5566      </para>
5567     </listitem>
5568
5569     <listitem>
5570      <para>
5571       Add <function>ECPGget_PGconn()</> function to
5572       <application>ecpglib</> (Michael)
5573      </para>
5574     </listitem>
5575
5576     <listitem>
5577      <para>
5578       Fix incorrect result from <application>ecpg</>'s
5579       <function>PGTYPEStimestamp_sub()</> function (Michael)
5580      </para>
5581     </listitem>
5582
5583     <listitem>
5584      <para>
5585       Fix handling of continuation line markers in <application>ecpg</>
5586       (Michael)
5587      </para>
5588     </listitem>
5589
5590     <listitem>
5591      <para>
5592       Fix possible crashes in <filename>contrib/cube</> functions (Tom)
5593      </para>
5594     </listitem>
5595
5596     <listitem>
5597      <para>
5598       Fix core dump in <filename>contrib/xml2</>'s
5599       <function>xpath_table()</> function when the input query returns a
5600       NULL value (Tom)
5601      </para>
5602     </listitem>
5603
5604     <listitem>
5605      <para>
5606       Fix <filename>contrib/xml2</>'s makefile to not override
5607       <literal>CFLAGS</>, and make it auto-configure properly for
5608       <application>libxslt</> present or not (Tom)
5609      </para>
5610     </listitem>
5611
5612    </itemizedlist>
5613
5614   </sect2>
5615  </sect1>
5616
5617  <sect1 id="release-8-3-1">
5618   <title>Release 8.3.1</title>
5619
5620   <note>
5621   <title>Release Date</title>
5622   <simpara>2008-03-17</simpara>
5623   </note>
5624
5625   <para>
5626    This release contains a variety of fixes from 8.3.0.
5627    For information about new features in the 8.3 major release, see
5628    <xref linkend="release-8-3">.
5629   </para>
5630
5631   <sect2>
5632    <title>Migration to Version 8.3.1</title>
5633
5634    <para>
5635     A dump/restore is not required for those running 8.3.X.
5636     However, you might need to <command>REINDEX</> indexes on textual
5637     columns after updating, if you are affected by the Windows locale
5638     issue described below.
5639    </para>
5640
5641   </sect2>
5642
5643   <sect2>
5644    <title>Changes</title>
5645
5646    <itemizedlist>
5647
5648     <listitem>
5649      <para>
5650       Fix character string comparison for Windows locales that consider
5651       different character combinations as equal (Tom)
5652      </para>
5653
5654      <para>
5655       This fix applies only on Windows and only when using UTF-8
5656       database encoding.  The same fix was made for all other cases
5657       over two years ago, but Windows with UTF-8 uses a separate code
5658       path that was not updated.  If you are using a locale that
5659       considers some non-identical strings as equal, you may need to
5660       <command>REINDEX</> to fix existing indexes on textual columns.
5661      </para>
5662     </listitem>
5663
5664     <listitem>
5665      <para>
5666       Repair corner-case bugs in <command>VACUUM FULL</> (Tom)
5667      </para>
5668
5669      <para>
5670       A potential deadlock between concurrent <command>VACUUM FULL</>
5671       operations on different system catalogs was introduced in 8.2.
5672       This has now been corrected.  8.3 made this worse because the
5673       deadlock could occur within a critical code section, making it
5674       a PANIC rather than just ERROR condition.
5675      </para>
5676
5677      <para>
5678       Also, a <command>VACUUM FULL</> that failed partway through
5679       vacuuming a system catalog could result in cache corruption in
5680       concurrent database sessions.
5681      </para>
5682
5683      <para>
5684       Another <command>VACUUM FULL</> bug introduced in 8.3 could
5685       result in a crash or out-of-memory report when dealing with
5686       pages containing no live tuples.
5687      </para>
5688     </listitem>
5689
5690     <listitem>
5691      <para>
5692       Fix misbehavior of foreign key checks involving <type>character</>
5693       or <type>bit</> columns (Tom)
5694      </para>
5695
5696      <para>
5697       If the referencing column were of a different but compatible type
5698       (for instance <type>varchar</>), the constraint was enforced incorrectly.
5699      </para>
5700     </listitem>
5701
5702     <listitem>
5703      <para>
5704       Avoid needless deadlock failures in no-op foreign-key checks (Stephan
5705       Szabo, Tom)
5706      </para>
5707     </listitem>
5708
5709     <listitem>
5710      <para>
5711       Fix possible core dump when re-planning a prepared query (Tom)
5712      </para>
5713
5714      <para>
5715       This bug affected only protocol-level prepare operations, not
5716       SQL <command>PREPARE</>, and so tended to be seen only with
5717       JDBC, DBI, and other client-side drivers that use prepared
5718       statements heavily.
5719      </para>
5720     </listitem>
5721
5722     <listitem>
5723      <para>
5724       Fix possible failure when re-planning a query that calls an SPI-using
5725       function (Tom)
5726      </para>
5727     </listitem>
5728
5729     <listitem>
5730      <para>
5731       Fix failure in row-wise comparisons involving columns of different
5732       datatypes (Tom)
5733      </para>
5734     </listitem>
5735
5736     <listitem>
5737      <para>
5738       Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
5739       race condition (Tom)
5740      </para>
5741
5742      <para>
5743       In rare cases a session that had just executed a
5744       <command>LISTEN</> might not get a notification, even though
5745       one would be expected because the concurrent transaction executing
5746       <command>NOTIFY</> was observed to commit later.
5747      </para>
5748
5749      <para>
5750       A side effect of the fix is that a transaction that has executed
5751       a not-yet-committed <command>LISTEN</> command will not see any
5752       row in <structname>pg_listener</> for the <command>LISTEN</>,
5753       should it choose to look; formerly it would have.  This behavior
5754       was never documented one way or the other, but it is possible that
5755       some applications depend on the old behavior.
5756      </para>
5757     </listitem>
5758
5759     <listitem>
5760      <para>
5761       Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
5762       prepared transaction (Tom)
5763      </para>
5764
5765      <para>
5766       This was formerly allowed but trying to do it had various unpleasant
5767       consequences, notably that the originating backend could not exit
5768       as long as an <command>UNLISTEN</> remained uncommitted.
5769      </para>
5770     </listitem>
5771
5772     <listitem>
5773      <para>
5774       Disallow dropping a temporary table within a
5775       prepared transaction (Heikki)
5776      </para>
5777
5778      <para>
5779       This was correctly disallowed by 8.1, but the check was inadvertently
5780       broken in 8.2 and 8.3.
5781      </para>
5782     </listitem>
5783
5784     <listitem>
5785      <para>
5786       Fix rare crash when an error occurs during a query using a hash index
5787       (Heikki)
5788      </para>
5789     </listitem>
5790
5791     <listitem>
5792      <para>
5793       Fix incorrect comparison of <type>tsquery</> values (Teodor)
5794      </para>
5795     </listitem>
5796
5797     <listitem>
5798      <para>
5799       Fix incorrect behavior of <literal>LIKE</> with non-ASCII characters
5800       in single-byte encodings (Rolf Jentsch)
5801      </para>
5802     </listitem>
5803
5804     <listitem>
5805      <para>
5806       Disable <function>xmlvalidate</> (Tom)
5807      </para>
5808
5809      <para>
5810       This function should have been removed before 8.3 release, but
5811       was inadvertently left in the source code.  It poses a small
5812       security risk since unprivileged users could use it to read the
5813       first few characters of any file accessible to the server.
5814      </para>
5815     </listitem>
5816
5817     <listitem>
5818      <para>
5819       Fix memory leaks in certain usages of set-returning functions (Neil)
5820      </para>
5821     </listitem>
5822
5823     <listitem>
5824      <para>
5825       Make <function>encode(<replaceable>bytea</>, 'escape')</> convert all
5826       high-bit-set byte values into <literal>\</><replaceable>nnn</> octal
5827       escape sequences (Tom)
5828      </para>
5829
5830      <para>
5831       This is necessary to avoid encoding problems when the database
5832       encoding is multi-byte.  This change could pose compatibility issues
5833       for applications that are expecting specific results from
5834       <function>encode</>.
5835      </para>
5836     </listitem>
5837
5838     <listitem>
5839      <para>
5840       Fix input of datetime values for February 29 in years BC (Tom)
5841      </para>
5842
5843      <para>
5844       The former coding was mistaken about which years were leap years.
5845      </para>
5846     </listitem>
5847
5848     <listitem>
5849      <para>
5850       Fix <quote>unrecognized node type</> error in some variants of
5851       <command>ALTER OWNER</> (Tom)
5852      </para>
5853     </listitem>
5854
5855     <listitem>
5856      <para>
5857       Avoid tablespace permissions errors in <command>CREATE TABLE LIKE
5858       INCLUDING INDEXES</> (Tom)
5859      </para>
5860     </listitem>
5861
5862     <listitem>
5863      <para>
5864       Ensure <structname>pg_stat_activity</>.<structfield>waiting</> flag
5865       is cleared when a lock wait is aborted (Tom)
5866      </para>
5867     </listitem>
5868
5869     <listitem>
5870      <para>
5871       Fix handling of process permissions on Windows Vista (Dave, Magnus)
5872      </para>
5873
5874      <para>
5875       In particular, this fix allows starting the server as the Administrator
5876       user.
5877      </para>
5878     </listitem>
5879
5880     <listitem>
5881      <para>
5882       Update time zone data files to <application>tzdata</> release 2008a
5883       (in particular, recent Chile changes); adjust timezone abbreviation
5884       <literal>VET</> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
5885      </para>
5886     </listitem>
5887
5888     <listitem>
5889      <para>
5890       Fix <application>ecpg</> problems with arrays (Michael)
5891      </para>
5892     </listitem>
5893
5894     <listitem>
5895      <para>
5896       Fix <application>pg_ctl</> to correctly extract the postmaster's port
5897       number from command-line options (Itagaki Takahiro, Tom)
5898      </para>
5899
5900      <para>
5901       Previously, <literal>pg_ctl start -w</> could try to contact the
5902       postmaster on the wrong port, leading to bogus reports of startup
5903       failure.
5904      </para>
5905     </listitem>
5906
5907     <listitem>
5908      <para>
5909       Use <option>-fwrapv</> to defend against possible misoptimization
5910       in recent <application>gcc</> versions (Tom)
5911      </para>
5912
5913      <para>
5914       This is known to be necessary when building <productname>PostgreSQL</>
5915       with <application>gcc</> 4.3 or later.
5916      </para>
5917     </listitem>
5918
5919     <listitem>
5920      <para>
5921       Enable building <filename>contrib/uuid-ossp</> with MSVC (Hiroshi Saito)
5922      </para>
5923     </listitem>
5924
5925    </itemizedlist>
5926
5927   </sect2>
5928  </sect1>
5929
5930  <sect1 id="release-8-3">
5931   <title>Release 8.3</title>
5932
5933   <note>
5934    <title>Release Date</title>
5935    <simpara>2008-02-04</simpara>
5936   </note>
5937
5938   <sect2>
5939    <title>Overview</title>
5940
5941    <para>
5942     With significant new functionality and performance enhancements,
5943     this release represents a major leap forward for
5944     <productname>PostgreSQL</>. This was made possible by a growing
5945     community that has dramatically accelerated the pace of
5946     development. This release adds the following major features:
5947    </para>
5948
5949    <itemizedlist>
5950
5951     <listitem>
5952      <para>
5953       Full text search is integrated into the core database system
5954      </para>
5955     </listitem>
5956
5957     <listitem>
5958      <para>
5959       Support for the SQL/XML standard, including new operators and an
5960       <type>XML</type> data type
5961      </para>
5962     </listitem>
5963
5964     <listitem>
5965      <para>
5966       Enumerated data types (<type>ENUM</type>)
5967      </para>
5968     </listitem>
5969
5970     <listitem>
5971      <para>
5972       Arrays of composite types
5973      </para>
5974     </listitem>
5975
5976     <listitem>
5977      <para>
5978       Universally Unique Identifier (<type>UUID</>) data type
5979      </para>
5980     </listitem>
5981
5982     <listitem>
5983      <para>
5984       Add control over whether <literal>NULL</>s sort first or last
5985      </para>
5986     </listitem>
5987
5988     <listitem>
5989      <para>
5990       Updatable cursors
5991      </para>
5992     </listitem>
5993
5994     <listitem>
5995      <para>
5996       Server configuration parameters can now be set on a per-function
5997       basis
5998      </para>
5999     </listitem>
6000
6001     <listitem>
6002      <para>
6003       User-defined types can now have type modifiers
6004      </para>
6005     </listitem>
6006
6007     <listitem>
6008      <para>
6009       Automatically re-plan cached queries when table
6010       definitions change or statistics are updated
6011      </para>
6012     </listitem>
6013
6014     <listitem>
6015      <para>
6016       Numerous improvements in logging and statistics collection
6017      </para>
6018     </listitem>
6019
6020     <listitem>
6021      <para>
6022       Support Security Service Provider Interface (<acronym>SSPI</>) for
6023       authentication on Windows
6024      </para>
6025     </listitem>
6026
6027     <listitem>
6028      <para>
6029       Support multiple concurrent autovacuum processes, and other
6030       autovacuum improvements
6031      </para>
6032     </listitem>
6033
6034     <listitem>
6035      <para>
6036       Allow the whole <productname>PostgreSQL</> distribution to be compiled
6037       with <productname>Microsoft Visual C++</>
6038      </para>
6039     </listitem>
6040
6041    </itemizedlist>
6042
6043    <para>
6044     Major performance improvements are listed below.  Most of
6045     these enhancements are automatic and do not require user changes or
6046     tuning:
6047    </para>
6048
6049   <itemizedlist>
6050
6051     <listitem>
6052      <para>
6053       Asynchronous commit delays writes to WAL during transaction commit
6054      </para>
6055     </listitem>
6056
6057     <listitem>
6058      <para>
6059       Checkpoint writes can be spread over a longer time period to smooth
6060       the I/O spike during each checkpoint
6061      </para>
6062     </listitem>
6063
6064     <listitem>
6065      <para>
6066       Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for
6067       most <command>UPDATE</>s and <command>DELETE</>s
6068      </para>
6069     </listitem>
6070
6071     <listitem>
6072      <para>
6073       Just-in-time background writer strategy improves disk write
6074       efficiency
6075      </para>
6076     </listitem>
6077
6078     <listitem>
6079      <para>
6080       Using non-persistent transaction IDs for read-only transactions
6081       reduces overhead and <command>VACUUM</> requirements
6082      </para>
6083     </listitem>
6084
6085     <listitem>
6086      <para>
6087       Per-field and per-row storage overhead has been reduced
6088      </para>
6089     </listitem>
6090
6091     <listitem>
6092      <para>
6093       Large sequential scans no longer force out frequently used
6094       cached pages
6095      </para>
6096     </listitem>
6097
6098     <listitem>
6099      <para>
6100       Concurrent large sequential scans can now share disk reads
6101      </para>
6102     </listitem>
6103
6104     <listitem>
6105      <para>
6106       <literal>ORDER BY ... LIMIT</> can be done without sorting
6107      </para>
6108     </listitem>
6109
6110    </itemizedlist>
6111
6112    <para>
6113     The above items are explained in more detail in the sections below.
6114    </para>
6115
6116   </sect2>
6117
6118   <sect2>
6119    <title>Migration to Version 8.3</title>
6120
6121    <para>
6122     A dump/restore using <application>pg_dump</application> is
6123     required for those wishing to migrate data from any previous
6124     release.
6125    </para>
6126
6127    <para>
6128     Observe the following incompatibilities:
6129    </para>
6130
6131    <sect3>
6132     <title>General</title>
6133     <itemizedlist>
6134
6135      <listitem>
6136       <para>
6137        Non-character data types are no longer automatically cast to
6138        <type>TEXT</> (Peter, Tom)
6139       </para>
6140
6141       <para>
6142        Previously, if a non-character value was supplied to an operator or
6143        function that requires <type>text</> input, it was automatically
6144        cast to <type>text</>, for most (though not all) built-in data types.
6145        This no longer happens: an explicit cast to <type>text</> is now
6146        required for all non-character-string types.  For example, these
6147        expressions formerly worked:
6148
6149 <programlisting>
6150 substr(current_date, 1, 4)
6151 23 LIKE '2%'
6152 </programlisting>
6153
6154        but will now draw <quote>function does not exist</> and <quote>operator
6155        does not exist</> errors respectively.  Use an explicit cast instead:
6156
6157 <programlisting>
6158 substr(current_date::text, 1, 4)
6159 23::text LIKE '2%'
6160 </programlisting>
6161
6162        (Of course, you can use the more verbose <literal>CAST()</> syntax too.)
6163        The reason for the change is that these automatic casts too often caused
6164        surprising behavior.  An example is that in previous releases, this
6165        expression was accepted but did not do what was expected:
6166
6167 <programlisting>
6168 current_date &lt; 2017-11-17
6169 </programlisting>
6170
6171        This is actually comparing a date to an integer, which should be
6172        (and now is) rejected &mdash; but in the presence of automatic
6173        casts both sides were cast to <type>text</> and a textual comparison
6174        was done, because the <literal>text &lt; text</> operator was able
6175        to match the expression when no other <literal>&lt;</> operator could.
6176       </para>
6177
6178       <para>
6179        Types <type>char(<replaceable>n</>)</type> and
6180        <type>varchar(<replaceable>n</>)</type> still cast to <type>text</>
6181        automatically.  Also, automatic casting to <type>text</> still works for
6182        inputs to the concatenation (<literal>||</>) operator, so long as least
6183        one input is a character-string type.
6184       </para>
6185      </listitem>
6186
6187      <listitem>
6188       <para>
6189         Full text search features from <filename>contrib/tsearch2</> have
6190         been moved into the core server, with some minor syntax changes
6191       </para>
6192
6193       <para>
6194        <filename>contrib/tsearch2</> now contains a compatibility
6195        interface.
6196       </para>
6197      </listitem>
6198
6199      <listitem>
6200       <para>
6201        <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</>
6202        returns no rows, now returns an empty array, rather than NULL
6203        (Tom)
6204       </para>
6205      </listitem>
6206
6207      <listitem>
6208       <para>
6209        The array type name for a base data type is no longer always the base
6210        type's name with an underscore prefix
6211       </para>
6212
6213       <para>
6214        The old naming convention is still honored when possible, but
6215        application code should no longer depend on it. Instead
6216        use the new <literal>pg_type.typarray</literal> column to
6217        identify the array data type associated with a given type.
6218       </para>
6219      </listitem>
6220
6221      <listitem>
6222       <para>
6223        <literal>ORDER BY ... USING</> <replaceable>operator</> must now
6224        use a less-than or greater-than <replaceable>operator</> that is
6225        defined in a btree operator class
6226       </para>
6227
6228       <para>
6229        This restriction was added to prevent inconsistent results.
6230       </para>
6231      </listitem>
6232
6233      <listitem>
6234       <para>
6235        <command>SET LOCAL</command> changes now persist until
6236        the end of the outermost transaction, unless rolled back (Tom)
6237       </para>
6238
6239       <para>
6240        Previously <command>SET LOCAL</command>'s effects were lost
6241        after subtransaction commit (<command>RELEASE SAVEPOINT</>
6242        or exit from a PL/pgSQL exception block).
6243       </para>
6244      </listitem>
6245
6246      <listitem>
6247       <para>
6248        Commands rejected in transaction blocks are now also rejected in
6249        multiple-statement query strings (Tom)
6250       </para>
6251
6252       <para>
6253        For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be
6254        rejected even if submitted as a single query message.
6255       </para>
6256      </listitem>
6257
6258      <listitem>
6259       <para>
6260        <command>ROLLBACK</> outside a transaction block now
6261        issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce)
6262       </para>
6263      </listitem>
6264
6265      <listitem>
6266       <para>
6267        Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
6268        from accepting schema-qualified names (Bruce)
6269       </para>
6270
6271       <para>
6272        Formerly, these commands accepted <literal>schema.relation</> but
6273        ignored the schema part, which was confusing.
6274       </para>
6275      </listitem>
6276
6277      <listitem>
6278       <para>
6279        <command>ALTER SEQUENCE</> no longer affects the sequence's
6280        <function>currval()</> state (Tom)
6281       </para>
6282      </listitem>
6283
6284      <listitem>
6285       <para>
6286        Foreign keys now must match indexable conditions for
6287        cross-data-type references (Tom)
6288       </para>
6289
6290       <para>
6291        This improves semantic consistency and helps avoid
6292        performance problems.
6293       </para>
6294      </listitem>
6295
6296      <listitem>
6297       <para>
6298        Restrict object size functions to users who have reasonable
6299        permissions to view such information (Tom)
6300       </para>
6301
6302       <para>
6303        For example, <function>pg_database_size()</function> now requires
6304        <literal>CONNECT</> permission, which is granted to everyone by
6305        default. <function>pg_tablespace_size()</function> requires
6306        <literal>CREATE</> permission in the tablespace, or is allowed if
6307        the tablespace is the default tablespace for the database.
6308       </para>
6309      </listitem>
6310
6311      <listitem>
6312       <para>
6313        Remove the undocumented <literal>!!=</> (not in) operator (Tom)
6314       </para>
6315
6316       <para>
6317        <literal>NOT IN (SELECT ...)</literal> is the proper way to
6318        perform this operation.
6319       </para>
6320      </listitem>
6321
6322      <listitem>
6323       <para>
6324        Internal hashing functions are now more uniformly-distributed (Tom)
6325       </para>
6326
6327       <para>
6328        If application code was computing and storing hash values using
6329        internal <productname>PostgreSQL</> hashing functions, the hash
6330        values must be regenerated.
6331       </para>
6332      </listitem>
6333
6334      <listitem>
6335       <para>
6336        C-code conventions for handling variable-length data values
6337        have changed (Greg Stark, Tom)
6338       </para>
6339
6340       <para>
6341        The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
6342        to set the length of generated <type>varlena</> values. Also, it
6343        might be necessary to expand (<quote>de-TOAST</quote>) input values
6344        in more cases.
6345       </para>
6346      </listitem>
6347
6348      <listitem>
6349       <para>
6350        Continuous archiving no longer reports each successful archive
6351        operation to the server logs unless <literal>DEBUG</> level is used
6352        (Simon)
6353       </para>
6354      </listitem>
6355
6356     </itemizedlist>
6357
6358     </sect3>
6359
6360     <sect3>
6361      <title>Configuration Parameters</title>
6362
6363     <itemizedlist>
6364
6365      <listitem>
6366       <para>
6367        Numerous changes in administrative server parameters
6368       </para>
6369
6370       <para>
6371        <varname>bgwriter_lru_percent</>,
6372        <varname>bgwriter_all_percent</>,
6373        <varname>bgwriter_all_maxpages</>,
6374        <varname>stats_start_collector</>, and
6375        <varname>stats_reset_on_server_start</> are removed.
6376        <varname>redirect_stderr</> is renamed to
6377        <varname>logging_collector</>.
6378        <varname>stats_command_string</> is renamed to
6379        <varname>track_activities</>.
6380        <varname>stats_block_level</> and <varname>stats_row_level</>
6381        are merged into <varname>track_counts</>.
6382        A new boolean configuration parameter, <varname>archive_mode</>,
6383        controls archiving. Autovacuum's default settings have changed.
6384       </para>
6385      </listitem>
6386
6387      <listitem>
6388       <para>
6389        Remove <varname>stats_start_collector</varname> parameter (Tom)
6390       </para>
6391
6392       <para>
6393        We now always start the collector process, unless <acronym>UDP</>
6394        socket creation fails.
6395       </para>
6396      </listitem>
6397
6398      <listitem>
6399       <para>
6400        Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
6401       </para>
6402
6403       <para>
6404        This was removed because <function>pg_stat_reset()</function>
6405        can be used for this purpose.
6406       </para>
6407      </listitem>
6408
6409      <listitem>
6410       <para>
6411        Commenting out a parameter in <filename>postgresql.conf</> now
6412        causes it to revert to its default value (Joachim Wieland)
6413       </para>
6414
6415       <para>
6416        Previously, commenting out an entry left the parameter's value unchanged
6417        until the next server restart.
6418       </para>
6419      </listitem>
6420
6421     </itemizedlist>
6422
6423     </sect3>
6424
6425
6426     <sect3>
6427      <title>Character Encodings</title>
6428
6429     <itemizedlist>
6430
6431      <listitem>
6432       <para>
6433        Add more checks for invalidly-encoded data (Andrew)
6434       </para>
6435
6436       <para>
6437        This change plugs some holes that existed in literal backslash
6438        escape string processing and <command>COPY</command> escape
6439        processing. Now the de-escaped string is rechecked to see if the
6440        result created an invalid multi-byte character.
6441       </para>
6442      </listitem>
6443
6444      <listitem>
6445       <para>
6446        Disallow database encodings that are inconsistent with the server's
6447        locale setting (Tom)
6448       </para>
6449
6450       <para>
6451        On most platforms, <literal>C</> locale is the only locale that
6452        will work with any database encoding.  Other locale settings imply
6453        a specific encoding and will misbehave if the database encoding
6454        is something different.  (Typical symptoms include bogus textual
6455        sort order and wrong results from <function>upper()</> or
6456        <function>lower()</>.)  The server now rejects attempts to create
6457        databases that have an incompatible encoding.
6458       </para>
6459      </listitem>
6460
6461      <listitem>
6462       <para>
6463        Ensure that <function>chr()</function> cannot create
6464        invalidly-encoded values (Andrew)
6465       </para>
6466
6467       <para>
6468        In UTF8-encoded databases the argument of <function>chr()</function> is
6469        now treated as a Unicode code point. In other multi-byte encodings
6470        <function>chr()</function>'s argument must designate a 7-bit ASCII
6471        character.  Zero is no longer accepted.
6472        <function>ascii()</function> has been adjusted to match.
6473       </para>
6474      </listitem>
6475
6476      <listitem>
6477       <para>
6478        Adjust <function>convert()</function> behavior to ensure encoding
6479        validity (Andrew)
6480       </para>
6481
6482       <para>
6483        The two argument form of <function>convert()</function> has been
6484        removed. The three argument form now takes a <type>bytea</type>
6485        first argument and returns a <type>bytea</type>. To cover the
6486        loss of functionality, three new functions have been added:
6487       </para>
6488
6489       <itemizedlist>
6490        <listitem>
6491         <para>
6492          <function>convert_from(bytea, name)</function> returns
6493          <type>text</> &mdash; converts the first argument from the named
6494          encoding to the database encoding
6495         </para>
6496        </listitem>
6497
6498        <listitem>
6499         <para>
6500          <function>convert_to(text, name)</function> returns
6501          <type>bytea</> &mdash; converts the first argument from the
6502          database encoding to the named encoding
6503         </para>
6504        </listitem>
6505
6506        <listitem>
6507         <para>
6508          <function>length(bytea, name)</function> returns
6509          <type>integer</> &mdash; gives the length of the first
6510          argument in characters in the named encoding
6511         </para>
6512        </listitem>
6513       </itemizedlist>
6514      </listitem>
6515
6516      <listitem>
6517       <para>
6518        Remove <literal>convert(argument USING conversion_name)</literal>
6519        (Andrew)
6520       </para>
6521
6522       <para>
6523        Its behavior did not match the SQL standard.
6524       </para>
6525      </listitem>
6526
6527      <listitem>
6528       <para>
6529        Make JOHAB encoding client-only (Tatsuo)
6530       </para>
6531
6532       <para>
6533        JOHAB is not safe as a server-side encoding.
6534       </para>
6535      </listitem>
6536
6537     </itemizedlist>
6538
6539    </sect3>
6540
6541   </sect2>
6542
6543   <sect2>
6544    <title>Changes</title>
6545
6546    <para>
6547     Below you will find a detailed account of the
6548     changes between <productname>PostgreSQL</productname> 8.3 and
6549     the previous major release.
6550    </para>
6551
6552    <sect3>
6553     <title>Performance</title>
6554     <itemizedlist>
6555
6556      <listitem>
6557       <para>
6558        Asynchronous commit delays writes to WAL during transaction commit
6559        (Simon)
6560       </para>
6561
6562       <para>
6563        This feature dramatically increases performance for short data-modifying
6564        transactions.  The disadvantage is that because disk writes are delayed,
6565        if the database or operating system crashes before data is written to
6566        the disk, committed data will be lost.  This feature is useful for
6567        applications that can accept some data loss.  Unlike turning off
6568        <varname>fsync</varname>, using asynchronous commit does not put
6569        database consistency at risk; the worst case is that after a crash the
6570        last few reportedly-committed transactions might not be committed after
6571        all.
6572        This feature is enabled by turning off <varname>synchronous_commit</>
6573        (which can be done per-session or per-transaction, if some transactions
6574        are critical and others are not).
6575        <varname>wal_writer_delay</> can be adjusted to control the maximum
6576        delay before transactions actually reach disk.
6577       </para>
6578      </listitem>
6579
6580      <listitem>
6581       <para>
6582        Checkpoint writes can be spread over a longer time period to smooth
6583        the I/O spike during each checkpoint (Itagaki Takahiro and Heikki
6584        Linnakangas)
6585       </para>
6586
6587       <para>
6588        Previously all modified buffers were forced to disk as quickly as
6589        possible during a
6590        checkpoint, causing an I/O spike that decreased server performance.
6591        This new approach spreads out disk writes during checkpoints,
6592        reducing peak I/O usage. (User-requested and shutdown checkpoints
6593        are still written as quickly as possible.)
6594       </para>
6595      </listitem>
6596
6597      <listitem>
6598       <para>
6599        Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for most
6600        <command>UPDATE</>s and <command>DELETE</>s (Pavan Deolasee, with
6601        ideas from many others)
6602       </para>
6603
6604       <para>
6605        <command>UPDATE</>s and <command>DELETE</>s leave dead tuples
6606        behind, as do failed <command>INSERT</>s.  Previously only
6607        <command>VACUUM</> could reclaim space taken by dead tuples. With
6608        <acronym>HOT</> dead tuple space can be automatically reclaimed at
6609        the time of <command>INSERT</> or <command>UPDATE</> if no changes
6610        are made to indexed columns.  This allows for more consistent
6611        performance.  Also, <acronym>HOT</> avoids adding duplicate index
6612        entries.
6613       </para>
6614      </listitem>
6615
6616      <listitem>
6617       <para>
6618        Just-in-time background writer strategy improves disk write
6619        efficiency (Greg Smith, Itagaki Takahiro)
6620       </para>
6621
6622       <para>
6623        This greatly reduces the need for manual tuning of the background
6624        writer.
6625       </para>
6626      </listitem>
6627
6628      <listitem>
6629       <para>
6630        Per-field and per-row storage overhead have been reduced
6631        (Greg Stark, Heikki Linnakangas)
6632       </para>
6633
6634       <para>
6635        Variable-length data types with data values less than 128 bytes long
6636        will see a storage decrease of 3 to 6 bytes. For example, two adjacent
6637        <type>char(1)</type> fields now use 4 bytes instead of 16. Row headers
6638        are also 4 bytes shorter than before.
6639       </para>
6640      </listitem>
6641
6642      <listitem>
6643       <para>
6644        Using non-persistent transaction IDs for read-only transactions
6645        reduces overhead and <command>VACUUM</> requirements (Florian Pflug)
6646       </para>
6647
6648       <para>
6649        Non-persistent transaction IDs do not increment the global
6650        transaction counter. Therefore, they reduce the load on
6651        <structname>pg_clog</> and increase the time between forced
6652        vacuums to prevent transaction ID wraparound.
6653        Other performance
6654        improvements were also made that should improve concurrency.
6655       </para>
6656      </listitem>
6657
6658      <listitem>
6659       <para>
6660        Avoid incrementing the command counter after a read-only command (Tom)
6661       </para>
6662
6663       <para>
6664        There was formerly a hard limit of 2<superscript>32</>
6665        (4 billion) commands per transaction.  Now only commands that
6666        actually changed the database count, so while this limit still
6667        exists, it should be significantly less annoying.
6668       </para>
6669      </listitem>
6670
6671      <listitem>
6672       <para>
6673        Create a dedicated <acronym>WAL</> writer process to off-load
6674        work from backends (Simon)
6675       </para>
6676      </listitem>
6677
6678      <listitem>
6679       <para>
6680        Skip unnecessary WAL writes for <command>CLUSTER</command> and
6681        <command>COPY</command> (Simon)
6682       </para>
6683
6684       <para>
6685        Unless WAL archiving is enabled, the system now avoids WAL writes
6686        for <command>CLUSTER</command> and just <function>fsync()</>s the
6687        table at the end of the command.  It also does the same for
6688        <command>COPY</command> if the table was created in the same
6689        transaction.
6690       </para>
6691      </listitem>
6692
6693      <listitem>
6694       <para>
6695        Large sequential scans no longer force out frequently used
6696        cached pages (Simon, Heikki, Tom)
6697       </para>
6698      </listitem>
6699
6700      <listitem>
6701       <para>
6702        Concurrent large sequential scans can now share disk reads (Jeff Davis)
6703       </para>
6704
6705       <para>
6706        This is accomplished by starting the new sequential scan in the
6707        middle of the table (where another sequential scan is already
6708        in-progress) and wrapping around to the beginning to finish.  This
6709        can affect the order of returned rows in a query that does not
6710        specify <literal>ORDER BY</>.  The <varname>synchronize_seqscans</>
6711        configuration parameter can be used to disable this if necessary.
6712       </para>
6713      </listitem>
6714
6715      <listitem>
6716       <para>
6717        <literal>ORDER BY ... LIMIT</> can be done without sorting
6718        (Greg Stark)
6719       </para>
6720
6721       <para>
6722        This is done by sequentially scanning the table and tracking just
6723        the <quote>top N</> candidate rows, rather than performing a
6724        full sort of the entire table.  This is useful when there is no
6725        matching index and the <literal>LIMIT</> is not large.
6726       </para>
6727      </listitem>
6728
6729      <listitem>
6730       <para>
6731        Put a rate limit on messages sent to the statistics
6732        collector by backends
6733        (Tom)
6734       </para>
6735
6736       <para>
6737        This reduces overhead for short transactions, but might sometimes
6738        increase the delay before statistics are tallied.
6739       </para>
6740      </listitem>
6741
6742      <listitem>
6743       <para>
6744        Improve hash join performance for cases with many NULLs (Tom)
6745       </para>
6746      </listitem>
6747
6748      <listitem>
6749       <para>
6750        Speed up operator lookup for cases with non-exact datatype matches (Tom)
6751       </para>
6752      </listitem>
6753
6754     </itemizedlist>
6755
6756    </sect3>
6757
6758    <sect3>
6759     <title>Server</title>
6760     <itemizedlist>
6761
6762      <listitem>
6763       <para>
6764        Autovacuum is now enabled by default (Alvaro)
6765       </para>
6766
6767       <para>
6768        Several changes were made to eliminate disadvantages of having
6769        autovacuum enabled, thereby justifying the change in default.
6770        Several other autovacuum parameter defaults were also modified.
6771       </para>
6772      </listitem>
6773
6774      <listitem>
6775       <para>
6776        Support multiple concurrent autovacuum processes (Alvaro, Itagaki
6777        Takahiro)
6778       </para>
6779
6780       <para>
6781        This allows multiple vacuums to run concurrently.  This prevents
6782        vacuuming of a large table from delaying vacuuming of smaller tables.
6783       </para>
6784      </listitem>
6785
6786      <listitem>
6787       <para>
6788        Automatically re-plan cached queries when table
6789        definitions change or statistics are updated (Tom)
6790       </para>
6791
6792       <para>
6793        Previously PL/pgSQL functions that referenced temporary tables
6794        would fail if the temporary table was dropped and recreated
6795        between function invocations, unless <literal>EXECUTE</> was
6796        used.  This improvement fixes that problem and many related issues.
6797       </para>
6798      </listitem>
6799
6800      <listitem>
6801       <para>
6802        Add a <varname>temp_tablespaces</varname> parameter to control
6803        the tablespaces for temporary tables and files (Jaime Casanova,
6804        Albert Cervera, Bernd Helmle)
6805       </para>
6806
6807       <para>
6808        This parameter defines a list of tablespaces to be used.  This
6809        enables spreading the I/O load across multiple tablespaces. A random
6810        tablespace is chosen each time a temporary object is created.
6811        Temporary files are no longer stored in per-database
6812        <filename>pgsql_tmp/</filename> directories but in per-tablespace
6813        directories.
6814       </para>
6815      </listitem>
6816
6817      <listitem>
6818       <para>
6819        Place temporary tables' TOAST tables in special schemas named
6820        <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom)
6821       </para>
6822
6823       <para>
6824        This allows low-level code to recognize these tables as temporary,
6825        which enables various optimizations such as not WAL-logging changes
6826        and using local rather than shared buffers for access. This also
6827        fixes a bug wherein backends unexpectedly held open file references
6828        to temporary TOAST tables.
6829       </para>
6830      </listitem>
6831
6832      <listitem>
6833       <para>
6834        Fix problem that a constant flow of new connection requests could
6835        indefinitely delay the postmaster from completing a shutdown or
6836        a crash restart (Tom)
6837       </para>
6838      </listitem>
6839
6840      <listitem>
6841       <para>
6842        Guard against a very-low-probability data loss scenario by preventing
6843        re-use of a deleted table's relfilenode until after the next
6844        checkpoint (Heikki)
6845       </para>
6846      </listitem>
6847
6848      <listitem>
6849       <para>
6850        Fix <command>CREATE CONSTRAINT TRIGGER</>
6851        to convert old-style foreign key trigger definitions into regular
6852        foreign key constraints (Tom)
6853       </para>
6854
6855       <para>
6856        This will ease porting of foreign key constraints carried forward from
6857        pre-7.3 databases, if they were never converted using
6858        <filename>contrib/adddepend</>.
6859       </para>
6860      </listitem>
6861
6862      <listitem>
6863       <para>
6864        Fix <literal>DEFAULT NULL</> to override inherited defaults (Tom)
6865       </para>
6866
6867       <para>
6868        <literal>DEFAULT NULL</> was formerly considered a noise phrase, but it
6869        should (and now does) override non-null defaults that would otherwise
6870        be inherited from a parent table or domain.
6871       </para>
6872      </listitem>
6873
6874      <listitem>
6875       <para>
6876        Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004 (Tatsuo)
6877       </para>
6878
6879       <para>
6880        These new encodings can be converted to and from UTF-8.
6881       </para>
6882      </listitem>
6883
6884      <listitem>
6885       <para>
6886        Change server startup log message from <quote>database system is
6887        ready</quote> to <quote>database system is ready to accept
6888        connections</quote>, and adjust its timing
6889       </para>
6890
6891       <para>
6892        The message now appears only when the postmaster is really ready
6893        to accept connections.
6894       </para>
6895      </listitem>
6896
6897     </itemizedlist>
6898
6899    </sect3>
6900
6901    <sect3>
6902     <title>Monitoring</title>
6903     <itemizedlist>
6904
6905      <listitem>
6906       <para>
6907        Add <varname>log_autovacuum_min_duration</varname> parameter to
6908        support configurable logging of autovacuum activity (Simon, Alvaro)
6909       </para>
6910      </listitem>
6911
6912      <listitem>
6913       <para>
6914        Add <varname>log_lock_waits</varname> parameter to log lock waiting
6915        (Simon)
6916       </para>
6917      </listitem>
6918
6919      <listitem>
6920       <para>
6921        Add <varname>log_temp_files</varname> parameter to log temporary
6922        file usage (Bill Moran)
6923       </para>
6924      </listitem>
6925
6926      <listitem>
6927       <para>
6928        Add <varname>log_checkpoints</varname> parameter to improve logging
6929        of checkpoints (Greg Smith, Heikki)
6930       </para>
6931      </listitem>
6932
6933      <listitem>
6934       <para>
6935        <varname>log_line_prefix</varname> now supports
6936        <literal>%s</literal> and <literal>%c</literal> escapes in all
6937        processes (Andrew)
6938       </para>
6939
6940       <para>
6941        Previously these escapes worked only for user sessions, not for
6942        background database processes.
6943       </para>
6944      </listitem>
6945
6946      <listitem>
6947       <para>
6948        Add <varname>log_restartpoints</varname> to control logging of
6949        point-in-time recovery restart points (Simon)
6950       </para>
6951      </listitem>
6952
6953      <listitem>
6954       <para>
6955        Last transaction end time is now logged at end of recovery and at
6956        each logged restart point (Simon)
6957       </para>
6958      </listitem>
6959
6960      <listitem>
6961       <para>
6962        Autovacuum now reports its activity start time in
6963        <literal>pg_stat_activity</literal> (Tom)
6964       </para>
6965      </listitem>
6966
6967      <listitem>
6968       <para>
6969        Allow server log output in comma-separated value (CSV) format (Arul
6970        Shaji, Greg Smith, Andrew Dunstan)
6971       </para>
6972
6973       <para>
6974        CSV-format log files can easily be loaded into a database table for
6975        subsequent analysis.
6976       </para>
6977      </listitem>
6978
6979      <listitem>
6980       <para>
6981        Use PostgreSQL-supplied timezone support for formatting timestamps
6982        displayed in the server log (Tom)
6983       </para>
6984
6985       <para>
6986        This avoids Windows-specific problems with localized time zone
6987        names that are in the wrong encoding. There is a new
6988        <varname>log_timezone</> parameter that controls the timezone
6989        used in log messages, independently of the client-visible
6990        <varname>timezone</> parameter.
6991       </para>
6992      </listitem>
6993
6994      <listitem>
6995       <para>
6996        New system view <literal>pg_stat_bgwriter</literal> displays
6997        statistics about background writer activity (Magnus)
6998       </para>
6999      </listitem>
7000
7001      <listitem>
7002       <para>
7003        Add new columns for database-wide tuple statistics to
7004        <literal>pg_stat_database</literal> (Magnus)
7005       </para>
7006      </listitem>
7007
7008      <listitem>
7009       <para>
7010        Add an <literal>xact_start</literal> (transaction start time) column to
7011        <literal>pg_stat_activity</literal> (Neil)
7012       </para>
7013
7014       <para>
7015        This makes it easier to identify long-running transactions.
7016       </para>
7017      </listitem>
7018
7019      <listitem>
7020       <para>
7021        Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns
7022        to <literal>pg_stat_all_tables</literal> and related views (Glen
7023        Parker)
7024       </para>
7025      </listitem>
7026
7027      <listitem>
7028       <para>
7029        Merge <varname>stats_block_level</> and <varname>stats_row_level</>
7030        parameters into a single parameter <varname>track_counts</>, which
7031        controls all messages sent to the statistics collector process
7032        (Tom)
7033       </para>
7034      </listitem>
7035
7036      <listitem>
7037       <para>
7038        Rename <varname>stats_command_string</varname> parameter to
7039        <varname>track_activities</varname> (Tom)
7040       </para>
7041      </listitem>
7042
7043      <listitem>
7044       <para>
7045        Fix statistical counting of live and dead tuples to recognize that
7046        committed and aborted transactions have different effects (Tom)
7047       </para>
7048      </listitem>
7049
7050     </itemizedlist>
7051
7052    </sect3>
7053
7054    <sect3>
7055     <title>Authentication</title>
7056     <itemizedlist>
7057
7058      <listitem>
7059       <para>
7060        Support Security Service Provider Interface (<acronym>SSPI</>) for
7061        authentication on Windows (Magnus)
7062       </para>
7063      </listitem>
7064
7065      <listitem>
7066       <para>
7067        Support GSSAPI authentication (Henry Hotz, Magnus)
7068       </para>
7069
7070       <para>
7071        This should be preferred to native Kerberos authentication because
7072        GSSAPI is an industry standard.
7073       </para>
7074      </listitem>
7075
7076      <listitem>
7077       <para>
7078        Support a global SSL configuration file (Victor Wagner)
7079       </para>
7080      </listitem>
7081
7082      <listitem>
7083       <para>
7084        Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers
7085        (Victor Wagner)
7086       </para>
7087      </listitem>
7088
7089      <listitem>
7090       <para>
7091        Add a Kerberos realm parameter, <varname>krb_realm</> (Magnus)
7092       </para>
7093      </listitem>
7094
7095     </itemizedlist>
7096
7097    </sect3>
7098
7099    <sect3>
7100     <title>Write-Ahead Log (<acronym>WAL</>) and Continuous Archiving</title>
7101     <itemizedlist>
7102
7103      <listitem>
7104       <para>
7105        Change the timestamps recorded in transaction WAL records from
7106        time_t to TimestampTz representation (Tom)
7107       </para>
7108
7109       <para>
7110        This provides sub-second resolution in WAL, which can be useful for
7111        point-in-time recovery.
7112       </para>
7113      </listitem>
7114
7115      <listitem>
7116       <para>
7117        Reduce WAL disk space needed by warm standby servers (Simon)
7118       </para>
7119
7120       <para>
7121        This change allows a warm standby server to pass the name of the earliest
7122        still-needed WAL file to the recovery script, allowing automatic removal
7123        of no-longer-needed WAL files.  This is done using <literal>%r</> in
7124        the <varname>restore_command</varname> parameter of
7125        <filename>recovery.conf</filename>.
7126       </para>
7127      </listitem>
7128
7129      <listitem>
7130       <para>
7131        New boolean configuration parameter, <varname>archive_mode</>,
7132        controls archiving (Simon)
7133       </para>
7134
7135       <para>
7136        Previously setting <varname>archive_command</> to an empty string
7137        turned off archiving. Now <varname>archive_mode</> turns archiving
7138        on and off, independently of <varname>archive_command</>. This is
7139        useful for stopping archiving temporarily.
7140       </para>
7141      </listitem>
7142
7143     </itemizedlist>
7144
7145    </sect3>
7146
7147    <sect3>
7148     <title>Queries</title>
7149     <itemizedlist>
7150
7151      <listitem>
7152       <para>
7153        Full text search is integrated into the core database
7154        system (Teodor, Oleg)
7155       </para>
7156
7157       <para>
7158        Text search has been improved, moved into the core code, and is now
7159        installed by default.  <filename>contrib/tsearch2</> now contains
7160        a compatibility interface.
7161       </para>
7162      </listitem>
7163
7164      <listitem>
7165       <para>
7166        Add control over whether <literal>NULL</>s sort first or last (Teodor, Tom)
7167       </para>
7168
7169       <para>
7170        The syntax is <literal>ORDER BY ... NULLS FIRST/LAST</>.
7171       </para>
7172      </listitem>
7173
7174      <listitem>
7175       <para>
7176        Allow per-column ascending/descending (<literal>ASC</>/<literal>DESC</>)
7177        ordering options for indexes (Teodor, Tom)
7178       </para>
7179
7180       <para>
7181        Previously a query using <literal>ORDER BY</> with mixed
7182        <literal>ASC</>/<literal>DESC</> specifiers could not fully use
7183        an index. Now an index can be fully used in such cases if the
7184        index was created with matching
7185        <literal>ASC</>/<literal>DESC</> specifications.
7186        <literal>NULL</> sort order within an index can be controlled, too.
7187       </para>
7188      </listitem>
7189
7190      <listitem>
7191       <para>
7192        Allow <literal>col IS NULL</> to use an index (Teodor)
7193       </para>
7194      </listitem>
7195
7196      <listitem>
7197       <para>
7198        Updatable cursors (Arul Shaji, Tom)
7199       </para>
7200
7201       <para>
7202        This eliminates the need to reference a primary key to
7203        <command>UPDATE</> or <command>DELETE</> rows returned by a cursor.
7204        The syntax is <literal>UPDATE/DELETE WHERE CURRENT OF</>.
7205       </para>
7206      </listitem>
7207
7208      <listitem>
7209       <para>
7210        Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom)
7211       </para>
7212      </listitem>
7213
7214      <listitem>
7215       <para>
7216        Create a general mechanism that supports casts to and from the
7217        standard string types (<type>TEXT</type>, <type>VARCHAR</type>,
7218        <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by
7219        invoking the datatype's I/O functions (Tom)
7220       </para>
7221
7222       <para>
7223        Previously, such casts were available only for types that had
7224        specialized function(s) for the purpose.
7225        These new casts are assignment-only in the to-string direction,
7226        explicit-only in the other direction, and therefore should create no
7227        surprising behavior.
7228       </para>
7229      </listitem>
7230
7231      <listitem>
7232       <para>
7233        Allow <literal>UNION</> and related constructs to return a domain
7234        type, when all inputs are of that domain type (Tom)
7235       </para>
7236
7237       <para>
7238        Formerly, the output would be considered to be of the domain's base
7239        type.
7240       </para>
7241      </listitem>
7242
7243      <listitem>
7244       <para>
7245        Allow limited hashing when using two different data types (Tom)
7246       </para>
7247
7248       <para>
7249        This allows hash joins, hash indexes, hashed subplans, and hash
7250        aggregation to be used in situations involving cross-data-type
7251        comparisons, if the data types have compatible hash functions.
7252        Currently, cross-data-type hashing support exists for
7253        <type>smallint</type>/<type>integer</type>/<type>bigint</type>,
7254        and for <type>float4</type>/<type>float8</type>.
7255       </para>
7256      </listitem>
7257
7258      <listitem>
7259       <para>
7260        Improve optimizer logic for detecting when variables are equal
7261        in a <literal>WHERE</> clause (Tom)
7262       </para>
7263
7264       <para>
7265        This allows mergejoins to work with descending sort orders, and
7266        improves recognition of redundant sort columns.
7267       </para>
7268      </listitem>
7269
7270      <listitem>
7271       <para>
7272        Improve performance when planning large inheritance trees in
7273        cases where most tables are excluded by constraints (Tom)
7274       </para>
7275      </listitem>
7276
7277     </itemizedlist>
7278
7279    </sect3>
7280
7281    <sect3>
7282     <title>Object Manipulation</title>
7283     <itemizedlist>
7284
7285      <listitem>
7286
7287       <para>
7288        Arrays of composite types (David Fetter, Andrew, Tom)
7289       </para>
7290
7291       <para>
7292        In addition to arrays of explicitly-declared composite types,
7293        arrays of the rowtypes of regular tables and views are now
7294        supported, except for rowtypes of system catalogs, sequences, and TOAST
7295        tables.
7296       </para>
7297
7298      </listitem>
7299
7300      <listitem>
7301       <para>
7302        Server configuration parameters can now be set on a per-function
7303        basis (Tom)
7304       </para>
7305
7306       <para>
7307        For example, functions can now set their own
7308        <varname>search_path</> to prevent unexpected behavior if a
7309        different <varname>search_path</> exists at run-time.  Security
7310        definer functions should set <varname>search_path</varname> to
7311        avoid security loopholes.
7312       </para>
7313      </listitem>
7314
7315      <listitem>
7316       <para>
7317        <command>CREATE/ALTER FUNCTION</command> now supports
7318        <literal>COST</literal> and <literal>ROWS</literal> options (Tom)
7319       </para>
7320
7321       <para>
7322        <literal>COST</literal> allows specification of the cost of a
7323        function call.  <literal>ROWS</literal> allows specification of
7324        the average number or rows returned by a set-returning function.
7325        These values are used by the optimizer in choosing the best plan.
7326       </para>
7327      </listitem>
7328
7329      <listitem>
7330       <para>
7331        Implement <command>CREATE TABLE LIKE ...  INCLUDING
7332        INDEXES</command> (Trevor Hardcastle, Nikhil Sontakke, Neil)
7333       </para>
7334      </listitem>
7335
7336      <listitem>
7337       <para>
7338        Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore
7339        transactions in other databases (Simon)
7340       </para>
7341      </listitem>
7342
7343      <listitem>
7344       <para>
7345        Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
7346        SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
7347       </para>
7348
7349       <para>
7350        Previously this could only be done via <command>ALTER TABLE ...
7351        RENAME TO</command>.
7352       </para>
7353      </listitem>
7354
7355      <listitem>
7356       <para>
7357        Make <command>CREATE/DROP/RENAME DATABASE</> wait briefly for
7358        conflicting backends to exit before failing (Tom)
7359       </para>
7360
7361       <para>
7362        This increases the likelihood that these commands will succeed.
7363       </para>
7364      </listitem>
7365
7366      <listitem>
7367       <para>
7368        Allow triggers and rules to be deactivated in groups using a
7369        configuration parameter, for replication purposes (Jan)
7370       </para>
7371
7372       <para>
7373        This allows replication systems to disable triggers and rewrite
7374        rules as a group without modifying the system catalogs directly.
7375        The behavior is controlled by <command>ALTER TABLE</> and a new
7376        parameter <varname>session_replication_role</varname>.
7377       </para>
7378      </listitem>
7379
7380      <listitem>
7381       <para>
7382        User-defined types can now have type modifiers (Teodor, Tom)
7383       </para>
7384
7385       <para>
7386        This allows a user-defined type to take a modifier, like
7387        <type>ssnum(7)</>.  Previously only built-in
7388        data types could have modifiers.
7389       </para>
7390      </listitem>
7391
7392     </itemizedlist>
7393
7394    </sect3>
7395
7396    <sect3>
7397     <title>Utility Commands</title>
7398     <itemizedlist>
7399
7400      <listitem>
7401       <para>
7402        Non-superuser database owners now are able to add trusted procedural
7403        languages to their databases by default (Jeremy Drake)
7404       </para>
7405
7406       <para>
7407        While this is reasonably safe, some administrators might wish to
7408        revoke the privilege. It is controlled by
7409        <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
7410       </para>
7411      </listitem>
7412
7413      <listitem>
7414       <para>
7415        Allow a session's current parameter setting to be used as the
7416        default for future sessions (Tom)
7417       </para>
7418
7419       <para>
7420        This is done with <literal>SET ... FROM CURRENT</literal> in
7421        <command>CREATE/ALTER FUNCTION</command>, <command>ALTER
7422        DATABASE</command>, or <command>ALTER ROLE</command>.
7423       </para>
7424      </listitem>
7425
7426      <listitem>
7427       <para>
7428        Implement new commands <command>DISCARD ALL</command>,
7429        <command>DISCARD PLANS</command>, <command>DISCARD
7430        TEMPORARY</command>, <command>CLOSE ALL</command>, and
7431        <command>DEALLOCATE ALL</command> (Marko Kreen, Neil)
7432       </para>
7433
7434       <para>
7435        These commands simplify resetting a database session to its initial
7436        state, and are particularly useful for connection-pooling software.
7437       </para>
7438      </listitem>
7439
7440      <listitem>
7441       <para>
7442        Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas)
7443       </para>
7444
7445       <para>
7446        Formerly, <command>CLUSTER</command> would discard all tuples
7447        that were committed dead, even if there were still transactions
7448        that should be able to see them under MVCC visibility rules.
7449       </para>
7450      </listitem>
7451
7452      <listitem>
7453       <para>
7454        Add new <command>CLUSTER</command> syntax: <literal>CLUSTER
7455        <replaceable>table</> USING <replaceable>index</></literal>
7456        (Holger Schurig)
7457      </para>
7458
7459       <para>
7460        The old <command>CLUSTER</command> syntax is still supported, but
7461        the new form is considered more logical.
7462       </para>
7463      </listitem>
7464
7465      <listitem>
7466       <para>
7467        Fix <command>EXPLAIN</command> so it can show complex plans
7468        more accurately (Tom)
7469       </para>
7470
7471       <para>
7472        References to subplan outputs are now always shown correctly,
7473        instead of using <literal>?column<replaceable>N</>?</literal>
7474        for complicated cases.
7475       </para>
7476      </listitem>
7477
7478      <listitem>
7479       <para>
7480        Limit the amount of information reported when a user is dropped
7481        (Alvaro)
7482       </para>
7483
7484       <para>
7485        Previously, dropping (or attempting to drop) a user who owned many
7486        objects could result in large <literal>NOTICE</literal> or
7487        <literal>ERROR</literal> messages listing all these objects; this
7488        caused problems for some client applications.  The length of the
7489        message is now limited, although a full list is still sent to the
7490        server log.
7491       </para>
7492      </listitem>
7493
7494     </itemizedlist>
7495
7496    </sect3>
7497
7498    <sect3>
7499     <title>Data Types</title>
7500     <itemizedlist>
7501
7502      <listitem>
7503       <para>
7504        Support for the SQL/XML standard, including new operators and an
7505        <type>XML</type> data type (Nikolay Samokhvalov, Pavel Stehule, Peter)
7506       </para>
7507      </listitem>
7508
7509      <listitem>
7510       <para>
7511        Enumerated data types (<type>ENUM</type>) (Tom Dunstan)
7512       </para>
7513
7514       <para>
7515        This feature provides convenient support for fields that have a
7516        small, fixed set of allowed values.  An example of creating an
7517        <literal>ENUM</> type is
7518        <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
7519       </para>
7520      </listitem>
7521
7522      <listitem>
7523       <para>
7524        Universally Unique Identifier (<type>UUID</>) data type (Gevik
7525        Babakhani, Neil)
7526       </para>
7527
7528       <para>
7529        This closely matches <acronym>RFC</> 4122.
7530       </para>
7531      </listitem>
7532
7533      <listitem>
7534       <para>
7535        Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain)
7536       </para>
7537
7538       <para>
7539        This greatly increases the range of supported <type>MONEY</>
7540        values.
7541       </para>
7542      </listitem>
7543
7544      <listitem>
7545       <para>
7546        Fix <type>float4</type>/<type>float8</type> to handle
7547        <literal>Infinity</> and <literal>NAN</> (Not A Number)
7548        consistently (Bruce)
7549       </para>
7550
7551       <para>
7552        The code formerly was not consistent about distinguishing
7553        <literal>Infinity</> from overflow conditions.
7554       </para>
7555      </listitem>
7556
7557      <listitem>
7558       <para>
7559        Allow leading and trailing whitespace during input of
7560        <type>boolean</type> values (Neil)
7561       </para>
7562      </listitem>
7563
7564      <listitem>
7565       <para>
7566        Prevent <command>COPY</> from using digits and lowercase letters as
7567        delimiters (Tom)
7568       </para>
7569      </listitem>
7570
7571     </itemizedlist>
7572
7573    </sect3>
7574
7575    <sect3>
7576     <title>Functions</title>
7577     <itemizedlist>
7578
7579      <listitem>
7580       <para>
7581        Add new regular expression functions
7582        <function>regexp_matches()</function>,
7583        <function>regexp_split_to_array()</function>, and
7584        <function>regexp_split_to_table()</function> (Jeremy Drake, Neil)
7585       </para>
7586
7587       <para>
7588        These functions provide extraction of regular expression
7589        subexpressions and allow splitting a string using a POSIX regular
7590        expression.
7591       </para>
7592      </listitem>
7593
7594      <listitem>
7595       <para>
7596        Add <function>lo_truncate()</function> for large object truncation
7597        (Kris Jurka)
7598       </para>
7599      </listitem>
7600
7601      <listitem>
7602       <para>
7603        Implement <function>width_bucket()</function> for the <type>float8</>
7604        data type (Neil)
7605       </para>
7606      </listitem>
7607
7608      <listitem>
7609       <para>
7610        Add <function>pg_stat_clear_snapshot()</function> to discard
7611        statistics snapshots collected during the current transaction
7612        (Tom)
7613       </para>
7614
7615       <para>
7616        The first request for statistics in a transaction takes a statistics
7617        snapshot that does not change during the transaction.  This function
7618        allows the snapshot to be discarded and a new snapshot loaded during
7619        the next statistics query. This is particularly useful for PL/pgSQL
7620        functions, which are confined to a single transaction.
7621       </para>
7622      </listitem>
7623
7624      <listitem>
7625       <para>
7626        Add <literal>isodow</> option to <function>EXTRACT()</> and
7627        <function>date_part()</> (Bruce)
7628       </para>
7629
7630       <para>
7631        This returns the day of the week, with Sunday as seven.
7632        (<literal>dow</> returns Sunday as zero.)
7633       </para>
7634      </listitem>
7635
7636      <listitem>
7637       <para>
7638        Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO
7639        day of year) format codes for <function>to_char()</>,
7640        <function>to_date()</>, and <function>to_timestamp()</> (Brendan
7641        Jurd)
7642       </para>
7643      </listitem>
7644
7645      <listitem>
7646       <para>
7647        Make <function>to_timestamp()</> and <function>to_date()</>
7648        assume <literal>TM</literal> (trim) option for potentially
7649        variable-width fields (Bruce)
7650       </para>
7651
7652       <para>
7653        This matches <productname>Oracle</>'s behavior.
7654       </para>
7655      </listitem>
7656
7657      <listitem>
7658       <para>
7659        Fix off-by-one conversion error in
7660        <function>to_date()</function>/<function>to_timestamp()</function>
7661        <literal>D</> (non-ISO day of week) fields (Bruce)
7662       </para>
7663      </listitem>
7664
7665      <listitem>
7666       <para>
7667        Make <function>setseed()</function> return void, rather than a
7668        useless integer value (Neil)
7669       </para>
7670      </listitem>
7671
7672      <listitem>
7673       <para>
7674        Add a hash function for <type>NUMERIC</type> (Neil)
7675       </para>
7676
7677       <para>
7678        This allows hash indexes and hash-based plans to be used with
7679        <type>NUMERIC</type> columns.
7680       </para>
7681      </listitem>
7682
7683      <listitem>
7684       <para>
7685        Improve efficiency of
7686        <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for
7687        multi-byte character sets like UTF-8 (Andrew, Itagaki Takahiro)
7688       </para>
7689      </listitem>
7690
7691      <listitem>
7692       <para>
7693        Make <function>currtid()</function> functions require
7694        <literal>SELECT</literal> privileges on the target table (Tom)
7695       </para>
7696      </listitem>
7697
7698      <listitem>
7699       <para>
7700        Add several <function>txid_*()</function> functions to query
7701        active transaction IDs (Jan)
7702       </para>
7703
7704       <para>
7705        This is useful for various replication solutions.
7706       </para>
7707      </listitem>
7708
7709     </itemizedlist>
7710
7711    </sect3>
7712
7713    <sect3>
7714     <title>PL/pgSQL Server-Side Language</title>
7715     <itemizedlist>
7716
7717      <listitem>
7718       <para>
7719        Add scrollable cursor support, including directional control in
7720        <command>FETCH</command> (Pavel Stehule)
7721       </para>
7722      </listitem>
7723
7724      <listitem>
7725       <para>
7726        Allow <literal>IN</literal> as an alternative to
7727        <literal>FROM</literal> in PL/pgSQL's <command>FETCH</command>
7728        statement, for consistency with the backend's
7729        <command>FETCH</command> command (Pavel Stehule)
7730       </para>
7731      </listitem>
7732
7733      <listitem>
7734       <para>
7735        Add <command>MOVE</command> to PL/pgSQL (Magnus, Pavel Stehule,
7736        Neil)
7737       </para>
7738      </listitem>
7739
7740      <listitem>
7741       <para>
7742        Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil)
7743       </para>
7744
7745       <para>
7746        This adds convenient syntax for PL/pgSQL set-returning functions
7747        that want to return the result of a query.  <command>RETURN QUERY</>
7748        is easier and more efficient than a loop
7749        around <command>RETURN NEXT</command>.
7750       </para>
7751      </listitem>
7752
7753      <listitem>
7754       <para>
7755        Allow function parameter names to be qualified with the
7756        function's name (Tom)
7757       </para>
7758
7759       <para>
7760        For example, <literal>myfunc.myvar</>. This is particularly
7761        useful for specifying variables in a query where the variable
7762        name might match a column name.
7763       </para>
7764      </listitem>
7765
7766      <listitem>
7767       <para>
7768        Make qualification of variables with block labels work properly (Tom)
7769       </para>
7770
7771       <para>
7772        Formerly, outer-level block labels could unexpectedly interfere with
7773        recognition of inner-level record or row references.
7774       </para>
7775      </listitem>
7776
7777      <listitem>
7778       <para>
7779        Tighten requirements for <literal>FOR</literal> loop
7780        <literal>STEP</> values (Tom)
7781       </para>
7782
7783       <para>
7784        Prevent non-positive <literal>STEP</> values, and handle
7785        loop overflows.
7786       </para>
7787      </listitem>
7788
7789      <listitem>
7790       <para>
7791        Improve accuracy when reporting syntax error locations (Tom)
7792       </para>
7793      </listitem>
7794
7795     </itemizedlist>
7796
7797    </sect3>
7798
7799    <sect3>
7800     <title>Other Server-Side Languages</title>
7801     <itemizedlist>
7802
7803      <listitem>
7804       <para>
7805        Allow type-name arguments to PL/Perl
7806        <function>spi_prepare()</function> to be data type aliases in
7807        addition to names found in <literal>pg_type</literal> (Andrew)
7808       </para>
7809      </listitem>
7810
7811      <listitem>
7812       <para>
7813        Allow type-name arguments to PL/Python
7814        <function>plpy.prepare()</function> to be data type aliases in
7815        addition to names found in <literal>pg_type</literal> (Andrew)
7816       </para>
7817      </listitem>
7818
7819      <listitem>
7820       <para>
7821        Allow type-name arguments to PL/Tcl <function>spi_prepare</> to
7822        be data type aliases in addition to names found in
7823        <literal>pg_type</literal> (Andrew)
7824       </para>
7825      </listitem>
7826
7827      <listitem>
7828       <para>
7829        Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
7830       </para>
7831      </listitem>
7832
7833      <listitem>
7834       <para>
7835        Support a true PL/Python boolean type in compatible Python versions
7836        (Python 2.3 and later) (Marko Kreen)
7837       </para>
7838      </listitem>
7839
7840      <listitem>
7841       <para>
7842        Fix PL/Tcl problems with thread-enabled <filename>libtcl</> spawning
7843        multiple threads within the backend (Steve Marshall, Paul Bayer,
7844        Doug Knight)
7845       </para>
7846
7847       <para>
7848        This caused all sorts of unpleasantness.
7849       </para>
7850      </listitem>
7851
7852     </itemizedlist>
7853
7854    </sect3>
7855
7856    <sect3>
7857     <title><link linkend="APP-PSQL"><application>psql</></link></title>
7858     <itemizedlist>
7859
7860      <listitem>
7861       <para>
7862        List disabled triggers separately in <literal>\d</literal> output
7863        (Brendan Jurd)
7864       </para>
7865      </listitem>
7866
7867      <listitem>
7868       <para>
7869        In <literal>\d</literal> patterns, always match <literal>$</literal>
7870        literally (Tom)
7871       </para>
7872      </listitem>
7873
7874      <listitem>
7875       <para>
7876        Show aggregate return types in <literal>\da</literal> output
7877        (Greg Sabino Mullane)
7878       </para>
7879      </listitem>
7880
7881      <listitem>
7882       <para>
7883        Add the function's volatility status to the output of
7884        <literal>\df+</literal> (Neil)
7885       </para>
7886      </listitem>
7887
7888      <listitem>
7889       <para>
7890        Add <literal>\prompt</literal> capability (Chad Wagner)
7891       </para>
7892      </listitem>
7893
7894      <listitem>
7895       <para>
7896        Allow <literal>\pset</literal>, <literal>\t</literal>, and
7897        <literal>\x</literal> to specify <literal>on</> or <literal>off</>,
7898        rather than just toggling (Chad Wagner)
7899       </para>
7900      </listitem>
7901
7902      <listitem>
7903       <para>
7904        Add <literal>\sleep</> capability (Jan)
7905       </para>
7906      </listitem>
7907
7908      <listitem>
7909       <para>
7910        Enable <literal>\timing</> output for <literal>\copy</> (Andrew)
7911       </para>
7912      </listitem>
7913
7914      <listitem>
7915       <para>
7916        Improve <literal>\timing</literal> resolution on Windows
7917        (Itagaki Takahiro)
7918       </para>
7919      </listitem>
7920
7921      <listitem>
7922       <para>
7923        Flush <literal>\o</> output after each backslash command (Tom)
7924       </para>
7925      </listitem>
7926
7927      <listitem>
7928       <para>
7929        Correctly detect and report errors while reading a <literal>-f</>
7930        input file (Peter)
7931       </para>
7932      </listitem>
7933
7934      <listitem>
7935       <para>
7936        Remove <literal>-u</> option (this option has long been deprecated)
7937        (Tom)
7938       </para>
7939      </listitem>
7940
7941     </itemizedlist>
7942
7943    </sect3>
7944
7945    <sect3>
7946     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
7947     <itemizedlist>
7948
7949      <listitem>
7950       <para>
7951        Add <literal>--tablespaces-only</> and <literal>--roles-only</>
7952        options to <application>pg_dumpall</application> (Dave Page)
7953       </para>
7954      </listitem>
7955
7956      <listitem>
7957       <para>
7958        Add an output file option to
7959        <application>pg_dumpall</application> (Dave Page)
7960       </para>
7961
7962       <para>
7963        This is primarily useful on Windows, where output redirection of
7964        child <application>pg_dump</application> processes does not work.
7965       </para>
7966      </listitem>
7967
7968      <listitem>
7969       <para>
7970        Allow <application>pg_dumpall</> to accept an initial-connection
7971        database name rather than the default
7972        <literal>template1</literal> (Dave Page)
7973       </para>
7974      </listitem>
7975
7976      <listitem>
7977       <para>
7978        In <literal>-n</> and <literal>-t</> switches, always match
7979        <literal>$</literal> literally (Tom)
7980       </para>
7981      </listitem>
7982
7983      <listitem>
7984       <para>
7985        Improve performance when a database has thousands of objects (Tom)
7986       </para>
7987      </listitem>
7988
7989      <listitem>
7990       <para>
7991        Remove <literal>-u</> option (this option has long been deprecated)
7992        (Tom)
7993       </para>
7994      </listitem>
7995
7996     </itemizedlist>
7997
7998    </sect3>
7999
8000    <sect3>
8001     <title>Other Client Applications</title>
8002     <itemizedlist>
8003
8004      <listitem>
8005       <para>
8006        In <application>initdb</>, allow the location of the
8007        <filename>pg_xlog</filename> directory to be specified
8008        (Euler Taveira de Oliveira)
8009       </para>
8010      </listitem>
8011
8012      <listitem>
8013       <para>
8014        Enable server core dump generation in <application>pg_regress</>
8015        on supported operating systems (Andrew)
8016       </para>
8017      </listitem>
8018
8019      <listitem>
8020       <para>
8021        Add a <literal>-t</> (timeout) parameter to <application>pg_ctl</>
8022        (Bruce)
8023       </para>
8024
8025       <para>
8026        This controls how long <application>pg_ctl</> will wait when waiting
8027        for server startup or shutdown.  Formerly the timeout was hard-wired
8028        as 60 seconds.
8029       </para>
8030      </listitem>
8031
8032      <listitem>
8033       <para>
8034        Add a <application>pg_ctl</> option to control generation
8035        of server core dumps (Andrew)
8036       </para>
8037      </listitem>
8038
8039      <listitem>
8040       <para>
8041        Allow Control-C to cancel <application>clusterdb</>,
8042        <application>reindexdb</>, and <application>vacuumdb</> (Itagaki
8043        Takahiro, Magnus)
8044       </para>
8045      </listitem>
8046
8047      <listitem>
8048       <para>
8049        Suppress command tag output for <application>createdb</>,
8050        <application>createuser</>, <application>dropdb</>, and
8051        <application>dropuser</> (Peter)
8052       </para>
8053
8054       <para>
8055        The <literal>--quiet</> option is ignored and will be removed in 8.4.
8056        Progress messages when acting on all databases now go to stdout
8057        instead of stderr because they are not actually errors.
8058       </para>
8059      </listitem>
8060
8061     </itemizedlist>
8062
8063    </sect3>
8064
8065    <sect3>
8066     <title><link linkend="libpq"><application>libpq</></link></title>
8067     <itemizedlist>
8068
8069      <listitem>
8070       <para>
8071        Interpret the <literal>dbName</> parameter of
8072        <function>PQsetdbLogin()</> as a <literal>conninfo</> string if
8073        it contains an equals sign (Andrew)
8074       </para>
8075
8076       <para>
8077        This allows use of <literal>conninfo</> strings in client
8078        programs that still use <literal>PQsetdbLogin()</>.
8079       </para>
8080      </listitem>
8081
8082      <listitem>
8083       <para>
8084        Support a global <acronym>SSL</> configuration file (Victor
8085        Wagner)
8086       </para>
8087      </listitem>
8088
8089      <listitem>
8090       <para>
8091        Add environment variable <varname>PGSSLKEY</> to control
8092        <acronym>SSL</> hardware keys (Victor Wagner)
8093       </para>
8094      </listitem>
8095
8096      <listitem>
8097       <para>
8098        Add <function>lo_truncate()</function> for large object
8099        truncation (Kris Jurka)
8100       </para>
8101      </listitem>
8102
8103      <listitem>
8104       <para>
8105        Add <function>PQconnectionNeedsPassword()</function> that returns
8106        true if the server required a password but none was supplied
8107        (Joe Conway, Tom)
8108       </para>
8109
8110       <para>
8111        If this returns true after a failed connection attempt, a client
8112        application should prompt the user for a password.  In the past
8113        applications have had to check for a specific error message string to
8114        decide whether a password is needed; that approach is now
8115        deprecated.
8116       </para>
8117      </listitem>
8118
8119      <listitem>
8120       <para>
8121        Add <function>PQconnectionUsedPassword()</function> that returns
8122        true if the supplied password was actually used
8123        (Joe Conway, Tom)
8124       </para>
8125
8126       <para>
8127        This is useful in some security contexts where it is important
8128        to know whether a user-supplied password is actually valid.
8129       </para>
8130      </listitem>
8131
8132     </itemizedlist>
8133
8134    </sect3>
8135
8136    <sect3>
8137     <title><link linkend="ecpg"><application>ecpg</></link></title>
8138     <itemizedlist>
8139
8140      <listitem>
8141       <para>
8142        Use V3 frontend/backend protocol (Michael)
8143       </para>
8144
8145       <para>
8146        This adds support for server-side prepared statements.
8147       </para>
8148      </listitem>
8149
8150      <listitem>
8151       <para>
8152        Use native threads, instead of pthreads, on Windows (Magnus)
8153       </para>
8154      </listitem>
8155
8156      <listitem>
8157       <para>
8158        Improve thread-safety of ecpglib (Itagaki Takahiro)
8159       </para>
8160      </listitem>
8161
8162      <listitem>
8163       <para>
8164        Make the ecpg libraries export only necessary API symbols (Michael)
8165       </para>
8166      </listitem>
8167
8168     </itemizedlist>
8169
8170    </sect3>
8171
8172    <sect3>
8173     <title><application>Windows</> Port</title>
8174     <itemizedlist>
8175
8176      <listitem>
8177       <para>
8178        Allow the whole <productname>PostgreSQL</> distribution to be compiled
8179        with <productname>Microsoft Visual C++</> (Magnus and others)
8180       </para>
8181
8182       <para>
8183        This allows Windows-based developers to use familiar development
8184        and debugging tools.
8185        Windows executables made with Visual C++ might also have better
8186        stability and performance than those made with other tool sets.
8187        The client-only Visual C++ build scripts have been removed.
8188       </para>
8189      </listitem>
8190
8191      <listitem>
8192       <para>
8193        Drastically reduce postmaster's memory usage when it has many child
8194        processes (Magnus)
8195       </para>
8196      </listitem>
8197
8198      <listitem>
8199       <para>
8200        Allow regression tests to be started by an administrative
8201        user (Magnus)
8202       </para>
8203      </listitem>
8204
8205      <listitem>
8206       <para>
8207        Add native shared memory implementation (Magnus)
8208       </para>
8209      </listitem>
8210
8211     </itemizedlist>
8212
8213    </sect3>
8214
8215    <sect3>
8216     <title>Server Programming Interface (<acronym>SPI</>)</title>
8217     <itemizedlist>
8218
8219      <listitem>
8220       <para>
8221        Add cursor-related functionality in SPI (Pavel Stehule)
8222       </para>
8223
8224       <para>
8225        Allow access to the cursor-related planning options, and add
8226        <command>FETCH</>/<command>MOVE</> routines.
8227       </para>
8228      </listitem>
8229
8230      <listitem>
8231       <para>
8232        Allow execution of cursor commands through
8233        <function>SPI_execute</function> (Tom)
8234       </para>
8235
8236       <para>
8237        The macro <literal>SPI_ERROR_CURSOR</> still exists but will
8238        never be returned.
8239       </para>
8240      </listitem>
8241
8242      <listitem>
8243       <para>
8244        SPI plan pointers are now declared as <literal>SPIPlanPtr</> instead of
8245        <literal>void *</> (Tom)
8246       </para>
8247
8248       <para>
8249        This does not break application code, but switching is
8250        recommended to help catch simple programming mistakes.
8251       </para>
8252      </listitem>
8253
8254     </itemizedlist>
8255
8256    </sect3>
8257
8258    <sect3>
8259     <title>Build Options</title>
8260     <itemizedlist>
8261
8262      <listitem>
8263       <para>
8264        Add <application>configure</> option <literal>--enable-profiling</>
8265        to enable code profiling (works only with <application>gcc</>)
8266        (Korry Douglas and Nikhil Sontakke)
8267       </para>
8268      </listitem>
8269
8270      <listitem>
8271       <para>
8272        Add <application>configure</> option <literal>--with-system-tzdata</>
8273        to use the operating system's time zone database (Peter)
8274       </para>
8275      </listitem>
8276
8277      <listitem>
8278       <para>
8279        Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
8280        installations whose <application>pg_config</> program does not
8281        appear first in the <varname>PATH</> (Tom)
8282       </para>
8283      </listitem>
8284
8285      <listitem>
8286       <para>
8287        Support <command>gmake draft</command> when building the
8288        <acronym>SGML</> documentation (Bruce)
8289       </para>
8290
8291       <para>
8292        Unless <literal>draft</> is used, the documentation build will
8293        now be repeated if necessary to ensure the index is up-to-date.
8294       </para>
8295      </listitem>
8296
8297     </itemizedlist>
8298
8299    </sect3>
8300
8301    <sect3>
8302     <title>Source Code</title>
8303     <itemizedlist>
8304
8305      <listitem>
8306       <para>
8307        Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
8308        avoid conflicting with third party includes (like Tcl) that
8309        define <literal>DLLIMPORT</> (Magnus)
8310       </para>
8311      </listitem>
8312
8313      <listitem>
8314       <para>
8315        Create <quote>operator families</quote> to improve planning of
8316        queries involving cross-data-type comparisons (Tom)
8317       </para>
8318      </listitem>
8319
8320      <listitem>
8321       <para>
8322        Update GIN <function>extractQuery()</> API to allow signalling
8323        that nothing can satisfy the query (Teodor)
8324       </para>
8325      </listitem>
8326
8327      <listitem>
8328       <para>
8329        Move <literal>NAMEDATALEN</> definition from
8330        <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
8331        (Peter)
8332       </para>
8333      </listitem>
8334
8335      <listitem>
8336       <para>
8337        Provide <function>strlcpy()</function> and
8338        <function>strlcat()</function> on all platforms, and replace
8339        error-prone uses of <function>strncpy()</function>,
8340        <function>strncat()</function>, etc (Peter)
8341       </para>
8342      </listitem>
8343
8344      <listitem>
8345       <para>
8346        Create hooks to let an external plugin monitor (or even replace) the
8347        planner and create plans for hypothetical situations (Gurjeet
8348        Singh, Tom)
8349       </para>
8350      </listitem>
8351
8352      <listitem>
8353       <para>
8354        Create a function variable <literal>join_search_hook</> to let plugins
8355        override the join search order portion of the planner (Julius
8356        Stroffek)
8357       </para>
8358      </listitem>
8359
8360      <listitem>
8361       <para>
8362        Add <function>tas()</> support for Renesas' M32R processor
8363        (Kazuhiro Inaoka)
8364       </para>
8365      </listitem>
8366
8367      <listitem>
8368       <para>
8369        <function>quote_identifier()</function> and
8370        <application>pg_dump</application> no longer quote keywords that are
8371        unreserved according to the grammar (Tom)
8372       </para>
8373      </listitem>
8374
8375      <listitem>
8376       <para>
8377        Change the on-disk representation of the <type>NUMERIC</type>
8378        data type so that the <structfield>sign_dscale</> word comes
8379        before the weight (Tom)
8380       </para>
8381      </listitem>
8382
8383      <listitem>
8384       <para>
8385        Use <acronym>SYSV</> semaphores rather than POSIX on Darwin
8386        &gt;= 6.0, i.e., OS X 10.2 and up (Chris Marcellino)
8387       </para>
8388      </listitem>
8389
8390      <listitem>
8391       <para>
8392        Add <link linkend="acronyms">acronym</link> and <link
8393        linkend="creating-cluster-nfs">NFS</link> documentation
8394        sections (Bruce)
8395       </para>
8396      </listitem>
8397
8398      <listitem>
8399       <para>
8400        "Postgres" is now documented as an accepted alias for
8401        "PostgreSQL" (Peter)
8402       </para>
8403      </listitem>
8404
8405      <listitem>
8406       <para>
8407        Add documentation about preventing database server spoofing when
8408        the server is down (Bruce)
8409       </para>
8410      </listitem>
8411
8412     </itemizedlist>
8413
8414    </sect3>
8415
8416    <sect3>
8417     <title>Contrib</title>
8418     <itemizedlist>
8419
8420      <listitem>
8421       <para>
8422        Move <filename>contrib</> <filename>README</> content into the
8423        main <productname>PostgreSQL</> documentation (Albert Cervera i
8424        Areny)
8425       </para>
8426      </listitem>
8427
8428      <listitem>
8429       <para>
8430        Add <filename>contrib/pageinspect</filename> module for low-level
8431        page inspection (Simon, Heikki)
8432       </para>
8433      </listitem>
8434
8435      <listitem>
8436       <para>
8437        Add <filename>contrib/pg_standby</filename> module for controlling
8438        warm standby operation (Simon)
8439       </para>
8440      </listitem>
8441
8442      <listitem>
8443       <para>
8444        Add <filename>contrib/uuid-ossp</filename> module for generating
8445        <type>UUID</> values using the OSSP UUID library (Peter)
8446       </para>
8447
8448       <para>
8449        Use <application>configure</>
8450        <literal>--with-ossp-uuid</literal> to activate. This takes
8451        advantage of the new <type>UUID</type> builtin type.
8452       </para>
8453      </listitem>
8454
8455      <listitem>
8456       <para>
8457        Add <filename>contrib/dict_int</filename>,
8458        <filename>contrib/dict_xsyn</filename>, and
8459        <filename>contrib/test_parser</filename> modules to provide
8460        sample add-on text search dictionary templates and parsers
8461        (Sergey Karpov)
8462       </para>
8463      </listitem>
8464
8465      <listitem>
8466       <para>
8467        Allow <application>contrib/pgbench</> to set the fillfactor (Pavan
8468        Deolasee)
8469       </para>
8470      </listitem>
8471
8472      <listitem>
8473       <para>
8474        Add timestamps to <application>contrib/pgbench</> <literal>-l</>
8475        (Greg Smith)
8476       </para>
8477      </listitem>
8478
8479      <listitem>
8480       <para>
8481        Add usage count statistics to
8482        <filename>contrib/pgbuffercache</filename> (Greg Smith)
8483       </para>
8484      </listitem>
8485
8486      <listitem>
8487       <para>
8488        Add GIN support for <filename>contrib/hstore</> (Teodor)
8489       </para>
8490      </listitem>
8491
8492      <listitem>
8493       <para>
8494        Add GIN support for <filename>contrib/pg_trgm</> (Guillaume Smet, Teodor)
8495       </para>
8496      </listitem>
8497
8498      <listitem>
8499       <para>
8500        Update OS/X startup scripts in
8501        <filename>contrib/start-scripts</filename> (Mark Cotner, David
8502        Fetter)
8503       </para>
8504      </listitem>
8505
8506      <listitem>
8507       <para>
8508        Restrict <function>pgrowlocks()</function> and
8509        <function>dblink_get_pkey()</function> to users who have
8510        <literal>SELECT</literal> privilege on the target table (Tom)
8511       </para>
8512      </listitem>
8513
8514      <listitem>
8515       <para>
8516        Restrict <filename>contrib/pgstattuple</filename> functions to
8517        superusers (Tom)
8518       </para>
8519      </listitem>
8520
8521      <listitem>
8522       <para>
8523        <filename>contrib/xml2</filename> is deprecated and planned for
8524        removal in 8.4 (Peter)
8525       </para>
8526
8527       <para>
8528        The new XML support in core PostgreSQL supersedes this module.
8529       </para>
8530      </listitem>
8531
8532     </itemizedlist>
8533
8534    </sect3>
8535   </sect2>
8536  </sect1>