]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release.sgml
Some desultory markup improvements in the new release notes.
[postgresql] / doc / src / sgml / release.sgml
1 <!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.514 2007/10/04 22:55:49 tgl Exp $ -->
2 <!--
3
4 Typical markup:
5
6 &<>                             use & escapes
7 [A-Z][A-Z ]+[A-Z]               <command>
8 [A-Za-z_][A-Za-z0-9_]+()        <function>
9 [A-Za-z_]/[A-Za-z_]+            <filename>
10 PostgreSQL                      <productname>
11 pg_[A-Za-z0-9_]                 <application>
12 [A-Z][A-Z]                      <type>, <envar>, <literal>
13
14 non-ASCII characters            convert to HTML4 entity (&) escapes
15
16         official:      http://www.w3.org/TR/html4/sgml/entities.html
17         one page:      http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
18         other lists:   http://www.zipcon.net/~swhite/docs/computers/browsers/entities.html
19                        http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
20                        http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
21
22         we cannot use UTF8 because SGML Docbook
23         does not support it
24           http://www.pemberley.com/janeinfo/latin1.html#latexta
25
26 wrap long lines
27
28 For new features, add links to the documentation sections.  Use </link>
29 so that perl can remove it so HISTORY.html can be created with no
30 links to the main documentation.  This was added only in 8.2, so don't
31 do it for earlier branch release files.
32
33 -->
34
35 <appendix id="release">
36  <title>Release Notes</title>
37
38   <sect1 id="release-8-3">
39    <title>Release 8.3</title>
40
41    <note>
42     <title>Release date</title>
43     <simpara>2007-??-??</simpara>
44     <para>CURRENT AS OF 2007-10-03</>
45    </note>
46
47    <sect2>
48     <title>Overview</title>
49
50     <para>
51      This release adds many improvements that were requested by users,
52      including:
53
54     <itemizedlist>
55
56       <listitem>
57        <para>
58         Full text search is now a built-in feature
59        </para>
60       </listitem>
61
62       <listitem>
63        <para>
64         Support for the SQL/XML standard, including a new <type>xml</type> builtin
65         data type
66        </para>
67       </listitem>
68
69       <listitem>
70        <para>
71         enum data types
72        </para>
73       </listitem>
74
75       <listitem>
76        <para>
77         UUID data type, similar to that defined by RFC 4122
78        </para>
79       </listitem>
80
81       <listitem>
82        <para>
83         Arrays of composite types
84        </para>
85       </listitem>
86
87       <listitem>
88        <para>
89         <literal>ORDER BY ... NULLS FIRST/LAST</>
90        </para>
91       </listitem>
92
93       <listitem>
94        <para>
95         Updatable cursors
96         (<literal>UPDATE/DELETE WHERE CURRENT OF</>
97         <replaceable>cursor_name</>)
98        </para>
99       </listitem>
100
101       <listitem>
102        <para>
103         Per-function parameter settings
104        </para>
105       </listitem>
106
107       <listitem>
108        <para>
109         User-defined types can now have type modifiers (parameters)
110        </para>
111
112        <para>
113         Declarations such as <type>varchar(42)</type> are no longer
114         restricted to use by built-in data types.
115        </para>
116       </listitem>
117
118       <listitem>
119        <para>
120         Automatic plan invalidation when table definitions change
121        </para>
122
123        <para>
124         This will particularly ease usage of temporary tables in
125         PL/PgSQL functions.
126        </para>
127       </listitem>
128
129       <listitem>
130        <para>
131         Numerous improvements in logging and statistics collection
132         capabilities, including the ability to emit postmaster log messages
133         in CSV format that can be directly loaded into a database table
134         for analysis
135        </para>
136       </listitem>
137
138       <listitem>
139        <para>
140         SSPI/GSSAPI authentication support
141        </para>
142       </listitem>
143
144       <listitem>
145        <para>
146         Multiple autovacuum worker processes, and other autovacuum improvements
147        </para>
148
149        <para>
150         Autovacuum is now considered mature enough to be enabled by default.
151        </para>
152       </listitem>
153
154       <listitem>
155        <para>
156         The entire <productname>PostgreSQL</productname> system can
157         now be compiled with Microsoft Visual C++
158        </para>
159
160        <para>
161         This will improve the ability of Windows-based developers to
162         contribute to the project.  Windows executables made with Visual C++
163         may also have better stability and performance than those made with
164         other tool sets.
165        </para>
166       </listitem>
167
168     </itemizedlist>
169
170     Major performance improvements in this release include:
171
172     <itemizedlist>
173
174       <listitem>
175        <para>
176         Asynchronous commit option to allow transactions to be reported
177         committed before they have actually been flushed to disk
178        </para>
179
180        <para>
181         This would not, of course, be acceptable if the client takes some
182         critical external action on the assumption that the transaction
183         will be remembered; but for certain applications, it is an acceptable
184         risk for some or all transactions to use this mode.  Unlike existing
185         options such as <varname>fsync</varname>, asynchronous commit does
186         not risk database corruption; the worst case is that after a crash,
187         the last few reportedly-committed transactions will not have
188         taken effect.
189        </para>
190       </listitem>
191
192       <listitem>
193        <para>
194         <quote>Distributed</> checkpoints to spread out the I/O load of a
195         checkpoint
196        </para>
197       </listitem>
198
199       <listitem>
200        <para>
201         Heap-Only Tuples (HOT) to reduce overhead of updates
202        </para>
203       </listitem>
204
205       <listitem>
206        <para>
207         Just-in-time background writer strategy to improve disk write
208         efficiency
209        </para>
210       </listitem>
211
212       <listitem>
213        <para>
214         Reduction of on-disk data size through reducing both per-tuple
215         and per-field overheads
216        </para>
217       </listitem>
218
219       <listitem>
220        <para>
221         Efficiency improvements for large sequential scans, including
222         prevention of cache flushing and <quote>piggybacking</quote> to let
223         concurrent scans read the table only once
224        </para>
225       </listitem>
226
227       <listitem>
228        <para>
229         Top-N sorting
230        </para>
231       </listitem>
232
233       <listitem>
234        <para>
235         Lazy XID assignment to reduce the cost of read-only transactions
236        </para>
237
238        <para>
239         For applications in which there are a large number of read-only
240         transactions, this helps not only by reducing overhead for the
241         transactions themselves, but by reducing overhead that's driven
242         by the rate of XID consumption; notably, reducing contention for
243         transaction log buffers and reducing the frequency of
244         anti-wraparound vacuuming.
245        </para>
246       </listitem>
247
248      </itemizedlist>
249
250     </para>
251
252    </sect2>
253
254    <sect2>
255     <title>Migration to version 8.3</title>
256
257     <para>
258      A dump/restore using <application>pg_dump</application> is
259      required for those wishing to migrate data from any previous
260      release.
261     </para>
262
263     <para>
264      Observe the following incompatibilities:
265     </para>
266
267     <itemizedlist>
268
269       <listitem>
270        <para>
271         <filename>contrib/tsearch2</> features have been absorbed into
272         the core, with some syntax changes
273        </para>
274
275        <para>
276         XXX we need to provide a migration guide, at the very least
277        </para>
278       </listitem>
279
280       <listitem>
281        <para>
282         Casts to <type>text</type> that formerly occurred implicitly may now
283         need to be written explicitly
284        </para>
285
286        <para>
287         Data types other than <type>char</> and <type>varchar</> are no
288         longer implicitly castable to <type>text</>, except in the limited
289         case of a <literal>||</> (concatenation) operator whose other
290         input is textual.  While this will require explicit casts in a
291         few queries that didn't need them before, the elimination of
292         surprising interpretations justifies it.
293        </para>
294       </listitem>
295
296       <listitem>
297        <para>
298         Numerous changes in administrator-only configuration parameters
299        </para>
300
301        <para>
302         <varname>bgwriter_lru_percent</>,
303         <varname>bgwriter_all_percent</>,
304         <varname>bgwriter_all_maxpages</>,
305         <varname>stats_start_collector</>, and
306         <varname>stats_reset_on_server_start</> are removed.
307         <varname>redirect_stderr</> is renamed to
308         <varname>logging_collector</>. 
309         <varname>stats_command_string</> is renamed to
310         <varname>track_activities</>.
311         <varname>stats_block_level</> and <varname>stats_row_level</>
312         are merged into <varname>track_counts</>.
313         <varname>archive_command</> changed meaning slightly: you must now set
314         <varname>archive_mode</> to <literal>on</> as well to enable archiving.
315         The default autovacuum-related settings changed.
316        </para>
317       </listitem>
318
319       <listitem>
320        <para>
321         Commenting out a parameter in <filename>postgresql.conf</> now
322         causes it to revert to its default value
323        </para>
324       </listitem>
325
326       <listitem>
327        <para>
328         <literal>ARRAY(SELECT ...)</literal> now returns an empty array,
329         rather than a NULL, when the sub-select returns zero rows
330        </para>
331       </listitem>
332
333       <listitem>
334        <para>
335         <literal>ORDER BY ... USING</> <replaceable>operator</>
336         will now be rejected if the <replaceable>operator</> is not a
337         less-than or greater-than member of some btree operator class
338        </para>
339
340        <para>
341         This prevents less-than-sane behavior that formerly ensued if an
342         operator that doesn't actually define a proper sort ordering was
343         specified.
344        </para>
345       </listitem>
346
347       <listitem>
348        <para>
349         The array type associated with a type named <quote>foo</quote>
350         is not necessarily named <quote>_foo</quote> anymore
351        </para>
352
353        <para>
354         The old naming convention is still honored when possible, but
355         client code should migrate away from depending on it.
356        </para>
357       </listitem>
358
359       <listitem>
360        <para>
361         By default, non-superuser database owners can now instantiate trusted
362         procedural languages in their databases
363        </para>
364
365        <para>
366         While this is reasonably safe, some administrators may wish to
367         revoke the privilege.
368        </para>
369       </listitem>
370
371       <listitem>
372        <para>
373         The effects of <command>SET LOCAL</command> now persist until
374         the end of the current top transaction, unless rolled back
375        </para>
376
377        <para>
378         In 8.0 through 8.2, <command>SET LOCAL</command>'s
379         effects disappeared at subtransaction commit, leading to behavior
380         that made little sense at the SQL level (one would not normally
381         expect <command>RELEASE</> to do such a thing).
382        </para>
383       </listitem>
384
385       <listitem>
386        <para>
387         Commands that are disallowed in transaction blocks are now disallowed
388         in multiple-statement query strings, too
389        </para>
390
391        <para>
392         For example, <literal>BEGIN; DROP DATABASE; COMMIT</> will now be
393         rejected even if submitted as a single Query message.  This was always
394         quite unsafe, but the <function>PreventTransactionChain</function>
395         test failed to detect it.
396        </para>
397       </listitem>
398
399       <listitem>
400        <para>
401         Additional checks for invalidly-encoded multibyte strings
402        </para>
403
404        <para>
405         Some cases that might formerly have allowed invalid data to
406         enter the database will now be rejected.  In particular, the
407         <function>chr()</function> function changed behavior.
408        </para>
409       </listitem>
410
411       <listitem>
412        <para>
413         <function>convert()</function> family of functions changed behavior
414        </para>
415
416        <para>
417         Strings that are not in the database's native encoding are now
418         represented as type <type>bytea</> rather than type <type>text</>.
419        </para>
420       </listitem>
421
422       <listitem>
423        <para>
424         Minor security restrictions added to database-size inquiry functions
425         and some contrib functions
426        </para>
427       </listitem>
428
429       <listitem>
430        <para>
431         C code that manipulates variable-length datums will need changes
432        </para>
433
434        <para>
435         The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
436         to set the length word of a generated datum.  Also, it may be
437         necessary to <quote>detoast</quote> input varlena datums in cases
438         where no toasting could have happened before.
439        </para>
440       </listitem>
441
442     </itemizedlist>
443    </sect2>
444
445    <sect2>
446     <title>Changes</title>
447
448     <para>
449      Below you will find a detailed account of the
450      changes between <productname>PostgreSQL</productname> 8.3 and
451      the previous major release.
452     </para>
453
454     <sect3>
455      <title>Performance Improvements</title>
456      <itemizedlist>
457
458       <listitem>
459        <para>
460         Implement an optional asynchronous commit mode (Simon)
461        </para>
462
463        <para>
464         When <varname>synchronous_commit</varname> is off, we don't flush
465         WAL before reporting a transaction committed.  Data consistency is
466         still guaranteed (unlike turning <varname>fsync</varname> off), but
467         a crash may lose the effects of the last few transactions.  In many
468         applications this is an acceptable tradeoff for improved
469         performance.
470        </para>
471       </listitem>
472
473       <listitem>
474        <para>
475         Implement <quote>distributed</> checkpoints (Itagaki Takahiro and
476         Heikki Linnakangas)
477        </para>
478
479        <para>
480         The I/O needed for a checkpoint is now spread over a fairly long
481         period of time, rather than being spat out in a burst.  (This happens
482         only for background checkpoints carried out by the bgwriter; other
483         cases, such as a shutdown checkpoint, are still done at full speed.)
484         This reduces the impact of checkpoints on query processing.
485        </para>
486       </listitem>
487
488       <listitem>
489        <para>
490         Heap-Only Tuples (Pavan Deolasee, with ideas from many others)
491        </para>
492
493        <para>
494         When we update a tuple without changing any of its indexed columns,
495         and the new version can be stored on the same heap page, we no longer
496         generate extra index entries for the new version.  Instead, index
497         searches follow the HOT-chain links to ensure they find the correct
498         tuple version.  In addition, this patch introduces the ability to
499         <quote>prune</quote> dead tuples on a per-page basis, without having
500         to do a complete <command>VACUUM</command> pass to recover space.
501         <command>VACUUM</command> is still needed to clean up dead index
502         entries, however.
503        </para>
504       </listitem>
505
506       <listitem>
507        <para>
508         Just-in-time background writing strategy (Greg Smith, Itagaki
509         Takahiro)
510        </para>
511
512        <para>
513         This patch avoids re-scanning buffers that cannot possibly need to
514         be cleaned, and estimates how many buffers it should try to clean
515         based on moving averages of recent allocation requests and density
516         of reusable buffers.
517        </para>
518       </listitem>
519
520       <listitem>
521        <para>
522         Support varlena fields with single-byte headers and unaligned
523         storage (Greg Stark)
524        </para>
525
526        <para>
527         This significantly reduces the on-disk size of short
528         character-string fields.
529        </para>
530       </listitem>
531
532       <listitem>
533        <para>
534         Combine cmin and cmax fields of HeapTupleHeaders into a single field
535         (Heikki)
536        </para>
537
538        <para>
539         We do this by keeping private state in each backend that has
540         inserted and deleted the same tuple during its current top-level
541         transaction.  This is sufficient since there is no need to be able
542         to determine the cmin/cmax from any other transaction. This gets us
543         back down to 23-byte tuple headers, removing a space penalty paid in
544         8.0 to support subtransactions.
545        </para>
546       </listitem>
547
548       <listitem>
549        <para>
550         Lazy XID allocation (Florian Pflug)
551        </para>
552
553        <para>
554         Formerly, every transaction obtained a transaction ID (XID).  Now,
555         transactions that do not modify any database rows will typically
556         never obtain an XID at all.  We already did things this way for
557         subtransactions, but this patch extends the concept to top-level
558         transactions.  In applications where there are lots of short
559         read-only transactions, this should improve performance noticeably;
560         not so much from removal of the actual XID-assignments, as from
561         reduction of overhead that's driven by the rate of XID consumption.
562         We add a concept of a <quote>virtual transaction ID</> so that active
563         transactions can be uniquely identified even if they don't have a
564         regular XID.  This is a much lighter-weight concept: uniqueness of
565         VXIDs is only guaranteed over the short term, and no on-disk record
566         is made about them.
567        </para>
568       </listitem>
569
570       <listitem>
571        <para>
572         Reduce contention for the ProcArrayLock (Florian Pflug, Heikki)
573        </para>
574       </listitem>
575
576       <listitem>
577        <para>
578         Improve interlocking between checkpoint start and transaction commit
579         (Heikki)
580        </para>
581
582        <para>
583         The new method both speeds up commit (less for it to do) and
584         prevents the problem of checkpoint being delayed indefinitely when
585         there's a constant flow of commits.
586        </para>
587       </listitem>
588
589       <listitem>
590        <para>
591         Create a dedicated <quote>wal writer</quote> process to offload
592         WAL-writing work from backends (Simon)
593        </para>
594
595        <para>
596         This process is also responsible for guaranteeing a maximum delay
597         before asynchronously-committed transactions will be flushed to
598         disk.
599        </para>
600       </listitem>
601
602       <listitem>
603        <para>
604         Skip writing WAL in <command>CLUSTER</command> and
605         <command>COPY</command> in cases where it's not needed (Simon)
606        </para>
607
608        <para>
609         If WAL archiving is not enabled, it's possible to ensure
610         transactional safety by fsync'ing the destination table before
611         commit, rather than emitting WAL records for all inserted tuples.
612        </para>
613       </listitem>
614
615       <listitem>
616        <para>
617         Avoid rewriting <filename>pg_control</filename> at every WAL segment
618         switch (Simon)
619        </para>
620       </listitem>
621
622       <listitem>
623        <para>
624         Reduce WAL output size for page splits in btree indexes (Heikki)
625        </para>
626       </listitem>
627
628       <listitem>
629        <para>
630         Avoid unnecessary disk reads during WAL recovery (Heikki)
631        </para>
632
633        <para>
634         Aside from speeding up recovery, this change eliminates a potential
635         data loss risk when restoring a WAL log that was written with
636         full_page_writes off.
637        </para>
638       </listitem>
639
640       <listitem>
641        <para>
642         Make large sequential scans and <command>VACUUM</command>s work in a
643         limited-size <quote>ring</quote> of buffers (Simon, Heikki, Tom)
644        </para>
645
646        <para>
647         Aside from avoiding cache spoliation, this fixes the problem that
648         <command>VACUUM</command> formerly tended to cause a WAL flush for
649         every page it modified, because we had it hacked to use only a
650         single buffer.  Those flushes will now occur only once per ring-ful.
651        </para>
652       </listitem>
653
654       <listitem>
655        <para>
656         Synchronize sequential scans (Jeff Davis)
657        </para>
658
659        <para>
660         Large sequential scans now synchronize with each other, so that when
661         multiple backends are scanning the same relation concurrently, each
662         page is (ideally) read only once.  Note that a backend joining such
663         a scan starts in the middle of the relation and <quote>wraps
664         around</quote> to cover all blocks; this may affect the order in which
665         rows are returned.
666        </para>
667       </listitem>
668
669       <listitem>
670        <para>
671         Suppress useless searches for unused line pointers in PageAddItem
672         (Heikki, improving on an idea from Hiroki Kataoka)
673        </para>
674       </listitem>
675
676       <listitem>
677        <para>
678         Put a rate limit on messages sent by backends to the stats collector
679         (Tom)
680        </para>
681
682        <para>
683         This reduces the overhead for short transactions by combining
684         reports for successive short transactions.
685        </para>
686       </listitem>
687
688       <listitem>
689        <para>
690         Implement <quote>top N</quote> sorting in <literal>ORDER BY
691         ... LIMIT</literal> queries (Greg Stark)
692        </para>
693
694        <para>
695         We keep a heap of the current best N tuples and sift-up new tuples
696         into it as we scan the input.  For M input tuples this means only
697         about M*log(N) comparisons instead of M*log(M), not to mention a lot
698         less workspace when N is small &mdash; avoiding spill-to-disk for large
699         M is actually the most attractive thing about it.
700        </para>
701       </listitem>
702
703       <listitem>
704        <para>
705         Improve hash join performance for cases with many input NULLs (Tom)
706        </para>
707       </listitem>
708
709       <listitem>
710        <para>
711         Improve performance of mergejoin with a large sort operation as
712         inner input (Greg Stark)
713        </para>
714
715        <para>
716         This change uses a Materialize node between the mergejoin and the
717         sort to prevent the sort from having to <quote>back up</>, which
718         allows a more efficient sort.  The Materialize node keeps a circular
719         buffer of only the prior tuples that the mergejoin may actually
720         need again, so it usually won't need to spill to disk, resulting
721         in net I/O savings.
722        </para>
723       </listitem>
724
725       <listitem>
726        <para>
727         Avoid computing X^2 at each row in <function>avg(bigint)</function>
728         and <function>avg(numeric)</function> (Mark Kirkwood)
729        </para>
730       </listitem>
731
732      </itemizedlist>
733
734     </sect3>
735
736     <sect3>
737      <title>Server Changes</title>
738      <itemizedlist>
739
740       <listitem>
741        <para>
742         Autovacuum is now enabled by default (Alvaro)
743        </para>
744
745        <para>
746         Considerable work was done to make autovacuum less intrusive,
747         allowing this to become a reasonable default.
748        </para>
749       </listitem>
750
751       <listitem>
752        <para>
753         Support multiple concurrent autovacuum processes (Alvaro, Itagaki
754         Takahiro)
755        </para>
756       </listitem>
757
758       <listitem>
759        <para>
760         Set the default autovacuum <varname>vacuum_cost_delay</varname>
761         value to 20ms, and reduce the default autovacuum vacuum and analyze
762         threshold values to 50 tuples (Alvaro)
763        </para>
764       </listitem>
765
766       <listitem>
767        <para>
768         Make autovacuum report the start time of its current activity in
769         <literal>pg_stat_activity</literal> (Tom)
770        </para>
771       </listitem>
772
773       <listitem>
774        <para>
775         Make configuration parameters fall back to their default values when
776         they are removed from the configuration file (Joachim Wieland)
777        </para>
778
779        <para>
780         This fixes an ancient gotcha that returning a configuration file
781         line to its original commented-out state did not undo the change.
782        </para>
783       </listitem>
784
785       <listitem>
786        <para>
787         Invalidate and rebuild cached plans whenever there is a schema
788         change or statistics update to referenced relations (Tom)
789        </para>
790
791        <para>
792         Aside from improving performance (for example, by being able to make
793         use of newly-added indexes), this finally fixes the problem that you
794         couldn't drop and recreate a temp table that's used by a PL/PgSQL
795         function, unless you used <literal>EXECUTE</literal> for all
796         references to it.  A statement that depends on a temp table will now
797         be replanned automatically if the temp table has been recreated.
798        </para>
799       </listitem>
800
801       <listitem>
802        <para>
803         Add support for GSSAPI authentication (Henry Hotz, Magnus)
804        </para>
805       </listitem>
806
807       <listitem>
808        <para>
809         Support SSPI authentication on Windows (Magnus)
810        </para>
811       </listitem>
812
813       <listitem>
814        <para>
815         Support a global SSL configuration file (Victor Wagner)
816        </para>
817       </listitem>
818
819       <listitem>
820        <para>
821         Add <varname>ssl_ciphers</> parameter to control allowed ciphers
822         (Victor Wagner)
823        </para>
824       </listitem>
825
826       <listitem>
827        <para>
828         Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004, along with new
829         conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
830        </para>
831       </listitem>
832
833       <listitem>
834        <para>
835         Make JOHAB encoding client-only (Tatsuo)
836        </para>
837
838        <para>
839         It was found that JOHAB does not meet the assumptions needed to be
840         used safely as a server-side encoding.
841        </para>
842       </listitem>
843
844       <listitem>
845        <para>
846         Provide for logfiles in machine readable CSV format (Arul Shaji,
847         Greg Smith, Andrew Dunstan)
848        </para>
849       </listitem>
850
851       <listitem>
852        <para>
853         Add <varname>log_autovacuum_min_duration</varname> parameter to
854         support configurable logging of autovacuum actions (Simon, Alvaro)
855        </para>
856       </listitem>
857
858       <listitem>
859        <para>
860         Add <varname>log_lock_waits</varname> parameter to log long wait
861         times (Simon)
862        </para>
863       </listitem>
864
865       <listitem>
866        <para>
867         Add <varname>log_temp_files</varname> parameter to log usage of
868         temporary files (Bill Moran)
869        </para>
870       </listitem>
871
872       <listitem>
873        <para>
874         Add <varname>log_checkpoints</varname> parameter to improve logging
875         of checkpoints (Greg Smith, Heikki)
876        </para>
877       </listitem>
878
879       <listitem>
880        <para>
881         <literal>%s</literal> and <literal>%c</literal> escapes in
882         <varname>log_line_prefix</varname> can now be used in all processes
883         (Andrew)
884        </para>
885       </listitem>
886
887       <listitem>
888        <para>
889         Use our own timezone support for formatting timestamps displayed in
890         the server log (Tom)
891        </para>
892
893        <para>
894         This avoids Windows-specific problems with localized time zone names
895         that are in the wrong encoding.  There is a new
896         <varname>log_timezone</> parameter that controls the timezone used
897         in log messages, separately from the client-visible
898         <varname>timezone</> parameter.
899        </para>
900       </listitem>
901
902       <listitem>
903        <para>
904         Change the timestamps recorded in transaction commit/abort xlog
905         records from time_t to TimestampTz representation (Tom)
906        </para>
907
908        <para>
909         This provides full gettimeofday() resolution for the timestamps,
910         which might be useful when attempting to do point-in-time recovery
911         &mdash; previously it was not possible to specify the stop point with
912         sub-second resolution.
913        </para>
914       </listitem>
915
916       <listitem>
917        <para>
918         Split the <varname>archive_command</> parameter into separate
919         <varname>archive_mode</> and <varname>archive_command</> parameters
920         (Simon)
921        </para>
922
923        <para>
924         This avoids some problems that occur if the user wishes to stop
925         archiving temporarily.
926        </para>
927       </listitem>
928
929       <listitem>
930        <para>
931         Add a <literal>%r</> option in <filename>recovery.conf</filename> to
932         provide last restartpoint to <varname>restore_command</varname>
933         (Simon)
934        </para>
935       </listitem>
936
937       <listitem>
938        <para>
939         Add <varname>log_restartpoints</varname> recovery option to emit a
940         log message at each restartpoint (Simon)
941        </para>
942       </listitem>
943
944       <listitem>
945        <para>
946         Last transaction end time is now logged at end of recovery and at
947         each logged restartpoint (Simon)
948        </para>
949       </listitem>
950
951       <listitem>
952        <para>
953         Create a <varname>temp_tablespaces</varname> parameter to allow
954         selection of one or more tablespaces in which to store temp tables
955         and temporary files (Jaime Casanova, Albert Cervera, Bernd Helmle)
956        </para>
957
958        <para>
959         This is a list to allow spreading the load across multiple
960         tablespaces; a random list element is chosen each time a temp object
961         is to be created.  Temp files are not stored in per-database
962         <filename>pgsql_tmp/</filename> directories anymore, but in
963         per-tablespace directories.
964        </para>
965       </listitem>
966
967       <listitem>
968        <para>
969         New system view <literal>pg_stat_bgwriter</literal> displays
970         statistics about the background writer process's performance
971         (Magnus)
972        </para>
973       </listitem>
974
975       <listitem>
976        <para>
977         Add new columns for database-wide tuple statistics to
978         <literal>pg_stat_database</literal> (Magnus)
979        </para>
980       </listitem>
981
982       <listitem>
983        <para>
984         Add an <literal>xact_start</literal> column to
985         <literal>pg_stat_activity</literal> (Neil)
986        </para>
987
988        <para>
989         This makes it easier to identify long-running transactions.
990        </para>
991       </listitem>
992
993       <listitem>
994        <para>
995         Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns
996         to <literal>pg_stat_all_tables</literal> and related views (Glen
997         Parker)
998        </para>
999       </listitem>
1000
1001       <listitem>
1002        <para>
1003         Remove <varname>stats_start_collector</varname> parameter (Tom)
1004        </para>
1005
1006        <para>
1007         We now always start the collector process, unless prevented by a
1008         problem with setting up the stats UDP socket.
1009        </para>
1010       </listitem>
1011
1012       <listitem>
1013        <para>
1014         Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
1015        </para>
1016
1017        <para>
1018         This seemed useless in view of the availability of
1019         <function>pg_stat_reset()</function>.
1020        </para>
1021       </listitem>
1022
1023       <listitem>
1024        <para>
1025         Merge <varname>stats_block_level</> and <varname>stats_row_level</>
1026         parameters into a single parameter <varname>track_counts</>,
1027         which controls all reports sent to the collector process (Tom)
1028        </para>
1029       </listitem>
1030
1031       <listitem>
1032        <para>
1033         Rename <varname>stats_command_string</varname> parameter to
1034         <varname>track_activities</varname> (Tom)
1035        </para>
1036       </listitem>
1037
1038       <listitem>
1039        <para>
1040         Limit the amount of information reported when a user is dropped
1041         (Alvaro)
1042        </para>
1043
1044        <para>
1045         Previously, dropping (or attempting to drop) a user who owned many
1046         objects could result in extremely large <literal>NOTICE</literal> or
1047         <literal>ERROR</literal> messages listing all these objects; this
1048         caused problems for some client applications.  The length of the
1049         list is now limited, although a full list is still sent to the
1050         server log.
1051        </para>
1052       </listitem>
1053
1054       <listitem>
1055        <para>
1056         Arrange to put TOAST tables belonging to temporary tables into
1057         special schemas named
1058         <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom)
1059        </para>
1060
1061        <para>
1062         This allows low-level code such as the relcache to recognize that
1063         these tables are indeed temporary, which enables various
1064         optimizations such as not WAL-logging changes and using local rather
1065         than shared buffers for access.  Aside from obvious performance
1066         benefits, this provides a solution to bug #3483, in which other
1067         backends unexpectedly held open file references to temporary tables.
1068        </para>
1069       </listitem>
1070
1071       <listitem>
1072        <para>
1073         Fix problem that a constant flow of new connection requests could
1074         indefinitely delay the postmaster from completing a shutdown or
1075         crash restart (Tom)
1076        </para>
1077       </listitem>
1078
1079       <listitem>
1080        <para>
1081         Allow <command>CREATE INDEX CONCURRENTLY</command> to disregard
1082         transactions in other databases (Simon)
1083        </para>
1084       </listitem>
1085
1086      </itemizedlist>
1087
1088     </sect3>
1089
1090     <sect3>
1091      <title>Query Changes</title>
1092      <itemizedlist>
1093
1094       <listitem>
1095        <para>
1096         Text search capability is now in core Postgres (Teodor, Oleg)
1097        </para>
1098
1099        <para>
1100         The features previously provided by <filename>contrib/tsearch2</>
1101         have been improved and moved into the standard server.
1102        </para>
1103       </listitem>
1104
1105       <listitem>
1106        <para>
1107         Support <literal>ORDER BY ... NULLS FIRST/LAST</literal> (Teodor, Tom)
1108        </para>
1109
1110        <para>
1111         Users can now control whether nulls sort before or after
1112         other values.
1113        </para>
1114       </listitem>
1115
1116       <listitem>
1117        <para>
1118         Add ASC/DESC and NULLS FIRST/NULLS LAST per-column options for btree
1119         indexes (Teodor, Tom)
1120        </para>
1121
1122        <para>
1123         This is primarily useful for customizing multicolumn indexes to match
1124         the ordering needed by a specific query.
1125        </para>
1126       </listitem>
1127
1128       <listitem>
1129        <para>
1130         Support <literal>UPDATE/DELETE WHERE CURRENT OF</>
1131         <replaceable>cursor_name</>
1132         (Arul Shaji, Tom)
1133        </para>
1134       </listitem>
1135
1136       <listitem>
1137        <para>
1138         Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom)
1139        </para>
1140       </listitem>
1141
1142       <listitem>
1143        <para>
1144         Downgrade implicit casts to text to be assignment-only, except for
1145         the ones from the other string-category types (Peter, Tom)
1146        </para>
1147
1148        <para>
1149         This change eliminates a lot of surprising interpretations that the
1150         parser could formerly make in cases when there was no directly
1151         applicable operator.  The  <literal>||</> (concatenation) operator
1152         has been generalized so that it will still accept non-textual
1153         inputs, thus preserving the main useful case for implicit text
1154         coercion.  In other cases, if you want something to be treated
1155         as text you'll need to say so.
1156        </para>
1157       </listitem>
1158
1159       <listitem>
1160        <para>
1161         Create a general mechanism that supports casts to and from the
1162         standard string types (<type>text</type>, <type>varchar</type>,
1163         <type>bpchar</type>) for <emphasis>every</emphasis> datatype, by
1164         invoking the datatype's I/O functions (Tom)
1165        </para>
1166
1167        <para>
1168         These new casts are assignment-only in the to-string direction,
1169         explicit-only in the other, and therefore should create no
1170         surprising behavior.  Remove a bunch of thereby-obsoleted
1171         datatype-specific casting functions.
1172        </para>
1173       </listitem>
1174
1175       <listitem>
1176        <para>
1177         Make <literal>ARRAY(SELECT ...)</literal> return an empty array,
1178         rather than a NULL, when the sub-select returns zero rows (Tom)
1179        </para>
1180       </listitem>
1181
1182       <listitem>
1183        <para>
1184         Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
1185        </para>
1186       </listitem>
1187
1188       <listitem>
1189        <para>
1190         Add support for cross-type hashing (Tom)
1191        </para>
1192
1193        <para>
1194         This allows hash joins, hash indexes, hashed subplans, and hash
1195         aggregation to be used in situations involving cross-data-type
1196         comparisons, if the data types have compatible hash functions.  That
1197         is currently the case for
1198         <type>smallint</type>/<type>integer</type>/<type>bigint</type>, and
1199         also for <type>float4</type>/<type>float8</type>.
1200        </para>
1201       </listitem>
1202
1203       <listitem>
1204        <para>
1205         Improve handling of <quote>equivalence classes</quote> of variables
1206         that are constrained to be equal within a query's <literal>WHERE</>
1207         clause (Tom)
1208        </para>
1209
1210        <para>
1211         Among other things, this change allows mergejoins to work with
1212         descending sort orders, and improves recognition of redundant sort
1213         columns.
1214        </para>
1215       </listitem>
1216
1217       <listitem>
1218        <para>
1219         Improve performance for planning large inheritance trees that are
1220         mostly excluded by constraints (Tom)
1221        </para>
1222       </listitem>
1223
1224       <listitem>
1225        <para>
1226         Fix problems with selectivity estimation for partial indexes (Tom)
1227        </para>
1228       </listitem>
1229
1230       <listitem>
1231        <para>
1232         Fix cost estimates for <literal>EXISTS</literal> subqueries that are
1233         evaluated as initPlans (Tom)
1234        </para>
1235       </listitem>
1236
1237       <listitem>
1238        <para>
1239         Fix some issues with user tables and views that are named similarly
1240         to system catalogs (Tom)
1241        </para>
1242       </listitem>
1243
1244       <listitem>
1245        <para>
1246         Remove the undocumented <literal>!!=</> (not in) operator (Tom)
1247        </para>
1248
1249        <para>
1250         This operator was obsoleted long ago by <literal>IN (SELECT
1251         ...)</literal> queries.
1252        </para>
1253       </listitem>
1254
1255      </itemizedlist>
1256
1257     </sect3>
1258
1259     <sect3>
1260      <title>Object Manipulation Changes</title>
1261      <itemizedlist>
1262
1263       <listitem>
1264        <para>
1265         Support arrays of composite types, including the rowtypes of regular
1266         tables and views (but not system catalogs, nor sequences or toast
1267         tables) (David Fetter, Andrew, Tom)
1268        </para>
1269
1270        <para>
1271         This change also removes the hardwired convention that a type's
1272         array type is named exactly <quote>_type</quote>, instead using a
1273         new column <literal>pg_type.typarray</literal> to provide the
1274         linkage.  (It still will be named <quote>_type</quote>, though,
1275         except in odd corner cases such as maximum-length type names or
1276         collisions with a pre-existing type named with a leading
1277         underscore.)
1278        </para>
1279       </listitem>
1280
1281       <listitem>
1282        <para>
1283         Support per-function GUC parameter settings (Tom)
1284        </para>
1285
1286        <para>
1287         This provides a simple solution for functions that need local
1288         settings for parameters; in particular, security definer functions
1289         that must set <varname>search_path</varname> to avoid security
1290         loopholes.
1291        </para>
1292       </listitem>
1293
1294       <listitem>
1295        <para>
1296         Add <literal>COST</literal> and <literal>ROWS</literal> options to
1297         <command>CREATE/ALTER FUNCTION</command> (Tom)
1298        </para>
1299
1300        <para>
1301         This change allows simple user adjustment of the estimated cost of a
1302         function call, as well as control of the estimated number of rows
1303         returned by a set-returning function.  We might eventually wish to
1304         extend this to allow function-specific estimation routines, but
1305         there seems to be consensus that we should try a simple constant
1306         estimate first.
1307        </para>
1308       </listitem>
1309
1310       <listitem>
1311        <para>
1312         Allow triggers and rules to be defined with different, per session
1313         controllable, behaviors for replication purposes (Jan)
1314        </para>
1315
1316        <para>
1317         This will allow replication systems to control the firing mechanism
1318         of triggers and rewrite rules without modifying the system catalogs
1319         directly.  The behavior is controlled by a new superuser-only
1320         parameter <varname>session_replication_role</varname>.
1321       </para>
1322
1323        <para>
1324         <application>psql</application>'s <literal>\d</literal> command as
1325         well as <application>pg_dump</application> are extended in a
1326         backward compatible fashion.
1327        </para>
1328       </listitem>
1329
1330       <listitem>
1331        <para>
1332         Support type modifiers for user-defined types (Teodor, Tom)
1333        </para>
1334
1335        <para>
1336         User-defined types can now use parameters, similar to the maximum
1337         length and precision parameters used by some built-in types.  Any
1338         simple constant (numeric or string) or identifier can be used as a
1339         parameter value.  A type-specific function must be provided to
1340         validate this information and pack it into a 32-bit <quote>typmod</>
1341         value for storage.
1342        </para>
1343       </listitem>
1344
1345       <listitem>
1346        <para>
1347         Invent <quote>operator families</quote> to allow improved handling
1348         of cross-data-type operators (Tom)
1349        </para>
1350
1351        <para>
1352         This change allows significantly better planning of queries
1353         involving cross-data-type comparisons.
1354        </para>
1355       </listitem>
1356
1357       <listitem>
1358        <para>
1359         Clean up semantic assumptions for foreign keys (Tom)
1360        </para>
1361
1362        <para>
1363         There is now a sound semantic basis for the equality checks applied
1364         by foreign-key constraints; formerly the system tended to assume
1365         that any operator named <literal>=</> was the right thing.  The equality
1366         operators will now be selected from the opfamily of the unique index
1367         that the FK constraint depends on to enforce uniqueness of the
1368         referenced columns; therefore they are certain to be consistent with
1369         that index's notion of equality.  Among other things this should fix
1370         the problem noted awhile back that pg_dump may fail for foreign-key
1371         constraints on user-defined types when the required operators aren't
1372         in the search path.  This also means that the former warning
1373         condition about <quote>foreign key constraint will require costly
1374         sequential scans</quote> is gone: if the comparison condition isn't
1375         indexable then we'll reject the constraint entirely.
1376        </para>
1377       </listitem>
1378
1379      </itemizedlist>
1380
1381     </sect3>
1382
1383     <sect3>
1384      <title>Utility Command Changes</title>
1385      <itemizedlist>
1386
1387       <listitem>
1388        <para>
1389         Allow non-superuser database owners to create procedural languages
1390         (Jeremy Drake)
1391        </para>
1392
1393        <para>
1394         A database owner is now allowed to create a language in his database
1395         if it's marked <structfield>tmpldbacreate</> in
1396         <structname>pg_pltemplate</>.  The factory default is that this is set
1397         for all standard trusted languages, but of course a superuser may
1398         adjust the settings.  In service of this, add the long-foreseen owner
1399         column to <structname>pg_language</>; renaming, dropping, and altering
1400         owner of a PL now follow normal ownership rules instead of being
1401         superuser-only.
1402        </para>
1403       </listitem>
1404
1405       <listitem>
1406        <para>
1407         Arrange for <command>SET LOCAL</command>'s effects to persist until
1408         the end of the current top transaction, unless rolled back or
1409         overridden by a SET clause for the same variable attached to a
1410         surrounding function call (Tom)
1411        </para>
1412
1413        <para>
1414         This is an incompatible change: in 8.0 through 8.2, <command>SET
1415         LOCAL</command>'s effects disappeared at subtransaction commit
1416         (leading to behavior that made little sense at the SQL level).
1417        </para>
1418       </listitem>
1419
1420       <listitem>
1421        <para>
1422         Support <literal>SET ... FROM CURRENT</literal> in
1423         <command>CREATE/ALTER FUNCTION</command>, <command>ALTER DATABASE</command>,
1424         <command>ALTER ROLE</command> (Tom)
1425        </para>
1426
1427        <para>
1428         This provides a convenient way of applying a session's current
1429         parameter setting as the default for future sessions or function
1430         calls.
1431        </para>
1432       </listitem>
1433
1434       <listitem>
1435        <para>
1436         Implement new commands <command>DISCARD ALL</command>,
1437         <command>DISCARD PLANS</command>, <command>DISCARD TEMP</command>,
1438         <command>CLOSE ALL</command>, and <command>DEALLOCATE ALL</command>
1439         (Marko Kreen, Neil)
1440        </para>
1441
1442        <para>
1443         These commands simplify resetting a database session to its initial
1444         state, and are particularly handy for connection-pooling software.
1445        </para>
1446       </listitem>
1447
1448       <listitem>
1449        <para>
1450         Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
1451         SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
1452        </para>
1453
1454        <para>
1455         While it has long been possible to perform these operations using
1456         <command>ALTER TABLE</command>, users were often surprised that they
1457         couldn't say <command>ALTER VIEW</command> or <command>ALTER
1458         SEQUENCE</command> as appropriate.
1459        </para>
1460       </listitem>
1461
1462       <listitem>
1463        <para>
1464         Implement <command>CREATE TABLE LIKE ...  INCLUDING
1465         INDEXES</command> (Trevor Hardcastle, Nikhil S, Neil)
1466        </para>
1467       </listitem>
1468
1469       <listitem>
1470        <para>
1471         Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas)
1472        </para>
1473
1474        <para>
1475         Formerly, a <command>CLUSTER</command> command would discard all
1476         tuples that were committed dead, even if there were still
1477         transactions that should be able to see them under the MVCC snapshot
1478         rules.
1479        </para>
1480       </listitem>
1481
1482       <listitem>
1483        <para>
1484         Support new syntax for <command>CLUSTER</command>: <literal>CLUSTER
1485         <replaceable>table</> USING <replaceable>index</></literal>
1486         (Holger Schurig)
1487       </para>
1488
1489        <para>
1490         The old <command>CLUSTER</command> syntax is still supported, but
1491         the new form is considered more logical.
1492        </para>
1493       </listitem>
1494
1495       <listitem>
1496        <para>
1497         Make <command>CLUSTER</command> freeze tuples where possible
1498         (Heikki, Alvaro)
1499        </para>
1500
1501        <para>
1502         This is nearly free and may avoid the need for a subsequent
1503         <command>VACUUM</command> of the table.
1504        </para>
1505       </listitem>
1506
1507       <listitem>
1508        <para>
1509         Make <command>CLUSTER</command> and <command>TRUNCATE</command>
1510         advance the table's <literal>relfrozenxid</literal> to
1511         <literal>RecentXmin</literal> (Alvaro)
1512        </para>
1513
1514        <para>
1515         This may avoid the need for a subsequent <command>VACUUM</command>
1516         of the table.  The table-rewriting variants of <command>ALTER
1517         TABLE</command> do it too.
1518        </para>
1519       </listitem>
1520
1521       <listitem>
1522        <para>
1523         Fix <command>EXPLAIN</command> so it can always print the correct
1524         referent of an upper plan level expression (Tom)
1525        </para>
1526
1527        <para>
1528         This fix banishes the old hack of showing
1529         <literal>?column<replaceable>N</>?</literal>
1530         when things got too complicated.
1531        </para>
1532       </listitem>
1533
1534       <listitem>
1535        <para>
1536         Make PreventTransactionChain reject commands submitted as part of a
1537         multi-statement simple-Query message (Tom)
1538        </para>
1539
1540        <para>
1541         For example, <literal>BEGIN; DROP DATABASE; COMMIT</> will now be
1542         rejected even if submitted as a single Query message.  This is a
1543         potential incompatibility since some clients expected such strings to
1544         work; but it was always unsafe.
1545        </para>
1546       </listitem>
1547
1548       <listitem>
1549        <para>
1550         Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other
1551         backends will exit before failing because of conflicting DB usage
1552         (Tom)
1553        </para>
1554
1555        <para>
1556         This helps mask the fact that backend exit takes nonzero time.
1557        </para>
1558       </listitem>
1559
1560       <listitem>
1561        <para>
1562         Make
1563         <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
1564         only accept identifiers without a schema qualifier (Bruce)
1565        </para>
1566
1567        <para>
1568         Formerly, these commands accepted <quote>schema.relation</> but then
1569         ignored the schema part, leading to confusion.
1570        </para>
1571       </listitem>
1572
1573      </itemizedlist>
1574
1575     </sect3>
1576
1577     <sect3>
1578      <title>Data Type and Function Changes</title>
1579      <itemizedlist>
1580
1581       <listitem>
1582        <para>
1583         SQL/XML support (Nikolay Samokhvalov, Peter)
1584        </para>
1585
1586        <para>
1587         There is now an <type>xml</> data type and standard operations
1588         on it; see <xref linkend="datatype-xml">.
1589        </para>
1590       </listitem>
1591
1592       <listitem>
1593        <para>
1594         Support enum data types (see <xref linkend="datatype-enum">)
1595        (Tom Dunstan)
1596        </para>
1597       </listitem>
1598
1599       <listitem>
1600        <para>
1601         Add a <type>uuid</type> data type similar to that defined in RFC
1602         4122 (see <xref linkend="datatype-uuid">) (Gevik Babakhani, Neil)
1603        </para>
1604       </listitem>
1605
1606       <listitem>
1607        <para>
1608         Widen the <type>money</type> data type to 64 bits (D'Arcy Cain)
1609        </para>
1610       </listitem>
1611
1612       <listitem>
1613        <para>
1614         Add new regexp functions <function>regexp_matches()</function>,
1615         <function>regexp_split_to_array()</function>, and
1616         <function>regexp_split_to_table()</function> (Jeremy Drake, Neil)
1617        </para>
1618
1619        <para>
1620         These functions provide access to the capture groups resulting from
1621         a POSIX regular expression match, and provide the ability to split a
1622         string on a POSIX regular expression.
1623        </para>
1624       </listitem>
1625
1626       <listitem>
1627        <para>
1628         Add <function>lo_truncate()</function> function for large object
1629         truncation (Kris Jurka)
1630        </para>
1631       </listitem>
1632
1633       <listitem>
1634        <para>
1635         Implement <function>width_bucket()</function> for the float8 data
1636         type (Neil)
1637        </para>
1638       </listitem>
1639
1640       <listitem>
1641        <para>
1642         Add a function <function>pg_stat_clear_snapshot()</function> that
1643         discards any statistics snapshot already collected in the current
1644         transaction (Tom)
1645        </para>
1646
1647        <para>
1648         This allows PL/PgSQL functions to watch for stats updates even
1649         though they are confined to a single transaction.
1650        </para>
1651       </listitem>
1652
1653       <listitem>
1654        <para>
1655         Add <literal>isodow</> option to <function>EXTRACT()</> and
1656         <function>date_part()</> (Bruce)
1657        </para>
1658
1659        <para>
1660         This is day of the week, with Sunday = 7.
1661        </para>
1662       </listitem>
1663
1664       <listitem>
1665        <para>
1666         Add ID (ISO day of week) and IDDD (ISO day of year) format types for
1667         to_char(), to_date() and to_timestamp() (Brendan Jurd)
1668        </para>
1669       </listitem>
1670
1671       <listitem>
1672        <para>
1673         Check for overflow when converting far-future date values to
1674         timestamp (Tom)
1675        </para>
1676       </listitem>
1677
1678       <listitem>
1679        <para>
1680         Make <function>to_timestamp()</> and <function>to_date()</> assume
1681         <quote>TM</quote> for potentially variable-width fields (Bruce)
1682        </para>
1683
1684        <para>
1685         This matches Oracle behavior.
1686        </para>
1687       </listitem>
1688
1689       <listitem>
1690        <para>
1691         Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields
1692         (Bruce)
1693        </para>
1694       </listitem>
1695
1696       <listitem>
1697        <para>
1698         Fix <type>float4</type>/<type>float8</type> to handle Infinity and
1699         Nan consistently (Bruce)
1700        </para>
1701
1702        <para>
1703         The code formerly was not consistent about distinguishing Infinity
1704         symbols from overflow conditions.
1705        </para>
1706       </listitem>
1707
1708       <listitem>
1709        <para>
1710         Make <function>setseed()</function> return void, rather than a
1711         useless integer value (Neil)
1712        </para>
1713       </listitem>
1714
1715       <listitem>
1716        <para>
1717         Add a hash function for <type>numeric</type> (Neil)
1718        </para>
1719
1720        <para>
1721         This allows hash indexes and hash-based plans to be used with
1722         the <type>numeric</type> datatype.
1723        </para>
1724       </listitem>
1725
1726       <listitem>
1727        <para>
1728         Improve efficiency of
1729         <literal>LIKE</literal>/<literal>ILIKE</literal> code, especially
1730         for multi-byte charsets, and most especially for UTF8 (Andrew,
1731         Itagaki Takahiro)
1732        </para>
1733       </listitem>
1734
1735       <listitem>
1736        <para>
1737         Allow leading and trailing whitespace in the input to the
1738         <type>boolean</type> type (Neil)
1739        </para>
1740       </listitem>
1741
1742       <listitem>
1743        <para>
1744         Add additional checks for invalidly-encoded data (Andrew)
1745        </para>
1746
1747        <para>
1748         This change plugs some holes that formerly existed in SQL literal
1749         backslash escape processing and <command>COPY</command> escape
1750         processing: the de-escaped string is rechecked if it might have
1751         resulted in creating invalid multi-byte characters.
1752        </para>
1753       </listitem>
1754
1755       <listitem>
1756        <para>
1757         Ensure that <function>chr()</function> cannot create invalidly
1758         encoded text (Andrew)
1759        </para>
1760
1761        <para>
1762         In UTF8-encoded databases the argument is treated as a Unicode code
1763         point.  In other multi-byte encodings the argument must designate a
1764         7-bit ASCII character, or an error is raised, as is also the case if
1765         the argument is 0.
1766       </para>
1767
1768       <para>
1769         <function>ascii()</function> has been adjusted so that it remains
1770         the inverse of <function>chr()</function>.
1771        </para>
1772       </listitem>
1773
1774       <listitem>
1775        <para>
1776         Adjust <function>convert()</function> behavior to ensure encoding
1777         validity (Andrew)
1778        </para>
1779
1780        <para>
1781         The two argument form of <function>convert()</function> is gone, and
1782         the three argument form now takes a <type>bytea</type> first
1783         argument and returns a <type>bytea</type>. To cover this loss three
1784         new functions are introduced:
1785        </para>
1786
1787        <itemizedlist>
1788         <listitem>
1789          <para>
1790           <function>convert_from(bytea, name)</function> returning
1791           <type>text</> &mdash; converts the first argument from the named
1792           encoding to the database encoding.
1793          </para>
1794         </listitem>
1795
1796         <listitem>
1797          <para>
1798           <function>convert_to(text, name)</function> returning <type>bytea</>
1799           &mdash; converts the first argument from the database encoding to
1800           the named encoding.
1801          </para>
1802         </listitem>
1803
1804         <listitem>
1805          <para>
1806           <function>length(bytea, name)</function> returning <type>int</>
1807           &mdash; gives the length of the first argument in characters in the
1808           named encoding.
1809          </para>
1810         </listitem>
1811        </itemizedlist>
1812       </listitem>
1813
1814       <listitem>
1815        <para>
1816         Remove <literal>CONVERT(argument USING conversion_name)</literal>
1817         (Andrew)
1818        </para>
1819
1820        <para>
1821         Although this syntax is required by the SQL standard, it's not clear
1822         what the standard expects it to do, except that it's most likely not
1823         what we were doing.  The former behavior was an encoding security
1824         hole, too.
1825        </para>
1826       </listitem>
1827
1828       <listitem>
1829        <para>
1830         Put some security restrictions on the dbsize functions (Tom)
1831        </para>
1832
1833        <para>
1834         Restrict <function>pg_database_size()</function> to users who can
1835         connect to the target database (note that <literal>CONNECT</literal>
1836         privilege is granted by default, so this does not change the default
1837         behavior).  Restrict <function>pg_tablespace_size()</function> to
1838         users who have <literal>CREATE</literal> privilege on the tablespace
1839         (which is <emphasis>not</emphasis> granted by default), except when
1840         the tablespace is the default tablespace for the current database
1841         (since we treat that as implicitly allowing use of the tablespace).
1842        </para>
1843       </listitem>
1844
1845       <listitem>
1846        <para>
1847         Make <function>currtid()</function> functions require
1848         <literal>SELECT</literal> privileges on the target table (Tom)
1849        </para>
1850       </listitem>
1851
1852      </itemizedlist>
1853
1854     </sect3>
1855
1856     <sect3>
1857      <title>PL/PgSQL Server-Side Language Changes</title>
1858      <itemizedlist>
1859
1860       <listitem>
1861        <para>
1862         Support scrollable cursors (ie, add a direction clause in
1863         <command>FETCH</command>) in PL/PgSQL (Pavel Stehule)
1864        </para>
1865       </listitem>
1866
1867       <listitem>
1868        <para>
1869         Add support for <literal>IN</literal> as alternative to
1870         <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command>
1871         statement, for consistency with the backend's
1872         <command>FETCH</command> command (Pavel Stehule)
1873        </para>
1874       </listitem>
1875
1876       <listitem>
1877        <para>
1878         Support <command>MOVE</command> in PL/PgSQL (Magnus, Pavel Stehule,
1879         Neil)
1880        </para>
1881       </listitem>
1882
1883       <listitem>
1884        <para>
1885         Implement <command>RETURN QUERY</command> for PL/PgSQL (Pavel Stehule, Neil)
1886        </para>
1887
1888        <para>
1889         This provides some convenient syntax sugar for PL/PgSQL
1890         set-returning functions that want to return the result of evaluating
1891         a query; it should also be more efficient than repeated
1892         <command>RETURN NEXT</command> statements.
1893        </para>
1894       </listitem>
1895
1896       <listitem>
1897        <para>
1898         Allow PL/PgSQL function parameter names to be qualified with the
1899         function's name (Tom)
1900        </para>
1901       </listitem>
1902
1903       <listitem>
1904        <para>
1905         Reject zero or negative <literal>BY</literal> step in plpgsql
1906         integer <literal>FOR</literal>-loops, and behave sanely if the loop
1907         value overflows <type>int32</type> on the way to the end value (Tom)
1908        </para>
1909       </listitem>
1910
1911       <listitem>
1912        <para>
1913         Improve accuracy of error locations in PL/PgSQL syntax errors (Tom)
1914        </para>
1915       </listitem>
1916
1917      </itemizedlist>
1918
1919     </sect3>
1920
1921     <sect3>
1922      <title>PL/Perl Server-Side Language Changes</title>
1923      <itemizedlist>
1924
1925       <listitem>
1926        <para>
1927         Allow type-name arguments to <function>spi_prepare()</function> to
1928         be standard type aliases as well as the names given in
1929         <literal>pg_type</literal> (Andrew)
1930        </para>
1931       </listitem>
1932
1933      </itemizedlist>
1934
1935     </sect3>
1936
1937     <sect3>
1938      <title>PL/Python Server-Side Language Changes</title>
1939      <itemizedlist>
1940
1941       <listitem>
1942        <para>
1943         Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
1944        </para>
1945       </listitem>
1946
1947       <listitem>
1948        <para>
1949         Allow type-name arguments to <function>plpy.prepare()</function> to
1950         be standard type aliases as well as the names given in
1951         <literal>pg_type</literal> (Andrew)
1952        </para>
1953       </listitem>
1954
1955       <listitem>
1956        <para>
1957         Support true boolean type in Python versions that have it, i.e.,
1958         version 2.3 and later (Marko Kreen)
1959        </para>
1960       </listitem>
1961
1962      </itemizedlist>
1963
1964     </sect3>
1965
1966     <sect3>
1967      <title>PL/Tcl Server-Side Language Changes</title>
1968      <itemizedlist>
1969
1970       <listitem>
1971        <para>
1972         Allow type-name arguments to <function>spi_prepare</> to be standard
1973         type aliases as well as the names given in <literal>pg_type</>
1974         (Andrew)
1975        </para>
1976       </listitem>
1977
1978       <listitem>
1979        <para>
1980         Fix problems with thread-enabled libtcl spawning multiple threads
1981         within the backend (Steve Marshall, Paul Bayer, Doug Knight)
1982        </para>
1983
1984        <para>
1985         This caused all sorts of unpleasantness.
1986        </para>
1987       </listitem>
1988
1989      </itemizedlist>
1990
1991     </sect3>
1992
1993     <sect3>
1994      <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
1995      <itemizedlist>
1996
1997       <listitem>
1998        <para>
1999         List disabled triggers separately in <literal>\d</literal> output
2000         (Brendan Jurd)
2001        </para>
2002       </listitem>
2003
2004       <listitem>
2005        <para>
2006         Identify schema of inherited table in <literal>\d</literal> output
2007         (Bernd Helmle)
2008        </para>
2009       </listitem>
2010
2011       <listitem>
2012        <para>
2013         Show aggregate return types in <literal>\da</literal> output
2014         (Greg Sabino Mullane)
2015        </para>
2016       </listitem>
2017
2018       <listitem>
2019        <para>
2020         Add the function's volatility to the output of
2021         <literal>\df+</literal> (Neil)
2022        </para>
2023       </listitem>
2024
2025       <listitem>
2026        <para>
2027         In <literal>\d</literal> patterns, always match <literal>$</literal>
2028         literally, whether quoted or not (Tom)
2029        </para>
2030
2031        <para>
2032         Since we allow <literal>$</literal> as a character within
2033         identifiers, this behavior is useful, whereas the previous behavior
2034         of treating it as the regexp ending anchor was nearly useless given
2035         that the pattern is automatically anchored anyway.
2036        </para>
2037       </listitem>
2038
2039       <listitem>
2040        <para>
2041         Add <literal>\prompt</literal> command (Chad Wagner)
2042        </para>
2043
2044        <para>
2045         This lets a <application>psql</application> script prompt the user for input.
2046        </para>
2047       </listitem>
2048
2049       <listitem>
2050        <para>
2051         Allow <literal>\pset</literal>, <literal>\t</literal> and
2052         <literal>\x</literal> to use boolean constants on/off, rather than
2053         always toggling (Chad Wagner)
2054        </para>
2055       </listitem>
2056
2057       <listitem>
2058        <para>
2059         Add <literal>\sleep</> command to allow delays in
2060         <application>psql</application> scripts (Jan)
2061        </para>
2062       </listitem>
2063
2064       <listitem>
2065        <para>
2066         Enable <literal>\timing</> output for <literal>\copy</> commands
2067         (Andrew)
2068        </para>
2069       </listitem>
2070
2071       <listitem>
2072        <para>
2073         Allow <literal>\timing</literal> to have better resolution than
2074         ~15ms on Windows (Itagaki Takahiro)
2075        </para>
2076       </listitem>
2077
2078       <listitem>
2079        <para>
2080         Flush the <literal>\o</> file, if any, after each backslash command
2081         (Tom)
2082        </para>
2083       </listitem>
2084
2085      </itemizedlist>
2086
2087     </sect3>
2088
2089     <sect3>
2090      <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
2091      <itemizedlist>
2092
2093       <listitem>
2094        <para>
2095         Add --tablespaces-only and --roles-only options to
2096         <application>pg_dumpall</application> (Dave Page)
2097        </para>
2098       </listitem>
2099
2100       <listitem>
2101        <para>
2102         Add output-file option for <application>pg_dumpall</application>
2103         (Dave Page)
2104        </para>
2105
2106        <para>
2107         This is primarily useful on Windows, where output redirection of
2108         child <application>pg_dump</application> processes doesn't work.
2109        </para>
2110       </listitem>
2111
2112       <listitem>
2113        <para>
2114         Allow pg_dumpall to accept an initial-connection database name
2115         rather than the default <literal>template1</literal> (Dave Page)
2116        </para>
2117       </listitem>
2118
2119       <listitem>
2120        <para>
2121         In -n and -t switches, always match <literal>$</literal> literally,
2122         whether quoted or not (Tom)
2123        </para>
2124
2125        <para>
2126         Since we allow <literal>$</literal> as a character within
2127         identifiers, this behavior is useful, whereas the previous behavior
2128         of treating it as the regexp ending anchor was nearly useless given
2129         that the pattern is automatically anchored anyway.
2130        </para>
2131       </listitem>
2132
2133       <listitem>
2134        <para>
2135         Replace linear searches with binary searches in pg_dump's code to
2136         lookup objects by OID (Tom)
2137        </para>
2138
2139        <para>
2140         This can improve speed materially in databases with thousands of
2141         objects of the same kind (for instances, thousands of functions).
2142        </para>
2143       </listitem>
2144
2145      </itemizedlist>
2146
2147     </sect3>
2148
2149     <sect3>
2150      <title>Other Client Application Changes</title>
2151      <itemizedlist>
2152
2153       <listitem>
2154        <para>
2155         Allow a nondefault <filename>pg_xlog</filename> directory location
2156         to be specified to initdb (Euler Taveira de Oliveira)
2157        </para>
2158       </listitem>
2159
2160       <listitem>
2161        <para>
2162         Call setrlimit if possible in pg_regress to allow core file
2163         generation, and provide a switch for similar behavior in pg_ctl
2164         (Andrew)
2165        </para>
2166       </listitem>
2167
2168       <listitem>
2169        <para>
2170         Add cancel handlers so it's possible to Ctrl-C clusterdb, reindexdb
2171         and vacuumdb (Itagaki Takahiro, Magnus)
2172        </para>
2173       </listitem>
2174
2175       <listitem>
2176        <para>
2177         Remove gratuitous response messages from utility programs (Peter)
2178        </para>
2179
2180        <para>
2181         The --quiet option is now obsolete and without effect in createdb,
2182         createuser, dropdb, dropuser; kept for compatibility but marked for
2183         removal in 8.4.
2184
2185         Progress messages when acting on all databases now go to stdout
2186         instead of stderr, since they are not in fact errors.
2187        </para>
2188       </listitem>
2189
2190      </itemizedlist>
2191
2192     </sect3>
2193
2194     <sect3>
2195      <title><link linkend="libpq"><application>libpq</></link> Changes</title>
2196      <itemizedlist>
2197
2198       <listitem>
2199        <para>
2200         Interpret the dbName parameter of PQsetdbLogin as a conninfo string
2201         if it contains an = sign (Andrew)
2202        </para>
2203
2204        <para>
2205         This allows use of all the options of conninfo strings through
2206         client programs that still use PQsetdbLogin.
2207        </para>
2208       </listitem>
2209
2210       <listitem>
2211        <para>
2212         Support a global SSL configuration file (Victor Wagner)
2213        </para>
2214       </listitem>
2215
2216       <listitem>
2217        <para>
2218         Add libpq environment variable PGSSLKEY to control SSL hardware keys
2219         (Victor Wagner)
2220        </para>
2221       </listitem>
2222
2223       <listitem>
2224        <para>
2225         Add <function>lo_truncate()</function> function for large object
2226         truncation (Kris Jurka)
2227        </para>
2228       </listitem>
2229
2230       <listitem>
2231        <para>
2232         Provide <function>PQconnectionUsedPassword()</function> function
2233         that returns true if the server demanded a password during
2234         authentication (Joe Conway)
2235        </para>
2236
2237        <para>
2238         If this is true after a failed connection, and the user did not give
2239         a password, clients may choose to prompt for a password and retry.
2240        </para>
2241       </listitem>
2242
2243      </itemizedlist>
2244
2245     </sect3>
2246
2247     <sect3>
2248      <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
2249      <itemizedlist>
2250
2251       <listitem>
2252        <para>
2253         Major rewrite to use V3 frontend/backend protocol (Michael)
2254        </para>
2255
2256        <para>
2257         Among other things, prepared statements can now be prepared on the
2258         server side.
2259        </para>
2260       </listitem>
2261
2262       <listitem>
2263        <para>
2264         Use native threads, instead of pthreads, on Windows (Magnus)
2265        </para>
2266       </listitem>
2267
2268       <listitem>
2269        <para>
2270         Improve thread-safety of ecpglib (Itagaki Takahiro)
2271        </para>
2272       </listitem>
2273
2274       <listitem>
2275        <para>
2276         Prevent ecpg libraries from exporting any symbols other than
2277         their intended API (Michael)
2278        </para>
2279       </listitem>
2280
2281      </itemizedlist>
2282
2283     </sect3>
2284
2285     <sect3>
2286      <title><application>Windows</> Port</title>
2287      <itemizedlist>
2288
2289       <listitem>
2290        <para>
2291         Support building the entire Postgres system with Visual C++ (Magnus
2292         and others)
2293        </para>
2294       </listitem>
2295
2296       <listitem>
2297        <para>
2298         Remove old-style client-only Visual C++ build infrastructure for
2299         everything except libpq (Magnus)
2300        </para>
2301       </listitem>
2302
2303       <listitem>
2304        <para>
2305         Allow regression tests to be started by an admin user (Magnus)
2306        </para>
2307
2308        <para>
2309         This uses the same privilege-dropping method that's used by pg_ctl
2310         and initdb.
2311        </para>
2312       </listitem>
2313
2314       <listitem>
2315        <para>
2316         Native shared memory implementation for Windows (Magnus)
2317        </para>
2318
2319        <para>
2320         Same underlying tech as before, but removes the useless SysV
2321         emulation layer.
2322        </para>
2323       </listitem>
2324
2325      </itemizedlist>
2326
2327     </sect3>
2328
2329     <sect3>
2330      <title>Source Code Changes</title>
2331      <itemizedlist>
2332
2333       <listitem>
2334        <para>
2335         Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
2336         len) (Greg Stark, Tom)
2337        </para>
2338
2339        <para>
2340         Third-party C code that manipulates varlena datums <emphasis>must</emphasis> convert to
2341         this convention, since the varvarlena patch changes the
2342         representation of length words on some architectures.  Also, it
2343         may be necessary to <quote>detoast</quote> input varlena datums in cases where
2344         no toasting could have happened before.
2345        </para>
2346       </listitem>
2347
2348       <listitem>
2349        <para>
2350         Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
2351         party includes (like tcl) that define DLLIMPORT (Magnus)
2352        </para>
2353       </listitem>
2354
2355       <listitem>
2356        <para>
2357         Remove the prohibition on executing cursor commands through
2358         <function>SPI_execute</function> (Tom)
2359        </para>
2360
2361        <para>
2362         The macro definition of SPI_ERROR_CURSOR still exists, so as not to
2363         needlessly break any SPI callers that are checking for it, but that
2364         code will never actually be returned anymore.
2365        </para>
2366       </listitem>
2367
2368       <listitem>
2369        <para>
2370         Clean up SPI's API a little bit by declaring SPI plan pointers as
2371         <literal>SPIPlanPtr</> instead of <literal>void *</> (Tom)
2372        </para>
2373
2374        <para>
2375         This does not break any existing code, but switching is recommended
2376         to help catch simple programming mistakes.
2377        </para>
2378       </listitem>
2379
2380       <listitem>
2381        <para>
2382         Expose more cursor-related functionality in SPI (Pavel Stehule)
2383        </para>
2384
2385        <para>
2386         Allow access to the planner's cursor-related planning options, and
2387         provide new FETCH/MOVE routines that allow access to the full power
2388         of those commands.
2389        </para>
2390       </listitem>
2391
2392       <listitem>
2393        <para>
2394         Add configure --enable-profiling switch to enable code profiling
2395         (works with gcc only, for now) (Korry Douglas and Nikhil S)
2396        </para>
2397       </listitem>
2398
2399       <listitem>
2400        <para>
2401         Add configure option --with-system-tzdata to use operating system
2402         time zone database (Peter)
2403        </para>
2404       </listitem>
2405
2406       <listitem>
2407        <para>
2408         Support <literal>gmake draft</literal> in doc/src/sgml/Makefile (Bruce)
2409        </para>
2410       </listitem>
2411
2412       <listitem>
2413        <para>
2414         Allow GIN's extractQuery method to signal that nothing can satisfy
2415         the query (Teodor)
2416        </para>
2417
2418        <para>
2419         This changes prototype of extractQuery method to use int32* instead
2420         of uint32* for nentries argument.  A -1 result means that no search
2421         is needed.
2422        </para>
2423       </listitem>
2424
2425       <listitem>
2426        <para>
2427         Move NAMEDATALEN definition from postgres_ext.h to
2428         pg_config_manual.h (Peter)
2429        </para>
2430
2431        <para>
2432         It used to be part of libpq's exported interface many releases ago,
2433         but now it's no longer necessary to make it accessible to clients.
2434         We may eventually make it configurable via a configure switch, but
2435         we should first flush out any client-side code that thinks it needs
2436         to know the value.
2437        </para>
2438       </listitem>
2439
2440       <listitem>
2441        <para>
2442         Get rid of client-code dependencies on the exact text of the
2443         no-password error message, by using
2444         <function>PQconnectionUsedPassword()</function> instead (Tom)
2445        </para>
2446       </listitem>
2447
2448       <listitem>
2449        <para>
2450         Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
2451         meant to describe the maximum size of index tuples (Tom)
2452        </para>
2453       </listitem>
2454
2455       <listitem>
2456        <para>
2457         Remove the xlog-centric <quote>database system is ready</quote>
2458         message and replace it with <quote>database system is ready to
2459         accept connections</quote>
2460        </para>
2461       </listitem>
2462
2463       <listitem>
2464        <para>
2465         Provide <function>strlcpy()</function> and
2466         <function>strlcat()</function> on all platforms, and replace
2467         error-prone uses of <function>strncpy()</function>,
2468         <function>strncat()</function>, etc (Peter)
2469        </para>
2470       </listitem>
2471
2472       <listitem>
2473        <para>
2474         Improve smgr/md API (Tom)
2475        </para>
2476
2477        <para>
2478         This improves error detection and reporting, both for external
2479         problems and for coding errors inside the backend.  Notably,
2480         disallow <function>mdread()</function> beyond EOF, and enforce that
2481         <function>mdwrite()</function> is to be used for rewriting existing
2482         blocks while <function>mdextend()</function> is to be used for
2483         extending the relation EOF.
2484        </para>
2485       </listitem>
2486
2487       <listitem>
2488        <para>
2489         Restructure planner-to-executor API (Tom)
2490        </para>
2491
2492        <para>
2493         Notably, the executor no longer sees the Query structure at all, but
2494         gets a new node type called PlannedStmt that is more suitable as
2495         executor input.  This allows us to stop storing mostly-redundant
2496         Query trees in prepared statements, portals, etc.  Also, the
2497         rangetable used by the executor is now a flat list with no
2498         unnecessary substructure &mdash; this simplifies many things.
2499        </para>
2500       </listitem>
2501
2502       <listitem>
2503        <para>
2504         Preserve typmod information in Const, Param, ArrayRef, ArrayExpr,
2505         and EXPR and ARRAY SubLink nodes (Tom)
2506        </para>
2507
2508        <para>
2509         This seems like a good idea in view of the expected increase in
2510         typmod usage from Teodor's work to allow user-defined types to have
2511         typmods.
2512        </para>
2513       </listitem>
2514
2515       <listitem>
2516        <para>
2517         Remove advertising clause from Berkeley BSD-licensed files, per
2518         instructions from Berkeley (Bruce)
2519        </para>
2520       </listitem>
2521
2522       <listitem>
2523        <para>
2524         Replace 4-clause licensed blf.[ch] in contrib/pgcrypto with blowfish
2525         implementation from PuTTY which is under minimal BSD/MIT license
2526         (Marko Kreen)
2527        </para>
2528       </listitem>
2529
2530       <listitem>
2531        <para>
2532         Decouple the values of TOAST_TUPLE_THRESHOLD and
2533         TOAST_MAX_CHUNK_SIZE, and adjust them to avoid wasting two bytes per
2534         toast chunk (Tom)
2535        </para>
2536
2537        <para>
2538         This forces initdb because the value of TOAST_MAX_CHUNK_SIZE
2539         determines the content of toast tables.  Add TOAST_MAX_CHUNK_SIZE to
2540         the values checked in pg_control, since it can't be changed without
2541         invalidating toast table content.
2542        </para>
2543
2544        <note>
2545         <para>
2546          While TOAST_TUPLE_THRESHOLD can now be changed without initdb, some
2547          thought still needs to be given to needs_toast_table() in
2548          toasting.c before unleashing random changes.
2549         </para>
2550        </note>
2551       </listitem>
2552
2553       <listitem>
2554        <para>
2555         Fix pgstats counting of live and dead tuples to recognize that
2556         committed and aborted transactions have different effects (Tom)
2557        </para>
2558
2559        <para>
2560         This should result in noticeably more accurate tracking of
2561         n_live_tuples and n_dead_tuples.
2562        </para>
2563       </listitem>
2564
2565       <listitem>
2566        <para>
2567         Add a flag bit to WAL records that shows whether it is safe to
2568         remove full-page images (Koichi Suzuki)
2569        </para>
2570
2571        <para>
2572         This supports implementation of external WAL-compression filters
2573         that remove such images.
2574        </para>
2575       </listitem>
2576
2577       <listitem>
2578        <para>
2579         Create hooks to let a loadable plugin monitor (or even replace) the
2580         planner and/or create plans for hypothetical situations (Gurjeet
2581         Singh, Tom)
2582        </para>
2583       </listitem>
2584
2585       <listitem>
2586        <para>
2587         Create a function variable <literal>join_search_hook</> to let plugins
2588         override the join search order portion of the planner (Julius
2589         Stroffek)
2590        </para>
2591       </listitem>
2592
2593       <listitem>
2594        <para>
2595         Add tas() support for Renesas' M32R processor (Kazuhiro Inaoka)
2596        </para>
2597       </listitem>
2598
2599       <listitem>
2600        <para>
2601         Downgrade some boring startup messages to <literal>DEBUG1</literal>
2602         (Peter)
2603        </para>
2604       </listitem>
2605
2606       <listitem>
2607        <para>
2608         Fix several hash functions that were taking chintzy shortcuts
2609         instead of delivering a well-randomized hash value (Tom)
2610        </para>
2611       </listitem>
2612
2613       <listitem>
2614        <para>
2615         Redefine IsTransactionState() to only return true for
2616         TRANS_INPROGRESS state (Tom)
2617        </para>
2618       </listitem>
2619
2620       <listitem>
2621        <para>
2622         Arrange for <function>quote_identifier()</function> and
2623         <application>pg_dump</application> to not quote keywords that are
2624         unreserved according to the grammar (Tom)
2625        </para>
2626
2627        <para>
2628         Should this be flagged as a potential incompatibility?
2629        </para>
2630       </listitem>
2631
2632       <listitem>
2633        <para>
2634         Fix PGXS conventions so that extensions can be built against
2635         Postgres installations whose pg_config program does not appear first
2636         in the PATH (Tom)
2637        </para>
2638       </listitem>
2639
2640       <listitem>
2641        <para>
2642         Adjust the output of <function>MemoryContextStats()</function> so
2643         that the line for a child memory context is indented two spaces to
2644         the right of its parent context (Neil)
2645        </para>
2646       </listitem>
2647
2648       <listitem>
2649        <para>
2650         Change the on-disk representation of the <type>numeric</type>
2651         datatype so that the sign_dscale word comes before the weight
2652         instead of after (Tom)
2653        </para>
2654       </listitem>
2655
2656       <listitem>
2657        <para>
2658         Use SYSV semaphores rather than POSIX on Darwin &gt;= 6.0, i.e., OS X
2659         10.2 and up (Chris Marcellino)
2660        </para>
2661       </listitem>
2662
2663      </itemizedlist>
2664
2665     </sect3>
2666
2667     <sect3>
2668      <title>Contrib Changes</title>
2669      <itemizedlist>
2670
2671       <listitem>
2672        <para>
2673         Add <filename>/contrib/pageinspect</filename> module for low-level
2674         page inspection (Simon, Heikki)
2675        </para>
2676       </listitem>
2677
2678       <listitem>
2679        <para>
2680         Add <filename>/contrib/pg_standby</filename> module for warm standby
2681         operation (Simon)
2682        </para>
2683       </listitem>
2684
2685       <listitem>
2686        <para>
2687         Add <filename>/contrib/uuid-ossp</filename> module for generating
2688         UUID values using the OSSP UUID library (Peter)
2689        </para>
2690
2691        <para>
2692         Use configure option <literal>--with-ossp-uuid</literal> to
2693         activate. This takes advantage of the new <type>uuid</type> builtin
2694         type.
2695        </para>
2696       </listitem>
2697
2698       <listitem>
2699        <para>
2700         Add pgbench option to set fillfactor (Pavan Deolasee)
2701        </para>
2702       </listitem>
2703
2704       <listitem>
2705        <para>
2706         Enhance pgbench -l option to add timestamp (Greg Smith)
2707        </para>
2708       </listitem>
2709
2710       <listitem>
2711        <para>
2712         Add usage count statistics to the information available from
2713         <filename>contrib/pgbuffercache</filename> (Greg Smith)
2714        </para>
2715       </listitem>
2716
2717       <listitem>
2718        <para>
2719         Add GIN support for hstore (Teodor)
2720        </para>
2721       </listitem>
2722
2723       <listitem>
2724        <para>
2725         Add GIN support for pg_trgm (Guillaume Smet, Teodor)
2726        </para>
2727       </listitem>
2728
2729       <listitem>
2730        <para>
2731         Update <filename>/contrib/start-scripts</filename> OS/X startup
2732         files, and move to a separate OS/X directory (Mark Cotner, David
2733         Fetter)
2734        </para>
2735       </listitem>
2736
2737       <listitem>
2738        <para>
2739         Restrict <function>pgrowlocks()</function> and
2740         <function>dblink_get_pkey()</function> to users who have
2741         <literal>SELECT</literal> privilege on the target table (Tom)
2742        </para>
2743       </listitem>
2744
2745       <listitem>
2746        <para>
2747         Restrict <filename>contrib/pgstattuple</filename> functions to
2748         superusers (Tom)
2749        </para>
2750       </listitem>
2751
2752       <listitem>
2753        <para>
2754         <filename>contrib/xml2</filename> is deprecated and planned for
2755         removal in 8.4 (Peter)
2756        </para>
2757
2758        <para>
2759         The new XML support in core Postgres supersedes this module.
2760        </para>
2761       </listitem>
2762
2763      </itemizedlist>
2764
2765     </sect3>
2766    </sect2>
2767   </sect1>
2768
2769   <sect1 id="release-8-2-5">
2770    <title>Release 8.2.5</title>
2771
2772    <note>
2773    <title>Release date</title>
2774    <simpara>2007-09-17</simpara>
2775    </note>
2776
2777    <para>
2778     This release contains a variety of fixes from 8.2.4.
2779    </para>
2780
2781    <sect2>
2782     <title>Migration to version 8.2.5</title>
2783
2784     <para>
2785      A dump/restore is not required for those running 8.2.X.
2786     </para>
2787
2788    </sect2>
2789
2790    <sect2>
2791     <title>Changes</title>
2792
2793     <itemizedlist>
2794
2795      <listitem>
2796       <para>
2797        Prevent index corruption when a transaction inserts rows and
2798        then aborts close to the end of a concurrent <command>VACUUM</>
2799        on the same table (Tom)
2800       </para>
2801      </listitem>
2802
2803      <listitem>
2804       <para>
2805        Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
2806        domains over domains (Tom)
2807       </para>
2808      </listitem>
2809
2810      <listitem>
2811       <para>
2812        Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
2813       </para>
2814      </listitem>
2815
2816      <listitem>
2817       <para>
2818        Fix some planner problems with outer joins, notably poor
2819        size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
2820        (Tom)
2821       </para>
2822      </listitem>
2823
2824      <listitem>
2825       <para>
2826        Allow the <type>interval</> data type to accept input consisting only of
2827        milliseconds or microseconds (Neil)
2828       </para>
2829      </listitem>
2830
2831      <listitem>
2832       <para>
2833        Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
2834       </para>
2835      </listitem>
2836
2837      <listitem>
2838       <para>
2839        Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
2840       </para>
2841      </listitem>
2842
2843      <listitem>
2844       <para>
2845        Speed up rtree index insertion (Teodor)
2846       </para>
2847      </listitem>
2848
2849      <listitem>
2850       <para>
2851        Fix excessive logging of <acronym>SSL</> error messages (Tom)
2852       </para>
2853      </listitem>
2854
2855      <listitem>
2856       <para>
2857        Fix logging so that log messages are never interleaved when using
2858        the syslogger process (Andrew)
2859       </para>
2860      </listitem>
2861
2862      <listitem>
2863       <para>
2864        Fix crash when <varname>log_min_error_statement</> logging runs out
2865        of memory (Tom)
2866       </para>
2867      </listitem>
2868
2869      <listitem>
2870       <para>
2871        Fix incorrect handling of some foreign-key corner cases (Tom)
2872       </para>
2873      </listitem>
2874
2875      <listitem>
2876       <para>
2877        Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
2878       </para>
2879      </listitem>
2880
2881      <listitem>
2882       <para>
2883        Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
2884        due to attempting to process temporary tables of other sessions (Alvaro)
2885       </para>
2886      </listitem>
2887
2888      <listitem>
2889       <para>
2890        Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
2891       </para>
2892      </listitem>
2893
2894      <listitem>
2895       <para>
2896        Windows socket and semaphore improvements (Magnus)
2897       </para>
2898      </listitem>
2899
2900      <listitem>
2901       <para>
2902        Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
2903       </para>
2904      </listitem>
2905
2906      <listitem>
2907       <para>
2908        Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
2909       </para>
2910      </listitem>
2911
2912      <listitem>
2913       <para>
2914        Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
2915        because of possible encoding mismatches (Tom)
2916       </para>
2917      </listitem>
2918
2919      <listitem>
2920       <para>
2921        Require non-superusers who use <filename>/contrib/dblink</> to use only
2922        password authentication, as a security measure (Joe)
2923       </para>
2924      </listitem>
2925
2926      <listitem>
2927       <para>
2928        Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
2929       </para>
2930      </listitem>
2931
2932      <listitem>
2933       <para>
2934        Do not let <filename>/contrib/intarray</> try to make its GIN opclass
2935        the default (this caused problems at dump/restore) (Tom)
2936       </para>
2937      </listitem>
2938
2939     </itemizedlist>
2940
2941    </sect2>
2942   </sect1>
2943
2944   <sect1 id="release-8-2-4">
2945    <title>Release 8.2.4</title>
2946
2947    <note>
2948    <title>Release date</title>
2949    <simpara>2007-04-23</simpara>
2950    </note>
2951
2952    <para>
2953     This release contains a variety of fixes from 8.2.3,
2954     including a security fix.
2955    </para>
2956
2957    <sect2>
2958     <title>Migration to version 8.2.4</title>
2959
2960     <para>
2961      A dump/restore is not required for those running 8.2.X.
2962     </para>
2963
2964    </sect2>
2965
2966    <sect2>
2967     <title>Changes</title>
2968
2969     <itemizedlist>
2970
2971      <listitem>
2972      <para>
2973       Support explicit placement of the temporary-table schema within
2974       <varname>search_path</>, and disable searching it for functions
2975       and operators (Tom)
2976      </para>
2977      <para>
2978       This is needed to allow a security-definer function to set a
2979       truly secure value of <varname>search_path</>.  Without it,
2980       an unprivileged SQL user can use temporary objects to execute code
2981       with the privileges of the security-definer function (CVE-2007-2138).
2982       See <command>CREATE FUNCTION</> for more information.
2983      </para>
2984      </listitem>
2985
2986      <listitem>
2987      <para>
2988       Fix <varname>shared_preload_libraries</> for Windows
2989       by forcing reload in each backend (Korry Douglas)
2990      </para>
2991      </listitem>
2992
2993      <listitem>
2994      <para>
2995       Fix <function>to_char()</> so it properly upper/lower cases localized day or month
2996       names (Pavel Stehule)
2997      </para>
2998      </listitem>
2999
3000      <listitem>
3001      <para>
3002       <filename>/contrib/tsearch2</> crash fixes (Teodor)
3003      </para>
3004      </listitem>
3005
3006      <listitem>
3007      <para>
3008       Require <command>COMMIT PREPARED</> to be executed in the same
3009       database as the transaction was prepared in (Heikki)
3010      </para>
3011      </listitem>
3012
3013      <listitem>
3014      <para>
3015       Allow <command>pg_dump</> to do binary backups larger than two gigabytes
3016       on Windows (Magnus)
3017      </para>
3018      </listitem>
3019
3020      <listitem>
3021      <para>
3022       New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
3023      </para>
3024      </listitem>
3025
3026      <listitem>
3027      <para>
3028       Prevent the statistics collector from writing to disk too frequently (Tom)
3029      </para>
3030      </listitem>
3031
3032      <listitem>
3033      <para>
3034       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
3035       <command>UPDATE</> chains (Tom, Pavan Deolasee)
3036      </para>
3037      </listitem>
3038
3039      <listitem>
3040      <para>
3041       Fix bug in domains that use array types (Tom)
3042      </para>
3043      </listitem>
3044
3045      <listitem>
3046      <para>
3047       Fix <command>pg_dump</> so it can dump a serial column's sequence
3048       using <option>-t</> when not also dumping the owning table
3049       (Tom)
3050      </para>
3051      </listitem>
3052
3053      <listitem>
3054      <para>
3055       Planner fixes, including improving outer join and bitmap scan
3056       selection logic (Tom)
3057      </para>
3058      </listitem>
3059
3060      <listitem>
3061      <para>
3062       Fix possible wrong answers or crash when a PL/pgSQL function tries
3063       to <literal>RETURN</> from within an <literal>EXCEPTION</> block
3064       (Tom)
3065      </para>
3066      </listitem>
3067
3068      <listitem>
3069      <para>
3070       Fix PANIC during enlargement of a hash index (Tom)
3071      </para>
3072      </listitem>
3073
3074      <listitem>
3075      <para>
3076       Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
3077      </para>
3078      </listitem>
3079
3080     </itemizedlist>
3081
3082    </sect2>
3083   </sect1>
3084
3085   <sect1 id="release-8-2-3">
3086    <title>Release 8.2.3</title>
3087
3088    <note>
3089    <title>Release date</title>
3090    <simpara>2007-02-07</simpara>
3091    </note>
3092
3093    <para>
3094     This release contains two fixes from 8.2.2.
3095    </para>
3096
3097    <sect2>
3098     <title>Migration to version 8.2.3</title>
3099
3100     <para>
3101      A dump/restore is not required for those running 8.2.X.
3102     </para>
3103
3104    </sect2>
3105
3106    <sect2>
3107     <title>Changes</title>
3108
3109     <itemizedlist>
3110
3111      <listitem>
3112      <para>
3113       Remove overly-restrictive check for type length in constraints and
3114       functional indexes(Tom)
3115      </para>
3116      </listitem>
3117
3118      <listitem>
3119      <para>
3120       Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
3121      </para>
3122      </listitem>
3123
3124     </itemizedlist>
3125
3126    </sect2>
3127   </sect1>
3128
3129   <sect1 id="release-8-2-2">
3130    <title>Release 8.2.2</title>
3131
3132    <note>
3133    <title>Release date</title>
3134    <simpara>2007-02-05</simpara>
3135    </note>
3136
3137    <para>
3138     This release contains a variety of fixes from 8.2.1, including
3139     a security fix.
3140    </para>
3141
3142    <sect2>
3143     <title>Migration to version 8.2.2</title>
3144
3145     <para>
3146      A dump/restore is not required for those running 8.2.X.
3147     </para>
3148
3149    </sect2>
3150
3151    <sect2>
3152     <title>Changes</title>
3153
3154     <itemizedlist>
3155
3156      <listitem>
3157      <para>
3158       Remove security vulnerabilities that allowed connected users
3159       to read backend memory (Tom)
3160      </para>
3161      <para>
3162       The vulnerabilities involve suppressing the normal check that a SQL
3163       function returns the data type it's declared to, and changing the
3164       data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
3165       errors can easily be exploited to cause a backend crash, and in
3166       principle might be used to read database content that the user
3167       should not be able to access.
3168      </para>
3169      </listitem>
3170
3171      <listitem>
3172      <para>
3173       Fix not-so-rare-anymore bug wherein btree index page splits could fail
3174       due to choosing an infeasible split point (Heikki Linnakangas)
3175      </para>
3176      </listitem>
3177
3178      <listitem>
3179      <para>
3180       Fix Borland C compile scripts (L Bayuk)
3181      </para>
3182      </listitem>
3183
3184      <listitem>
3185      <para>
3186       Properly handle <function>to_char('CC')</> for years ending in
3187       <literal>00</> (Tom)
3188      </para>
3189      <para>
3190       Year 2000 is in the twentieth century, not the twenty-first.
3191      </para>
3192      </listitem>
3193
3194      <listitem>
3195      <para>
3196       <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
3197      </para>
3198      </listitem>
3199
3200      <listitem>
3201      <para>
3202       Fix incorrect permission check in
3203       <literal>information_schema.key_column_usage</> view (Tom)
3204      </para>
3205      <para>
3206       The symptom is <quote>relation with OID nnnnn does not exist</> errors.
3207       To get this fix without using <command>initdb</>, use <command>CREATE OR
3208       REPLACE VIEW</> to install the corrected definition found in
3209       <filename>share/information_schema.sql</>.  Note you will need to do
3210       this in each database.
3211      </para>
3212      </listitem>
3213
3214      <listitem>
3215      <para>
3216       Improve <command>VACUUM</> performance for databases with many tables (Tom)
3217      </para>
3218      </listitem>
3219
3220      <listitem>
3221      <para>
3222       Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
3223      </para>
3224      </listitem>
3225
3226      <listitem>
3227      <para>
3228       Fix potentially incorrect results from index searches using
3229       <literal>ROW</> inequality conditions (Tom)
3230      </para>
3231      </listitem>
3232
3233      <listitem>
3234      <para>
3235       Tighten security of multi-byte character processing for UTF8 sequences
3236       over three bytes long (Tom)
3237      </para>
3238      </listitem>
3239
3240      <listitem>
3241      <para>
3242       Fix bogus <quote>permission denied</> failures occurring on Windows
3243       due to attempts to fsync already-deleted files (Magnus, Tom)
3244      </para>
3245      </listitem>
3246
3247      <listitem>
3248      <para>
3249       Fix bug that could cause the statistics collector
3250       to hang on Windows (Magnus)
3251      </para>
3252
3253      <para>
3254       This would in turn lead to autovacuum not working.
3255      </para>
3256      </listitem>
3257
3258      <listitem>
3259      <para>
3260       Fix possible crashes when an already-in-use PL/pgSQL function is
3261       updated (Tom)
3262      </para>
3263      </listitem>
3264
3265      <listitem>
3266      <para>
3267       Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
3268      </para>
3269      </listitem>
3270
3271      <listitem>
3272      <para>
3273       Fix possible errors in processing PL/pgSQL exception blocks (Tom)
3274      </para>
3275      </listitem>
3276
3277     </itemizedlist>
3278
3279    </sect2>
3280   </sect1>
3281
3282   <sect1 id="release-8-2-1">
3283    <title>Release 8.2.1</title>
3284
3285    <note>
3286    <title>Release date</title>
3287    <simpara>2007-01-08</simpara>
3288    </note>
3289
3290    <para>
3291     This release contains a variety of fixes from 8.2.
3292    </para>
3293
3294    <sect2>
3295     <title>Migration to version 8.2.1</title>
3296
3297     <para>
3298      A dump/restore is not required for those running 8.2.
3299     </para>
3300
3301    </sect2>
3302
3303    <sect2>
3304     <title>Changes</title>
3305
3306     <itemizedlist>
3307
3308      <listitem>
3309       <para>
3310        Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
3311        <literal>LIMIT NULL</>) (Tom)
3312       </para>
3313      </listitem>
3314
3315      <listitem>
3316       <para>
3317        <filename>Several /contrib/tsearch2</> fixes (Teodor)
3318       </para>
3319      </listitem>
3320
3321      <listitem>
3322       <para>
3323        On Windows, make log messages coming from the operating system use
3324        <acronym>ASCII</> encoding (Hiroshi Saito)
3325       </para>
3326
3327       <para>
3328        This fixes a conversion problem when there is a mismatch between
3329        the encoding of the operating system and database server.
3330       </para>
3331      </listitem>
3332
3333      <listitem>
3334       <para>
3335        Fix Windows linking of <application>pg_dump</> using
3336        <filename>win32.mak</>
3337        (Hiroshi Saito)
3338       </para>
3339      </listitem>
3340
3341      <listitem>
3342       <para>
3343        Fix planner mistakes for outer join queries (Tom)
3344       </para>
3345      </listitem>
3346
3347      <listitem>
3348       <para>
3349        Fix several problems in queries involving sub-SELECTs (Tom)
3350       </para>
3351      </listitem>
3352
3353      <listitem>
3354       <para>
3355        Fix potential crash in SPI during subtransaction abort (Tom)
3356       </para>
3357
3358       <para>
3359        This affects all PL functions since they all use SPI.
3360       </para>
3361      </listitem>
3362
3363      <listitem>
3364       <para>
3365        Improve build speed of <acronym>PDF</> documentation (Peter)
3366       </para>
3367      </listitem>
3368
3369      <listitem>
3370       <para>
3371        Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
3372       </para>
3373      </listitem>
3374
3375      <listitem>
3376       <para>
3377        Improve optimization decisions related to index scans (Tom)
3378       </para>
3379      </listitem>
3380
3381      <listitem>
3382       <para>
3383        Have <application>psql</> print multi-byte combining characters as
3384        before, rather than output as <literal>\u</> (Tom)
3385       </para>
3386      </listitem>
3387
3388      <listitem>
3389       <para>
3390        Improve index usage of regular expressions that use parentheses (Tom)
3391       </para>
3392
3393       <para>
3394        This improves <application>psql</> <literal>\d</> performance also.
3395       </para>
3396      </listitem>
3397
3398      <listitem>
3399       <para>
3400        Make <application>pg_dumpall</> assume that databases have public
3401        <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
3402       </para>
3403
3404       <para>
3405        This preserves the previous behavior that anyone can connect to a
3406        database if allowed by <filename>pg_hba.conf</>.
3407       </para>
3408      </listitem>
3409
3410     </itemizedlist>
3411
3412    </sect2>
3413   </sect1>
3414
3415   <sect1 id="release-8-2">
3416    <title>Release 8.2</title>
3417
3418    <note>
3419     <title>Release date</title>
3420     <simpara>2006-12-05</simpara>
3421    </note>
3422
3423    <sect2>
3424     <title>Overview</title>
3425
3426     <para>
3427      This release adds many functionality and performance improvements that
3428      were requested by users, including:
3429
3430     <itemizedlist>
3431
3432       <listitem>
3433        <para>
3434         Query language enhancements including <command>INSERT/UPDATE/DELETE
3435         RETURNING</command>, multirow <literal>VALUES</literal> lists, and
3436         optional target-table alias in
3437         <command>UPDATE</>/<command>DELETE</command>
3438        </para>
3439       </listitem>
3440
3441       <listitem>
3442        <para>
3443         Index creation without blocking concurrent
3444         <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
3445         operations
3446        </para>
3447       </listitem>
3448
3449       <listitem>
3450        <para>
3451         Many query optimization improvements, including support for
3452         reordering outer joins
3453        </para>
3454       </listitem>
3455
3456       <listitem>
3457        <para>
3458         Improved sorting performance with lower memory usage
3459        </para>
3460       </listitem>
3461
3462       <listitem>
3463        <para>
3464         More efficient locking with better concurrency
3465        </para>
3466       </listitem>
3467
3468       <listitem>
3469        <para>
3470         More efficient vacuuming
3471        </para>
3472       </listitem>
3473
3474       <listitem>
3475        <para>
3476         Easier administration of warm standby servers
3477        </para>
3478       </listitem>
3479
3480       <listitem>
3481        <para>
3482         New <literal>FILLFACTOR</literal> support for tables and indexes
3483        </para>
3484       </listitem>
3485
3486       <listitem>
3487        <para>
3488         Monitoring, logging, and performance tuning additions
3489        </para>
3490       </listitem>
3491
3492       <listitem>
3493        <para>
3494         More control over creating and dropping objects
3495        </para>
3496       </listitem>
3497
3498       <listitem>
3499        <para>
3500         Table inheritance relationships can be defined
3501         for and removed from pre-existing tables
3502        </para>
3503       </listitem>
3504
3505       <listitem>
3506        <para>
3507         <command>COPY TO</command> can copy the output of an arbitrary
3508         <command>SELECT</command> statement
3509        </para>
3510       </listitem>
3511
3512       <listitem>
3513        <para>
3514         Array improvements, including nulls in arrays
3515        </para>
3516       </listitem>
3517
3518       <listitem>
3519        <para>
3520         Aggregate-function improvements, including multiple-input
3521         aggregates and SQL:2003 statistical functions
3522        </para>
3523       </listitem>
3524
3525       <listitem>
3526        <para>
3527         Many <filename>contrib/</filename> improvements
3528        </para>
3529       </listitem>
3530
3531      </itemizedlist>
3532
3533     </para>
3534
3535    </sect2>
3536
3537    <sect2>
3538     <title>Migration to version 8.2</title>
3539
3540     <para>
3541      A dump/restore using <application>pg_dump</application> is
3542      required for those wishing to migrate data from any previous
3543      release.
3544     </para>
3545
3546     <para>
3547      Observe the following incompatibilities:
3548     </para>
3549
3550     <itemizedlist>
3551
3552       <listitem>
3553        <para>
3554         Set <link
3555         linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
3556         to <literal>on</> by default (Bruce)
3557        </para>
3558
3559        <para>
3560         This issues a warning if backslash escapes are used in
3561         <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
3562         strings</link>.
3563        </para>
3564       </listitem>
3565
3566       <listitem>
3567        <para>
3568         Change the <link linkend="sql-syntax-row-constructors">row
3569         constructor syntax</link> (<literal>ROW(...)</>) so that
3570         list elements <literal>foo.*</> will be expanded to a list
3571         of their member fields, rather than creating a nested
3572         row type field as formerly (Tom)
3573        </para>
3574
3575        <para>
3576         The new behavior is substantially more useful since it
3577         allows, for example, triggers to check for data changes
3578         with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
3579         The old behavior is still available by omitting <literal>.*</>.
3580        </para>
3581       </listitem>
3582
3583       <listitem>
3584        <para>
3585         Make <link linkend="row-wise-comparison">row comparisons</link>
3586         follow <acronym>SQL</> standard semantics and allow them
3587         to be used in index scans (Tom)
3588        </para>
3589
3590        <para>
3591         Previously, row = and &lt;&gt; comparisons followed the
3592         standard but &lt; &lt;= &gt; &gt;= did not.  A row comparison
3593         can now be used as an index constraint for a multicolumn
3594         index matching the row value.
3595        </para>
3596       </listitem>
3597
3598       <listitem>
3599        <para>
3600         Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
3601         tests follow <acronym>SQL</> standard semantics (Tom)
3602        </para>
3603
3604        <para>
3605         The former behavior conformed to the standard for simple cases
3606         with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
3607         true if any row field was non-null, whereas the standard says it
3608         should return true only when all fields are non-null.
3609        </para>
3610       </listitem>
3611
3612       <listitem>
3613        <para>
3614         Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
3615         CONSTRAINT</></link> affect only one constraint (Kris Jurka)
3616        </para>
3617
3618        <para>
3619         In previous releases, <command>SET CONSTRAINT</> modified
3620         all constraints with a matching name.  In this release,
3621         the schema search path is used to modify only the first
3622         matching constraint.  A schema specification is also
3623         supported.  This more nearly conforms to the SQL standard.
3624        </para>
3625       </listitem>
3626
3627       <listitem>
3628        <para>
3629         Remove <literal>RULE</> permission for tables, for security reasons
3630         (Tom)
3631        </para>
3632
3633        <para>
3634         As of this release, only a table's owner can create or modify
3635         rules for the table.  For backwards compatibility,
3636         <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
3637         but it does nothing.
3638        </para>
3639       </listitem>
3640
3641       <listitem>
3642        <para>
3643         Array comparison improvements (Tom)
3644        </para>
3645
3646        <para>
3647         Now array dimensions are also compared.
3648        </para>
3649       </listitem>
3650
3651       <listitem>
3652        <para>
3653         Change <link linkend="functions-array">array concatenation</link>
3654         to match documented behavior (Tom)
3655        </para>
3656
3657        <para>
3658         This changes the previous behavior where concatenation
3659         would modify the array lower bound.
3660        </para>
3661       </listitem>
3662
3663       <listitem>
3664        <para>
3665         Make command-line options of <application>postmaster</>
3666         and <link linkend="app-postgres"><application>postgres</></link>
3667         identical (Peter)
3668        </para>
3669
3670        <para>
3671         This allows the postmaster to pass arguments to each backend
3672         without using <literal>-o</>.  Note that some options are now
3673         only available as long-form options, because there were conflicting
3674         single-letter options.
3675        </para>
3676       </listitem>
3677
3678       <listitem>
3679        <para>
3680         Deprecate use of <application>postmaster</> symbolic link (Peter)
3681        </para>
3682
3683        <para>
3684         <application>postmaster</> and <application>postgres</>
3685         commands now act identically, with the behavior determined
3686         by command-line options.  The <application>postmaster</> symbolic link is
3687         kept for compatibility, but is not really needed.
3688        </para>
3689       </listitem>
3690
3691       <listitem>
3692        <para>
3693         Change <link
3694         linkend="guc-log-duration"><varname>log_duration</></link>
3695         to output even if the query is not output (Tom)
3696        </para>
3697
3698        <para>
3699         In prior releases, <varname>log_duration</> only printed if
3700         the query appeared earlier in the log.
3701        </para>
3702       </listitem>
3703
3704       <listitem>
3705        <para>
3706         Make <link
3707         linkend="functions-formatting"><function>to_char(time)</></link>
3708         and <link
3709         linkend="functions-formatting"><function>to_char(interval)</></link>
3710         treat <literal>HH</> and <literal>HH12</> as 12-hour
3711         intervals
3712        </para>
3713
3714        <para>
3715         Most applications should use <literal>HH24</> unless they
3716         want a 12-hour display.
3717        </para>
3718       </listitem>
3719
3720       <listitem>
3721        <para>
3722         Zero unmasked bits in conversion from <link
3723         linkend="datatype-inet"><type>INET</></link> to <link
3724         linkend="datatype-inet"><type>CIDR</></link> (Tom)
3725        </para>
3726
3727        <para>
3728         This ensures that the converted value is actually valid for
3729         <type>CIDR</>.
3730        </para>
3731       </listitem>
3732
3733       <listitem>
3734        <para>
3735         Remove <varname>australian_timezones</> configuration variable
3736         (Joachim Wieland)
3737        </para>
3738
3739        <para>
3740         This variable has been superseded by a more general facility
3741         for configuring timezone abbreviations.
3742        </para>
3743       </listitem>
3744
3745       <listitem>
3746        <para>
3747         Improve cost estimation for nested-loop index scans (Tom)
3748        </para>
3749
3750        <para>
3751         This might eliminate the need to set unrealistically small
3752         values of <link
3753         linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
3754         If you have been using a very small <varname>random_page_cost</>,
3755         please recheck your test cases.
3756        </para>
3757       </listitem>
3758
3759       <listitem>
3760        <para>
3761         Change behavior of <command>pg_dump</> <literal>-n</> and
3762         <literal>-t</> options.  (Greg Sabino Mullane)
3763        </para>
3764        <para>
3765         See the <command>pg_dump</> manual page for details.
3766        </para>
3767       </listitem>
3768
3769       <listitem>
3770        <para>
3771         Change <link linkend="libpq"><application>libpq</></link>
3772         <function>PQdsplen()</> to return a useful value (Martijn
3773         van Oosterhout)
3774        </para>
3775       </listitem>
3776
3777       <listitem>
3778        <para>
3779         Declare <link linkend="libpq"><application>libpq</></link>
3780         <function>PQgetssl()</> as returning <literal>void *</>,
3781         rather than <literal>SSL *</> (Martijn van Oosterhout)
3782        </para>
3783
3784        <para>
3785         This allows applications to use the function without including
3786         the OpenSSL headers.
3787        </para>
3788       </listitem>
3789
3790       <listitem>
3791        <para>
3792         C-language loadable modules must now include a
3793         <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
3794         macro call for version compatibility checking
3795         (Martijn van Oosterhout)
3796        </para>
3797       </listitem>
3798
3799       <listitem>
3800        <para>
3801         For security's sake, modules used by a PL/PerlU function are no
3802         longer available to PL/Perl functions (Andrew)
3803        </para>
3804        <note>
3805         <para>
3806          This also implies that data can no longer be shared between a PL/Perl
3807          function and a PL/PerlU function.
3808          Some Perl installations have not been compiled with the correct flags
3809          to allow multiple interpreters to exist within a single process.
3810          In this situation PL/Perl and PL/PerlU cannot both be used in a
3811          single backend. The solution is to get a Perl installation which
3812          supports multiple interpreters.
3813         </para>
3814        </note>
3815       </listitem>
3816
3817       <listitem>
3818        <para>
3819         In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
3820         <function>xml_is_well_formed()</> (Tom)
3821        </para>
3822
3823        <para>
3824         <function>xml_valid()</> will remain for backward compatibility,
3825         but its behavior will change to do schema checking in a future
3826         release.
3827        </para>
3828       </listitem>
3829
3830       <listitem>
3831        <para>
3832         Remove <filename>contrib/ora2pg/</>, now at <ulink
3833         url="http://www.samse.fr/GPL/ora2pg"></ulink>
3834        </para>
3835       </listitem>
3836
3837       <listitem>
3838        <para>
3839         Remove contrib modules that have been migrated to PgFoundry:
3840         <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
3841         <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
3842        </para>
3843       </listitem>
3844
3845       <listitem>
3846        <para>
3847         Remove abandoned contrib modules:
3848         <filename>mSQL-interface</>, <filename>tips</>
3849        </para>
3850       </listitem>
3851
3852       <listitem>
3853        <para>
3854         Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
3855        </para>
3856
3857        <para>
3858         These ports no longer had active maintainers.
3859        </para>
3860       </listitem>
3861
3862     </itemizedlist>
3863    </sect2>
3864
3865    <sect2>
3866     <title>Changes</title>
3867
3868     <para>
3869      Below you will find a detailed account of the
3870      changes between <productname>PostgreSQL</productname> 8.2 and
3871      the previous major release.
3872     </para>
3873
3874     <sect3>
3875      <title>Performance Improvements</title>
3876      <itemizedlist>
3877
3878       <listitem>
3879        <para>
3880         Allow the planner to reorder <link linkend="queries-join">outer
3881         joins</link> in some circumstances (Tom)
3882        </para>
3883
3884        <para>
3885         In previous releases, outer joins would always be evaluated in
3886         the order written in the query. This change allows the
3887         query optimizer to consider reordering outer joins, in cases where
3888         it can determine that the join order can be changed without
3889         altering the meaning of the query.  This can make a
3890         considerable performance difference for queries involving
3891         multiple outer joins or mixed inner and outer joins.
3892        </para>
3893       </listitem>
3894
3895       <listitem>
3896        <para>
3897         Improve efficiency of <link
3898         linkend="functions-comparisons"><literal>IN</>
3899         (list-of-expressions)</link> clauses (Tom)
3900        </para>
3901       </listitem>
3902
3903       <listitem>
3904        <para>
3905         Improve sorting speed and reduce memory usage (Simon, Tom)
3906        </para>
3907       </listitem>
3908
3909       <listitem>
3910        <para>
3911         Improve subtransaction performance (Alvaro, Itagaki Takahiro,
3912         Tom)
3913        </para>
3914       </listitem>
3915
3916       <listitem>
3917        <para>
3918         Add <literal>FILLFACTOR</> to <link
3919         linkend="SQL-CREATETABLE">table</link> and <link
3920         linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
3921         Takahiro)
3922        </para>
3923
3924        <para>
3925         This leaves extra free space in each table or index page,
3926         allowing improved performance as the database grows.  This
3927         is particularly valuable to maintain clustering.
3928        </para>
3929       </listitem>
3930
3931       <listitem>
3932        <para>
3933         Increase default values for <link
3934         linkend="guc-shared-buffers"><varname>shared_buffers</></link>
3935         and <link
3936         linkend="guc-max-fsm-pages"><varname>max_fsm_pages</></link>
3937         (Andrew)
3938        </para>
3939       </listitem>
3940
3941       <listitem>
3942        <para>
3943         Improve locking performance by breaking the lock manager tables into
3944         sections
3945         (Tom)
3946        </para>
3947
3948        <para>
3949         This allows locking to be more fine-grained, reducing
3950         contention.
3951        </para>
3952       </listitem>
3953
3954       <listitem>
3955        <para>
3956         Reduce locking requirements of sequential scans (Qingqing
3957         Zhou)
3958        </para>
3959       </listitem>
3960
3961       <listitem>
3962        <para>
3963         Reduce locking required for database creation and destruction
3964         (Tom)
3965        </para>
3966       </listitem>
3967
3968       <listitem>
3969        <para>
3970         Improve the optimizer's selectivity estimates for <link
3971         linkend="functions-like"><literal>LIKE</></link>, <link
3972         linkend="functions-like"><literal>ILIKE</></link>, and
3973         <link linkend="functions-posix-regexp">regular expression</link>
3974         operations (Tom)
3975        </para>
3976       </listitem>
3977
3978       <listitem>
3979        <para>
3980         Improve planning of joins to <link linkend="ddl-inherit">inherited
3981         tables</link> and <link linkend="queries-union"><literal>UNION
3982         ALL</></link> views (Tom)
3983        </para>
3984       </listitem>
3985
3986       <listitem>
3987        <para>
3988         Allow <link linkend="guc-constraint-exclusion">constraint
3989         exclusion</link> to be applied to <link
3990         linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
3991         <command>DELETE</> queries (Tom)
3992        </para>
3993
3994        <para>
3995         <command>SELECT</> already honored constraint exclusion.
3996        </para>
3997       </listitem>
3998
3999       <listitem>
4000        <para>
4001         Improve planning of constant <literal>WHERE</> clauses, such as
4002         a condition that depends only on variables inherited from an
4003         outer query level (Tom)
4004        </para>
4005       </listitem>
4006
4007       <listitem>
4008        <para>
4009         Protocol-level unnamed prepared statements are re-planned
4010         for each set of <literal>BIND</> values (Tom)
4011        </para>
4012
4013        <para>
4014         This improves performance because the exact parameter values
4015         can be used in the plan.
4016        </para>
4017       </listitem>
4018
4019       <listitem>
4020        <para>
4021         Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
4022         Tom)
4023        </para>
4024       </listitem>
4025
4026       <listitem>
4027        <para>
4028         Avoid extra scan of tables without indexes during <link
4029         linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
4030        </para>
4031       </listitem>
4032
4033       <listitem>
4034        <para>
4035         Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
4036         indexing (Oleg, Teodor)
4037        </para>
4038       </listitem>
4039
4040       <listitem>
4041        <para>
4042         Remove dead index entries before B-Tree page split (Junji
4043         Teramoto)
4044        </para>
4045       </listitem>
4046
4047      </itemizedlist>
4048
4049     </sect3>
4050
4051     <sect3>
4052      <title>Server Changes</title>
4053      <itemizedlist>
4054
4055       <listitem>
4056        <para>
4057         Allow a forced switch to a new transaction log file (Simon, Tom)
4058        </para>
4059
4060        <para>
4061         This is valuable for keeping warm standby slave servers
4062         in sync with the master.  Transaction log file switching now also happens
4063         automatically during <link
4064         linkend="functions-admin"><function>pg_stop_backup()</></link>.
4065         This ensures that all
4066         transaction log files needed for recovery can be archived immediately.
4067        </para>
4068       </listitem>
4069
4070       <listitem>
4071        <para>
4072         Add <acronym>WAL</> informational functions (Simon)
4073        </para>
4074
4075        <para>
4076         Add functions for interrogating the current transaction log insertion
4077         point and determining <acronym>WAL</> filenames from the
4078         hex <acronym>WAL</> locations displayed by <link
4079         linkend="functions-admin"><function>pg_stop_backup()</></link>
4080         and related functions.
4081        </para>
4082       </listitem>
4083
4084       <listitem>
4085        <para>
4086         Improve recovery from a crash during <acronym>WAL</> replay (Simon)
4087        </para>
4088
4089        <para>
4090         The server now does periodic checkpoints during <acronym>WAL</>
4091         recovery, so if there is a crash, future <acronym>WAL</>
4092         recovery is shortened.  This also eliminates the need for
4093         warm standby servers to replay the entire log since the
4094         base backup if they crash.
4095        </para>
4096       </listitem>
4097
4098       <listitem>
4099        <para>
4100         Improve reliability of long-term <acronym>WAL</> replay
4101         (Heikki, Simon, Tom)
4102        </para>
4103
4104        <para>
4105         Formerly, trying to roll forward through more than 2 billion
4106         transactions would not work due to XID wraparound.  This meant
4107         warm standby servers had to be reloaded
4108         from fresh base backups periodically.
4109        </para>
4110       </listitem>
4111
4112       <listitem>
4113        <para>
4114         Add <link
4115         linkend="guc-archive-timeout"><varname>archive_timeout</></link>
4116         to force transaction log file switches at a given interval (Simon)
4117        </para>
4118
4119        <para>
4120         This enforces a maximum replication delay for warm standby servers.
4121        </para>
4122       </listitem>
4123
4124       <listitem>
4125        <para>
4126         Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
4127         authentication (Magnus Hagander)
4128        </para>
4129
4130        <para>
4131         This is particularly useful for platforms that do not
4132         support <acronym>PAM</>, such as Windows.
4133        </para>
4134       </listitem>
4135
4136       <listitem>
4137        <para>
4138         Add <link linkend="sql-grant-description-objects"><literal>GRANT
4139         CONNECT ON DATABASE</></link> (Gevik Babakhani)
4140        </para>
4141
4142        <para>
4143         This gives SQL-level control over database access.  It works as
4144         an additional filter on top of the existing
4145         <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
4146         controls.
4147        </para>
4148       </listitem>
4149
4150       <listitem>
4151        <para>
4152         Add support for <link linkend="ssl-tcp"><acronym>SSL</>
4153         Certificate Revocation List</link> (<acronym>CRL</>) files
4154         (Libor Hoho&scaron;)
4155        </para>
4156
4157        <para>
4158         The server and <application>libpq</> both recognize <acronym>CRL</>
4159         files now.
4160        </para>
4161       </listitem>
4162
4163       <listitem>
4164        <para>
4165         <link linkend="GiST"><acronym>GiST</></link> indexes are
4166         now clusterable (Teodor)
4167        </para>
4168       </listitem>
4169
4170       <listitem>
4171        <para>
4172         Remove routine autovacuum server log entries (Bruce)
4173        </para>
4174
4175        <para>
4176         <link
4177         linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4178         now shows autovacuum activity.
4179        </para>
4180       </listitem>
4181
4182       <listitem>
4183        <para>
4184         Track maximum XID age within individual tables, instead of whole databases (Alvaro)
4185        </para>
4186
4187        <para>
4188         This reduces the overhead involved in preventing transaction
4189         ID wraparound, by avoiding unnecessary VACUUMs.
4190        </para>
4191       </listitem>
4192
4193       <listitem>
4194        <para>
4195         Add last vacuum and analyze timestamp columns to the stats
4196         collector (Larry Rosenman)
4197        </para>
4198
4199        <para>
4200         These values now appear in the <link
4201         linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
4202         system views.
4203        </para>
4204       </listitem>
4205
4206       <listitem>
4207        <para>
4208         Improve performance of statistics monitoring, especially
4209         <varname>stats_command_string</>
4210         (Tom, Bruce)
4211        </para>
4212
4213        <para>
4214         This release enables <varname>stats_command_string</> by
4215         default, now that its overhead is minimal.  This means
4216         <link
4217         linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4218         will now show all active queries by default.
4219        </para>
4220       </listitem>
4221
4222       <listitem>
4223        <para>
4224         Add a <literal>waiting</> column to <link
4225         linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4226         (Tom)
4227        </para>
4228
4229        <para>
4230         This allows <structname>pg_stat_activity</> to show all the
4231         information included in the <application>ps</> display.
4232        </para>
4233       </listitem>
4234
4235       <listitem>
4236        <para>
4237         Add configuration parameter <link
4238         linkend="guc-update-process-title"><varname>update_process_title</></link>
4239         to control whether the <application>ps</> display is updated
4240         for every command (Bruce)
4241        </para>
4242
4243        <para>
4244         On platforms where it is expensive to update the <application>ps</>
4245         display, it might be worthwhile to turn this off and rely solely on
4246         <structname>pg_stat_activity</> for status information.
4247        </para>
4248       </listitem>
4249
4250       <listitem>
4251        <para>
4252         Allow units to be specified in configuration settings
4253         (Peter)
4254        </para>
4255
4256        <para>
4257         For example, you can now set <link
4258         linkend="guc-shared-buffers"><varname>shared_buffers</></link>
4259         to <literal>32MB</> rather than mentally converting sizes.
4260        </para>
4261       </listitem>
4262
4263       <listitem>
4264        <para>
4265         Add support for <link linkend="config-setting">include
4266         directives</link> in <filename>postgresql.conf</> (Joachim
4267         Wieland)
4268        </para>
4269       </listitem>
4270
4271       <listitem>
4272        <para>
4273         Improve logging of protocol-level prepare/bind/execute
4274         messages (Bruce, Tom)
4275        </para>
4276
4277        <para>
4278         Such logging now shows statement names, bind parameter
4279         values, and the text of the query being executed.  Also,
4280         the query text is properly included in logged error messages
4281         when enabled by <varname>log_min_error_statement</>.
4282        </para>
4283       </listitem>
4284
4285       <listitem>
4286        <para>
4287         Prevent <link
4288         linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
4289         from being set to unsafe values
4290        </para>
4291
4292        <para>
4293         On platforms where we can determine the actual kernel stack depth
4294         limit (which is most), make sure that the initial default value of
4295         <varname>max_stack_depth</> is safe, and reject attempts to set it
4296         to unsafely large values.
4297        </para>
4298       </listitem>
4299
4300       <listitem>
4301        <para>
4302         Enable highlighting of error location in query in more
4303         cases (Tom)
4304        </para>
4305
4306        <para>
4307         The server is now able to report a specific error location for
4308         some semantic errors (such as unrecognized column name), rather
4309         than just for basic syntax errors as before.
4310        </para>
4311       </listitem>
4312
4313       <listitem>
4314        <para>
4315         Fix <quote>failed to re-find parent key</> errors in
4316         <command>VACUUM</> (Tom)
4317        </para>
4318       </listitem>
4319
4320       <listitem>
4321        <para>
4322         Clean out <filename>pg_internal.init</> cache files during server
4323         restart (Simon)
4324        </para>
4325
4326        <para>
4327         This avoids a hazard that the cache files might contain stale
4328         data after PITR recovery.
4329        </para>
4330       </listitem>
4331
4332       <listitem>
4333        <para>
4334         Fix race condition for truncation of a large relation across a
4335         gigabyte boundary by <command>VACUUM</> (Tom)
4336        </para>
4337       </listitem>
4338
4339       <listitem>
4340        <para>
4341         Fix bug causing needless deadlock errors on row-level locks (Tom)
4342        </para>
4343       </listitem>
4344
4345       <listitem>
4346        <para>
4347         Fix bugs affecting multi-gigabyte hash indexes (Tom)
4348        </para>
4349       </listitem>
4350
4351       <listitem>
4352        <para>
4353         Each backend process is now its own process group leader (Tom)
4354        </para>
4355
4356        <para>
4357         This allows query cancel to abort subprocesses invoked from a
4358         backend or archive/recovery process.
4359        </para>
4360       </listitem>
4361
4362      </itemizedlist>
4363
4364     </sect3>
4365
4366     <sect3>
4367      <title>Query Changes</title>
4368      <itemizedlist>
4369
4370       <listitem>
4371        <para>
4372         Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
4373         linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
4374         linkend="SQL-DELETE"><command>DELETE</></link>
4375         <literal>RETURNING</> (Jonah Harris, Tom)
4376        </para>
4377
4378        <para>
4379         This allows these commands to return values, such as the
4380         computed serial key for a new row.  In the <command>UPDATE</>
4381         case, values from the updated version of the row are returned.
4382        </para>
4383       </listitem>
4384
4385       <listitem>
4386        <para>
4387         Add support for multiple-row <link
4388         linkend="queries-values"><literal>VALUES</></link> clauses,
4389         per SQL standard (Joe, Tom)
4390        </para>
4391
4392        <para>
4393         This allows <command>INSERT</> to insert multiple rows of
4394         constants, or queries to generate result sets using constants.
4395         For example, <literal>INSERT ...  VALUES (...), (...),
4396         ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
4397         ....) AS alias(f1, ...)</>.
4398        </para>
4399       </listitem>
4400
4401       <listitem>
4402        <para>
4403         Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
4404         and <link linkend="SQL-DELETE"><command>DELETE</></link>
4405         to use an alias for the target table (Atsushi Ogawa)
4406        </para>
4407
4408        <para>
4409         The SQL standard does not permit an alias in these commands, but
4410         many database systems allow one anyway for notational convenience.
4411        </para>
4412       </listitem>
4413
4414       <listitem>
4415        <para>
4416         Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
4417         to set multiple columns with a list of values (Susanne
4418         Ebrecht)
4419        </para>
4420
4421        <para>
4422         This is basically a short-hand for assigning the columns
4423         and values in pairs.  The syntax is <literal>UPDATE tab
4424         SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
4425        </para>
4426       </listitem>
4427
4428       <listitem>
4429        <para>
4430         Make row comparisons work per standard (Tom)
4431        </para>
4432
4433        <para>
4434         The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
4435         that is, compare the first elements, if equal compare the second
4436         elements, and so on.  Formerly they expanded to an AND condition
4437         across all the elements, which was neither standard nor very useful.
4438        </para>
4439       </listitem>
4440
4441       <listitem>
4442        <para>
4443         Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
4444         option to <command>TRUNCATE</> (Joachim Wieland)
4445        </para>
4446
4447        <para>
4448         This causes <command>TRUNCATE</> to automatically include all tables
4449         that reference the specified table(s) via foreign keys.  While
4450         convenient, this is a dangerous tool &mdash; use with caution!
4451        </para>
4452       </listitem>
4453
4454       <listitem>
4455        <para>
4456         Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
4457         in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
4458         command (Tom)
4459        </para>
4460       </listitem>
4461
4462       <listitem>
4463        <para>
4464         Add <link linkend="functions-comparisons"><literal>IS NOT
4465         DISTINCT FROM</></link> (Pavel Stehule)
4466        </para>
4467
4468        <para>
4469         This operator is similar to equality (<literal>=</>), but
4470         evaluates to true when both left and right operands are
4471         <literal>NULL</>, and to false when just one is, rather than
4472         yielding <literal>NULL</> in these cases.
4473        </para>
4474       </listitem>
4475
4476       <listitem>
4477        <para>
4478         Improve the length output used by <link
4479         linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
4480         (Tom)
4481        </para>
4482
4483        <para>
4484         When all corresponding columns are of the same defined length, that
4485         length is used for the result, rather than a generic length.
4486        </para>
4487       </listitem>
4488
4489       <listitem>
4490        <para>
4491         Allow <link linkend="functions-like"><literal>ILIKE</></link>
4492         to work for multi-byte encodings (Tom)
4493        </para>
4494
4495        <para>
4496         Internally, <literal>ILIKE</> now calls <function>lower()</>
4497         and then uses <literal>LIKE</>.  Locale-specific regular
4498         expression patterns still do not work in these encodings.
4499        </para>
4500       </listitem>
4501
4502       <listitem>
4503        <para>
4504         Enable <link
4505         linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
4506         to be turned <literal>on</> (Kevin Grittner)
4507        </para>
4508
4509        <para>
4510         This allows backslash escaping in strings to be disabled,
4511         making <productname>PostgreSQL</> more
4512         standards-compliant.  The default is <literal>off</> for backwards
4513         compatibility, but future releases will default this to <literal>on</>.
4514        </para>
4515       </listitem>
4516
4517       <listitem>
4518        <para>
4519         Do not flatten subqueries that contain <literal>volatile</>
4520         functions in their target lists (Jaime Casanova)
4521        </para>
4522
4523        <para>
4524         This prevents surprising behavior due to multiple evaluation
4525         of a <literal>volatile</> function (such as <function>random()</>
4526         or <function>nextval()</>).  It might cause performance
4527         degradation in the presence of functions that are unnecessarily
4528         marked as <literal>volatile</>.
4529        </para>
4530       </listitem>
4531
4532       <listitem>
4533        <para>
4534         Add system views <link
4535         linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
4536         and <link
4537         linkend="view-pg-cursors"><literal>pg_cursors</></link>
4538         to show prepared statements and open cursors (Joachim Wieland, Neil)
4539        </para>
4540
4541        <para>
4542         These are very useful in pooled connection setups.
4543        </para>
4544       </listitem>
4545
4546       <listitem>
4547        <para>
4548         Support portal parameters in <link
4549         linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
4550         linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
4551        </para>
4552
4553        <para>
4554         This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
4555         work in these commands.
4556        </para>
4557       </listitem>
4558
4559       <listitem>
4560        <para>
4561         If <acronym>SQL</>-level <link
4562         linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
4563         are unspecified, infer their types from the content of the
4564         query (Neil)
4565        </para>
4566
4567        <para>
4568         Protocol-level <command>PREPARE</> already did this.
4569        </para>
4570       </listitem>
4571
4572       <listitem>
4573        <para>
4574         Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
4575         two billion (Dhanaraj M)
4576        </para>
4577       </listitem>
4578
4579      </itemizedlist>
4580
4581     </sect3>
4582
4583     <sect3>
4584      <title>Object Manipulation Changes</title>
4585      <itemizedlist>
4586
4587       <listitem>
4588        <para>
4589         Add <literal>TABLESPACE</> clause to <link
4590         linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
4591         (Neil)
4592        </para>
4593
4594        <para>
4595         This allows a tablespace to be specified for the new table.
4596        </para>
4597       </listitem>
4598
4599       <listitem>
4600        <para>
4601         Add <literal>ON COMMIT</> clause to <link
4602         linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
4603         (Neil)
4604        </para>
4605
4606        <para>
4607         This allows temporary tables to be truncated or dropped on
4608         transaction commit.  The default behavior is for the table
4609         to remain until the session ends.
4610        </para>
4611       </listitem>
4612
4613       <listitem>
4614        <para>
4615         Add <literal>INCLUDING CONSTRAINTS</> to <link
4616         linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
4617         (Greg Stark)
4618        </para>
4619
4620        <para>
4621         This allows easy copying of <literal>CHECK</> constraints to a new
4622         table.
4623        </para>
4624       </listitem>
4625
4626       <listitem>
4627        <para>
4628         Allow the creation of placeholder (shell) <link
4629         linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
4630        </para>
4631
4632        <para>
4633         A shell type declaration creates a type name, without specifying
4634         any of the details of the type.  Making a shell type is useful
4635         because it allows cleaner declaration of the type's input/output
4636         functions, which must exist before the type can be defined <quote>for
4637         real</>.  The syntax is <command>CREATE TYPE <replaceable
4638         class="parameter">typename</replaceable></>.
4639        </para>
4640       </listitem>
4641
4642       <listitem>
4643        <para>
4644         <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
4645         now support multiple input parameters (Sergey Koposov, Tom)
4646        </para>
4647       </listitem>
4648
4649       <listitem>
4650        <para>
4651         Add new aggregate creation <link
4652         linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
4653        </para>
4654
4655        <para>
4656         The new syntax is <command>CREATE AGGREGATE
4657         <replaceable>aggname</> (<replaceable>input_type</>)
4658         (<replaceable>parameter_list</>)</command>.  This more
4659         naturally supports the new multi-parameter aggregate
4660         functionality.  The previous syntax is still supported.
4661        </para>
4662       </listitem>
4663
4664       <listitem>
4665        <para>
4666         Add <link
4667         linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
4668         to remove a previously set role password (Peter)
4669        </para>
4670       </listitem>
4671
4672       <listitem>
4673        <para>
4674         Add <command>DROP</> object <literal>IF EXISTS</> for many
4675         object types (Andrew)
4676        </para>
4677
4678        <para>
4679         This allows <command>DROP</> operations on non-existent
4680         objects without generating an error.
4681        </para>
4682       </listitem>
4683
4684       <listitem>
4685        <para>
4686         Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
4687         to drop all objects owned by a role (Alvaro)
4688        </para>
4689       </listitem>
4690
4691       <listitem>
4692        <para>
4693         Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
4694         OWNED</></link> to reassign ownership of all objects owned
4695         by a role (Alvaro)
4696        </para>
4697
4698        <para>
4699         This, and <literal>DROP OWNED</> above, facilitate dropping
4700         roles.
4701        </para>
4702       </listitem>
4703
4704       <listitem>
4705        <para>
4706         Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
4707         syntax (Bruce)
4708        </para>
4709
4710        <para>
4711         This was added for setting sequence-specific permissions.
4712         <literal>GRANT ON TABLE</> for sequences is still supported
4713         for backward compatibility.
4714        </para>
4715       </listitem>
4716
4717       <listitem>
4718        <para>
4719         Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
4720         permission for sequences that allows only <function>currval()</>
4721         and <function>nextval()</>, not <function>setval()</>
4722         (Bruce)
4723        </para>
4724
4725        <para>
4726         <literal>USAGE</> permission allows more fine-grained
4727         control over sequence access.  Granting <literal>USAGE</>
4728         allows users to increment
4729         a sequence, but prevents them from setting the sequence to
4730         an arbitrary value using <function>setval()</>.
4731        </para>
4732       </listitem>
4733
4734       <listitem>
4735        <para>
4736         Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
4737         [ NO ] INHERIT</></link> (Greg Stark)
4738        </para>
4739
4740        <para>
4741         This allows inheritance to be adjusted dynamically, rather than
4742         just at table creation and destruction.  This is very valuable
4743         when using inheritance to implement table partitioning.
4744        </para>
4745       </listitem>
4746
4747       <listitem>
4748        <para>
4749         Allow <link linkend="SQL-COMMENT">comments</link> on global
4750         objects to be stored globally (Kris Jurka)
4751        </para>
4752
4753        <para>
4754         Previously, comments attached to databases were stored in individual
4755         databases, making them ineffective, and there was no provision
4756         at all for comments on roles or tablespaces.  This change adds a new
4757         shared catalog <link
4758         linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
4759         and stores comments on databases, roles, and tablespaces therein.
4760        </para>
4761       </listitem>
4762
4763      </itemizedlist>
4764
4765     </sect3>
4766
4767     <sect3>
4768      <title>Utility Command Changes</title>
4769      <itemizedlist>
4770
4771       <listitem>
4772        <para>
4773         Add option to allow indexes to be created without blocking
4774         concurrent writes to the table (Greg Stark, Tom)
4775        </para>
4776
4777        <para>
4778         The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
4779         INDEX CONCURRENTLY</></link>.  The default behavior is
4780         still to block table modification while a index is being
4781         created.
4782        </para>
4783       </listitem>
4784
4785       <listitem>
4786        <para>
4787         Provide <link linkend="functions-advisory-locks">advisory
4788         locking</link> functionality (Abhijit Menon-Sen, Tom)
4789        </para>
4790
4791        <para>
4792         This is a new locking API designed to replace what used to be
4793         in /contrib/userlock.  The userlock code is now on pgfoundry.
4794        </para>
4795       </listitem>
4796
4797       <listitem>
4798        <para>
4799         Allow <link linkend="SQL-COPY"><command>COPY</></link> to
4800         dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
4801         Zak)
4802        </para>
4803
4804        <para>
4805         This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
4806         queries. The syntax is <literal>COPY (SELECT ...) TO</>.
4807        </para>
4808       </listitem>
4809
4810       <listitem>
4811        <para>
4812         Make the <link linkend="SQL-COPY"><command>COPY</></link>
4813         command return a command tag that includes the number of
4814         rows copied (Volkan YAZICI)
4815        </para>
4816       </listitem>
4817
4818       <listitem>
4819        <para>
4820         Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
4821         to expire rows without being affected by other concurrent
4822         <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
4823        </para>
4824       </listitem>
4825
4826       <listitem>
4827        <para>
4828         Make <link linkend="APP-INITDB"><application>initdb</></link>
4829         detect the operating system locale and set the default
4830         <varname>DateStyle</> accordingly (Peter)
4831        </para>
4832
4833        <para>
4834         This makes it more likely that the installed
4835         <filename>postgresql.conf</> <varname>DateStyle</> value will
4836         be as desired.
4837        </para>
4838       </listitem>
4839
4840       <listitem>
4841        <para>
4842         Reduce number of progress messages displayed by <application>initdb</> (Tom)
4843        </para>
4844       </listitem>
4845
4846      </itemizedlist>
4847
4848     </sect3>
4849
4850     <sect3>
4851      <title>Date/Time Changes</title>
4852      <itemizedlist>
4853
4854       <listitem>
4855        <para>
4856         Allow full timezone names in <link
4857         linkend="datatype-datetime"><type>timestamp</></link> input values
4858         (Joachim Wieland)
4859        </para>
4860
4861        <para>
4862         For example, <literal>'2006-05-24 21:11
4863         America/New_York'::timestamptz</>.
4864        </para>
4865       </listitem>
4866
4867       <listitem>
4868        <para>
4869         Support configurable timezone abbreviations (Joachim Wieland)
4870        </para>
4871
4872        <para>
4873         A desired set of timezone abbreviations can be chosen via the
4874         configuration parameter <link
4875         linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
4876        </para>
4877       </listitem>
4878
4879       <listitem>
4880        <para>
4881         Add <link
4882         linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
4883         and <link
4884         linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
4885         views to show supported timezones (Magnus Hagander)
4886        </para>
4887       </listitem>
4888
4889       <listitem>
4890        <para>
4891         Add <link
4892         linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
4893         <link
4894         linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
4895         and <link
4896         linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
4897         (Bruce)
4898        </para>
4899
4900        <para>
4901         <function>clock_timestamp()</> is the current wall-clock time,
4902         <function>statement_timestamp()</> is the time the current
4903         statement arrived at the server, and
4904         <function>transaction_timestamp()</> is an alias for
4905         <function>now()</>.
4906        </para>
4907       </listitem>
4908
4909       <listitem>
4910        <para>
4911         Allow <link
4912         linkend="functions-formatting"><function>to_char()</></link>
4913         to print localized month and day names (Euler Taveira de
4914         Oliveira)
4915        </para>
4916       </listitem>
4917
4918       <listitem>
4919        <para>
4920         Allow <link
4921         linkend="functions-formatting"><function>to_char(time)</></link>
4922         and <link
4923         linkend="functions-formatting"><function>to_char(interval)</></link>
4924         to output <acronym>AM</>/<acronym>PM</> specifications
4925         (Bruce)
4926        </para>
4927
4928        <para>
4929         Intervals and times are treated as 24-hour periods, e.g.
4930         <literal>25 hours</> is considered <acronym>AM</>.
4931        </para>
4932       </listitem>
4933
4934       <listitem>
4935        <para>
4936         Add new function <link
4937         linkend="functions-datetime-table"><function>justify_interval()</></link>
4938         to adjust interval units (Mark Dilger)
4939        </para>
4940       </listitem>
4941
4942       <listitem>
4943        <para>
4944         Allow timezone offsets up to 14:59 away from GMT
4945        </para>
4946
4947        <para>
4948         Kiribati uses GMT+14, so we'd better accept that.
4949        </para>
4950       </listitem>
4951
4952       <listitem>
4953        <para>
4954         Interval computation improvements (Michael Glaesemann, Bruce)
4955        </para>
4956       </listitem>
4957
4958      </itemizedlist>
4959
4960     </sect3>
4961
4962     <sect3>
4963      <title>Other Data Type and Function Changes</title>
4964      <itemizedlist>
4965
4966       <listitem>
4967        <para>
4968         Allow arrays to contain <literal>NULL</> elements (Tom)
4969        </para>
4970       </listitem>
4971
4972       <listitem>
4973        <para>
4974         Allow assignment to array elements not contiguous with the existing
4975         entries (Tom)
4976        </para>
4977
4978        <para>
4979         The intervening array positions will be filled with nulls.
4980         This is per SQL standard.
4981        </para>
4982       </listitem>
4983
4984       <listitem>
4985        <para>
4986         New built-in <link linkend="functions-array">operators</link>
4987         for array-subset comparisons (<literal>@&gt;</>,
4988         <literal>&lt;@</>, <literal>&amp;&amp;</>) (Teodor, Tom)
4989        </para>
4990
4991        <para>
4992         These operators can be indexed for many data types using
4993         <acronym>GiST</> or <acronym>GIN</> indexes.
4994        </para>
4995       </listitem>
4996
4997       <listitem>
4998        <para>
4999         Add convenient arithmetic <link
5000         linkend="cidr-inet-operators-table">operations</link> on
5001         <type>INET</>/<type>CIDR</> values (Stephen R. van den
5002         Berg)
5003        </para>
5004
5005        <para>
5006         The new operators are <literal>&</> (and), <literal>|</>
5007         (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
5008         <type>inet</> <literal>-</> <type>int8</>, and
5009         <type>inet</> <literal>-</> <type>inet</>.
5010        </para>
5011       </listitem>
5012
5013       <listitem>
5014        <para>
5015         Add new <link
5016         linkend="functions-aggregate-statistics-table">aggregate functions</link>
5017         from SQL:2003 (Neil)
5018        </para>
5019
5020        <para>
5021         The new functions are <function>var_pop()</>,
5022         <function>var_samp()</>, <function>stddev_pop()</>, and
5023         <function>stddev_samp()</>.  <function>var_samp()</> and
5024         <function>stddev_samp()</> are merely renamings of the
5025         existing aggregates <function>variance()</> and
5026         <function>stddev()</>.  The latter names remain available
5027         for backward compatibility.
5028        </para>
5029       </listitem>
5030
5031       <listitem>
5032        <para>
5033         Add SQL:2003 statistical <link
5034         linkend="functions-aggregate-statistics-table">aggregates</link>
5035         (Sergey Koposov)
5036        </para>
5037
5038        <para>
5039         New functions:  <function>regr_intercept()</>,
5040         <function>regr_slope()</>, <function>regr_r2()</>,
5041         <function>corr()</>, <function>covar_samp()</>,
5042         <function>covar_pop()</>, <function>regr_avgx()</>,
5043         <function>regr_avgy()</>, <function>regr_sxy()</>,
5044         <function>regr_sxx()</>, <function>regr_syy()</>,
5045         <function>regr_count()</>.
5046        </para>
5047       </listitem>
5048
5049       <listitem>
5050        <para>
5051         Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
5052         based on other domains (Tom)
5053        </para>
5054       </listitem>
5055
5056       <listitem>
5057        <para>
5058         Properly enforce domain <link
5059         linkend="ddl-constraints"><literal>CHECK</></link> constraints
5060         everywhere (Neil, Tom)
5061        </para>
5062
5063        <para>
5064         For example, the result of a user-defined function that is
5065         declared to return a domain type is now checked against the
5066         domain's constraints. This closes a significant hole in the domain
5067         implementation.
5068        </para>
5069       </listitem>
5070
5071       <listitem>
5072        <para>
5073         Fix problems with dumping renamed <link
5074         linkend="datatype-serial"><type>SERIAL</></link> columns
5075         (Tom)
5076        </para>
5077
5078        <para>
5079         The fix is to dump a <type>SERIAL</> column by explicitly
5080         specifying its <literal>DEFAULT</> and sequence elements,
5081         and reconstructing the <type>SERIAL</> column on reload
5082         using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
5083         SEQUENCE OWNED BY</></link> command.  This also allows
5084         dropping a <type>SERIAL</> column specification.
5085        </para>
5086       </listitem>
5087
5088       <listitem>
5089        <para>
5090         Add a server-side sleep function <link
5091         linkend="functions-datetime-delay"><function>pg_sleep()</></link>
5092         (Joachim Wieland)
5093        </para>
5094       </listitem>
5095
5096       <listitem>
5097        <para>
5098         Add all comparison operators for the <link
5099         linkend="datatype-oid"><type>tid</></link> (tuple id) data
5100         type (Mark Kirkwood, Greg Stark, Tom)
5101        </para>
5102       </listitem>
5103
5104      </itemizedlist>
5105
5106     </sect3>
5107
5108     <sect3>
5109      <title>PL/PgSQL Server-Side Language Changes</title>
5110      <itemizedlist>
5111
5112       <listitem>
5113        <para>
5114         Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
5115         trigger parameters (Andrew)
5116        </para>
5117
5118        <para>
5119         <literal>TG_relname</> is now deprecated.  Comparable
5120         changes have been made in the trigger parameters for the other
5121         PLs as well.
5122        </para>
5123       </listitem>
5124
5125       <listitem>
5126        <para>
5127         Allow <literal>FOR</> statements to return values to scalars
5128         as well as records and row types (Pavel Stehule)
5129        </para>
5130       </listitem>
5131
5132       <listitem>
5133        <para>
5134         Add a <literal>BY</> clause to the <literal>FOR</> loop,
5135         to control the iteration increment (Jaime Casanova)
5136        </para>
5137       </listitem>
5138
5139       <listitem>
5140        <para>
5141         Add <literal>STRICT</> to <link
5142         linkend="plpgsql-statements-sql-onerow"><command>SELECT
5143         INTO</></link> (Matt Miller)
5144        </para>
5145
5146        <para>
5147         <literal>STRICT</> mode throws an exception if more or less
5148         than one row is returned by the <command>SELECT</>, for
5149         <productname>Oracle PL/SQL</> compatibility.
5150        </para>
5151       </listitem>
5152
5153      </itemizedlist>
5154
5155     </sect3>
5156
5157     <sect3>
5158      <title>PL/Perl Server-Side Language Changes</title>
5159      <itemizedlist>
5160
5161       <listitem>
5162        <para>
5163         Add <literal>table_name</> and <literal>table_schema</> to
5164         trigger parameters (Adam Sj&oslash;gren)
5165        </para>
5166       </listitem>
5167
5168       <listitem>
5169        <para>
5170         Add prepared queries (Dmitry Karasik)
5171        </para>
5172       </listitem>
5173
5174       <listitem>
5175        <para>
5176         Make <literal>$_TD</> trigger data a global variable (Andrew)
5177        </para>
5178
5179        <para>
5180         Previously, it was lexical, which caused unexpected sharing
5181         violations.
5182        </para>
5183       </listitem>
5184
5185       <listitem>
5186        <para>
5187         Run PL/Perl and PL/PerlU in separate interpreters, for security
5188         reasons (Andrew)
5189        </para>
5190        <para>
5191         In consequence, they can no longer share data nor loaded modules.
5192         Also, if Perl has not been compiled with the requisite flags to
5193         allow multiple interpreters, only one of these languages can be used
5194         in any given backend process.
5195        </para>
5196       </listitem>
5197
5198      </itemizedlist>
5199
5200     </sect3>
5201
5202     <sect3>
5203      <title>PL/Python Server-Side Language Changes</title>
5204      <itemizedlist>
5205
5206       <listitem>
5207        <para>
5208         Named parameters are passed as ordinary variables, as well as in the
5209         <literal>args[]</> array (Sven Suursoho)
5210        </para>
5211       </listitem>
5212
5213       <listitem>
5214        <para>
5215         Add <literal>table_name</> and <literal>table_schema</> to
5216         trigger parameters (Andrew)
5217        </para>
5218       </listitem>
5219
5220       <listitem>
5221        <para>
5222         Allow returning of composite types and result sets (Sven Suursoho)
5223        </para>
5224       </listitem>
5225
5226       <listitem>
5227        <para>
5228         Return result-set as <literal>list</>, <literal>iterator</>,
5229         or <literal>generator </>(Sven Suursoho)
5230        </para>
5231       </listitem>
5232
5233       <listitem>
5234        <para>
5235         Allow functions to return <literal>void</> (Neil)
5236        </para>
5237       </listitem>
5238
5239       <listitem>
5240        <para>
5241         Python 2.5 is now supported (Tom)
5242        </para>
5243       </listitem>
5244
5245      </itemizedlist>
5246
5247     </sect3>
5248
5249     <sect3>
5250      <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
5251      <itemizedlist>
5252
5253       <listitem>
5254        <para>
5255         Add new command <literal>\password</> for changing role
5256         password with client-side password encryption (Peter)
5257        </para>
5258       </listitem>
5259
5260       <listitem>
5261        <para>
5262         Allow <literal>\c</> to connect to a new host and port
5263         number (David, Volkan YAZICI)
5264        </para>
5265       </listitem>
5266
5267       <listitem>
5268        <para>
5269         Add tablespace display to <literal>\l+</> (Philip Yarra)
5270        </para>
5271       </listitem>
5272
5273       <listitem>
5274        <para>
5275         Improve <literal>\df</> slash command to include the argument
5276         names and modes (<literal>OUT</> or <literal>INOUT</>) of
5277         the function (David Fetter)
5278        </para>
5279       </listitem>
5280
5281       <listitem>
5282        <para>
5283         Support binary <command>COPY</> (Andreas Pflug)
5284        </para>
5285       </listitem>
5286
5287       <listitem>
5288        <para>
5289         Add option to run the entire session in a single transaction
5290         (Simon)
5291        </para>
5292
5293        <para>
5294         Use option <literal>-1</> or <literal>--single-transaction</>.
5295        </para>
5296       </listitem>
5297
5298       <listitem>
5299        <para>
5300         Support for automatically retrieving <command>SELECT</>
5301         results in batches using a cursor (Chris Mair)
5302        </para>
5303
5304        <para>
5305         This is enabled using <command>\set FETCH_COUNT
5306         <replaceable>n</></command>. This
5307         feature allows large result sets to be retrieved in
5308         <application>psql</> without attempting to buffer the entire
5309         result set in memory.
5310        </para>
5311       </listitem>
5312
5313       <listitem>
5314        <para>
5315         Make multi-line values align in the proper column
5316         (Martijn van Oosterhout)
5317        </para>
5318
5319        <para>
5320         Field values containing newlines are now displayed in a more
5321         readable fashion.
5322        </para>
5323       </listitem>
5324
5325       <listitem>
5326        <para>
5327         Save multi-line statements as a single entry, rather than
5328         one line at a time (Sergey E. Koposov)
5329        </para>
5330
5331        <para>
5332         This makes up-arrow recall of queries easier.  (This is
5333         not available on Windows, because that platform uses the native
5334         command-line editing present in the operating system.)
5335        </para>
5336       </listitem>
5337
5338       <listitem>
5339        <para>
5340         Make the line counter 64-bit so it can handle files with more
5341         than two billion lines (David Fetter)
5342        </para>
5343       </listitem>
5344
5345       <listitem>
5346        <para>
5347         Report both the returned data and the command status tag
5348         for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
5349         RETURNING</> (Tom)
5350        </para>
5351       </listitem>
5352
5353      </itemizedlist>
5354
5355     </sect3>
5356
5357     <sect3>
5358      <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
5359      <itemizedlist>
5360
5361       <listitem>
5362        <para>
5363         Allow complex selection of objects to be included or excluded
5364         by <application>pg_dump</> (Greg Sabino Mullane)
5365        </para>
5366
5367        <para>
5368         <application>pg_dump</> now supports multiple <literal>-n</>
5369         (schema) and <literal>-t</> (table) options, and adds
5370         <literal>-N</> and <literal>-T</> options to exclude objects.
5371         Also, the arguments of these switches can now be wild-card expressions
5372         rather than single object names, for example
5373         <literal>-t 'foo*'</>, and a schema can be part of
5374         a <literal>-t</> or <literal>-T</> switch, for example
5375         <literal>-t schema1.table1</>.
5376        </para>
5377       </listitem>
5378
5379       <listitem>
5380        <para>
5381         Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
5382         <literal>--no-data-for-failed-tables</> option to suppress
5383         loading data if table creation failed (i.e., the table already
5384         exists) (Martin Pitt)
5385        </para>
5386       </listitem>
5387
5388       <listitem>
5389        <para>
5390         Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
5391         option to run the entire session in a single transaction
5392         (Simon)
5393        </para>
5394
5395        <para>
5396         Use option <literal>-1</> or <literal>--single-transaction</>.
5397        </para>
5398       </listitem>
5399
5400      </itemizedlist>
5401
5402     </sect3>
5403
5404     <sect3>
5405      <title><link linkend="libpq"><application>libpq</></link> Changes</title>
5406      <itemizedlist>
5407
5408       <listitem>
5409        <para>
5410         Add <link
5411         linkend="libpq-misc"><function>PQencryptPassword()</></link>
5412         to encrypt passwords (Tom)
5413        </para>
5414
5415        <para>
5416         This allows passwords to be sent pre-encrypted for commands
5417         like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
5418         PASSWORD</></link>.
5419        </para>
5420       </listitem>
5421
5422       <listitem>
5423        <para>
5424         Add function <link
5425         linkend="libpq-threading"><function>PQisthreadsafe()</></link>
5426         (Bruce)
5427        </para>
5428
5429        <para>
5430         This allows applications to query the thread-safety status
5431         of the library.
5432        </para>
5433       </listitem>
5434
5435       <listitem>
5436        <para>
5437         Add <link
5438         linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
5439         <link
5440         linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
5441         and related functions to return information about previously
5442         prepared statements and open cursors (Volkan YAZICI)
5443        </para>
5444       </listitem>
5445
5446       <listitem>
5447        <para>
5448         Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
5449         from <link
5450         linkend="libpq-pgservice"><filename>pg_service.conf</></link>
5451         (Laurenz Albe)
5452        </para>
5453       </listitem>
5454
5455       <listitem>
5456        <para>
5457         Allow a hostname in <link
5458         linkend="libpq-pgpass"><filename>~/.pgpass</></link>
5459         to match the default socket directory (Bruce)
5460        </para>
5461
5462        <para>
5463         A blank hostname continues to match any Unix-socket connection,
5464         but this addition allows entries that are specific to one of
5465         several postmasters on the machine.
5466        </para>
5467       </listitem>
5468
5469      </itemizedlist>
5470
5471     </sect3>
5472
5473     <sect3>
5474      <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
5475      <itemizedlist>
5476
5477       <listitem>
5478        <para>
5479         Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
5480         put its result into a variable (Joachim Wieland)
5481        </para>
5482       </listitem>
5483
5484       <listitem>
5485        <para>
5486         Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
5487         (Joachim Wieland)
5488        </para>
5489       </listitem>
5490
5491       <listitem>
5492        <para>
5493         Add regression tests (Joachim Wieland, Michael)
5494        </para>
5495       </listitem>
5496
5497       <listitem>
5498        <para>
5499         Major source code cleanups (Joachim Wieland, Michael)
5500        </para>
5501       </listitem>
5502
5503      </itemizedlist>
5504
5505     </sect3>
5506
5507     <sect3>
5508      <title><application>Windows</> Port</title>
5509      <itemizedlist>
5510
5511       <listitem>
5512        <para>
5513         Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
5514         server (Magnus, Hiroshi Saito)
5515        </para>
5516       </listitem>
5517
5518       <listitem>
5519        <para>
5520         Add <acronym>MSVC</> support for utility commands and <link
5521         linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
5522         Saito)
5523        </para>
5524       </listitem>
5525
5526       <listitem>
5527        <para>
5528         Add support for Windows code pages <literal>1253</>,
5529         <literal>1254</>, <literal>1255</>, and <literal>1257</>
5530         (Kris Jurka)
5531        </para>
5532       </listitem>
5533
5534       <listitem>
5535        <para>
5536         Drop privileges on startup, so that the server can be started from
5537         an administrative account (Magnus)
5538        </para>
5539       </listitem>
5540
5541       <listitem>
5542        <para>
5543         Stability fixes (Qingqing Zhou, Magnus)
5544        </para>
5545       </listitem>
5546
5547       <listitem>
5548        <para>
5549         Add native semaphore implementation (Qingqing Zhou)
5550        </para>
5551
5552        <para>
5553         The previous code mimicked SysV semaphores.
5554        </para>
5555       </listitem>
5556
5557      </itemizedlist>
5558
5559     </sect3>
5560
5561     <sect3>
5562      <title>Source Code Changes</title>
5563      <itemizedlist>
5564
5565       <listitem>
5566        <para>
5567         Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
5568         Inverted iNdex) index access method (Teodor, Oleg)
5569        </para>
5570       </listitem>
5571
5572       <listitem>
5573        <para>
5574         Remove R-tree indexing (Tom)
5575        </para>
5576
5577        <para>
5578         Rtree has been re-implemented using <link
5579         linkend="GiST"><acronym>GiST</></link>. Among other
5580         differences, this means that rtree indexes now have support
5581         for crash recovery via write-ahead logging (WAL).
5582        </para>
5583       </listitem>
5584
5585       <listitem>
5586        <para>
5587         Reduce libraries needlessly linked into the backend (Martijn
5588         van Oosterhout, Tom)
5589        </para>
5590       </listitem>
5591
5592       <listitem>
5593        <para>
5594         Add a configure flag to allow libedit to be preferred over
5595         <acronym>GNU</> readline (Bruce)
5596        </para>
5597
5598        <para>
5599         Use configure <link
5600         linkend="configure"><literal>--with-libedit-preferred</></link>.
5601        </para>
5602       </listitem>
5603
5604       <listitem>
5605        <para>
5606         Allow installation into directories containing spaces
5607         (Peter)
5608        </para>
5609       </listitem>
5610
5611       <listitem>
5612        <para>
5613         Improve ability to relocate installation directories (Tom)
5614        </para>
5615       </listitem>
5616
5617       <listitem>
5618        <para>
5619         Add support for <productname>Solaris x86_64</> using the
5620         <productname>Solaris</> compiler (Pierre Girard, Theo
5621         Schlossnagle, Bruce)
5622        </para>
5623       </listitem>
5624
5625       <listitem>
5626        <para>
5627         Add <application>DTrace</> support (Robert Lor)
5628        </para>
5629       </listitem>
5630
5631       <listitem>
5632        <para>
5633         Add <literal>PG_VERSION_NUM</> for use by third-party
5634         applications wanting to test the backend version in C using &gt;
5635         and &lt; comparisons (Bruce)
5636        </para>
5637       </listitem>
5638
5639       <listitem>
5640        <para>
5641         Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
5642         (Mark Wong)
5643        </para>
5644       </listitem>
5645
5646       <listitem>
5647        <para>
5648         Add <literal>LWLOCK_STATS</> define to report locking
5649         activity (Tom)
5650        </para>
5651       </listitem>
5652
5653       <listitem>
5654        <para>
5655         Emit warnings for unknown <application>configure</> options
5656         (Martijn van Oosterhout)
5657        </para>
5658       </listitem>
5659
5660       <listitem>
5661        <para>
5662         Add server support for <quote>plugin</> libraries
5663         that can be used for add-on tasks such as debugging and performance
5664         measurement (Korry Douglas)
5665        </para>
5666
5667        <para>
5668         This consists of two features: a table of <quote>rendezvous
5669         variables</> that allows separately-loaded shared libraries to
5670         communicate, and a new configuration parameter <link
5671         linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
5672         that allows libraries to be loaded into specific sessions without
5673         explicit cooperation from the client application.  This allows
5674         external add-ons to implement features such as a PL/PgSQL debugger.
5675        </para>
5676       </listitem>
5677
5678       <listitem>
5679        <para>
5680         Rename existing configuration parameter
5681         <varname>preload_libraries</> to <link
5682         linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
5683         (Tom)
5684        </para>
5685
5686        <para>
5687         This was done for clarity in comparison to
5688         <varname>local_preload_libraries</>.
5689        </para>
5690       </listitem>
5691
5692       <listitem>
5693        <para>
5694         Add new configuration parameter <link
5695         linkend="guc-server-version-num"><varname>server_version_num</></link>
5696         (Greg Sabino Mullane)
5697        </para>
5698
5699        <para>
5700         This is like <varname>server_version</varname>, but is an
5701         integer, e.g.  <literal>80200</>. This allows applications to
5702         make version checks more easily.
5703        </para>
5704       </listitem>
5705
5706       <listitem>
5707        <para>
5708         Add a configuration parameter <link
5709         linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
5710         (Tom)
5711        </para>
5712       </listitem>
5713
5714       <listitem>
5715        <para>
5716         Re-implement the <link linkend="regress">regression test</link> script as a C program
5717         (Magnus, Tom)
5718        </para>
5719       </listitem>
5720
5721       <listitem>
5722        <para>
5723         Allow loadable modules to allocate shared memory and
5724         lightweight locks (Marc Munro)
5725        </para>
5726       </listitem>
5727
5728       <listitem>
5729        <para>
5730         Add automatic initialization and finalization of dynamically
5731         loaded libraries (Ralf Engelschall, Tom)
5732        </para>
5733
5734        <para>
5735         New <link linkend="xfunc-c-dynload">functions</link>
5736         <function>_PG_init()</> and <function>_PG_fini()</> are
5737         called if the library defines such symbols.  Hence we no
5738         longer need to specify an initialization function in
5739         <varname>shared_preload_libraries</>; we can assume that
5740         the library used the <function>_PG_init()</> convention
5741         instead.
5742        </para>
5743       </listitem>
5744
5745       <listitem>
5746        <para>
5747         Add <link
5748         linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
5749         header block to all shared object files (Martijn van
5750         Oosterhout)
5751        </para>
5752
5753        <para>
5754         The magic block prevents version mismatches between loadable object
5755         files and servers.
5756        </para>
5757       </listitem>
5758
5759       <listitem>
5760        <para>
5761          Add shared library support for AIX (Laurenz Albe)
5762        </para>
5763       </listitem>
5764
5765       <listitem>
5766        <para>
5767         New <link linkend="datatype-xml"><acronym>XML</></link>
5768         documentation section (Bruce)
5769        </para>
5770       </listitem>
5771
5772      </itemizedlist>
5773
5774     </sect3>
5775
5776     <sect3>
5777      <title>Contrib Changes</title>
5778      <itemizedlist>
5779
5780       <listitem>
5781        <para>
5782         Major tsearch2 improvements (Oleg, Teodor)
5783        </para>
5784
5785        <itemizedlist>
5786
5787         <listitem>
5788          <para>
5789           multibyte encoding support, including <acronym>UTF8</>
5790          </para>
5791         </listitem>
5792         <listitem>
5793          <para>
5794           query rewriting support
5795          </para>
5796         </listitem>
5797         <listitem>
5798          <para>
5799           improved ranking functions
5800          </para>
5801         </listitem>
5802         <listitem>
5803          <para>
5804           thesaurus dictionary support
5805          </para>
5806         </listitem>
5807         <listitem>
5808          <para>
5809           Ispell dictionaries now recognize <application>MySpell</>
5810           format, used by <application>OpenOffice</>
5811          </para>
5812         </listitem>
5813         <listitem>
5814          <para>
5815           <acronym>GIN</> support
5816          </para>
5817         </listitem>
5818
5819        </itemizedlist>
5820
5821       </listitem>
5822
5823       <listitem>
5824        <para>
5825         Add adminpack module containing <application>Pgadmin</> administration
5826         functions (Dave)
5827        </para>
5828
5829        <para>
5830         These functions provide additional file system access
5831         routines not present in the default <productname>PostgreSQL</>
5832         server.
5833        </para>
5834       </listitem>
5835
5836       <listitem>
5837        <para>
5838         Add sslinfo module (Victor Wagner)
5839        </para>
5840
5841        <para>
5842         Reports information about the current connection's <acronym>SSL</>
5843         certificate.
5844        </para>
5845       </listitem>
5846
5847       <listitem>
5848        <para>
5849         Add pgrowlocks module (Tatsuo)
5850        </para>
5851
5852        <para>
5853         This shows row locking information for a specified table.
5854        </para>
5855       </listitem>
5856
5857       <listitem>
5858        <para>
5859         Add hstore module (Oleg, Teodor)
5860        </para>
5861       </listitem>
5862
5863       <listitem>
5864        <para>
5865         Add isn module, replacing isbn_issn (Jeremy Kronuz)
5866        </para>
5867
5868        <para>
5869         This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
5870         <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
5871         <acronym>ISSN</> (serials).
5872        </para>
5873       </listitem>
5874
5875       <listitem>
5876        <para>
5877         Add index information functions to pgstattuple (ITAGAKI Takahiro,
5878         Satoshi Nagayasu)
5879        </para>
5880       </listitem>
5881
5882       <listitem>
5883        <para>
5884         Add pg_freespacemap module to display free space map information
5885         (Mark Kirkwood)
5886        </para>
5887       </listitem>
5888
5889       <listitem>
5890        <para>
5891         pgcrypto now has all planned functionality (Marko Kreen)
5892        </para>
5893        <itemizedlist>
5894         <listitem>
5895          <para>
5896           Include iMath library in pgcrypto to have the public-key encryption
5897           functions always available.
5898          </para>
5899         </listitem>
5900         <listitem>
5901          <para>
5902           Add SHA224 algorithm that was missing in OpenBSD code.
5903          </para>
5904         </listitem>
5905         <listitem>
5906          <para>
5907           Activate builtin code for SHA224/256/384/512 hashes on older
5908           OpenSSL to have those algorithms always available.
5909          </para>
5910         </listitem>
5911         <listitem>
5912          <para>
5913           New function gen_random_bytes() that returns cryptographically strong
5914           randomness.  Useful for generating encryption keys.
5915          </para>
5916         </listitem>
5917         <listitem>
5918          <para>
5919           Remove digest_exists(), hmac_exists() and cipher_exists() functions.
5920          </para>
5921         </listitem>
5922        </itemizedlist>
5923       </listitem>
5924
5925       <listitem>
5926        <para>
5927         Improvements to cube module (Joshua Reich)
5928        </para>
5929
5930        <para>
5931         New functions are <function>cube(float[])</>,
5932         <function>cube(float[], float[])</>, and
5933         <function>cube_subset(cube, int4[])</>.
5934        </para>
5935       </listitem>
5936
5937       <listitem>
5938        <para>
5939         Add async query capability to dblink (Kai Londenberg,
5940         Joe Conway)
5941        </para>
5942       </listitem>
5943
5944       <listitem>
5945        <para>
5946         New operators for array-subset comparisons (<literal>@&gt;</>,
5947         <literal>&lt;@</>, <literal>&amp;&amp;</>) (Tom)
5948        </para>
5949
5950        <para>
5951         Various contrib packages already had these operators for their
5952         datatypes, but the naming wasn't consistent.  We have now added
5953         consistently named array-subset comparison operators to the core code
5954         and all the contrib packages that have such functionality.
5955         (The old names remain available, but are deprecated.)
5956        </para>
5957       </listitem>
5958
5959       <listitem>
5960        <para>
5961         Add uninstall scripts for all contrib packages that have install
5962         scripts (David, Josh Drake)
5963        </para>
5964       </listitem>
5965
5966      </itemizedlist>
5967
5968     </sect3>
5969
5970    </sect2>
5971   </sect1>
5972
5973   <sect1 id="release-8-1-10">
5974    <title>Release 8.1.10</title>
5975
5976    <note>
5977    <title>Release date</title>
5978    <simpara>2007-09-17</simpara>
5979    </note>
5980
5981    <para>
5982     This release contains a variety of fixes from 8.1.9.
5983    </para>
5984
5985    <sect2>
5986     <title>Migration to version 8.1.10</title>
5987
5988     <para>
5989      A dump/restore is not required for those running 8.1.X.
5990      However, if you are upgrading from a version earlier than 8.1.2,
5991      see the release notes for 8.1.2.
5992     </para>
5993
5994    </sect2>
5995
5996    <sect2>
5997     <title>Changes</title>
5998
5999     <itemizedlist>
6000
6001      <listitem>
6002       <para>
6003        Prevent index corruption when a transaction inserts rows and
6004        then aborts close to the end of a concurrent <command>VACUUM</>
6005        on the same table (Tom)
6006       </para>
6007      </listitem>
6008
6009      <listitem>
6010       <para>
6011        Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
6012       </para>
6013      </listitem>
6014
6015      <listitem>
6016       <para>
6017        Allow the <type>interval</> data type to accept input consisting only of
6018        milliseconds or microseconds (Neil)
6019       </para>
6020      </listitem>
6021
6022      <listitem>
6023       <para>
6024        Speed up rtree index insertion (Teodor)
6025       </para>
6026      </listitem>
6027
6028      <listitem>
6029       <para>
6030        Fix excessive logging of <acronym>SSL</> error messages (Tom)
6031       </para>
6032      </listitem>
6033
6034      <listitem>
6035       <para>
6036        Fix logging so that log messages are never interleaved when using
6037        the syslogger process (Andrew)
6038       </para>
6039      </listitem>
6040
6041      <listitem>
6042       <para>
6043        Fix crash when <varname>log_min_error_statement</> logging runs out
6044        of memory (Tom)
6045       </para>
6046      </listitem>
6047
6048      <listitem>
6049       <para>
6050        Fix incorrect handling of some foreign-key corner cases (Tom)
6051       </para>
6052      </listitem>
6053
6054      <listitem>
6055       <para>
6056        Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
6057        due to attempting to process temporary tables of other sessions (Alvaro)
6058       </para>
6059      </listitem>
6060
6061      <listitem>
6062       <para>
6063        Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
6064       </para>
6065      </listitem>
6066
6067      <listitem>
6068       <para>
6069        Windows socket improvements (Magnus)
6070       </para>
6071      </listitem>
6072
6073      <listitem>
6074       <para>
6075        Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
6076        because of possible encoding mismatches (Tom)
6077       </para>
6078      </listitem>
6079
6080      <listitem>
6081       <para>
6082        Require non-superusers who use <filename>/contrib/dblink</> to use only
6083        password authentication, as a security measure (Joe)
6084       </para>
6085      </listitem>
6086
6087     </itemizedlist>
6088
6089    </sect2>
6090   </sect1>
6091
6092   <sect1 id="release-8-1-9">
6093    <title>Release 8.1.9</title>
6094
6095    <note>
6096    <title>Release date</title>
6097    <simpara>2007-04-23</simpara>
6098    </note>
6099
6100    <para>
6101     This release contains a variety of fixes from 8.1.8,
6102     including a security fix.
6103    </para>
6104
6105    <sect2>
6106     <title>Migration to version 8.1.9</title>
6107
6108     <para>
6109      A dump/restore is not required for those running 8.1.X.
6110      However, if you are upgrading from a version earlier than 8.1.2,
6111      see the release notes for 8.1.2.
6112     </para>
6113
6114    </sect2>
6115
6116    <sect2>
6117     <title>Changes</title>
6118
6119     <itemizedlist>
6120
6121      <listitem>
6122      <para>
6123       Support explicit placement of the temporary-table schema within
6124       <varname>search_path</>, and disable searching it for functions
6125       and operators (Tom)
6126      </para>
6127      <para>
6128       This is needed to allow a security-definer function to set a
6129       truly secure value of <varname>search_path</>.  Without it,
6130       an unprivileged SQL user can use temporary objects to execute code
6131       with the privileges of the security-definer function (CVE-2007-2138).
6132       See <command>CREATE FUNCTION</> for more information.
6133      </para>
6134      </listitem>
6135
6136      <listitem>
6137      <para>
6138       <filename>/contrib/tsearch2</> crash fixes (Teodor)
6139      </para>
6140      </listitem>
6141
6142      <listitem>
6143      <para>
6144       Require <command>COMMIT PREPARED</> to be executed in the same
6145       database as the transaction was prepared in (Heikki)
6146      </para>
6147      </listitem>
6148
6149      <listitem>
6150      <para>
6151       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
6152       <command>UPDATE</> chains (Tom, Pavan Deolasee)
6153      </para>
6154      </listitem>
6155
6156      <listitem>
6157      <para>
6158       Planner fixes, including improving outer join and bitmap scan
6159       selection logic (Tom)
6160      </para>
6161      </listitem>
6162
6163      <listitem>
6164      <para>
6165       Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
6166       (Tom)
6167      </para>
6168      </listitem>
6169
6170      <listitem>
6171      <para>
6172       Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
6173      </para>
6174      </listitem>
6175
6176     </itemizedlist>
6177
6178    </sect2>
6179   </sect1>
6180
6181   <sect1 id="release-8-1-8">
6182    <title>Release 8.1.8</title>
6183
6184    <note>
6185    <title>Release date</title>
6186    <simpara>2007-02-07</simpara>
6187    </note>
6188
6189    <para>
6190     This release contains one fix from 8.1.7.
6191    </para>
6192
6193    <sect2>
6194     <title>Migration to version 8.1.8</title>
6195
6196     <para>
6197      A dump/restore is not required for those running 8.1.X.
6198      However, if you are upgrading from a version earlier than 8.1.2,
6199      see the release notes for 8.1.2.
6200     </para>
6201
6202    </sect2>
6203
6204    <sect2>
6205     <title>Changes</title>
6206
6207     <itemizedlist>
6208
6209      <listitem>
6210      <para>
6211       Remove overly-restrictive check for type length in constraints and
6212       functional indexes(Tom)
6213      </para>
6214      </listitem>
6215
6216     </itemizedlist>
6217
6218    </sect2>
6219   </sect1>
6220
6221   <sect1 id="release-8-1-7">
6222    <title>Release 8.1.7</title>
6223
6224    <note>
6225    <title>Release date</title>
6226    <simpara>2007-02-05</simpara>
6227    </note>
6228
6229    <para>
6230     This release contains a variety of fixes from 8.1.6, including
6231     a security fix.
6232    </para>
6233
6234    <sect2>
6235     <title>Migration to version 8.1.7</title>
6236
6237     <para>
6238      A dump/restore is not required for those running 8.1.X.
6239      However, if you are upgrading from a version earlier than 8.1.2,
6240      see the release notes for 8.1.2.
6241     </para>
6242
6243    </sect2>
6244
6245    <sect2>
6246     <title>Changes</title>
6247
6248     <itemizedlist>
6249
6250      <listitem>
6251      <para>
6252       Remove security vulnerabilities that allowed connected users
6253       to read backend memory (Tom)
6254      </para>
6255      <para>
6256       The vulnerabilities involve suppressing the normal check that a SQL
6257       function returns the data type it's declared to, and changing the
6258       data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
6259       errors can easily be exploited to cause a backend crash, and in
6260       principle might be used to read database content that the user
6261       should not be able to access.
6262      </para>
6263      </listitem>
6264
6265      <listitem>
6266      <para>
6267       Fix rare bug wherein btree index page splits could fail
6268       due to choosing an infeasible split point (Heikki Linnakangas)
6269      </para>
6270      </listitem>
6271
6272      <listitem>
6273      <para>
6274       Improve <command>VACUUM</> performance for databases with many tables (Tom)
6275      </para>
6276      </listitem>
6277
6278      <listitem>
6279      <para>
6280       Fix autovacuum to avoid leaving non-permanent transaction IDs in
6281       non-connectable databases (Alvaro)
6282      </para>
6283
6284      <para>
6285       This bug affects the 8.1 branch only.
6286      </para>
6287      </listitem>
6288
6289      <listitem>
6290      <para>
6291       Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
6292      </para>
6293      </listitem>
6294
6295      <listitem>
6296      <para>
6297       Tighten security of multi-byte character processing for UTF8 sequences
6298       over three bytes long (Tom)
6299      </para>
6300      </listitem>
6301
6302      <listitem>
6303      <para>
6304       Fix bogus <quote>permission denied</> failures occurring on Windows
6305       due to attempts to fsync already-deleted files (Magnus, Tom)
6306      </para>
6307      </listitem>
6308
6309      <listitem>
6310      <para>
6311       Fix possible crashes when an already-in-use PL/pgSQL function is
6312       updated (Tom)
6313      </para>
6314      </listitem>
6315
6316     </itemizedlist>
6317
6318    </sect2>
6319   </sect1>
6320
6321   <sect1 id="release-8-1-6">
6322    <title>Release 8.1.6</title>
6323
6324    <note>
6325    <title>Release date</title>
6326    <simpara>2007-01-08</simpara>
6327    </note>
6328
6329    <para>
6330     This release contains a variety of fixes from 8.1.5.
6331    </para>
6332
6333    <sect2>
6334     <title>Migration to version 8.1.6</title>
6335
6336     <para>
6337      A dump/restore is not required for those running 8.1.X.
6338      However, if you are upgrading from a version earlier than 8.1.2,
6339      see the release notes for 8.1.2.
6340     </para>
6341
6342    </sect2>
6343
6344    <sect2>
6345     <title>Changes</title>
6346
6347     <itemizedlist>
6348
6349      <listitem>
6350       <para>
6351        Improve handling of <function>getaddrinfo()</> on AIX (Tom)
6352       </para>
6353
6354       <para>
6355        This fixes a problem with starting the statistics collector,
6356        among other things.
6357       </para>
6358      </listitem>
6359
6360      <listitem>
6361       <para>
6362        Fix <application>pg_restore</> to handle a tar-format backup
6363        that contains large objects (blobs) with comments (Tom)
6364       </para>
6365      </listitem>
6366
6367       <listitem>
6368        <para>
6369         Fix <quote>failed to re-find parent key</> errors in
6370         <command>VACUUM</> (Tom)
6371        </para>
6372       </listitem>
6373
6374       <listitem>
6375        <para>
6376         Clean out <filename>pg_internal.init</> cache files during server
6377         restart (Simon)
6378        </para>
6379
6380        <para>
6381         This avoids a hazard that the cache files might contain stale
6382         data after PITR recovery.
6383        </para>
6384       </listitem>
6385
6386       <listitem>
6387        <para>
6388         Fix race condition for truncation of a large relation across a
6389         gigabyte boundary by <command>VACUUM</> (Tom)
6390        </para>
6391       </listitem>
6392
6393       <listitem>
6394        <para>
6395         Fix bug causing needless deadlock errors on row-level locks (Tom)
6396        </para>
6397       </listitem>
6398
6399       <listitem>
6400        <para>
6401         Fix bugs affecting multi-gigabyte hash indexes (Tom)
6402        </para>
6403       </listitem>
6404
6405      <listitem>
6406       <para>
6407        Fix possible deadlock in Windows signal handling (Teodor)
6408       </para>
6409      </listitem>
6410
6411      <listitem>
6412       <para>
6413        Fix error when constructing an <literal>ARRAY[]</> made up of multiple
6414        empty elements (Tom)
6415       </para>
6416      </listitem>
6417
6418      <listitem>
6419       <para>
6420        Fix ecpg memory leak during connection (Michael)
6421       </para>
6422      </listitem>
6423
6424      <listitem>
6425       <para>
6426        Fix for Darwin (OS X) compilation (Tom)
6427       </para>
6428      </listitem>
6429
6430      <listitem>
6431       <para>
6432        <function>to_number()</> and <function>to_char(numeric)</>
6433        are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
6434        new <application>initdb</> installs (Tom)
6435       </para>
6436
6437       <para>
6438        This is because <varname>lc_numeric</> can potentially
6439        change the output of these functions.
6440       </para>
6441      </listitem>
6442
6443      <listitem>
6444       <para>
6445        Improve index usage of regular expressions that use parentheses (Tom)
6446       </para>
6447
6448       <para>
6449        This improves <application>psql</> <literal>\d</> performance also.
6450       </para>
6451      </listitem>
6452
6453      <listitem>
6454       <para>
6455        Update timezone database
6456       </para>
6457
6458       <para>
6459        This affects Australian and Canadian daylight-savings rules in
6460        particular.
6461       </para>
6462      </listitem>
6463
6464     </itemizedlist>
6465
6466    </sect2>
6467   </sect1>
6468
6469   <sect1 id="release-8-1-5">
6470    <title>Release 8.1.5</title>
6471
6472    <note>
6473    <title>Release date</title>
6474    <simpara>2006-10-16</simpara>
6475    </note>
6476
6477    <para>
6478     This release contains a variety of fixes from 8.1.4.
6479    </para>
6480
6481    <sect2>
6482     <title>Migration to version 8.1.5</title>
6483
6484     <para>
6485      A dump/restore is not required for those running 8.1.X.
6486      However, if you are upgrading from a version earlier than 8.1.2,
6487      see the release notes for 8.1.2.
6488     </para>
6489
6490    </sect2>
6491
6492    <sect2>
6493     <title>Changes</title>
6494
6495 <itemizedlist>
6496 <listitem><para>Disallow aggregate functions in <command>UPDATE</>
6497 commands, except within sub-SELECTs (Tom)</para>
6498 <para>The behavior of such an aggregate was unpredictable, and in 8.1.X
6499 could cause a crash, so it has been disabled.  The SQL standard does not allow
6500 this either.</para></listitem>
6501 <listitem><para>Fix core dump when an untyped literal is taken as
6502 ANYARRAY</para></listitem>
6503 <listitem><para>Fix core dump in duration logging for extended query protocol
6504 when a <command>COMMIT</> or <command>ROLLBACK</> is
6505 executed</para></listitem>
6506 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
6507 function returning multiple rows (Tom)</para></listitem>
6508 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
6509 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
6510 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
6511   matches for the separator string</para>
6512 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
6513 </para></listitem>
6514 <listitem><para>Fix <function>to_timestamp()</> for
6515 <literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
6516 <listitem><para>Fix autovacuum's calculation that decides whether
6517   <command>ANALYZE</> is needed (Alvaro)</para></listitem>
6518 <listitem><para>Fix corner cases in pattern matching for
6519   <application>psql</>'s <literal>\d</> commands</para></listitem>
6520 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
6521   (Teodor)</para></listitem>
6522 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
6523 Wieland)</para></listitem>
6524 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
6525 <listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
6526 </listitem>
6527 <listitem><para>Efficiency improvements in hash tables and bitmap index scans
6528 (Tom)</para></listitem>
6529 <listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
6530 <listitem><para>Fix <varname>statement_timeout</> to use the proper
6531 units on Win32 (Bruce)</para>
6532 <para>In previous Win32 8.1.X versions, the delay was off by a factor of
6533 100.</para></listitem>
6534 <listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
6535 compilers (Hiroshi Saito)</para></listitem>
6536 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
6537 <productname>Intel</> compilers (Tom)</para></listitem>
6538 <listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
6539 </itemizedlist>
6540
6541    </sect2>
6542   </sect1>
6543
6544   <sect1 id="release-8-1-4">
6545    <title>Release 8.1.4</title>
6546
6547    <note>
6548    <title>Release date</title>
6549    <simpara>2006-05-23</simpara>
6550    </note>
6551
6552    <para>
6553     This release contains a variety of fixes from 8.1.3,
6554     including patches for extremely serious security issues.
6555    </para>
6556
6557    <sect2>
6558     <title>Migration to version 8.1.4</title>
6559
6560     <para>
6561      A dump/restore is not required for those running 8.1.X.
6562      However, if you are upgrading from a version earlier than 8.1.2,
6563      see the release notes for 8.1.2.
6564     </para>
6565
6566     <para>
6567      Full security against the SQL-injection attacks described in
6568      CVE-2006-2313 and CVE-2006-2314 might require changes in application
6569      code.  If you have applications that embed untrustworthy strings
6570      into SQL commands, you should examine them as soon as possible to
6571      ensure that they are using recommended escaping techniques.  In
6572      most cases, applications should be using subroutines provided by
6573      libraries or drivers (such as <application>libpq</>'s
6574      <function>PQescapeStringConn()</>) to perform string escaping,
6575      rather than relying on <foreignphrase>ad hoc</> code to do it.
6576     </para>
6577    </sect2>
6578
6579    <sect2>
6580     <title>Changes</title>
6581
6582 <itemizedlist>
6583 <listitem><para>Change the server to reject invalidly-encoded multibyte
6584 characters in all cases (Tatsuo, Tom)</para>
6585 <para>While <productname>PostgreSQL</> has been moving in this direction for
6586 some time, the checks are now applied uniformly to all encodings and all
6587 textual input, and are now always errors not merely warnings.  This change
6588 defends against SQL-injection attacks of the type described in CVE-2006-2313.
6589 </para></listitem>
6590
6591 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
6592 <para>As a server-side defense against SQL-injection attacks of the type
6593 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
6594 <literal>\'</> as a representation of ASCII single quote in SQL string
6595 literals.  By default, <literal>\'</> is rejected only when
6596 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
6597 GB18030, or UHC), which is the scenario in which SQL injection is possible.
6598 A new configuration parameter <varname>backslash_quote</> is available to
6599 adjust this behavior when needed.  Note that full security against
6600 CVE-2006-2314 might require client-side changes; the purpose of
6601 <varname>backslash_quote</> is in part to make it obvious that insecure
6602 clients are insecure.
6603 </para></listitem>
6604
6605 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
6606 aware of encoding considerations and
6607 <varname>standard_conforming_strings</></para>
6608 <para>This fixes <application>libpq</>-using applications for the security
6609 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
6610 them against the planned changeover to SQL-standard string literal syntax.
6611 Applications that use multiple <productname>PostgreSQL</> connections
6612 concurrently should migrate to <function>PQescapeStringConn()</> and
6613 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
6614 for the settings in use in each database connection.  Applications that
6615 do string escaping <quote>by hand</> should be modified to rely on library
6616 routines instead.
6617 </para></listitem>
6618
6619 <listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
6620 <para>Errors in fortuna PRNG reseeding logic could cause a predictable
6621 session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
6622 This only affects non-OpenSSL-using builds.
6623 </para></listitem>
6624
6625 <listitem><para>Fix some incorrect encoding conversion functions</para>
6626 <para><function>win1251_to_iso</>, <function>win866_to_iso</>,
6627 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
6628 <function>mic_to_euc_tw</> were all broken to varying
6629 extents.
6630 </para></listitem>
6631
6632 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
6633 (Bruce, Jan)</para></listitem>
6634
6635 <listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
6636 (Alvaro)</para></listitem>
6637
6638 <listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
6639 <para>In certain cases, having <literal>full_page_writes</> off would cause
6640 crash recovery to fail.  A proper fix will appear in 8.2; for now it's just
6641 disabled.
6642 </para></listitem>
6643
6644 <listitem><para>Various planner fixes, particularly for bitmap index scans and
6645 MIN/MAX optimization (Tom)</para></listitem>
6646
6647 <listitem><para>Fix incorrect optimization in merge join (Tom)</para>
6648 <para>Outer joins could sometimes emit multiple copies of unmatched rows.
6649 </para></listitem>
6650
6651 <listitem><para>Fix crash from using and modifying a plpgsql function in the
6652 same transaction</para></listitem>
6653
6654 <listitem><para>Fix WAL replay for case where a B-Tree index has been
6655 truncated</para></listitem>
6656
6657 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
6658 <literal>|</> (Tom)</para></listitem>
6659
6660 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
6661 create tables in the default tablespace, not the base directory (Kris
6662 Jurka)</para></listitem>
6663
6664 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
6665 Fuhr)</para></listitem>
6666
6667 <listitem><para>Improve qsort performance (Dann Corbit)</para>
6668 <para>Currently this code is only used on Solaris.
6669 </para></listitem>
6670
6671 <listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
6672
6673 <listitem><para>Fix various minor memory leaks</para></listitem>
6674
6675 <listitem><para>Fix problem with password prompting on some Win32 systems
6676 (Robert Kinberg)</para></listitem>
6677
6678 <listitem><para>Improve <application>pg_dump</>'s handling of default values
6679 for domains</para></listitem>
6680
6681 <listitem><para>Fix <application>pg_dumpall</> to handle identically-named
6682 users and groups reasonably (only possible when dumping from a pre-8.1 server)
6683 (Tom)</para>
6684 <para>The user and group will be merged into a single role with
6685 <literal>LOGIN</> permission.  Formerly the merged role wouldn't have
6686 <literal>LOGIN</> permission, making it unusable as a user.
6687 </para></listitem>
6688
6689 <listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
6690 documented (Tom)</para></listitem>
6691 </itemizedlist>
6692
6693    </sect2>
6694   </sect1>
6695
6696   <sect1 id="release-8-1-3">
6697    <title>Release 8.1.3</title>
6698
6699    <note>
6700    <title>Release date</title>
6701    <simpara>2006-02-14</simpara>
6702    </note>
6703
6704    <para>
6705     This release contains a variety of fixes from 8.1.2,
6706     including one very serious security issue.
6707    </para>
6708
6709    <sect2>
6710     <title>Migration to version 8.1.3</title>
6711
6712     <para>
6713      A dump/restore is not required for those running 8.1.X.
6714      However, if you are upgrading from a version earlier than 8.1.2,
6715      see the release notes for 8.1.2.
6716     </para>
6717    </sect2>
6718
6719    <sect2>
6720     <title>Changes</title>
6721
6722 <itemizedlist>
6723
6724 <listitem><para>Fix bug that allowed any logged-in user to <command>SET
6725 ROLE</> to any other database user id (CVE-2006-0553)</para>
6726 <para>Due to inadequate validity checking, a user could exploit the special
6727 case that <command>SET ROLE</> normally uses to restore the previous role
6728 setting after an error.  This allowed ordinary users to acquire superuser
6729 status, for example.
6730 The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
6731 However, in all releases back to 7.3 there is a related bug in <command>SET
6732 SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
6733 if it has been compiled with Asserts enabled (which is not the default).
6734 Thanks to Akio Ishida for reporting this problem.
6735 </para></listitem>
6736
6737 <listitem><para>Fix bug with row visibility logic in self-inserted
6738 rows (Tom)</para>
6739 <para>Under rare circumstances a row inserted by the current command
6740 could be seen as already valid, when it should not be.  Repairs bug
6741 created in 8.0.4, 7.4.9, and 7.3.11 releases.
6742 </para></listitem>
6743
6744 <listitem><para>Fix race condition that could lead to <quote>file already
6745 exists</> errors during pg_clog and pg_subtrans file creation
6746 (Tom)</para></listitem>
6747
6748 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
6749 message arrives at just the wrong time (Tom)</para></listitem>
6750
6751 <listitem><para>Properly check <literal>DOMAIN</> constraints for
6752 <literal>UNKNOWN</> parameters in prepared statements
6753 (Neil)</para></listitem>
6754
6755 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
6756 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
6757 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
6758
6759 <listitem><para>Fixes to allow restoring dumps that have cross-schema
6760 references to custom operators or operator classes (Tom)</para></listitem>
6761
6762 <listitem><para>Allow <application>pg_restore</> to continue properly after a
6763 <command>COPY</> failure; formerly it tried to treat the remaining
6764 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
6765
6766 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
6767 when the  data directory is not specified (Magnus)</para></listitem>
6768
6769 <listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
6770 (Christoph Zwerschke)</para></listitem>
6771
6772 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
6773 (Neil)</para></listitem>
6774
6775 <listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
6776 together in function result type declarations</para></listitem>
6777
6778 <listitem><para>Recover properly if error occurs during argument passing
6779 in <application>PL/python</> (Neil)</para></listitem>
6780
6781 <listitem><para>Fix memory leak in <function>plperl_return_next</>
6782 (Neil)</para></listitem>
6783
6784 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
6785 Win32 to match the backend (Andrew)</para></listitem>
6786
6787 <listitem><para>Various optimizer fixes (Tom)</para></listitem>
6788
6789 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
6790 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
6791 (Bruce)</para></listitem>
6792
6793 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
6794 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
6795
6796 <listitem><para>Check that SID is enabled while checking for Win32 admin
6797 privileges (Magnus)</para></listitem>
6798
6799 <listitem><para>Properly reject out-of-range date inputs (Kris
6800 Jurka)</para></listitem>
6801
6802 <listitem><para>Portability fix for testing presence of <function>finite</>
6803 and <function>isinf</> during configure (Tom)</para></listitem>
6804
6805 <listitem><para>Improve speed of <command>COPY IN</> via libpq, by
6806 avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
6807
6808 <listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
6809 creation (Tom)</para></listitem>
6810
6811 </itemizedlist>
6812
6813    </sect2>
6814   </sect1>
6815
6816   <sect1 id="release-8-1-2">
6817    <title>Release 8.1.2</title>
6818
6819    <note>
6820    <title>Release date</title>
6821    <simpara>2006-01-09</simpara>
6822    </note>
6823
6824    <para>
6825     This release contains a variety of fixes from 8.1.1.
6826    </para>
6827
6828    <sect2>
6829     <title>Migration to version 8.1.2</title>
6830
6831     <para>
6832      A dump/restore is not required for those running 8.1.X.
6833      However, you might need to <command>REINDEX</> indexes on textual
6834      columns after updating, if you are affected by the locale or
6835      <application>plperl</> issues described below.
6836     </para>
6837    </sect2>
6838
6839    <sect2>
6840     <title>Changes</title>
6841
6842 <itemizedlist>
6843
6844 <listitem><para>Fix Windows code so that postmaster will continue rather
6845 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
6846 <para>The previous behavior could lead to a denial-of-service situation if too
6847 many connection requests arrive close together.  This applies
6848 <emphasis>only</> to the Windows port.</para></listitem>
6849
6850 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
6851 to return an already-used page as new, potentially causing loss of
6852 recently-committed data (Tom)</para></listitem>
6853
6854 <listitem><para>Fix for protocol-level Describe messages issued
6855 outside a transaction or in a failed transaction (Tom)</para></listitem>
6856
6857 <listitem><para>Fix character string comparison for locales that consider
6858 different character combinations as equal, such as Hungarian (Tom)</para>
6859 <para>This might require <command>REINDEX</> to fix existing indexes on
6860 textual columns.</para></listitem>
6861
6862 <listitem><para>Set locale environment variables during postmaster startup
6863 to ensure that <application>plperl</> won't change the locale later</para>
6864 <para>This fixes a problem that occurred if the <application>postmaster</> was
6865 started with environment variables specifying a different locale than what
6866 <application>initdb</> had been told.  Under these conditions, any use of
6867 <application>plperl</> was likely to lead to corrupt indexes.  You might need
6868 <command>REINDEX</> to fix existing indexes on
6869 textual columns if this has happened to you.</para></listitem>
6870
6871 <listitem><para>Allow more flexible relocation of installation
6872 directories (Tom)</para>
6873 <para>Previous releases supported relocation only if all installation
6874 directory paths were the same except for the last component.</para></listitem>
6875
6876 <listitem><para>Prevent crashes caused by the use of
6877 <literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
6878 (Tatsuo)</para></listitem>
6879
6880 <listitem><para>Fix longstanding bug in strpos() and regular expression
6881 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
6882 </para></listitem>
6883
6884 <listitem><para>Fix bug where COPY CSV mode considered any
6885 <literal>\.</> to terminate the copy data</para> <para>The new code
6886 requires <literal>\.</> to appear alone on a line, as per
6887 documentation.</para></listitem>
6888
6889 <listitem><para>Make COPY CSV mode quote a literal data value of
6890 <literal>\.</> to ensure it cannot be interpreted as the
6891 end-of-data marker (Bruce)</para></listitem>
6892
6893 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
6894 (Tom) </para></listitem>
6895
6896 <listitem><para>Fix processing of <filename>postgresql.conf</> so a
6897 final line with no newline is processed properly (Tom)
6898 </para></listitem>
6899
6900 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
6901 which caused it not to use all available salt space for MD5 and
6902 XDES algorithms (Marko Kreen, Solar Designer)</para>
6903 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
6904
6905 <listitem><para>Fix autovacuum crash when processing expression indexes
6906 </para></listitem>
6907
6908 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
6909 rather than crashing, when the number of columns specified is different from
6910 what's actually returned by the query (Joe)</para></listitem>
6911
6912 </itemizedlist>
6913
6914    </sect2>
6915   </sect1>
6916
6917   <sect1 id="release-8-1-1">
6918    <title>Release 8.1.1</title>
6919
6920    <note>
6921    <title>Release date</title>
6922    <simpara>2005-12-12</simpara>
6923    </note>
6924
6925    <para>
6926     This release contains a variety of fixes from 8.1.0.
6927    </para>
6928
6929    <sect2>
6930     <title>Migration to version 8.1.1</title>
6931
6932     <para>
6933      A dump/restore is not required for those running 8.1.X.
6934     </para>
6935    </sect2>
6936
6937    <sect2>
6938     <title>Changes</title>
6939
6940 <itemizedlist>
6941 <listitem><para>Fix incorrect optimizations of outer-join conditions
6942 (Tom)</para></listitem>
6943
6944 <listitem><para>Fix problems with wrong reported column names in cases
6945 involving sub-selects flattened by the optimizer (Tom)</para></listitem>
6946
6947 <listitem><para>Fix update failures in scenarios involving CHECK constraints,
6948 toasted columns, <emphasis>and</> indexes (Tom)</para></listitem>
6949
6950 <listitem><para>Fix bgwriter problems after recovering from errors
6951 (Tom)</para>
6952 <para>
6953 The background writer was found to leak buffer pins after write errors.
6954 While not fatal in itself, this might lead to mysterious blockages of
6955 later VACUUM commands.
6956 </para>
6957 </listitem>
6958
6959 <listitem><para>Prevent failure if client sends Bind protocol message
6960 when current transaction is already aborted</para></listitem>
6961
6962 <listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
6963 fixes (Teodor)</para></listitem>
6964
6965 <listitem><para>Fix problems with translated error messages in
6966 languages that require word reordering, such as Turkish; also problems with
6967 unexpected truncation of output strings and wrong display of the smallest
6968 possible bigint value (Andrew, Tom)</para>
6969 <para>
6970 These problems only appeared on platforms that were using our
6971 <filename>port/snprintf.c</> code, which includes BSD variants if
6972 <literal>--enable-nls</> was given, and perhaps others.  In addition,
6973 a different form of the translated-error-message problem could appear
6974 on Windows depending on which version of <filename>libintl</> was used.
6975 </para></listitem>
6976
6977 <listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
6978 <literal>HH12</>, and <literal>D</> format specifiers for
6979 <function>to_char(time)</> and <function>to_char(interval)</>.
6980 (<function>to_char(interval)</> should probably use
6981 <literal>HH24</>.) (Bruce)</para></listitem>
6982
6983 <listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
6984 Saito)</para></listitem>
6985
6986 <listitem><para>Optimizer improvements (Tom)</para></listitem>
6987
6988 <listitem><para>Retry file reads and writes after Windows
6989 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
6990
6991 <listitem><para>Prevent <application>autovacuum</> from crashing during
6992 ANALYZE of expression index (Alvaro)</para></listitem>
6993
6994 <listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
6995 tables</para></listitem>
6996
6997 <listitem><para>Fix problems when a trigger alters the output of a SELECT
6998 DISTINCT query</para></listitem>
6999
7000 <listitem><para>Add 8.1.0 release note item on how to migrate invalid
7001 <literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
7002 </itemizedlist>
7003
7004    </sect2>
7005   </sect1>
7006
7007   <sect1 id="release-8-1">
7008    <title>Release 8.1</title>
7009
7010    <note>
7011     <title>Release date</title>
7012     <simpara>2005-11-08</simpara>
7013    </note>
7014
7015    <sect2>
7016     <title>Overview</title>
7017
7018     <para>
7019      Major changes in this release:
7020     </para>
7021
7022     <variablelist>
7023
7024      <varlistentry>
7025       <term>
7026        Improve concurrent access to the shared buffer cache (Tom)
7027       </term>
7028
7029       <listitem>
7030        <para>
7031         Access to the shared buffer cache was identified as a
7032         significant scalability problem, particularly on multi-CPU
7033         systems. In this release, the way that locking is done in the
7034         buffer manager has been overhauled to reduce lock contention
7035         and improve scalability. The buffer manager has also been
7036         changed to use a <quote>clock sweep</quote> replacement
7037         policy.
7038        </para>
7039       </listitem>
7040      </varlistentry>
7041
7042      <varlistentry>
7043       <term>
7044        Allow index scans to use an intermediate in-memory bitmap (Tom)
7045       </term>
7046
7047       <listitem>
7048        <para>
7049         In previous releases, only a single index could be used to do
7050         lookups on a table. With this feature, if a query has
7051         <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
7052         no multicolumn index on <literal>col1</> and <literal>col2</>,
7053         but there is an index on <literal>col1</> and another on
7054         <literal>col2</>, it is possible to search both indexes and
7055         combine the results in memory, then do heap fetches for only
7056         the rows matching both the <literal>col1</> and
7057         <literal>col2</> restrictions. This is very useful in
7058         environments that have a lot of unstructured queries where it
7059         is impossible to create indexes that match all possible access
7060         conditions.  Bitmap scans are useful even with a single index,
7061         as they reduce the amount of random access needed; a bitmap
7062         index scan is efficient for retrieving fairly large fractions
7063         of the complete table, whereas plain index scans are not.
7064        </para>
7065       </listitem>
7066      </varlistentry>
7067
7068      <varlistentry>
7069       <term>
7070        Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
7071       </term>
7072
7073       <listitem>
7074        <para>
7075         Two-phase commit allows transactions to be "prepared" on several
7076         computers, and once all computers have successfully prepared
7077         their transactions (none failed), all transactions can be
7078         committed. Even if a machine crashes after a prepare, the
7079         prepared transaction can be committed after the machine is
7080         restarted. New syntax includes <command>PREPARE TRANSACTION</> and
7081         <command>COMMIT/ROLLBACK PREPARED</>. A new system view
7082         <literal>pg_prepared_xacts</> has also been added.
7083        </para>
7084       </listitem>
7085      </varlistentry>
7086
7087      <varlistentry>
7088       <term>
7089        Create a new role system that replaces users and groups
7090        (Stephen Frost)
7091       </term>
7092
7093       <listitem>
7094        <para>
7095         Roles are a combination of users and groups. Like users, they
7096         can have login capability, and like groups, a role can have
7097         other roles as members. Roles basically remove the distinction
7098         between users and groups. For example, a role can:
7099        </para>
7100
7101        <itemizedlist>
7102
7103         <listitem>
7104          <para>
7105            Have login capability (optionally)
7106          </para>
7107         </listitem>
7108
7109         <listitem>
7110          <para>
7111           Own objects
7112          </para>
7113         </listitem>
7114
7115         <listitem>
7116          <para>
7117           Hold access permissions for database objects
7118          </para>
7119         </listitem>
7120
7121         <listitem>
7122          <para>
7123           Inherit permissions from other roles it is a member of
7124          </para>
7125         </listitem>
7126
7127        </itemizedlist>
7128        <para>
7129         Once a user logs into a role, she obtains capabilities of
7130         the login role plus any inherited roles, and can use
7131         <command>SET ROLE</> to switch to other roles she is a member of.
7132         This feature is a generalization of the SQL standard's concept of
7133         roles.
7134         This change also replaces <structname>pg_shadow</> and
7135         <structname>pg_group</> by new role-capable catalogs
7136         <structname>pg_authid</> and <structname>pg_auth_members</>. The old
7137         tables are redefined as read-only views on the new role tables.
7138        </para>
7139       </listitem>
7140      </varlistentry>
7141
7142      <varlistentry>
7143       <term>
7144        Automatically use indexes for <function>MIN()</> and
7145        <function>MAX()</> (Tom)
7146       </term>
7147
7148       <listitem>
7149        <para>
7150         In previous releases, the only way to use an index for
7151         <function>MIN()</> or <function>MAX()</> was to rewrite the
7152         query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
7153         Index usage now happens automatically.
7154        </para>
7155       </listitem>
7156      </varlistentry>
7157
7158      <varlistentry>
7159       <term>
7160        Move <filename>/contrib/pg_autovacuum</> into the main server
7161        (Alvaro)
7162       </term>
7163
7164       <listitem>
7165        <para>
7166         Integrating autovacuum into the server allows it to be
7167         automatically started and stopped in sync with the database
7168         server, and allows autovacuum to be configured from
7169         <filename>postgresql.conf</>.
7170        </para>
7171       </listitem>
7172      </varlistentry>
7173
7174      <varlistentry>
7175       <term>
7176        Add shared row level locks using <command>SELECT ... FOR SHARE</>
7177        (Alvaro)
7178       </term>
7179
7180       <listitem>
7181        <para>
7182         While <productname>PostgreSQL</productname>'s MVCC locking
7183         allows <command>SELECT</> to never be blocked by writers and
7184         therefore does not need shared row locks for typical operations,
7185         shared locks are useful for applications that require shared row
7186         locking.  In particular this reduces the locking requirements
7187         imposed by referential integrity checks.
7188        </para>
7189       </listitem>
7190      </varlistentry>
7191
7192      <varlistentry>
7193       <term>
7194        Add dependencies on shared objects, specifically roles
7195        (Alvaro)
7196       </term>
7197
7198       <listitem>
7199        <para>
7200         This extension of the dependency mechanism prevents roles from
7201         being dropped while there are still database objects they own.
7202         Formerly it was possible to accidentally <quote>orphan</> objects by
7203         deleting their owner.  While this could be recovered from, it
7204         was messy and unpleasant.
7205        </para>
7206       </listitem>
7207      </varlistentry>
7208
7209      <varlistentry>
7210       <term>
7211        Improve performance for partitioned tables (Simon)
7212       </term>
7213
7214       <listitem>
7215        <para>
7216         The new <varname>constraint_exclusion</varname> configuration
7217         parameter avoids lookups on child tables where constraints indicate
7218         that no matching rows exist in the child table.
7219        </para>
7220        <para>
7221         This allows for a basic type of table partitioning. If child tables
7222         store separate key ranges and this is enforced using appropriate
7223         <command>CHECK</> constraints, the optimizer will skip child
7224         table accesses when the constraint guarantees no matching rows
7225         exist in the child table.
7226        </para>
7227       </listitem>
7228      </varlistentry>
7229
7230     </variablelist>
7231    </sect2>
7232
7233    <sect2>
7234     <title>Migration to version 8.1</title>
7235
7236     <para>
7237      A dump/restore using <application>pg_dump</application> is required
7238      for those wishing to migrate data from any previous release.
7239     </para>
7240
7241     <para>
7242      The 8.0 release announced that the <function>to_char()</> function
7243      for intervals would be removed in 8.1. However, since no better API
7244      has been suggested, <function>to_char(interval)</> has been enhanced in
7245      8.1 and will remain in the server.
7246     </para>
7247
7248     <para>
7249      Observe the following incompatibilities:
7250     </para>
7251
7252     <itemizedlist>
7253
7254      <listitem>
7255       <para>
7256        <varname>add_missing_from</> is now false by default (Neil)
7257       </para>
7258       <para>
7259        By default, we now generate an error if a table is used in a query
7260        without a <literal>FROM</> reference.  The old behavior is still
7261        available, but the parameter must be set to 'true' to obtain it.
7262       </para>
7263
7264       <para>
7265        It might be necessary to set <varname>add_missing_from</> to true
7266        in order to load an existing dump file, if the dump contains any
7267        views or rules created using the implicit-<literal>FROM</> syntax.
7268        This should be a one-time annoyance, because
7269        <productname>PostgreSQL</productname> 8.1 will convert
7270        such views and rules to standard explicit-<literal>FROM</> syntax.
7271        Subsequent dumps will therefore not have the problem.
7272       </para>
7273      </listitem>
7274
7275      <listitem>
7276       <para>
7277        Cause input of a zero-length string (<literal>''</literal>) for
7278        <type>float4</type>/<type>float8</type>/<type>oid</type>
7279        to throw an error, rather than treating it as a zero (Neil)
7280       </para>
7281       <para>
7282        This change is consistent with the current handling of
7283        zero-length strings for integers. The schedule for this change
7284        was announced in 8.0.
7285       </para>
7286      </listitem>
7287
7288      <listitem>
7289       <para>
7290        <varname>default_with_oids</> is now false by default (Neil)
7291       </para>
7292       <para>
7293        With this option set to false, user-created tables no longer
7294        have an OID column unless <command>WITH OIDS</> is specified in
7295        <command>CREATE TABLE</>. Though OIDs have existed in all
7296        releases of <productname>PostgreSQL</>, their use is limited
7297        because they are only four bytes long and the counter is shared
7298        across all installed databases. The preferred way of uniquely
7299        identifying rows is via sequences and the <type>SERIAL</> type,
7300        which have been supported since <productname>PostgreSQL</> 6.4.
7301       </para>
7302      </listitem>
7303
7304      <listitem>
7305       <para>
7306        Add <literal>E''</> syntax so eventually ordinary strings can
7307        treat backslashes literally (Bruce)
7308       </para>
7309       <para>
7310        Currently <productname>PostgreSQL</productname> processes a
7311        backslash in a string literal as introducing a special escape sequence,
7312        e.g. <literal>\n</> or <literal>\010</>.
7313        While this allows easy entry of special values, it is
7314        nonstandard and makes porting of applications from other
7315        databases more difficult. For this reason, the
7316        <productname>PostgreSQL</productname> project is planning to
7317        remove the special meaning of backslashes in strings. For
7318        backward compatibility and for users who want special backslash
7319        processing, a new string syntax has been created. This new string
7320        syntax is formed by writing an <literal>E</> immediately preceding the
7321        single quote that starts the string, e.g. <literal>E'hi\n'</>. While
7322        this release does not change the handling of backslashes in strings, it
7323        does add new configuration parameters to help users migrate applications
7324        for future releases:
7325       </para>
7326       <itemizedlist>
7327
7328        <listitem>
7329         <para>
7330          <varname>standard_conforming_strings</> &mdash; does this release
7331          treat backslashes literally in ordinary strings?
7332         </para>
7333        </listitem>
7334
7335        <listitem>
7336        <para>
7337         <varname>escape_string_warning</> &mdash; warn about backslashes in
7338         ordinary (non-E) strings
7339        </para>
7340       </listitem>
7341
7342       </itemizedlist>
7343
7344       <para>
7345        The <varname>standard_conforming_strings</> value is read-only.
7346        Applications can retrieve the value to know how backslashes are
7347        processed.  (Presence of the parameter can also be taken as an
7348        indication that <literal>E''</> string syntax is supported.)
7349        In a future release, <varname>standard_conforming_strings</>
7350        will be true, meaning backslashes will be treated literally in
7351        non-E strings. To prepare for this change, use <literal>E''</>
7352        strings in places that need special backslash processing, and
7353        turn on <varname>escape_string_warning</> to find additional
7354        strings that need to be converted to use <literal>E''</>.
7355        Also, use two single-quotes (<literal>''</>) to embed a literal
7356        single-quote in a string, rather than the
7357        <productname>PostgreSQL</productname>-supported syntax of
7358        backslash single-quote (<literal>\'</>).  The former is
7359        standards-conforming and does not require the use of the
7360        <literal>E''</> string syntax.  You can also use the
7361        <literal>$$</> string syntax, which does not treat backslashes
7362        specially.
7363       </para>
7364      </listitem>
7365
7366      <listitem>
7367       <para>
7368        Make <command>REINDEX DATABASE</> reindex all indexes in the
7369        database (Tom)
7370       </para>
7371       <para>
7372        Formerly, <command>REINDEX DATABASE</> reindexed only
7373        system tables. This new behavior seems more intuitive. A new
7374        command <command>REINDEX SYSTEM</> provides the old functionality
7375        of reindexing just the system tables.
7376       </para>
7377      </listitem>
7378
7379      <listitem>
7380       <para>
7381        Read-only large object descriptors now obey MVCC snapshot semantics
7382       </para>
7383       <para>
7384        When a large object is opened with <literal>INV_READ</> (and not
7385        <literal>INV_WRITE</>), the data read from the descriptor will now
7386        reflect a <quote>snapshot</> of the large object's state at the
7387        time of the transaction snapshot in use by the query that called
7388        <function>lo_open()</>.  To obtain the old behavior of always
7389        returning the latest committed data, include <literal>INV_WRITE</>
7390        in the mode flags for <function>lo_open()</>.
7391       </para>
7392      </listitem>
7393
7394      <listitem>
7395       <para>
7396        Add proper dependencies for arguments of sequence functions (Tom)
7397       </para>
7398       <para>
7399        In previous releases, sequence names passed to <function>nextval()</>,
7400        <function>currval()</>, and <function>setval()</> were stored as
7401        simple text strings, meaning that renaming or dropping a
7402        sequence used in a <literal>DEFAULT</> clause made the clause
7403        invalid. This release stores all newly-created sequence function
7404        arguments as internal OIDs, allowing them to track sequence
7405        renaming, and adding dependency information that prevents
7406        improper sequence removal. It also makes such <literal>DEFAULT</>
7407        clauses immune to schema renaming and search path changes.
7408       </para>
7409       <para>
7410        Some applications might rely on the old behavior of
7411        run-time lookup for sequence names. This can still be done by
7412        explicitly casting the argument to <type>text</>, for example
7413        <literal>nextval('myseq'::text)</>.
7414       </para>
7415       <para>
7416        Pre-8.1 database dumps loaded into 8.1 will use the old text-based
7417        representation and therefore will not have the features of
7418        OID-stored arguments. However, it is possible to update a
7419        database containing text-based <literal>DEFAULT</> clauses.
7420        First, save this query into a file, such as <filename>fixseq.sql</>:
7421 <programlisting>
7422 SELECT  'ALTER TABLE ' ||
7423     pg_catalog.quote_ident(n.nspname) || '.' ||
7424     pg_catalog.quote_ident(c.relname) ||
7425     ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
7426     ' SET DEFAULT ' ||
7427     regexp_replace(d.adsrc,
7428                    $$val\(\(('[^']*')::text\)::regclass$$,
7429                    $$val(\1$$,
7430                    'g') ||
7431     ';'
7432 FROM    pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
7433 WHERE   n.oid = c.relnamespace AND
7434     c.oid = a.attrelid AND
7435     a.attrelid = d.adrelid AND
7436     a.attnum = d.adnum AND
7437     d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
7438 </programlisting>
7439        Next, run the query against a database to find what
7440        adjustments are required, like this for database <literal>db1</>:
7441 <programlisting>
7442 psql -t -f fixseq.sql db1
7443 </programlisting>
7444        This will show the <command>ALTER TABLE</> commands needed to
7445        convert the database to the newer OID-based representation.
7446        If the commands look reasonable, run this to update the database:
7447 <programlisting>
7448 psql -t -f fixseq.sql db1 | psql -e db1
7449 </programlisting>
7450        This process must be repeated in each database to be updated.
7451       </para>
7452      </listitem>
7453
7454      <listitem>
7455       <para>
7456        In <application>psql</application>, treat unquoted
7457        <literal>\{digit}+</> sequences as octal (Bruce)
7458       </para>
7459       <para>
7460        In previous releases, <literal>\{digit}+</> sequences were
7461        treated as decimal, and only <literal>\0{digit}+</> were treated
7462        as octal. This change was made for consistency.
7463       </para>
7464      </listitem>
7465
7466      <listitem>
7467       <para>
7468        Remove grammar productions for prefix and postfix <literal>%</>
7469        and <literal>^</> operators
7470        (Tom)
7471       </para>
7472       <para>
7473        These have never been documented and complicated the use of the
7474        modulus operator (<literal>%</>) with negative numbers.
7475       </para>
7476      </listitem>
7477
7478      <listitem>
7479       <para>
7480        Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
7481        consistent with the box "over" operators (Tom)
7482       </para>
7483      </listitem>
7484
7485      <listitem>
7486       <para>
7487        <command>CREATE LANGUAGE</> can ignore the provided arguments
7488        in favor of information from <structname>pg_pltemplate</>
7489        (Tom)
7490       </para>
7491       <para>
7492        A new system catalog <structname>pg_pltemplate</> has been defined
7493        to carry information about the preferred definitions of procedural
7494        languages (such as whether they have validator functions).  When
7495        an entry exists in this catalog for the language being created,
7496        <command>CREATE LANGUAGE</> will ignore all its parameters except the
7497        language name and instead use the catalog information.  This measure
7498        was taken because of increasing problems with obsolete language
7499        definitions being loaded by old dump files.  As of 8.1,
7500        <application>pg_dump</> will dump procedural language definitions as
7501        just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
7502        on a template entry to exist at load time.  We expect this will be a
7503        more future-proof representation.
7504       </para>
7505      </listitem>
7506
7507      <listitem>
7508       <para>
7509        Make <function>pg_cancel_backend(int)</function> return a
7510        <type>boolean</type> rather than an <type>integer</type> (Neil)
7511       </para>
7512      </listitem>
7513
7514      <listitem>
7515       <para>
7516        Some users are having problems loading UTF-8 data into 8.1.X.
7517        This is because previous versions allowed invalid UTF-8 byte
7518        sequences to be entered into the database, and this release
7519        properly accepts only valid UTF-8 sequences. One way to correct a
7520        dumpfile is to run the command <command>iconv -c -f UTF-8 -t
7521        UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
7522        removes invalid character sequences. A diff of the two files will
7523        show the sequences that are invalid. <command>iconv</> reads the
7524        entire input file into memory so it might be necessary to use
7525        <application>split</> to break up the dump into multiple smaller
7526        files for processing.
7527       </para>
7528      </listitem>
7529
7530     </itemizedlist>
7531    </sect2>
7532
7533    <sect2>
7534     <title>Additional Changes</title>
7535
7536     <para>
7537      Below you will find a detailed account of the additional changes
7538      between <productname>PostgreSQL</productname> 8.1 and the
7539      previous major release.
7540     </para>
7541
7542     <sect3>
7543      <title>Performance Improvements</title>
7544      <itemizedlist>
7545
7546       <listitem>
7547        <para>
7548         Improve GiST and R-tree index performance (Neil)
7549        </para>
7550       </listitem>
7551
7552       <listitem>
7553        <para>
7554         Improve the optimizer, including auto-resizing of hash joins
7555         (Tom)
7556        </para>
7557       </listitem>
7558
7559       <listitem>
7560        <para>
7561         Overhaul internal API in several areas
7562        </para>
7563       </listitem>
7564
7565       <listitem>
7566        <para>
7567         Change WAL record CRCs from 64-bit to 32-bit (Tom)
7568        </para>
7569        <para>
7570         We determined that the extra cost of computing 64-bit CRCs was
7571         significant, and the gain in reliability too marginal to justify it.
7572        </para>
7573       </listitem>
7574
7575       <listitem>
7576        <para>
7577         Prevent writing large empty gaps in WAL pages (Tom)
7578        </para>
7579       </listitem>
7580
7581       <listitem>
7582        <para>
7583         Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
7584        </para>
7585       </listitem>
7586
7587       <listitem>
7588        <para>
7589         Allow nonconsecutive index columns to be used in a multicolumn
7590         index (Tom)
7591        </para>
7592        <para>
7593         For example, this allows an index on columns a,b,c to be used in
7594         a query with <command>WHERE a = 4 and c = 10</>.
7595        </para>
7596       </listitem>
7597
7598       <listitem>
7599        <para>
7600         Skip WAL logging for <command>CREATE TABLE AS</> /
7601         <command>SELECT INTO</> (Simon)
7602        </para>
7603        <para>
7604         Since a crash during <command>CREATE TABLE AS</> would cause the
7605         table to be dropped during recovery, there is no reason to WAL
7606         log as the table is loaded.  (Logging still happens if WAL
7607         archiving is enabled, however.)
7608        </para>
7609       </listitem>
7610
7611       <listitem>
7612        <para>
7613         Allow concurrent GiST index access (Teodor, Oleg)
7614        </para>
7615       </listitem>
7616
7617       <listitem>
7618        <para>
7619         Add configuration parameter <varname>full_page_writes</> to
7620         control writing full pages to WAL (Bruce)
7621        </para>
7622        <para>
7623         To prevent partial disk writes from corrupting the database,
7624         <productname>PostgreSQL</productname> writes a complete copy of
7625         each database disk page to WAL the first time it is modified
7626         after a checkpoint. This option turns off that functionality for more
7627         speed.  This is safe to use with battery-backed disk caches where
7628         partial page writes cannot happen.
7629        </para>
7630       </listitem>
7631
7632       <listitem>
7633        <para>
7634         Use <literal>O_DIRECT</> if available when using
7635         <literal>O_SYNC</> for <varname>wal_sync_method</varname>
7636         (Itagaki Takahiro)
7637        </para>
7638        <para>
7639         <literal>O_DIRECT</> causes disk writes to bypass the kernel
7640         cache, and for WAL writes, this improves performance.
7641        </para>
7642       </listitem>
7643
7644       <listitem>
7645        <para>
7646         Improve <command>COPY FROM</> performance (Alon Goldshuv)
7647        </para>
7648        <para>
7649         This was accomplished by reading <command>COPY</> input in
7650         larger chunks, rather than character by character.
7651        </para>
7652       </listitem>
7653
7654       <listitem>
7655        <para>
7656         Improve the performance of <function>COUNT()</function>,
7657         <function>SUM</function>, <function>AVG()</function>,
7658         <function>STDDEV()</function>, and
7659         <function>VARIANCE()</function> (Neil, Tom)
7660        </para>
7661       </listitem>
7662      </itemizedlist>
7663     </sect3>
7664
7665     <sect3>
7666      <title>Server Changes</title>
7667      <itemizedlist>
7668
7669       <listitem>
7670        <para>
7671         Prevent problems due to transaction ID (XID) wraparound (Tom)
7672        </para>
7673        <para>
7674         The server will now warn when the transaction counter approaches
7675         the wraparound point.  If the counter becomes too close to wraparound,
7676         the server will stop accepting queries.  This ensures that data is
7677         not lost before needed vacuuming is performed.
7678        </para>
7679       </listitem>
7680
7681       <listitem>
7682        <para>
7683         Fix problems with object IDs (OIDs) conflicting with existing system
7684         objects after the OID counter has wrapped around (Tom)
7685        </para>
7686       </listitem>
7687
7688       <listitem>
7689        <para>
7690         Add warning about the need to increase
7691         <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
7692         during <command>VACUUM</> (Ron Mayer)
7693        </para>
7694       </listitem>
7695
7696       <listitem>
7697        <para>
7698         Add <varname>temp_buffers</> configuration parameter to allow
7699         users to determine the size of the local buffer area for
7700         temporary table access (Tom)
7701        </para>
7702       </listitem>
7703
7704       <listitem>
7705        <para>
7706         Add session start time and client IP address to
7707         <literal>pg_stat_activity</> (Magnus)
7708        </para>
7709       </listitem>
7710
7711       <listitem>
7712        <para>
7713         Adjust <literal>pg_stat</> views for bitmap scans (Tom)
7714        </para>
7715        <para>
7716         The meanings of some of the fields have changed slightly.
7717        </para>
7718       </listitem>
7719
7720       <listitem>
7721        <para>
7722         Enhance <literal>pg_locks</> view (Tom)
7723        </para>
7724       </listitem>
7725
7726       <listitem>
7727        <para>
7728         Log queries for client-side <command>PREPARE</> and
7729         <command>EXECUTE</> (Simon)
7730        </para>
7731       </listitem>
7732
7733       <listitem>
7734        <para>
7735         Allow Kerberos name and user name case sensitivity to be
7736         specified in <filename>postgresql.conf</> (Magnus)
7737        </para>
7738       </listitem>
7739
7740       <listitem>
7741        <para>
7742         Add configuration parameter <varname>krb_server_hostname</> so
7743         that the server host name can be specified as part of service
7744         principal (Todd Kover)
7745        </para>
7746        <para>
7747         If not set, any service principal matching an entry in the
7748         keytab can be used. This is new Kerberos matching behavior in
7749         this release.
7750        </para>
7751       </listitem>
7752
7753       <listitem>
7754        <para>
7755         Add <varname>log_line_prefix</> options for millisecond
7756         timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
7757         L.)
7758        </para>
7759       </listitem>
7760
7761       <listitem>
7762        <para>
7763         Add WAL logging for GiST indexes (Teodor, Oleg)
7764        </para>
7765        <para>
7766         GiST indexes are now safe for crash and point-in-time recovery.
7767        </para>
7768       </listitem>
7769
7770       <listitem>
7771        <para>
7772         Remove old <filename>*.backup</> files when we do
7773         <function>pg_stop_backup()</> (Bruce)
7774        </para>
7775        <para>
7776         This prevents a large number of <filename>*.backup</> files from
7777         existing in <filename>pg_xlog/</>.
7778        </para>
7779       </listitem>
7780
7781       <listitem>
7782        <para>
7783         Add configuration parameters to control TCP/IP keep-alive
7784         times for idle, interval, and count (Oliver Jowett)
7785        </para>
7786
7787        <para>
7788         These values can be changed to allow more rapid detection of
7789         lost client connections.
7790        </para>
7791       </listitem>
7792
7793       <listitem>
7794        <para>
7795         Add per-user and per-database connection limits (Petr Jelinek)
7796        </para>
7797        <para>
7798         Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
7799         limits can now be enforced on the maximum number of sessions that
7800         can concurrently connect as a specific user or to a specific database.
7801         Setting the limit to zero disables user or database connections.
7802        </para>
7803       </listitem>
7804
7805       <listitem>
7806        <para>
7807         Allow more than two gigabytes of shared memory and per-backend
7808         work memory on 64-bit machines (Koichi Suzuki)
7809        </para>
7810       </listitem>
7811
7812       <listitem>
7813        <para>
7814         New system catalog <structname>pg_pltemplate</> allows overriding
7815         obsolete procedural-language definitions in dump files (Tom)
7816        </para>
7817       </listitem>
7818
7819      </itemizedlist>
7820     </sect3>
7821
7822
7823     <sect3>
7824      <title>Query Changes</title>
7825      <itemizedlist>
7826
7827       <listitem>
7828        <para>
7829         Add temporary views (Koju Iijima, Neil)
7830        </para>
7831       </listitem>
7832
7833       <listitem>
7834        <para>
7835         Fix <command>HAVING</> without any aggregate functions or
7836         <command>GROUP BY</> so that the query returns a single group (Tom)
7837        </para>
7838        <para>
7839         Previously, such a case would treat the <command>HAVING</>
7840         clause the same as a <command>WHERE</> clause.  This was not per spec.
7841        </para>
7842       </listitem>
7843
7844       <listitem>
7845        <para>
7846         Add <command>USING</> clause to allow additional tables to be
7847         specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
7848        </para>
7849        <para>
7850         In prior releases, there was no clear method for specifying
7851         additional tables to be used for joins in a <command>DELETE</>
7852         statement. <command>UPDATE</> already has a <literal>FROM</>
7853         clause for this purpose.
7854        </para>
7855       </listitem>
7856
7857       <listitem>
7858        <para>
7859         Add support for <literal>\x</> hex escapes in backend and ecpg
7860         strings (Bruce)
7861        </para>
7862        <para>
7863         This is just like the standard C <literal>\x</> escape syntax.
7864         Octal escapes were already supported.
7865        </para>
7866       </listitem>
7867
7868       <listitem>
7869        <para>
7870         Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
7871        </para>
7872        <para>
7873         This feature allows <command>BETWEEN</> comparisons without
7874         requiring the first value to be less than the second. For
7875         example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
7876         false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
7877         true. <command>BETWEEN ASYMMETRIC</> was already supported.
7878        </para>
7879       </listitem>
7880
7881       <listitem>
7882        <para>
7883         Add <command>NOWAIT</> option to <command>SELECT ... FOR
7884         UPDATE/SHARE</> (Hans-Juergen Schoenig)
7885        </para>
7886        <para>
7887         While the <varname>statement_timeout</> configuration
7888         parameter allows a query taking more than a certain amount of
7889         time to be cancelled, the <command>NOWAIT</> option allows a
7890         query to be canceled as soon as a <command>SELECT ... FOR
7891         UPDATE/SHARE</> command cannot immediately acquire a row lock.
7892        </para>
7893       </listitem>
7894      </itemizedlist>
7895     </sect3>
7896
7897
7898     <sect3>
7899      <title>Object Manipulation Changes</title>
7900      <itemizedlist>
7901
7902       <listitem>
7903        <para>
7904         Track dependencies of shared objects (Alvaro)
7905        </para>
7906        <para>
7907         <productname>PostgreSQL</productname> allows global tables
7908         (users, databases, tablespaces) to reference information in
7909         multiple databases. This addition adds dependency information
7910         for global tables, so, for example, user ownership can be
7911         tracked across databases, so a user who owns something in any
7912         database can no longer be removed. Dependency tracking already
7913         existed for database-local objects.
7914        </para>
7915       </listitem>
7916
7917       <listitem>
7918        <para>
7919         Allow limited <command>ALTER OWNER</> commands to be performed
7920         by the object owner (Stephen Frost)
7921        </para>
7922        <para>
7923         Prior releases allowed only superusers to change object owners.
7924         Now, ownership can be transferred if the user executing the command
7925         owns the object and would be able to create it as the new owner
7926         (that is, the user is a member of the new owning role and that role
7927         has the CREATE permission that would be needed to create the object
7928         afresh).
7929        </para>
7930       </listitem>
7931
7932       <listitem>
7933        <para>
7934         Add <command>ALTER</> object <command>SET SCHEMA</> capability
7935         for some object types (tables, functions, types) (Bernd Helmle)
7936        </para>
7937        <para>
7938         This allows objects to be moved to different schemas.
7939        </para>
7940       </listitem>
7941
7942       <listitem>
7943        <para>
7944         Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
7945         disable triggers (Satoshi Nagayasu)
7946        </para>
7947       </listitem>
7948
7949      </itemizedlist>
7950     </sect3>
7951
7952
7953     <sect3>
7954      <title>Utility Command Changes</title>
7955      <itemizedlist>
7956
7957       <listitem>
7958        <para>
7959         Allow <command>TRUNCATE</> to truncate multiple tables in a
7960         single command (Alvaro)
7961        </para>
7962        <para>
7963         Because of referential integrity checks, it is not allowed to
7964         truncate a table that is part of a referential integrity
7965         constraint. Using this new functionality, <command>TRUNCATE</>
7966         can be used to truncate such tables, if both tables involved in
7967         a referential integrity constraint are truncated in a single
7968         <command>TRUNCATE</> command.
7969        </para>
7970       </listitem>
7971
7972       <listitem>
7973        <para>
7974         Properly process carriage returns and line feeds in
7975         <command>COPY CSV</> mode (Andrew)
7976        </para>
7977        <para>
7978         In release 8.0, carriage returns and line feeds in <command>CSV
7979         COPY TO</> were processed in an inconsistent manner. (This was
7980         documented on the TODO list.)
7981        </para>
7982       </listitem>
7983
7984       <listitem>
7985        <para>
7986         Add <command>COPY WITH CSV HEADER</> to allow a header line as
7987         the first line in <command>COPY</> (Andrew)
7988        </para>
7989        <para>
7990         This allows handling of the common <command>CSV</> usage of
7991         placing the column names on the first line of the data file. For
7992         <command>COPY TO</>, the first line contains the column names,
7993         and for <command>COPY FROM</>, the first line is ignored.
7994        </para>
7995       </listitem>
7996
7997       <listitem>
7998        <para>
7999         On Windows, display better sub-second precision in
8000         <command>EXPLAIN ANALYZE</> (Magnus)
8001        </para>
8002       </listitem>
8003
8004       <listitem>
8005        <para>
8006         Add trigger duration display to <command>EXPLAIN ANALYZE</>
8007         (Tom)
8008        </para>
8009        <para>
8010         Prior releases included trigger execution time as part of the
8011         total execution time, but did not show it separately.  It is now
8012         possible to see how much time is spent in each trigger.
8013        </para>
8014       </listitem>
8015
8016       <listitem>
8017        <para>
8018         Add support for <literal>\x</> hex escapes in <command>COPY</>
8019         (Sergey Ten)
8020        </para>
8021        <para>
8022         Previous releases only supported octal escapes.
8023        </para>
8024       </listitem>
8025
8026       <listitem>
8027        <para>
8028         Make <command>SHOW ALL</> include variable descriptions
8029         (Matthias Schmidt)
8030        </para>
8031        <para>
8032         <command>SHOW</> varname still only displays the variable's
8033         value and does not include the description.
8034        </para>
8035       </listitem>
8036
8037       <listitem>
8038        <para>
8039         Make <application>initdb</application> create a new standard
8040         database called <literal>postgres</>, and convert utilities to
8041         use <literal>postgres</> rather than <literal>template1</> for
8042         standard lookups (Dave)
8043        </para>
8044        <para>
8045         In prior releases, <literal>template1</> was used both as a
8046         default connection for utilities like
8047         <application>createuser</application>, and as a template for
8048         new databases. This caused <command>CREATE DATABASE</> to
8049         sometimes fail, because a new database cannot be created if
8050         anyone else is in the template database. With this change, the
8051         default connection database is now <literal>postgres</>,
8052         meaning it is much less likely someone will be using
8053         <literal>template1</> during <command>CREATE DATABASE</>.
8054        </para>
8055       </listitem>
8056
8057       <listitem>
8058        <para>
8059         Create new <application>reindexdb</application> command-line
8060         utility by moving <filename>/contrib/reindexdb</> into the
8061         server (Euler Taveira de Oliveira)
8062        </para>
8063       </listitem>
8064
8065      </itemizedlist>
8066     </sect3>
8067
8068
8069     <sect3>
8070      <title>Data Type and Function Changes</title>
8071      <itemizedlist>
8072
8073       <listitem>
8074        <para>
8075         Add <function>MAX()</> and <function>MIN()</> aggregates for
8076         array types (Koju Iijima)
8077        </para>
8078       </listitem>
8079
8080       <listitem>
8081        <para>
8082         Fix <function>to_date()</> and <function>to_timestamp()</> to
8083         behave reasonably when <literal>CC</> and <literal>YY</> fields
8084         are both used (Karel Zak)
8085        </para>
8086        <para>
8087         If the format specification contains <literal>CC</> and a year
8088         specification is <literal>YYY</> or longer, ignore the
8089         <literal>CC</>. If the year specification is <literal>YY</> or
8090         shorter, interpret <literal>CC</> as the previous century.
8091        </para>
8092       </listitem>
8093
8094       <listitem>
8095        <para>
8096         Add <function>md5(bytea)</> (Abhijit Menon-Sen)
8097        </para>
8098        <para>
8099         <function>md5(text)</> already existed.
8100        </para>
8101       </listitem>
8102
8103       <listitem>
8104        <para>
8105         Add support for <command>numeric ^ numeric</> based on
8106         <function>power(numeric, numeric)</>
8107        </para>
8108        <para>
8109         The function already existed, but there was no operator assigned
8110         to it.
8111        </para>
8112       </listitem>
8113
8114       <listitem>
8115        <para>
8116         Fix <type>NUMERIC</> modulus by properly truncating the quotient
8117         during computation (Bruce)
8118        </para>
8119        <para>
8120         In previous releases, modulus for large values sometimes
8121         returned negative results due to rounding of the quotient.
8122        </para>
8123       </listitem>
8124
8125       <listitem>
8126        <para>
8127         Add a function <function>lastval()</> (Dennis Bj&ouml;rklund)
8128        </para>
8129        <para>
8130         <function>lastval()</> is a simplified version of
8131         <function>currval()</>. It automatically determines the proper
8132         sequence name based on the most recent <function>nextval()</> or
8133         <function>setval()</> call performed by the current session.
8134        </para>
8135       </listitem>
8136
8137       <listitem>
8138        <para>
8139         Add <function>to_timestamp(DOUBLE PRECISION) (Michael Glaesemann)</>
8140        </para>
8141        <para>
8142         Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
8143         TIMEZONE</>.
8144        </para>
8145       </listitem>
8146
8147       <listitem>
8148        <para>
8149         Add <function>pg_postmaster_start_time()</> function (Euler
8150         Taveira de Oliveira, Matthias Schmidt)
8151        </para>
8152       </listitem>
8153
8154       <listitem>
8155        <para>
8156         Allow the full use of time zone names in <command>AT TIME
8157         ZONE</>, not just the short list previously available (Magnus)
8158        </para>
8159        <para>
8160         Previously, only a predefined list of time zone names were
8161         supported by <command>AT TIME ZONE</>. Now any supported time
8162         zone name can be used, e.g.:
8163         <programlisting>
8164          SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
8165         </programlisting>
8166         In the above query, the time zone used is adjusted based on the
8167         daylight saving time rules that were in effect on the supplied
8168         date.
8169        </para>
8170       </listitem>
8171
8172       <listitem>
8173        <para>
8174         Add <function>GREATEST()</> and <function>LEAST()</> variadic
8175         functions (Pavel Stehule)
8176        </para>
8177        <para>
8178         These functions take a variable number of arguments and return
8179         the greatest or least value among the arguments.
8180        </para>
8181       </listitem>
8182
8183       <listitem>
8184        <para>
8185         Add <function>pg_column_size()</> (Mark Kirkwood)
8186        </para>
8187        <para>
8188         This returns storage size of a column, which might be compressed.
8189        </para>
8190       </listitem>
8191
8192       <listitem>
8193        <para>
8194         Add <function>regexp_replace()</> (Atsushi Ogawa)
8195        </para>
8196        <para>
8197         This allows regular expression replacement, like sed. An optional
8198         flag argument allows selection of global (replace all) and
8199         case-insensitive modes.
8200        </para>
8201       </listitem>
8202
8203       <listitem>
8204        <para>
8205         Fix interval division and multiplication (Bruce)
8206        </para>
8207        <para>
8208         Previous versions sometimes returned unjustified results, like
8209         <command>'4 months'::interval / 5</> returning <command>'1 mon
8210         -6 days'</>.
8211        </para>
8212       </listitem>
8213
8214       <listitem>
8215        <para>
8216         Fix roundoff behavior in timestamp, time, and interval output (Tom)
8217        </para>
8218        <para>
8219         This fixes some cases in which the seconds field would be shown as
8220         <literal>60</> instead of incrementing the higher-order fields.
8221        </para>
8222       </listitem>
8223
8224       <listitem>
8225        <para>
8226         Add a separate day field to type <type>interval</> so a one day
8227         interval can be distinguished from a 24 hour interval (Michael
8228         Glaesemann)
8229        </para>
8230        <para>
8231         Days that contain a daylight saving time adjustment are not 24
8232         hours long, but typically 23 or 25 hours.  This change creates a
8233         conceptual distinction between intervals of <quote>so many days</>
8234         and intervals of <quote>so many hours</>.  Adding
8235         <literal>1 day</> to a timestamp now gives the same local time on
8236         the next day even if a daylight saving time adjustment occurs
8237         between, whereas adding <literal>24 hours</> will give a different
8238         local time when this happens.  For example, under US DST rules:
8239         <programlisting>
8240          '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
8241          '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
8242         </programlisting>
8243        </para>
8244       </listitem>
8245
8246       <listitem>
8247        <para>
8248         Add <function>justify_days()</> and <function>justify_hours()</>
8249         (Michael Glaesemann)
8250        </para>
8251        <para>
8252         These functions, respectively, adjust days to an appropriate
8253         number of full months and days, and adjust hours to an
8254         appropriate number of full days and hours.
8255        </para>
8256       </listitem>
8257
8258       <listitem>
8259        <para>
8260         Move <filename>/contrib/dbsize</> into the backend, and rename
8261         some of the functions (Dave Page, Andreas Pflug)
8262        </para>
8263        <para>
8264         <itemizedlist>
8265
8266          <listitem>
8267           <para>
8268             <function>pg_tablespace_size()</>
8269           </para>
8270          </listitem>
8271
8272          <listitem>
8273           <para>
8274            <function>pg_database_size()</>
8275           </para>
8276          </listitem>
8277
8278          <listitem>
8279           <para>
8280            <function>pg_relation_size()</>
8281           </para>
8282          </listitem>
8283
8284          <listitem>
8285           <para>
8286            <function>pg_total_relation_size()</>
8287           </para>
8288          </listitem>
8289
8290          <listitem>
8291           <para>
8292            <function>pg_size_pretty()</>
8293           </para>
8294          </listitem>
8295
8296         </itemizedlist>
8297        </para>
8298        <para>
8299         <function>pg_total_relation_size()</> includes indexes and TOAST
8300         tables.
8301        </para>
8302       </listitem>
8303
8304       <listitem>
8305        <para>
8306         Add functions for read-only file access to the cluster directory
8307         (Dave Page, Andreas Pflug)
8308        </para>
8309        <para>
8310         <itemizedlist>
8311
8312          <listitem>
8313           <para>
8314            <function>pg_stat_file()</>
8315           </para>
8316          </listitem>
8317
8318          <listitem>
8319           <para>
8320            <function>pg_read_file()</>
8321           </para>
8322          </listitem>
8323
8324          <listitem>
8325           <para>
8326            <function>pg_ls_dir()</>
8327           </para>
8328          </listitem>
8329
8330         </itemizedlist>
8331        </para>
8332       </listitem>
8333
8334       <listitem>
8335        <para>
8336         Add <function>pg_reload_conf()</> to force reloading of the
8337         configuration files (Dave Page, Andreas Pflug)
8338        </para>
8339       </listitem>
8340
8341       <listitem>
8342        <para>
8343         Add <function>pg_rotate_logfile()</> to force rotation of the
8344         server log file (Dave Page, Andreas Pflug)
8345        </para>
8346       </listitem>
8347
8348       <listitem>
8349        <para>
8350         Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
8351        </para>
8352       </listitem>
8353
8354      </itemizedlist>
8355     </sect3>
8356
8357
8358     <sect3>
8359      <title>Encoding and Locale Changes</title>
8360      <itemizedlist>
8361
8362       <listitem>
8363        <para>
8364         Rename some encodings to be more consistent and to follow
8365         international standards (Bruce)
8366        </para>
8367        <para>
8368         <itemizedlist>
8369
8370          <listitem>
8371           <para>
8372            <literal>UNICODE</> is now <literal>UTF8</>
8373           </para>
8374          </listitem>
8375
8376          <listitem>
8377           <para>
8378            <literal>ALT</> is now <literal>WIN866</>
8379           </para>
8380          </listitem>
8381
8382          <listitem>
8383           <para>
8384            <literal>WIN</> is now <literal>WIN1251</>
8385           </para>
8386          </listitem>
8387
8388          <listitem>
8389           <para>
8390           <literal>TCVN</> is now <literal>WIN1258</>
8391           </para>
8392          </listitem>
8393
8394         </itemizedlist>
8395        </para>
8396
8397        <para>
8398         The original names still work.
8399        </para>
8400       </listitem>
8401
8402       <listitem>
8403        <para>
8404         Add support for <literal>WIN1252</> encoding (Roland Volkmann)
8405        </para>
8406       </listitem>
8407
8408       <listitem>
8409        <para>
8410         Add support for four-byte <literal>UTF8</> characters (John
8411         Hansen)
8412        </para>
8413        <para>
8414         Previously only one, two, and three-byte <literal>UTF8</> characters
8415         were supported. This is particularly important for support for
8416         some Chinese character sets.
8417        </para>
8418       </listitem>
8419
8420       <listitem>
8421        <para>
8422         Allow direct conversion between <literal>EUC_JP</> and
8423         <literal>SJIS</> to improve performance (Atsushi Ogawa)
8424        </para>
8425       </listitem>
8426
8427       <listitem>
8428        <para>
8429         Allow the UTF8 encoding to work on Windows (Magnus)
8430        </para>
8431        <para>
8432         This is done by mapping UTF8 to the Windows-native UTF16
8433         implementation.
8434        </para>
8435       </listitem>
8436
8437      </itemizedlist>
8438     </sect3>
8439
8440
8441     <sect3>
8442      <title>General Server-Side Language Changes</title>
8443      <itemizedlist>
8444
8445       <listitem>
8446        <para>
8447         Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
8448        </para>
8449       </listitem>
8450
8451       <listitem>
8452        <para>
8453         Allow function characteristics, like strictness and volatility,
8454         to be modified via <command>ALTER FUNCTION</> (Neil)
8455        </para>
8456       </listitem>
8457
8458       <listitem>
8459        <para>
8460         Increase the maximum number of function arguments to 100 (Tom)
8461        </para>
8462       </listitem>
8463
8464       <listitem>
8465        <para>
8466         Allow SQL and PL/PgSQL functions to use <command>OUT</> and
8467         <command>INOUT</> parameters (Tom)
8468        </para>
8469        <para>
8470         <command>OUT</> is an alternate way for a function to return
8471         values. Instead of using <command>RETURN</>, values can be
8472         returned by assigning to parameters declared as <command>OUT</> or
8473         <command>INOUT</>.  This is notationally simpler in some cases,
8474         particularly so when multiple values need to be returned.
8475         While returning multiple values from a function
8476         was possible in previous releases, this greatly simplifies the
8477         process.  (The feature will be extended to other server-side
8478         languages in future releases.)
8479        </para>
8480       </listitem>
8481
8482       <listitem>
8483        <para>
8484         Move language handler functions into the <literal>pg_catalog</> schema
8485        </para>
8486        <para>
8487         This makes it easier to drop the public schema if desired.
8488        </para>
8489       </listitem>
8490
8491       <listitem>
8492        <para>
8493         Add <function>SPI_getnspname()</function> to SPI (Neil)
8494        </para>
8495       </listitem>
8496
8497      </itemizedlist>
8498     </sect3>
8499
8500     <sect3>
8501      <title>PL/PgSQL Server-Side Language Changes</title>
8502      <itemizedlist>
8503
8504       <listitem>
8505        <para>
8506         Overhaul the memory management of PL/PgSQL functions (Neil)
8507        </para>
8508        <para>
8509         The parsetree of each function is now stored in a separate
8510         memory context. This allows this memory to be easily reclaimed
8511         when it is no longer needed.
8512        </para>
8513       </listitem>
8514
8515       <listitem>
8516        <para>
8517         Check function syntax at <command>CREATE FUNCTION</> time,
8518         rather than at runtime (Neil)
8519        </para>
8520        <para>
8521         Previously, most syntax errors were reported only when the
8522         function was executed.
8523        </para>
8524       </listitem>
8525
8526       <listitem>
8527        <para>
8528         Allow <command>OPEN</> to open non-<command>SELECT</> queries
8529         like <command>EXPLAIN</> and <command>SHOW</> (Tom)
8530        </para>
8531       </listitem>
8532
8533       <listitem>
8534        <para>
8535         No longer require functions to issue a <command>RETURN</>
8536         statement (Tom)
8537        </para>
8538        <para>
8539         This is a byproduct of the newly added <command>OUT</> and
8540         <command>INOUT</> functionality.  <command>RETURN</> can
8541         be omitted when it is not needed to provide the function's
8542         return value.
8543        </para>
8544       </listitem>
8545
8546       <listitem>
8547        <para>
8548         Add support for an optional <command>INTO</> clause to
8549         PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
8550        </para>
8551       </listitem>
8552
8553       <listitem>
8554        <para>
8555         Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
8556        </para>
8557       </listitem>
8558
8559       <listitem>
8560        <para>
8561         Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
8562         the <literal>SQLSTATE</> and error message of the current
8563         exception (Pavel Stehule, Neil)
8564        </para>
8565        <para>
8566         These variables are only defined inside exception blocks.
8567        </para>
8568       </listitem>
8569
8570       <listitem>
8571        <para>
8572         Allow the parameters to the <command>RAISE</> statement to be
8573         expressions (Pavel Stehule, Neil)
8574        </para>
8575       </listitem>
8576
8577       <listitem>
8578        <para>
8579         Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
8580        </para>
8581       </listitem>
8582
8583       <listitem>
8584        <para>
8585         Allow block and loop labels (Pavel Stehule)
8586        </para>
8587       </listitem>
8588
8589      </itemizedlist>
8590     </sect3>
8591
8592
8593     <sect3>
8594      <title>PL/Perl Server-Side Language Changes</title>
8595      <itemizedlist>
8596
8597       <listitem>
8598        <para>
8599         Allow large result sets to be returned efficiently (Abhijit
8600         Menon-Sen)
8601        </para>
8602        <para>
8603         This allows functions to use <function>return_next()</> to avoid
8604         building the entire result set in memory.
8605        </para>
8606       </listitem>
8607
8608       <listitem>
8609        <para>
8610         Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
8611        </para>
8612        <para>
8613         This allows functions to use <function>spi_query()</> and
8614         <function>spi_fetchrow()</> to avoid accumulating the entire
8615         result set in memory.
8616        </para>
8617       </listitem>
8618
8619       <listitem>
8620        <para>
8621         Force PL/Perl to handle strings as <literal>UTF8</> if the
8622         server encoding is <literal>UTF8</> (David Kamholz)
8623        </para>
8624       </listitem>
8625
8626       <listitem>
8627        <para>
8628         Add a validator function for PL/Perl (Andrew)
8629        </para>
8630        <para>
8631         This allows syntax errors to be reported at definition time,
8632         rather than execution time.
8633        </para>
8634       </listitem>
8635
8636       <listitem>
8637        <para>
8638         Allow PL/Perl to return a Perl array when the function returns
8639         an array type (Andrew)
8640        </para>
8641        <para>
8642         This basically maps <productname>PostgreSQL</productname> arrays
8643         to Perl arrays.
8644        </para>
8645       </listitem>
8646
8647       <listitem>
8648        <para>
8649         Allow Perl nonfatal warnings to generate <command>NOTICE</>
8650         messages (Andrew)
8651        </para>
8652       </listitem>
8653
8654       <listitem>
8655        <para>
8656         Allow Perl's <literal>strict</> mode to be enabled (Andrew)
8657        </para>
8658       </listitem>
8659
8660      </itemizedlist>
8661     </sect3>
8662
8663
8664     <sect3>
8665      <title><application>psql</> Changes</title>
8666      <itemizedlist>
8667
8668       <listitem>
8669        <para>
8670         Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
8671         a transaction to error without affecting the rest of the
8672         transaction (Greg Sabino Mullane)
8673        </para>
8674        <para>
8675         This is basically implemented by wrapping every statement in a
8676         sub-transaction.
8677        </para>
8678       </listitem>
8679
8680       <listitem>
8681        <para>
8682         Add support for <literal>\x</> hex strings in
8683         <application>psql</> variables (Bruce)
8684        </para>
8685        <para>
8686         Octal escapes were already supported.
8687        </para>
8688       </listitem>
8689
8690       <listitem>
8691        <para>
8692         Add support for <command>troff -ms</> output format (Roger
8693         Leigh)
8694        </para>
8695       </listitem>
8696
8697       <listitem>
8698        <para>
8699         Allow the history file location to be controlled by
8700         <envar>HISTFILE</> (Andreas Seltenreich)
8701        </para>
8702        <para>
8703         This allows configuration of per-database history storage.
8704        </para>
8705       </listitem>
8706
8707       <listitem>
8708        <para>
8709         Prevent <command>\x</> (expanded mode) from affecting
8710         the output of <command>\d tablename</> (Neil)
8711        </para>
8712       </listitem>
8713
8714       <listitem>
8715        <para>
8716         Add <option>-L</> option to <application>psql</application> to
8717         log sessions (Lorne Sunley)
8718        </para>
8719        <para>
8720         This option was added because some operating systems do not have
8721         simple command-line activity logging functionality.
8722        </para>
8723       </listitem>
8724
8725       <listitem>
8726        <para>
8727         Make <command>\d</> show the tablespaces of indexes (Qingqing
8728         Zhou)
8729        </para>
8730       </listitem>
8731
8732       <listitem>
8733        <para>
8734         Allow <application>psql</application> help (<command>\h</>) to
8735         make a best guess on the proper help information (Greg Sabino
8736         Mullane)
8737        </para>
8738        <para>
8739         This allows the user to just add <command>\h</> to the front of
8740         the syntax error query and get help on the supported syntax.
8741         Previously any additional query text beyond the command name
8742         had to be removed to use <command>\h</>.
8743        </para>
8744       </listitem>
8745
8746       <listitem>
8747        <para>
8748         Add <command>\pset numericlocale</> to allow numbers to be
8749         output in a locale-aware format (Eugen Nedelcu)
8750        </para>
8751        <para>
8752         For example, using <literal>C</> locale <literal>100000</> would
8753         be output as <literal>100,000.0</> while a European locale might
8754         output this value as <literal>100.000,0</>.
8755        </para>
8756       </listitem>
8757
8758       <listitem>
8759        <para>
8760         Make startup banner show both server version number and
8761         <application>psql</>'s version number, when they are different (Bruce)
8762        </para>
8763        <para>
8764         Also, a warning will be shown if the server and <application>psql</>
8765         are from different major releases.
8766        </para>
8767       </listitem>
8768
8769      </itemizedlist>
8770     </sect3>
8771
8772
8773     <sect3>
8774      <title><application>pg_dump</> Changes</title>
8775      <itemizedlist>
8776
8777       <listitem>
8778        <para>
8779         Add <option>-n</> / <option>--schema</> switch to
8780         <application>pg_restore</> (Richard van den Berg)
8781        </para>
8782        <para>
8783         This allows just the objects in a specified schema to be restored.
8784        </para>
8785       </listitem>
8786
8787       <listitem>
8788        <para>
8789         Allow <application>pg_dump</> to dump large objects even in
8790         text mode (Tom)
8791        </para>
8792        <para>
8793         With this change, large objects are now always dumped; the former
8794         <option>-b</> switch is a no-op.
8795        </para>
8796       </listitem>
8797
8798       <listitem>
8799        <para>
8800         Allow <application>pg_dump</> to dump a consistent snapshot of
8801         large objects (Tom)
8802        </para>
8803       </listitem>
8804
8805       <listitem>
8806        <para>
8807         Dump comments for large objects (Tom)
8808        </para>
8809       </listitem>
8810
8811       <listitem>
8812        <para>
8813         Add <option>--encoding</> to <application>pg_dump</>
8814         (Magnus Hagander)
8815        </para>
8816        <para>
8817         This allows a database to be dumped in an encoding that is
8818         different from the server's encoding. This is valuable when
8819         transferring the dump to a machine with a different encoding.
8820        </para>
8821       </listitem>
8822
8823       <listitem>
8824        <para>
8825         Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
8826        </para>
8827        <para>
8828         If the call handler for a procedural language is in the
8829         <literal>pg_catalog</> schema, <application>pg_dump</> does not
8830         dump the handler.  Instead, it dumps the language using just
8831         <command>CREATE LANGUAGE <replaceable>name</></command>,
8832         relying on the <structname>pg_pltemplate</> catalog to provide
8833         the language's creation parameters at load time.
8834        </para>
8835       </listitem>
8836
8837      </itemizedlist>
8838     </sect3>
8839
8840
8841     <sect3>
8842      <title><application>libpq</application> Changes</title>
8843      <itemizedlist>
8844
8845       <listitem>
8846        <para>
8847         Add a <envar>PGPASSFILE</> environment variable to specify the
8848         password file's filename (Andrew)
8849        </para>
8850       </listitem>
8851
8852       <listitem>
8853        <para>
8854         Add <function>lo_create()</>, that is similar to
8855         <function>lo_creat()</> but allows the OID of the large object
8856         to be specified (Tom)
8857        </para>
8858       </listitem>
8859
8860       <listitem>
8861        <para>
8862         Make <application>libpq</application> consistently return an error
8863         to the client application on <function>malloc()</function>
8864         failure (Neil)
8865        </para>
8866       </listitem>
8867      </itemizedlist>
8868     </sect3>
8869
8870
8871     <sect3>
8872      <title>Source Code Changes</title>
8873      <itemizedlist>
8874
8875       <listitem>
8876        <para>
8877         Fix <application>pgxs</> to support building against a relocated
8878         installation
8879        </para>
8880       </listitem>
8881
8882       <listitem>
8883        <para>
8884         Add spinlock support for the Itanium processor using Intel
8885         compiler (Vikram Kalsi)
8886        </para>
8887       </listitem>
8888
8889       <listitem>
8890        <para>
8891         Add Kerberos 5 support for Windows (Magnus)
8892        </para>
8893       </listitem>
8894
8895       <listitem>
8896        <para>
8897         Add Chinese FAQ (laser@pgsqldb.com)
8898        </para>
8899       </listitem>
8900
8901       <listitem>
8902        <para>
8903         Rename Rendezvous to Bonjour to match OS/X feature renaming
8904         (Bruce)
8905        </para>
8906       </listitem>
8907
8908       <listitem>
8909        <para>
8910         Add support for <literal>fsync_writethrough</literal> on
8911         Darwin (Chris Campbell)
8912        </para>
8913       </listitem>
8914
8915       <listitem>
8916        <para>
8917         Streamline the passing of information within the server, the
8918         optimizer, and the lock system (Tom)
8919        </para>
8920       </listitem>
8921
8922       <listitem>
8923        <para>
8924         Allow <application>pg_config</> to be compiled using MSVC (Andrew)
8925        </para>
8926        <para>
8927         This is required to build DBD::Pg using <application>MSVC</>.
8928        </para>
8929       </listitem>
8930
8931       <listitem>
8932        <para>
8933         Remove support for Kerberos V4 (Magnus)
8934        </para>
8935        <para>
8936         Kerberos 4 had security vulnerabilities and is no longer
8937         maintained.
8938        </para>
8939       </listitem>
8940
8941       <listitem>
8942        <para>
8943         Code cleanups (Coverity static analysis performed by
8944         EnterpriseDB)
8945        </para>
8946       </listitem>
8947
8948       <listitem>
8949        <para>
8950         Modify <filename>postgresql.conf</> to use documentation defaults
8951         <literal>on</>/<literal>off</> rather than
8952         <literal>true</>/<literal>false</> (Bruce)
8953        </para>
8954       </listitem>
8955
8956       <listitem>
8957        <para>
8958         Enhance <application>pg_config</> to be able to report more
8959         build-time values (Tom)
8960        </para>
8961       </listitem>
8962
8963       <listitem>
8964        <para>
8965         Allow <application>libpq</application> to be built thread-safe
8966         on Windows (Dave Page)
8967        </para>
8968       </listitem>
8969
8970       <listitem>
8971        <para>
8972         Allow IPv6 connections to be used on Windows (Andrew)
8973        </para>
8974       </listitem>
8975
8976       <listitem>
8977        <para>
8978         Add Server Administration documentation about I/O subsystem
8979         reliability (Bruce)
8980        </para>
8981       </listitem>
8982
8983       <listitem>
8984        <para>
8985         Move private declarations from <filename>gist.h</filename> to
8986         <filename>gist_private.h</filename> (Neil)
8987        </para>
8988
8989        <para>
8990         In previous releases, <filename>gist.h</> contained both the
8991         public GiST API (intended for use by authors of GiST index
8992         implementations) as well as some private declarations used by
8993         the implementation of GiST itself. The latter have been moved
8994         to a separate file, <filename>gist_private.h</>. Most GiST
8995         index implementations should be unaffected.
8996        </para>
8997       </listitem>
8998
8999       <listitem>
9000        <para>
9001         Overhaul GiST memory management (Neil)
9002        </para>
9003
9004        <para>
9005         GiST methods are now always invoked in a short-lived memory
9006         context. Therefore, memory allocated via <function>palloc()</>
9007         will be reclaimed automatically, so GiST index implementations
9008         do not need to manually release allocated memory via
9009         <function>pfree()</>.
9010        </para>
9011       </listitem>
9012      </itemizedlist>
9013     </sect3>
9014
9015
9016     <sect3>
9017      <title>Contrib Changes</title>
9018      <itemizedlist>
9019
9020       <listitem>
9021        <para>
9022         Add <filename>/contrib/pg_buffercache</> contrib module (Mark
9023         Kirkwood)
9024        </para>
9025        <para>
9026         This displays the contents of the buffer cache, for debugging and
9027         performance tuning purposes.
9028        </para>
9029       </listitem>
9030
9031       <listitem>
9032        <para>
9033         Remove <filename>/contrib/array</> because it is obsolete (Tom)
9034        </para>
9035       </listitem>
9036
9037       <listitem>
9038        <para>
9039         Clean up the <filename>/contrib/lo</> module (Tom)
9040        </para>
9041       </listitem>
9042
9043       <listitem>
9044        <para>
9045         Move <filename>/contrib/findoidjoins</> to
9046         <filename>/src/tools</> (Tom)
9047        </para>
9048       </listitem>
9049
9050       <listitem>
9051        <para>
9052         Remove the <literal>&lt;&lt</>, <literal>&gt;&gt;</>,
9053         <literal>&amp;&lt</>, and <literal>&amp;&gt;</> operators from
9054         <filename>/contrib/cube</>
9055        </para>
9056        <para>
9057         These operators were not useful.
9058        </para>
9059       </listitem>
9060
9061       <listitem>
9062        <para>
9063         Improve <filename>/contrib/btree_gist</> (Janko Richter)
9064        </para>
9065       </listitem>
9066
9067       <listitem>
9068        <para>
9069         Improve <filename>/contrib/pgbench</> (Tomoaki Sato, Tatsuo)
9070        </para>
9071        <para>
9072         There is now a facility for testing with SQL command scripts given
9073         by the user, instead of only a hard-wired command sequence.
9074        </para>
9075       </listitem>
9076
9077       <listitem>
9078        <para>
9079         Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
9080        </para>
9081
9082        <itemizedlist>
9083
9084         <listitem>
9085          <para>
9086           Implementation of OpenPGP symmetric-key and public-key encryption
9087          </para>
9088          <para>
9089           Both RSA and Elgamal public-key algorithms are supported.
9090          </para>
9091         </listitem>
9092
9093         <listitem>
9094          <para>
9095           Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
9096          </para>
9097         </listitem>
9098
9099         <listitem>
9100          <para>
9101           OpenSSL build: support 3DES, use internal AES with OpenSSL &lt; 0.9.7
9102          </para>
9103         </listitem>
9104
9105         <listitem>
9106          <para>
9107           Take build parameters (OpenSSL, zlib) from <filename>configure</> result
9108          </para>
9109          <para>
9110           There is no need to edit the <filename>Makefile</> anymore.
9111          </para>
9112         </listitem>
9113
9114         <listitem>
9115          <para>
9116           Remove support for <filename>libmhash</> and <filename>libmcrypt</>
9117          </para>
9118         </listitem>
9119
9120        </itemizedlist>
9121       </listitem>
9122
9123      </itemizedlist>
9124     </sect3>
9125
9126    </sect2>
9127   </sect1>
9128
9129   <sect1 id="release-8-0-14">
9130    <title>Release 8.0.14</title>
9131
9132    <note>
9133    <title>Release date</title>
9134    <simpara>2007-09-17</simpara>
9135    </note>
9136
9137    <para>
9138     This release contains a variety of fixes from 8.0.13.
9139    </para>
9140
9141    <sect2>
9142     <title>Migration to version 8.0.14</title>
9143
9144     <para>
9145      A dump/restore is not required for those running 8.0.X.  However,
9146      if you are upgrading from a version earlier than 8.0.6, see the release
9147      notes for 8.0.6.
9148     </para>
9149
9150    </sect2>
9151
9152    <sect2>
9153     <title>Changes</title>
9154
9155     <itemizedlist>
9156
9157      <listitem>
9158       <para>
9159        Prevent index corruption when a transaction inserts rows and
9160        then aborts close to the end of a concurrent <command>VACUUM</>
9161        on the same table (Tom)
9162       </para>
9163      </listitem>
9164
9165      <listitem>
9166       <para>
9167        Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
9168       </para>
9169      </listitem>
9170
9171      <listitem>
9172       <para>
9173        Fix excessive logging of <acronym>SSL</> error messages (Tom)
9174       </para>
9175      </listitem>
9176
9177      <listitem>
9178       <para>
9179        Fix logging so that log messages are never interleaved when using
9180        the syslogger process (Andrew)
9181       </para>
9182      </listitem>
9183
9184      <listitem>
9185       <para>
9186        Fix crash when <varname>log_min_error_statement</> logging runs out
9187        of memory (Tom)
9188       </para>
9189      </listitem>
9190
9191      <listitem>
9192       <para>
9193        Fix incorrect handling of some foreign-key corner cases (Tom)
9194       </para>
9195      </listitem>
9196
9197      <listitem>
9198       <para>
9199        Prevent <command>CLUSTER</> from failing
9200        due to attempting to process temporary tables of other sessions (Alvaro)
9201       </para>
9202      </listitem>
9203
9204      <listitem>
9205       <para>
9206        Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
9207       </para>
9208      </listitem>
9209
9210      <listitem>
9211       <para>
9212        Windows socket improvements (Magnus)
9213       </para>
9214      </listitem>
9215
9216      <listitem>
9217       <para>
9218        Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
9219        because of possible encoding mismatches (Tom)
9220       </para>
9221      </listitem>
9222
9223      <listitem>
9224       <para>
9225        Require non-superusers who use <filename>/contrib/dblink</> to use only
9226        password authentication, as a security measure (Joe)
9227       </para>
9228      </listitem>
9229
9230     </itemizedlist>
9231
9232    </sect2>
9233   </sect1>
9234
9235   <sect1 id="release-8-0-13">
9236    <title>Release 8.0.13</title>
9237
9238    <note>
9239    <title>Release date</title>
9240    <simpara>2007-04-23</simpara>
9241    </note>
9242
9243    <para>
9244     This release contains a variety of fixes from 8.0.12,
9245     including a security fix.
9246    </para>
9247
9248    <sect2>
9249     <title>Migration to version 8.0.13</title>
9250
9251     <para>
9252      A dump/restore is not required for those running 8.0.X.  However,
9253      if you are upgrading from a version earlier than 8.0.6, see the release
9254      notes for 8.0.6.
9255     </para>
9256
9257    </sect2>
9258
9259    <sect2>
9260     <title>Changes</title>
9261
9262     <itemizedlist>
9263
9264      <listitem>
9265      <para>
9266       Support explicit placement of the temporary-table schema within
9267       <varname>search_path</>, and disable searching it for functions
9268       and operators (Tom)
9269      </para>
9270      <para>
9271       This is needed to allow a security-definer function to set a
9272       truly secure value of <varname>search_path</>.  Without it,
9273       an unprivileged SQL user can use temporary objects to execute code
9274       with the privileges of the security-definer function (CVE-2007-2138).
9275       See <command>CREATE FUNCTION</> for more information.
9276      </para>
9277      </listitem>
9278
9279      <listitem>
9280      <para>
9281       <filename>/contrib/tsearch2</> crash fixes (Teodor)
9282      </para>
9283      </listitem>
9284
9285      <listitem>
9286      <para>
9287       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
9288       <command>UPDATE</> chains (Tom, Pavan Deolasee)
9289      </para>
9290      </listitem>
9291
9292      <listitem>
9293      <para>
9294       Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
9295       (Tom)
9296      </para>
9297      </listitem>
9298
9299      <listitem>
9300      <para>
9301       Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
9302      </para>
9303      </listitem>
9304
9305     </itemizedlist>
9306
9307    </sect2>
9308   </sect1>
9309
9310   <sect1 id="release-8-0-12">
9311    <title>Release 8.0.12</title>
9312
9313    <note>
9314    <title>Release date</title>
9315    <simpara>2007-02-07</simpara>
9316    </note>
9317
9318    <para>
9319     This release contains one fix from 8.0.11.
9320    </para>
9321
9322    <sect2>
9323     <title>Migration to version 8.0.12</title>
9324
9325     <para>
9326      A dump/restore is not required for those running 8.0.X.  However,
9327      if you are upgrading from a version earlier than 8.0.6, see the release
9328      notes for 8.0.6.
9329     </para>
9330
9331    </sect2>
9332
9333    <sect2>
9334     <title>Changes</title>
9335
9336     <itemizedlist>
9337
9338      <listitem>
9339      <para>
9340       Remove overly-restrictive check for type length in constraints and
9341       functional indexes(Tom)
9342      </para>
9343      </listitem>
9344
9345     </itemizedlist>
9346
9347    </sect2>
9348   </sect1>
9349
9350   <sect1 id="release-8-0-11">
9351    <title>Release 8.0.11</title>
9352
9353    <note>
9354    <title>Release date</title>
9355    <simpara>2007-02-05</simpara>
9356    </note>
9357
9358    <para>
9359     This release contains a variety of fixes from 8.0.10, including
9360     a security fix.
9361    </para>
9362
9363    <sect2>
9364     <title>Migration to version 8.0.11</title>
9365
9366     <para>
9367      A dump/restore is not required for those running 8.0.X.  However,
9368      if you are upgrading from a version earlier than 8.0.6, see the release
9369      notes for 8.0.6.
9370     </para>
9371
9372    </sect2>
9373
9374    <sect2>
9375     <title>Changes</title>
9376
9377     <itemizedlist>
9378
9379      <listitem>
9380      <para>
9381       Remove security vulnerabilities that allowed connected users
9382       to read backend memory (Tom)
9383      </para>
9384      <para>
9385       The vulnerabilities involve suppressing the normal check that a SQL
9386       function returns the data type it's declared to, and changing the
9387       data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
9388       errors can easily be exploited to cause a backend crash, and in
9389       principle might be used to read database content that the user
9390       should not be able to access.
9391      </para>
9392      </listitem>
9393
9394      <listitem>
9395      <para>
9396       Fix rare bug wherein btree index page splits could fail
9397       due to choosing an infeasible split point (Heikki Linnakangas)
9398      </para>
9399      </listitem>
9400
9401      <listitem>
9402      <para>
9403       Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
9404      </para>
9405      </listitem>
9406
9407      <listitem>
9408      <para>
9409       Tighten security of multi-byte character processing for UTF8 sequences
9410       over three bytes long (Tom)
9411      </para>
9412      </listitem>
9413
9414     </itemizedlist>
9415
9416    </sect2>
9417   </sect1>
9418
9419   <sect1 id="release-8-0-10">
9420    <title>Release 8.0.10</title>
9421
9422    <note>
9423    <title>Release date</title>
9424    <simpara>2007-01-08</simpara>
9425    </note>
9426
9427    <para>
9428     This release contains a variety of fixes from 8.0.9.
9429    </para>
9430
9431    <sect2>
9432     <title>Migration to version 8.0.10</title>
9433
9434     <para>
9435      A dump/restore is not required for those running 8.0.X.  However,
9436      if you are upgrading from a version earlier than 8.0.6, see the release
9437      notes for 8.0.6.
9438     </para>
9439
9440    </sect2>
9441
9442    <sect2>
9443     <title>Changes</title>
9444
9445     <itemizedlist>
9446
9447      <listitem>
9448       <para>
9449        Improve handling of <function>getaddrinfo()</> on AIX (Tom)
9450       </para>
9451
9452       <para>
9453        This fixes a problem with starting the statistics collector,
9454        among other things.
9455       </para>
9456      </listitem>
9457
9458       <listitem>
9459        <para>
9460         Fix <quote>failed to re-find parent key</> errors in
9461         <command>VACUUM</> (Tom)
9462        </para>
9463       </listitem>
9464
9465       <listitem>
9466        <para>
9467         Fix race condition for truncation of a large relation across a
9468         gigabyte boundary by <command>VACUUM</> (Tom)
9469        </para>
9470       </listitem>
9471
9472       <listitem>
9473        <para>
9474         Fix bugs affecting multi-gigabyte hash indexes (Tom)
9475        </para>
9476       </listitem>
9477
9478      <listitem>
9479       <para>
9480        Fix possible deadlock in Windows signal handling (Teodor)
9481       </para>
9482      </listitem>
9483
9484      <listitem>
9485       <para>
9486        Fix error when constructing an <literal>ARRAY[]</> made up of multiple
9487        empty elements (Tom)
9488       </para>
9489      </listitem>
9490
9491      <listitem>
9492       <para>
9493        Fix ecpg memory leak during connection (Michael)
9494       </para>
9495      </listitem>
9496
9497      <listitem>
9498       <para>
9499        <function>to_number()</> and <function>to_char(numeric)</>
9500        are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
9501        new <application>initdb</> installs (Tom)
9502       </para>
9503
9504       <para>
9505        This is because <varname>lc_numeric</> can potentially
9506        change the output of these functions.
9507       </para>
9508      </listitem>
9509
9510      <listitem>
9511       <para>
9512        Improve index usage of regular expressions that use parentheses (Tom)
9513       </para>
9514
9515       <para>
9516        This improves <application>psql</> <literal>\d</> performance also.
9517       </para>
9518      </listitem>
9519
9520      <listitem>
9521       <para>
9522        Update timezone database
9523       </para>
9524
9525       <para>
9526        This affects Australian and Canadian daylight-savings rules in
9527        particular.
9528       </para>
9529      </listitem>
9530
9531     </itemizedlist>
9532
9533    </sect2>
9534   </sect1>
9535
9536   <sect1 id="release-8-0-9">
9537    <title>Release 8.0.9</title>
9538
9539    <note>
9540    <title>Release date</title>
9541    <simpara>2006-10-16</simpara>
9542    </note>
9543
9544    <para>
9545     This release contains a variety of fixes from 8.0.8.
9546    </para>
9547
9548    <sect2>
9549     <title>Migration to version 8.0.9</title>
9550
9551     <para>
9552      A dump/restore is not required for those running 8.0.X.  However,
9553      if you are upgrading from a version earlier than 8.0.6, see the release
9554      notes for 8.0.6.
9555     </para>
9556
9557    </sect2>
9558
9559    <sect2>
9560     <title>Changes</title>
9561
9562 <itemizedlist>
9563 <listitem><para>Fix crash when referencing <literal>NEW</> row
9564 values in rule WHERE expressions (Tom)</para></listitem>
9565 <listitem><para>Fix core dump when an untyped literal is taken as
9566 ANYARRAY</para></listitem>
9567 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
9568 function returning multiple rows (Tom)</para></listitem>
9569 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
9570 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
9571 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
9572   matches for the separator string</para>
9573 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
9574 </para></listitem>
9575 <listitem><para>Fix corner cases in pattern matching for
9576   <application>psql</>'s <literal>\d</> commands</para></listitem>
9577 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
9578   (Teodor)</para></listitem>
9579 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
9580 Wieland)</para></listitem>
9581 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
9582 <listitem><para>Fix instability of statistics collection on Win32 (Tom, Andrew)</para></listitem>
9583 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
9584 <productname>Intel</> compilers (Tom)</para></listitem>
9585 </itemizedlist>
9586
9587    </sect2>
9588   </sect1>
9589
9590   <sect1 id="release-8-0-8">
9591    <title>Release 8.0.8</title>
9592
9593    <note>
9594    <title>Release date</title>
9595    <simpara>2006-05-23</simpara>
9596    </note>
9597
9598    <para>
9599     This release contains a variety of fixes from 8.0.7,
9600     including patches for extremely serious security issues.
9601    </para>
9602
9603    <sect2>
9604     <title>Migration to version 8.0.8</title>
9605
9606     <para>
9607      A dump/restore is not required for those running 8.0.X.  However,
9608      if you are upgrading from a version earlier than 8.0.6, see the release
9609      notes for 8.0.6.
9610     </para>
9611
9612     <para>
9613      Full security against the SQL-injection attacks described in
9614      CVE-2006-2313 and CVE-2006-2314 might require changes in application
9615      code.  If you have applications that embed untrustworthy strings
9616      into SQL commands, you should examine them as soon as possible to
9617      ensure that they are using recommended escaping techniques.  In
9618      most cases, applications should be using subroutines provided by
9619      libraries or drivers (such as <application>libpq</>'s
9620      <function>PQescapeStringConn()</>) to perform string escaping,
9621      rather than relying on <foreignphrase>ad hoc</> code to do it.
9622     </para>
9623    </sect2>
9624
9625    <sect2>
9626     <title>Changes</title>
9627
9628 <itemizedlist>
9629 <listitem><para>Change the server to reject invalidly-encoded multibyte
9630 characters in all cases (Tatsuo, Tom)</para>
9631 <para>While <productname>PostgreSQL</> has been moving in this direction for
9632 some time, the checks are now applied uniformly to all encodings and all
9633 textual input, and are now always errors not merely warnings.  This change
9634 defends against SQL-injection attacks of the type described in CVE-2006-2313.
9635 </para></listitem>
9636
9637 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
9638 <para>As a server-side defense against SQL-injection attacks of the type
9639 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
9640 <literal>\'</> as a representation of ASCII single quote in SQL string
9641 literals.  By default, <literal>\'</> is rejected only when
9642 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
9643 GB18030, or UHC), which is the scenario in which SQL injection is possible.
9644 A new configuration parameter <varname>backslash_quote</> is available to
9645 adjust this behavior when needed.  Note that full security against
9646 CVE-2006-2314 might require client-side changes; the purpose of
9647 <varname>backslash_quote</> is in part to make it obvious that insecure
9648 clients are insecure.
9649 </para></listitem>
9650
9651 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
9652 aware of encoding considerations and
9653 <varname>standard_conforming_strings</></para>
9654 <para>This fixes <application>libpq</>-using applications for the security
9655 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
9656 them against the planned changeover to SQL-standard string literal syntax.
9657 Applications that use multiple <productname>PostgreSQL</> connections
9658 concurrently should migrate to <function>PQescapeStringConn()</> and
9659 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
9660 for the settings in use in each database connection.  Applications that
9661 do string escaping <quote>by hand</> should be modified to rely on library
9662 routines instead.
9663 </para></listitem>
9664
9665 <listitem><para>Fix some incorrect encoding conversion functions</para>
9666 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
9667 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
9668 <function>mic_to_euc_tw</> were all broken to varying
9669 extents.
9670 </para></listitem>
9671
9672 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
9673 (Bruce, Jan)</para></listitem>
9674
9675 <listitem><para>Fix bug that sometimes caused OR'd index scans to
9676 miss rows they should have returned</para></listitem>
9677
9678 <listitem><para>Fix WAL replay for case where a btree index has been
9679 truncated</para></listitem>
9680
9681 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
9682 <literal>|</> (Tom)</para></listitem>
9683
9684 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
9685 create tables in the default tablespace, not the base directory (Kris
9686 Jurka)</para></listitem>
9687
9688 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
9689 Fuhr)</para></listitem>
9690
9691 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
9692
9693 <listitem><para>Fix various minor memory leaks</para></listitem>
9694
9695 <listitem><para>Fix problem with password prompting on some Win32 systems
9696 (Robert Kinberg)</para></listitem>
9697 </itemizedlist>
9698
9699    </sect2>
9700   </sect1>
9701
9702   <sect1 id="release-8-0-7">
9703    <title>Release 8.0.7</title>
9704
9705    <note>
9706    <title>Release date</title>
9707    <simpara>2006-02-14</simpara>
9708    </note>
9709
9710    <para>
9711     This release contains a variety of fixes from 8.0.6.
9712    </para>
9713
9714    <sect2>
9715     <title>Migration to version 8.0.7</title>
9716
9717     <para>
9718      A dump/restore is not required for those running 8.0.X.  However,
9719      if you are upgrading from a version earlier than 8.0.6, see the release
9720      notes for 8.0.6.
9721     </para>
9722    </sect2>
9723
9724    <sect2>
9725     <title>Changes</title>
9726
9727 <itemizedlist>
9728
9729 <listitem><para>Fix potential crash in <command>SET
9730 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
9731 <para>An unprivileged user could crash the server process, resulting in
9732 momentary denial of service to other users, if the server has been compiled
9733 with Asserts enabled (which is not the default).
9734 Thanks to Akio Ishida for reporting this problem.
9735 </para></listitem>
9736
9737 <listitem><para>Fix bug with row visibility logic in self-inserted
9738 rows (Tom)</para>
9739 <para>Under rare circumstances a row inserted by the current command
9740 could be seen as already valid, when it should not be.  Repairs bug
9741 created in 8.0.4, 7.4.9, and 7.3.11 releases.
9742 </para></listitem>
9743
9744 <listitem><para>Fix race condition that could lead to <quote>file already
9745 exists</> errors during pg_clog and pg_subtrans file creation
9746 (Tom)</para></listitem>
9747
9748 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
9749 message arrives at just the wrong time (Tom)</para></listitem>
9750
9751 <listitem><para>Properly check <literal>DOMAIN</> constraints for
9752 <literal>UNKNOWN</> parameters in prepared statements
9753 (Neil)</para></listitem>
9754
9755 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
9756 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
9757 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
9758
9759 <listitem><para>Fixes to allow restoring dumps that have cross-schema
9760 references to custom operators or operator classes (Tom)</para></listitem>
9761
9762 <listitem><para>Allow <application>pg_restore</> to continue properly after a
9763 <command>COPY</> failure; formerly it tried to treat the remaining
9764 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
9765
9766 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
9767 when the  data directory is not specified (Magnus)</para></listitem>
9768
9769 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
9770 (Neil)</para></listitem>
9771
9772 <listitem><para>Recover properly if error occurs during argument passing
9773 in <application>PL/python</> (Neil)</para></listitem>
9774
9775 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
9776 Win32 to match the backend (Andrew)</para></listitem>
9777
9778 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
9779 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
9780 (Bruce)</para></listitem>
9781
9782 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
9783 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
9784
9785 <listitem><para>Check that SID is enabled while checking for Win32 admin
9786 privileges (Magnus)</para></listitem>
9787
9788 <listitem><para>Properly reject out-of-range date inputs (Kris
9789 Jurka)</para></listitem>
9790
9791 <listitem><para>Portability fix for testing presence of <function>finite</>
9792 and <function>isinf</> during configure (Tom)</para></listitem>
9793
9794 </itemizedlist>
9795
9796    </sect2>
9797   </sect1>
9798
9799   <sect1 id="release-8-0-6">
9800    <title>Release 8.0.6</title>
9801
9802    <note>
9803    <title>Release date</title>
9804    <simpara>2006-01-09</simpara>
9805    </note>
9806
9807    <para>
9808     This release contains a variety of fixes from 8.0.5.
9809    </para>
9810
9811    <sect2>
9812     <title>Migration to version 8.0.6</title>
9813
9814     <para>
9815      A dump/restore is not required for those running 8.0.X.  However,
9816      if you are upgrading from a version earlier than 8.0.3, see the release
9817      notes for 8.0.3.
9818      Also, you might need to <command>REINDEX</> indexes on textual
9819      columns after updating, if you are affected by the locale or
9820      <application>plperl</> issues described below.
9821     </para>
9822    </sect2>
9823
9824    <sect2>
9825     <title>Changes</title>
9826
9827 <itemizedlist>
9828
9829 <listitem><para>Fix Windows code so that postmaster will continue rather
9830 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
9831 <para>The previous behavior could lead to a denial-of-service situation if too
9832 many connection requests arrive close together.  This applies
9833 <emphasis>only</> to the Windows port.</para></listitem>
9834
9835 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
9836 to return an already-used page as new, potentially causing loss of
9837 recently-committed data (Tom)</para></listitem>
9838
9839 <listitem><para>Fix for protocol-level Describe messages issued
9840 outside a transaction or in a failed transaction (Tom)</para></listitem>
9841
9842 <listitem><para>Fix character string comparison for locales that consider
9843 different character combinations as equal, such as Hungarian (Tom)</para>
9844 <para>This might require <command>REINDEX</> to fix existing indexes on
9845 textual columns.</para></listitem>
9846
9847 <listitem><para>Set locale environment variables during postmaster startup
9848 to ensure that <application>plperl</> won't change the locale later</para>
9849 <para>This fixes a problem that occurred if the <application>postmaster</> was
9850 started with environment variables specifying a different locale than what
9851 <application>initdb</> had been told.  Under these conditions, any use of
9852 <application>plperl</> was likely to lead to corrupt indexes.  You might need
9853 <command>REINDEX</> to fix existing indexes on
9854 textual columns if this has happened to you.</para></listitem>
9855
9856 <listitem><para>Allow more flexible relocation of installation
9857 directories (Tom)</para>
9858 <para>Previous releases supported relocation only if all installation
9859 directory paths were the same except for the last component.</para></listitem>
9860
9861 <listitem><para>Fix longstanding bug in strpos() and regular expression
9862 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
9863 </para></listitem>
9864
9865 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
9866 (Tom) </para></listitem>
9867
9868 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
9869 which caused it not to use all available salt space for MD5 and
9870 XDES algorithms (Marko Kreen, Solar Designer)</para>
9871 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
9872
9873 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
9874 rather than crashing, when the number of columns specified is different from
9875 what's actually returned by the query (Joe)</para></listitem>
9876
9877 </itemizedlist>
9878
9879    </sect2>
9880   </sect1>
9881
9882   <sect1 id="release-8-0-5">
9883    <title>Release 8.0.5</title>
9884
9885    <note>
9886    <title>Release date</title>
9887    <simpara>2005-12-12</simpara>
9888    </note>
9889
9890    <para>
9891     This release contains a variety of fixes from 8.0.4.
9892    </para>
9893
9894    <sect2>
9895     <title>Migration to version 8.0.5</title>
9896
9897     <para>
9898      A dump/restore is not required for those running 8.0.X.  However,
9899      if you are upgrading from a version earlier than 8.0.3, see the release
9900      notes for 8.0.3.
9901     </para>
9902    </sect2>
9903
9904    <sect2>
9905     <title>Changes</title>
9906
9907 <itemizedlist>
9908
9909 <listitem><para>Fix race condition in transaction log management</para>
9910 <para>There was a narrow window in which an I/O operation could be initiated
9911 for the wrong page, leading to an Assert failure or data
9912 corruption.</para>
9913 </listitem>
9914
9915 <listitem><para>Fix bgwriter problems after recovering from errors
9916 (Tom)</para>
9917 <para>
9918 The background writer was found to leak buffer pins after write errors.
9919 While not fatal in itself, this might lead to mysterious blockages of
9920 later VACUUM commands.
9921 </para>
9922 </listitem>
9923
9924 <listitem><para>Prevent failure if client sends Bind protocol message
9925 when current transaction is already aborted</para></listitem>
9926
9927 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
9928
9929 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
9930
9931 <listitem><para>Retry file reads and writes after Windows
9932 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
9933
9934 <listitem><para>Fix intermittent failure when <varname>log_line_prefix</>
9935 includes <literal>%i</></para></listitem>
9936
9937 <listitem><para>Fix <application>psql</> performance issue with long scripts
9938 on Windows (Merlin Moncure)</para></listitem>
9939
9940 <listitem><para>Fix missing updates of <filename>pg_group</> flat
9941 file</para></listitem>
9942
9943 <listitem><para>Fix longstanding planning error for outer joins</para>
9944 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
9945 only supported with merge-joinable join conditions</>.</para></listitem>
9946
9947 <listitem><para>Postpone timezone initialization until after
9948 <filename>postmaster.pid</> is created</para>
9949 <para>This avoids confusing startup scripts that expect the pid file to appear
9950 quickly.</para></listitem>
9951
9952 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
9953 table has been dropped</para></listitem>
9954
9955 <listitem><para>Fix problems with whole-row references (<literal>foo.*</>)
9956 to subquery results</para></listitem>
9957 </itemizedlist>
9958
9959    </sect2>
9960   </sect1>
9961
9962   <sect1 id="release-8-0-4">
9963    <title>Release 8.0.4</title>
9964
9965    <note>
9966    <title>Release date</title>
9967    <simpara>2005-10-04</simpara>
9968    </note>
9969
9970    <para>
9971     This release contains a variety of fixes from 8.0.3.
9972    </para>
9973
9974    <sect2>
9975     <title>Migration to version 8.0.4</title>
9976
9977     <para>
9978      A dump/restore is not required for those running 8.0.X.  However,
9979      if you are upgrading from a version earlier than 8.0.3, see the release
9980      notes for 8.0.3.
9981     </para>
9982    </sect2>
9983
9984    <sect2>
9985     <title>Changes</title>
9986
9987 <itemizedlist>
9988 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
9989 <literal>ctid</> chains too soon, and add more checking in code that follows
9990 <literal>ctid</> links</para>
9991 <para>This fixes a long-standing problem that could cause crashes in very rare
9992 circumstances.</para></listitem>
9993 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
9994 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
9995 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
9996 because it only padded to the specified number of bytes without
9997 considering how many characters were stored.</para></listitem>
9998 <listitem><para>Force a checkpoint before committing <command>CREATE
9999 DATABASE</></para>
10000 <para>This should fix recent reports of <quote>index is not a btree</>
10001 failures when a crash occurs shortly after <command>CREATE
10002 DATABASE</>.</para></listitem>
10003 <listitem><para>Fix the sense of the test for read-only transaction
10004 in <command>COPY</></para>
10005 <para>The code formerly prohibited <command>COPY TO</>, where it should
10006 prohibit <command>COPY FROM</>.
10007 </para></listitem>
10008 <listitem><para>Handle consecutive embedded newlines in <command>COPY</>
10009 CSV-mode input</para></listitem>
10010 <listitem><para>Fix <function>date_trunc(week)</> for dates near year
10011 end</para></listitem>
10012 <listitem><para>Fix planning problem with outer-join ON clauses that reference
10013 only the inner-side relation</para></listitem>
10014 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
10015 cases</para></listitem>
10016 <listitem><para>Fix overenthusiastic optimization of <literal>x IN (SELECT
10017 DISTINCT ...)</> and related cases</para></listitem>
10018 <listitem><para>Fix mis-planning of queries with small <literal>LIMIT</>
10019 values due to poorly thought out <quote>fuzzy</> cost
10020 comparison</para></listitem>
10021 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
10022 paranoid about validating their OID parameter</para></listitem>
10023 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
10024 a...</> with GiST index on column <literal>a</></para></listitem>
10025 <listitem><para>Improve robustness of datetime parsing</para></listitem>
10026 <listitem><para>Improve checking for partially-written WAL
10027 pages</para></listitem>
10028 <listitem><para>Improve robustness of signal handling when SSL is
10029 enabled</para></listitem>
10030 <listitem><para>Improve MIPS and M68K spinlock code</para></listitem>
10031 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
10032 files during postmaster startup</para></listitem>
10033 <listitem><para>Various memory leakage fixes</para></listitem>
10034 <listitem><para>Various portability improvements</para></listitem>
10035 <listitem><para>Update timezone data files</para></listitem>
10036 <listitem><para>Improve handling of DLL load failures on Windows</para></listitem>
10037 <listitem><para>Improve random-number generation on Windows</para></listitem>
10038 <listitem><para>Make <literal>psql -f filename</> return a nonzero exit code
10039 when opening the file fails</para></listitem>
10040 <listitem><para>Change <application>pg_dump</> to handle inherited check
10041 constraints more reliably</para></listitem>
10042 <listitem><para>Fix password prompting in <application>pg_restore</> on
10043 Windows</para></listitem>
10044 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
10045 the variable is of pass-by-reference type</para></listitem>
10046 <listitem><para>Fix PL/Perl <literal>%_SHARED</> so it's actually
10047 shared</para></listitem>
10048 <listitem><para>Fix <filename>contrib/pg_autovacuum</> to allow sleep
10049 intervals over 2000 sec</para></listitem>
10050 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
10051 code</para></listitem>
10052 </itemizedlist>
10053
10054    </sect2>
10055   </sect1>
10056
10057   <sect1 id="release-8-0-3">
10058    <title>Release 8.0.3</title>
10059
10060    <note>
10061    <title>Release date</title>
10062    <simpara>2005-05-09</simpara>
10063    </note>
10064
10065    <para>
10066     This release contains a variety of fixes from 8.0.2, including several
10067     security-related issues.
10068    </para>
10069
10070    <sect2>
10071     <title>Migration to version 8.0.3</title>
10072
10073     <para>
10074      A dump/restore is not required for those running 8.0.X.  However,
10075      it is one possible way of handling two significant security problems
10076      that have been found in the initial contents of 8.0.X system
10077      catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
10078      automatically correct these problems.
10079     </para>
10080
10081     <para>
10082      The larger security problem is that the built-in character set encoding
10083      conversion functions can be invoked from SQL commands by unprivileged
10084      users, but the functions were not designed for such use and are not
10085      secure against malicious choices of arguments.  The fix involves changing
10086      the declared parameter list of these functions so that they can no longer
10087      be invoked from SQL commands.  (This does not affect their normal use
10088      by the encoding conversion machinery.)
10089     </para>
10090
10091     <para>
10092      The lesser problem is that the <filename>contrib/tsearch2</> module
10093      creates several functions that are improperly declared to return
10094      <type>internal</> when they do not accept <type>internal</> arguments.
10095      This breaks type safety for all functions using <type>internal</>
10096      arguments.
10097     </para>
10098
10099     <para>
10100      It is strongly recommended that all installations repair these errors,
10101      either by initdb or by following the manual repair procedure given
10102      below.  The errors at least allow unprivileged database users to crash
10103      their server process, and might allow unprivileged users to gain the
10104      privileges of a database superuser.
10105     </para>
10106
10107     <para>
10108      If you wish not to do an initdb, perform the same manual repair
10109      procedures shown in the <link linkend="release-7-4-8">7.4.8 release
10110      notes</link>.
10111     </para>
10112    </sect2>
10113
10114    <sect2>
10115     <title>Changes</title>
10116
10117 <itemizedlist>
10118 <listitem><para>Change encoding function signature to prevent
10119 misuse</para></listitem>
10120 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
10121 <type>INTERNAL</> function results</para></listitem>
10122 <listitem><para>Guard against incorrect second parameter to
10123 <function>record_out</></para></listitem>
10124 <listitem><para>Repair ancient race condition that allowed a transaction to be
10125 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
10126 than for other purposes</para>
10127 <para>This is an extremely serious bug since it could lead to apparent
10128 data inconsistencies being briefly visible to applications.</para></listitem>
10129 <listitem><para>Repair race condition between relation extension and
10130 VACUUM</para>
10131 <para>This could theoretically have caused loss of a page's worth of
10132 freshly-inserted data, although the scenario seems of very low probability.
10133 There are no known cases of it having caused more than an Assert failure.
10134 </para></listitem>
10135 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
10136 <para>
10137 The comparison code was wrong in the case where the
10138 <literal>--enable-integer-datetimes</> configuration switch had been used.
10139 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
10140 it will need to be <command>REINDEX</>ed after installing this update, because
10141 the fix corrects the sort order of column values.
10142 </para></listitem>
10143 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
10144 <type>TIME WITH TIME ZONE</> values</para></listitem>
10145 <listitem><para>Fix mis-display of negative fractional seconds in
10146 <type>INTERVAL</> values</para>
10147 <para>
10148 This error only occurred when the
10149 <literal>--enable-integer-datetimes</> configuration switch had been used.
10150 </para></listitem>
10151 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
10152 correctly (Neil)</para></listitem>
10153 <listitem><para>Still more 64-bit fixes for
10154 <filename>contrib/intagg</></para></listitem>
10155 <listitem><para>Prevent incorrect optimization of functions returning
10156 <type>RECORD</></para></listitem>
10157 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
10158 <listitem><para>Fix Borland makefile for libpq</para></listitem>
10159 <listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
10160 (Teodor)</para></listitem>
10161 <listitem><para>Make <command>pg_ctl</> check the PID found in
10162 <filename>postmaster.pid</> to see if it is still a live
10163 process</para></listitem>
10164 <listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
10165 by addition of dump timestamps</para></listitem>
10166 <listitem><para>Fix interaction between materializing holdable cursors and
10167 firing deferred triggers during transaction commit</para></listitem>
10168 <listitem><para>Fix memory leak in SQL functions returning pass-by-reference
10169 data types</para></listitem>
10170 </itemizedlist>
10171
10172    </sect2>
10173   </sect1>
10174
10175   <sect1 id="release-8-0-2">
10176    <title>Release 8.0.2</title>
10177
10178    <note>
10179    <title>Release date</title>
10180    <simpara>2005-04-07</simpara>
10181    </note>
10182
10183    <para>
10184     This release contains a variety of fixes from 8.0.1.
10185    </para>
10186
10187    <sect2>
10188     <title>Migration to version 8.0.2</title>
10189
10190     <para>
10191      A dump/restore is not required for those running 8.0.*.
10192      This release updates the major version number of the
10193      <productname>PostgreSQL</productname> libraries, so it might be
10194      necessary to re-link some user applications if they cannot
10195      find the properly-numbered shared library.
10196     </para>
10197    </sect2>
10198
10199    <sect2>
10200     <title>Changes</title>
10201
10202 <itemizedlist>
10203 <listitem><para>Increment the major version number of all interface
10204  libraries (Bruce)</para>
10205 <para>
10206  This should have been done in 8.0.0.  It is required so 7.4.X versions
10207  of PostgreSQL client applications, like <application>psql</>,
10208  can be used on the same machine as 8.0.X applications.  This might require
10209  re-linking user applications that use these libraries.
10210 </para></listitem>
10211 <listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
10212  <option>fsync_writethrough</> (Magnus, Bruce)</para>
10213 <para>
10214  This setting causes <productname>PostgreSQL</productname> to write through
10215  any disk-drive write cache when writing to WAL.
10216  This behavior was formerly called <option>fsync</>, but was
10217  renamed because it acts quite differently from <option>fsync</> on other
10218  platforms.
10219 </para>
10220 </listitem>
10221 <listitem><para>Enable the <varname>wal_sync_method</> setting of
10222  <option>open_datasync</> on Windows, and make it the default for that
10223   platform (Magnus, Bruce)</para>
10224 <para>
10225  Because the default is no longer <option>fsync_writethrough</>,
10226  data loss is possible during a power failure if the disk drive has
10227  write caching enabled. To turn off the write cache on Windows,
10228  from the <application>Device Manager</>, choose the drive properties,
10229  then <literal>Policies</>.
10230 </para>
10231 </listitem>
10232 <listitem><para>New cache management algorithm <acronym>2Q</> replaces
10233  <acronym>ARC</> (Tom)</para>
10234 <para>
10235  This was done to avoid a pending US patent on <acronym>ARC</>.  The
10236  <acronym>2Q</> code might be a few percentage points slower than
10237  <acronym>ARC</> for some work loads.  A better cache management algorithm
10238  will appear in 8.1.
10239 </para></listitem>
10240 <listitem><para>Planner adjustments to improve behavior on freshly-created
10241 tables (Tom)</para></listitem>
10242 <listitem><para>Allow plpgsql to assign to an element of an array that is
10243 initially <literal>NULL</> (Tom)</para>
10244 <para>
10245  Formerly the array would remain <literal>NULL</>, but now it becomes a
10246  single-element array.  The main SQL engine was changed to handle
10247  <command>UPDATE</> of a null array value this way in 8.0, but the similar
10248  case in plpgsql was overlooked.
10249 </para>
10250 </listitem>
10251 <listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
10252 in plpython function bodies (Michael Fuhr)</para>
10253 <para>
10254   This prevents syntax errors when plpython code is written on a Windows or
10255   Mac client.
10256 </para>
10257 </listitem>
10258 <listitem><para>Allow SPI cursors to handle utility commands that return rows,
10259 such as <command>EXPLAIN</> (Tom)</para></listitem>
10260 <listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
10261  SET WITHOUT OIDS</> (Tom)</para></listitem>
10262 <listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
10263  (Neil)</para></listitem>
10264 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
10265 <listitem><para>Document the Windows-only <literal>register</> and
10266 <literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
10267 <listitem><para>Ensure operations done during backend shutdown are counted by
10268 statistics collector</para>
10269 <para>
10270  This is expected to resolve reports of <application>pg_autovacuum</>
10271  not vacuuming the system catalogs often enough &mdash; it was not being
10272  told about catalog deletions caused by temporary table removal during
10273  backend exit.
10274 </para></listitem>
10275 <listitem><para>Change the Windows default for configuration parameter
10276  <varname>log_destination</> to <option>eventlog</> (Magnus)</para>
10277 <para>
10278  By default, a server running on Windows will now send log output to the
10279  Windows event logger rather than standard error.
10280 </para></listitem>
10281 <listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
10282 <listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
10283  who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
10284 <listitem><para>Modify WAL log entries for <command>CREATE</> and
10285 <command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
10286  <para>This allows point-in-time recovery on a different machine with possibly
10287  different database location.  Note that <command>CREATE TABLESPACE</> still
10288  poses a hazard in such situations.
10289 </para></listitem>
10290 <listitem><para>Fix crash from a backend exiting with an open transaction
10291  that created a table and opened a cursor on it (Tom)</para></listitem>
10292 <listitem><para>Fix <function>array_map()</> so it can call PL functions
10293  (Tom)</para></listitem>
10294 <listitem><para>Several <filename>contrib/tsearch2</> and
10295 <filename>contrib/btree_gist</> fixes (Teodor)
10296  </para></listitem>
10297 <listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
10298  functions on some platforms (Marko Kreen)</para></listitem>
10299 <listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
10300  (Tom)</para></listitem>
10301 <listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
10302  (Michael)</para></listitem>
10303 <listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
10304  ecpg (Christof Petig)</para></listitem>
10305 <listitem><para>Do not use locale-aware versions of <function>upper()</>,
10306  <function>lower()</>, and <function>initcap()</> when the locale is
10307  <literal>C</> (Bruce)</para>
10308 <para>
10309   This allows these functions to work on platforms that generate errors
10310   for non-7-bit data when the locale is <literal>C</>.
10311 </para></listitem>
10312 <listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
10313 <listitem><para>Fix <function>to_date()</> to behave reasonably when
10314  <literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
10315 <listitem><para>Prevent <function>to_char(interval)</> from failing
10316  when given a zero-month interval (Tom)</para></listitem>
10317 <listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
10318 (Bruce)</para>
10319 <para>
10320  <function>date_trunc('week')</>
10321  returned the wrong year for the first few days of January in some years.
10322 </para></listitem>
10323 <listitem><para>Use the correct default mask length for class <literal>D</>
10324  addresses in <type>INET</> data types (Tom)</para></listitem>
10325 </itemizedlist>
10326
10327    </sect2>
10328   </sect1>
10329
10330   <sect1 id="release-8-0-1">
10331    <title>Release 8.0.1</title>
10332
10333    <note>
10334    <title>Release date</title>
10335    <simpara>2005-01-31</simpara>
10336    </note>
10337
10338    <para>
10339     This release contains a variety of fixes from 8.0.0, including several
10340     security-related issues.
10341    </para>
10342
10343    <sect2>
10344     <title>Migration to version 8.0.1</title>
10345
10346     <para>
10347      A dump/restore is not required for those running 8.0.0.
10348     </para>
10349    </sect2>
10350
10351    <sect2>
10352     <title>Changes</title>
10353
10354 <itemizedlist>
10355 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
10356 <para>
10357 On platforms that will automatically execute initialization functions of a
10358 shared library (this includes at least Windows and ELF-based Unixen),
10359 <command>LOAD</> can be used to make the server execute arbitrary code.
10360 Thanks to NGS Software for reporting this.</para></listitem>
10361 <listitem><para>Check that creator of an aggregate function has the right to
10362 execute the specified transition functions</para>
10363 <para>
10364 This oversight made it possible to bypass denial of EXECUTE
10365 permission on a function.</para></listitem>
10366 <listitem><para>Fix security and 64-bit issues in
10367 contrib/intagg</para></listitem>
10368 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
10369 Jurka)</para></listitem>
10370 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
10371 many parameters (Neil)</para></listitem>
10372 <listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
10373 constraints in all cases</para></listitem>
10374 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
10375 <para>
10376 The result of the join was mistakenly supposed to be sorted the same as the
10377 left input.  This could not only deliver mis-sorted output to the user, but
10378 in case of nested merge joins could give outright wrong answers.
10379 </para></listitem>
10380 <listitem><para>Improve planning of grouped aggregate queries</para></listitem>
10381 <listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
10382 closes cursors created since the savepoint</para></listitem>
10383 <listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
10384 <listitem><para>Avoid SHGetSpecialFolderPath() on Windows
10385 (Magnus)</para></listitem>
10386 <listitem><para>Fix some problems in running pg_autovacuum as a Windows
10387 service (Dave Page)</para></listitem>
10388 <listitem><para>Multiple minor bug fixes in
10389 pg_dump/pg_restore</para></listitem>
10390 <listitem><para>Fix ecpg segfault with named structs used in
10391 typedefs (Michael)</para></listitem>
10392 </itemizedlist>
10393
10394    </sect2>
10395   </sect1>
10396
10397   <sect1 id="release-8-0">
10398    <title>Release 8.0</title>
10399
10400    <note>
10401     <title>Release date</title>
10402     <simpara>2005-01-19</simpara>
10403    </note>
10404
10405    <sect2>
10406     <title>Overview</title>
10407
10408     <para>
10409      Major changes in this release:
10410     </para>
10411
10412     <variablelist>
10413      <varlistentry>
10414       <term>
10415        Microsoft Windows Native Server
10416       </term>
10417
10418       <listitem>
10419        <para>
10420         This is the first <productname>PostgreSQL</productname> release
10421         to run natively on <trademark class=registered>Microsoft Windows</> as
10422         a server. It can run as a <productname>Windows</> service. This
10423         release supports NT-based Windows releases like
10424         <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
10425         <productname>Windows 2003</>. Older releases like
10426         <productname>Windows 95</>, <productname>Windows 98</>, and
10427         <productname>Windows ME</> are not supported because these operating
10428         systems do not have the infrastructure to support
10429         <productname>PostgreSQL</productname>. A separate installer
10430         project has been created to ease installation on
10431         <productname>Windows</> &mdash; see <ulink
10432         url="http://www.postgresql.org/ftp/win32/"></ulink>.
10433        </para>
10434
10435        <para>
10436         Although tested throughout our release cycle, the Windows port
10437         does not have the benefit of years of use in production
10438         environments that <productname>PostgreSQL</productname> has on
10439         Unix platforms.  Therefore it should be treated with the same
10440         level of caution as you would a new product.
10441        </para>
10442
10443        <para>
10444         Previous releases required the Unix emulation toolkit
10445         <productname>Cygwin</> in order to run the server on Windows
10446         operating systems.  <productname>PostgreSQL</productname> has
10447         supported native clients on Windows for many years.
10448        </para>
10449       </listitem>
10450      </varlistentry>
10451
10452      <varlistentry>
10453       <term>
10454        Savepoints
10455       </term>
10456
10457       <listitem>
10458        <para>
10459         Savepoints allow specific parts of a transaction to be aborted
10460         without affecting the remainder of the transaction. Prior
10461         releases had no such capability; there was no way to recover
10462         from a statement failure within a transaction except by
10463         aborting the whole transaction. This feature is valuable for
10464         application writers who require error recovery within a
10465         complex transaction.
10466        </para>
10467       </listitem>
10468      </varlistentry>
10469
10470      <varlistentry>
10471       <term>
10472        Point-In-Time Recovery
10473       </term>
10474
10475       <listitem>
10476        <para>
10477         In previous releases there was no way to recover from disk
10478         drive failure except to restore from a previous backup or use
10479         a standby replication server.  Point-in-time recovery allows
10480         continuous backup of the server.  You can recover either to
10481         the point of failure or to some transaction in the past.
10482        </para>
10483       </listitem>
10484      </varlistentry>
10485
10486      <varlistentry>
10487       <term>
10488        Tablespaces
10489       </term>
10490
10491       <listitem>
10492        <para>
10493         Tablespaces allow administrators to select different file systems
10494         for storage of individual tables, indexes, and databases.
10495         This improves performance and control over disk space
10496         usage. Prior releases used <application>initlocation</> and
10497         manual symlink management for such tasks.
10498        </para>
10499       </listitem>
10500      </varlistentry>
10501
10502      <varlistentry>
10503       <term>
10504        Improved Buffer Management, <command>CHECKPOINT</command>,
10505        <command>VACUUM</command>
10506       </term>
10507
10508       <listitem>
10509        <para>
10510         This release has a more intelligent buffer replacement strategy,
10511         which will make better use of available shared buffers and
10512         improve performance. The performance impact of vacuum and
10513         checkpoints is also lessened.
10514        </para>
10515       </listitem>
10516      </varlistentry>
10517
10518      <varlistentry>
10519       <term>
10520        Change Column Types
10521       </term>
10522
10523       <listitem>
10524        <para>
10525         A column's data type can now be changed with <command>ALTER
10526         TABLE</command>.
10527        </para>
10528       </listitem>
10529      </varlistentry>
10530
10531      <varlistentry>
10532       <term>
10533        New Perl Server-Side Language
10534       </term>
10535
10536       <listitem>
10537        <para>
10538         A new version of the <application>plperl</> server-side language now
10539         supports a persistent shared storage area, triggers, returning records
10540         and arrays of records, and SPI calls to access the database.
10541        </para>
10542       </listitem>
10543      </varlistentry>
10544
10545      <varlistentry>
10546       <term>
10547         Comma-separated-value (CSV) support in <command>COPY</command>
10548       </term>
10549
10550       <listitem>
10551        <para>
10552         <command>COPY</command> can now read and write
10553         comma-separated-value files. It has the flexibility to
10554         interpret nonstandard quoting and separation characters too.
10555        </para>
10556       </listitem>
10557      </varlistentry>
10558
10559     </variablelist>
10560    </sect2>
10561
10562    <sect2>
10563     <title>Migration to version 8.0</title>
10564
10565     <para>
10566      A dump/restore using <application>pg_dump</application> is
10567      required for those wishing to migrate data from any previous
10568      release.
10569     </para>
10570
10571     <para>
10572      Observe the following incompatibilities:
10573     </para>
10574
10575     <itemizedlist>
10576
10577      <listitem>
10578       <para>
10579        In <option>READ COMMITTED</> serialization mode, volatile functions
10580        now see the results of concurrent transactions committed up to the
10581        beginning of each statement within the function, rather than up to the
10582        beginning of the interactive command that called the function.
10583       </para>
10584      </listitem>
10585
10586      <listitem>
10587       <para>
10588        Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
10589        use the snapshot of the calling query, and therefore do not see the
10590        effects of actions taken after the calling query starts, whether in
10591        their own transaction or other transactions.  Such a function must be
10592        read-only, too, meaning that it cannot use any SQL commands other than
10593        <command>SELECT</>.
10594       </para>
10595      </listitem>
10596
10597      <listitem>
10598       <para>
10599        Nondeferred <option>AFTER</> triggers are now fired immediately
10600        after completion of the triggering query, rather than upon
10601        finishing the current interactive command. This makes a
10602        difference when the triggering query occurred within a function:
10603        the trigger is invoked before the function proceeds to its next
10604        operation.
10605       </para>
10606      </listitem>
10607
10608      <listitem>
10609       <para>
10610        Server configuration parameters <varname>virtual_host</> and
10611        <varname>tcpip_socket</> have been replaced with a more general
10612        parameter <varname>listen_addresses</>. Also, the server now listens on
10613        <literal>localhost</> by default, which eliminates the need for the
10614        <literal>-i</> postmaster switch in many scenarios.
10615       </para>
10616      </listitem>
10617
10618      <listitem>
10619       <para>
10620        Server configuration parameters <varname>SortMem</> and
10621        <varname>VacuumMem</> have been renamed to <varname>work_mem</>
10622        and <varname>maintenance_work_mem</> to better reflect their
10623        use. The original names are still supported in
10624        <command>SET</command> and <command>SHOW</command>.
10625       </para>
10626      </listitem>
10627
10628      <listitem>
10629       <para>
10630        Server configuration parameters <varname>log_pid</>,
10631        <varname>log_timestamp</>, and <varname>log_source_port</> have been
10632        replaced with a more general parameter <varname>log_line_prefix</>.
10633       </para>
10634      </listitem>
10635
10636      <listitem>
10637       <para>
10638        Server configuration parameter <varname>syslog</> has been
10639        replaced with a more logical <varname>log_destination</> variable to
10640        control the log output destination.
10641       </para>
10642      </listitem>
10643
10644      <listitem>
10645       <para>
10646        Server configuration parameter <varname>log_statement</> has been
10647        changed so it can selectively log just database modification or
10648        data definition statements.  Server configuration parameter
10649        <varname>log_duration</> now prints only when <varname>log_statement</>
10650        prints the query.
10651       </para>
10652      </listitem>
10653
10654      <listitem>
10655       <para>
10656        Server configuration parameter <varname>max_expr_depth</> parameter has
10657        been replaced with <varname>max_stack_depth</> which measures the
10658        physical stack size rather than the expression nesting depth. This
10659        helps prevent session termination due to stack overflow caused by
10660        recursive functions.
10661       </para>
10662      </listitem>
10663
10664      <listitem>
10665       <para>
10666        The <function>length()</> function no longer counts trailing spaces in
10667        <type>CHAR(n)</> values.
10668       </para>
10669      </listitem>
10670
10671     <listitem>
10672      <para>
10673       Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
10674       integer, not the leftmost N bits as before.
10675      </para>
10676     </listitem>
10677
10678     <listitem>
10679      <para>
10680       Updating an element or slice of a NULL array value now produces
10681       a nonnull array result, namely an array containing
10682       just the assigned-to positions.
10683      </para>
10684     </listitem>
10685
10686      <listitem>
10687       <para>
10688        Syntax checking of array input values has been tightened up
10689        considerably. Junk that was previously allowed in odd places with
10690        odd results now causes an error. Empty-string element values
10691        must now be written as <literal>""</>, rather than writing nothing.
10692        Also changed behavior with respect to whitespace surrounding
10693        array elements: trailing whitespace is now ignored, for symmetry
10694        with leading whitespace (which has always been ignored).
10695       </para>
10696      </listitem>
10697
10698      <listitem>
10699       <para>
10700        Overflow in integer arithmetic operations is now detected and
10701        reported as an error.
10702       </para>
10703      </listitem>
10704
10705      <listitem>
10706       <para>
10707        The arithmetic operators associated with the single-byte
10708        <type>"char"</> data type have been removed.
10709       </para>
10710      </listitem>
10711
10712      <listitem>
10713       <para>
10714        The <function>extract()</> function (also called
10715        <function>date_part</>) now returns the proper year for BC dates.
10716        It previously returned one less than the correct year. The
10717        function now also returns the proper values for millennium and
10718        century.
10719       </para>
10720      </listitem>
10721
10722     <listitem>
10723      <para>
10724       <type>CIDR</> values now must have their nonmasked bits be zero.
10725       For example, we no longer allow
10726       <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
10727       values should never have been accepted by
10728       <productname>PostgreSQL</productname> and will now be rejected.
10729      </para>
10730     </listitem>
10731
10732      <listitem>
10733       <para>
10734        <command>EXECUTE</command> now returns a completion tag that
10735        matches the executed statement.
10736       </para>
10737      </listitem>
10738
10739      <listitem>
10740       <para>
10741        <application>psql</>'s <command>\copy</> command now reads or
10742        writes to the query's <literal>stdin/stdout</>, rather than
10743        <application>psql</>'s <literal>stdin/stdout</>. The previous
10744        behavior can be accessed via new
10745        <option>pstdin</>/<option>pstdout</> parameters.
10746       </para>
10747      </listitem>
10748
10749      <listitem>
10750       <para>
10751       The JDBC client interface has been removed from the core
10752       distribution, and is now hosted at <ulink url=
10753       "http://jdbc.postgresql.org"></ulink>.
10754       </para>
10755      </listitem>
10756
10757      <listitem>
10758       <para>
10759       The Tcl client interface has also been removed. There are several
10760       Tcl interfaces now hosted at <ulink url=
10761       "http://gborg.postgresql.org"></ulink>.
10762       </para>
10763      </listitem>
10764
10765      <listitem>
10766       <para>
10767        The server now uses its own time zone database, rather than the
10768        one supplied by the operating system. This will provide consistent
10769        behavior across all platforms.  In most cases, there should be
10770        little noticeable difference in time zone behavior, except that
10771        the time zone names used by <command>SET</>/<command>SHOW</>
10772        <varname>TimeZone</> might be different from what your platform provides.
10773       </para>
10774      </listitem>
10775
10776      <listitem>
10777       <para>
10778        <application>Configure</>'s threading option no longer requires
10779        users to run tests or edit configuration files; threading options
10780        are now detected automatically.
10781       </para>
10782      </listitem>
10783
10784      <listitem>
10785       <para>
10786        Now that tablespaces have been implemented,
10787        <application>initlocation</> has been removed.
10788       </para>
10789      </listitem>
10790
10791      <listitem>
10792       <para>
10793        The API for user-defined GiST indexes has been changed. The
10794        Union and PickSplit methods are now passed a pointer to a
10795        special <structname>GistEntryVector</structname> structure,
10796        rather than a <type>bytea</type>.
10797       </para>
10798      </listitem>
10799
10800     </itemizedlist>
10801    </sect2>
10802
10803   <sect2>
10804    <title>Deprecated Features</title>
10805
10806    <para>
10807      Some aspects of <productname>PostgreSQL</productname>'s behavior
10808      have been determined to be suboptimal. For the sake of backward
10809      compatibility these have not been removed in 8.0, but they are
10810      considered deprecated and will be removed in the next major
10811      release.
10812      </para>
10813
10814     <itemizedlist>
10815      <listitem>
10816       <para>
10817        The 8.1 release will remove the <function>to_char()</> function
10818        for intervals.
10819       </para>
10820      </listitem>
10821
10822       <listitem>
10823        <para>
10824         The server now warns of empty strings passed to
10825         <type>oid</type>/<type>float4</type>/<type>float8</type> data
10826         types, but continues to interpret them as zeroes as before.
10827         In the next major release, empty strings will be considered
10828         invalid input for these data types.
10829        </para>
10830       </listitem>
10831
10832      <listitem>
10833       <para>
10834        By default, tables in <productname>PostgreSQL</productname> 8.0
10835        and earlier are created with <type>OID</>s. In the next release,
10836        this will <emphasis>not</emphasis> be the case: to create a table
10837        that contains <type>OID</>s, the <option>WITH OIDS</> clause must
10838        be specified or the <varname>default_with_oids</varname>
10839        configuration parameter must be set. Users are encouraged to
10840        explicitly specify <option>WITH OIDS</> if their tables
10841        require OIDs for compatibility with future releases of
10842        <productname>PostgreSQL</productname>.
10843       </para>
10844      </listitem>
10845
10846     </itemizedlist>
10847    </sect2>
10848
10849    <sect2>
10850     <title>Changes</title>
10851
10852     <para>
10853      Below you will find a detailed account of the changes between
10854      release 8.0 and the previous major release.
10855     </para>
10856
10857     <sect3>
10858      <title>Performance Improvements</title>
10859      <itemizedlist>
10860
10861       <listitem>
10862        <para>
10863         Support cross-data-type index usage (Tom)
10864        </para>
10865        <para>
10866         Before this change, many queries would not use an index if the data
10867         types did not match exactly. This improvement makes index usage more
10868         intuitive and consistent.
10869        </para>
10870       </listitem>
10871
10872       <listitem>
10873        <para>
10874         New buffer replacement strategy that improves caching (Jan)
10875        </para>
10876        <para>
10877         Prior releases used a least-recently-used (LRU) cache to keep
10878         recently referenced pages in memory. The LRU algorithm
10879         did not consider the number of times a specific cache entry was
10880         accessed, so large table scans could force out useful cache pages.
10881         The new cache algorithm uses four separate lists to track most
10882         recently used and most frequently used cache pages and dynamically
10883         optimize their replacement based on the work load. This should
10884         lead to much more efficient use of the shared buffer cache.
10885         Administrators who have tested shared buffer sizes in the past
10886         should retest with this new cache replacement policy.
10887        </para>
10888       </listitem>
10889
10890       <listitem>
10891        <para>
10892         Add subprocess to write dirty buffers periodically to reduce
10893         checkpoint writes (Jan)
10894        </para>
10895        <para>
10896         In previous releases, the checkpoint process, which runs every few
10897         minutes, would write all dirty buffers to the operating system's
10898         buffer cache then flush all dirty operating system buffers to
10899         disk. This resulted in a periodic spike in disk usage that often
10900         hurt performance. The new code uses a background writer to trickle
10901         disk writes at a steady pace so checkpoints have far fewer dirty
10902         pages to write to disk. Also, the new code does not issue a global
10903         <function>sync()</> call, but instead <function>fsync()</>s just
10904         the files written since the last checkpoint. This should improve
10905         performance and minimize degradation during checkpoints.
10906        </para>
10907       </listitem>
10908
10909       <listitem>
10910        <para>
10911         Add ability to prolong vacuum to reduce performance impact (Jan)
10912        </para>
10913        <para>
10914         On busy systems, <command>VACUUM</command> performs many I/O
10915         requests which can hurt performance for other users. This
10916         release allows you to slow down <command>VACUUM</command> to
10917         reduce its impact on other users, though this increases the
10918         total duration of <command>VACUUM</command>.
10919        </para>
10920       </listitem>
10921
10922       <listitem>
10923        <para>
10924         Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
10925        </para>
10926        <para>
10927         This improves the way indexes are scanned when many duplicate
10928         values exist in the index.
10929        </para>
10930       </listitem>
10931
10932       <listitem>
10933        <para>
10934         Use dynamically-generated table size estimates while planning (Tom)
10935        </para>
10936        <para>
10937         Formerly the planner estimated table sizes using the values seen
10938         by the last <command>VACUUM</command> or <command>ANALYZE</command>,
10939         both as to physical table size (number of pages) and number of rows.
10940         Now, the current physical table size is obtained from the kernel,
10941         and the number of rows is estimated by multiplying the table size
10942         by the row density (rows per page) seen by the last
10943         <command>VACUUM</command> or <command>ANALYZE</command>.  This should
10944         produce more reliable estimates in cases where the table size has
10945         changed significantly since the last housekeeping command.
10946        </para>
10947       </listitem>
10948
10949       <listitem>
10950        <para>
10951         Improved index usage with <literal>OR</> clauses (Tom)
10952        </para>
10953        <para>
10954         This allows the optimizer to use indexes in statements with many OR
10955         clauses that would not have been indexed in the past.  It can also use
10956         multi-column indexes where the first column is specified and the second
10957         column is part of an <literal>OR</> clause.
10958        </para>
10959       </listitem>
10960
10961       <listitem>
10962        <para>
10963         Improve matching of partial index clauses (Tom)
10964        </para>
10965        <para>
10966         The server is now smarter about using partial indexes in queries
10967         involving complex <option>WHERE</> clauses.
10968        </para>
10969       </listitem>
10970
10971       <listitem>
10972        <para>
10973         Improve performance of the GEQO optimizer (Tom)
10974        </para>
10975        <para>
10976         The GEQO optimizer is used to plan queries involving many tables (by
10977         default, twelve or more). This release speeds up the way queries are
10978         analyzed to decrease time spent in optimization.
10979        </para>
10980       </listitem>
10981
10982       <listitem>
10983        <para>
10984         Miscellaneous optimizer improvements
10985        </para>
10986        <para>
10987         There is not room here to list all the minor improvements made, but
10988         numerous special cases work better than in prior releases.
10989        </para>
10990       </listitem>
10991
10992       <listitem>
10993        <para>
10994         Improve lookup speed for C functions (Tom)
10995        </para>
10996        <para>
10997         This release uses a hash table to lookup information for dynamically
10998         loaded C functions. This improves their speed so they perform nearly as
10999         quickly as functions that are built into the server executable.
11000        </para>
11001       </listitem>
11002
11003       <listitem>
11004        <para>
11005         Add type-specific <command>ANALYZE</command> statistics
11006         capability (Mark Cave-Ayland)
11007        </para>
11008        <para>
11009         This feature allows more flexibility in generating statistics
11010         for nonstandard data types.
11011        </para>
11012       </listitem>
11013
11014       <listitem>
11015        <para>
11016         <command>ANALYZE</command> now collects statistics for
11017         expression indexes (Tom)
11018        </para>
11019        <para>
11020         Expression indexes (also called functional indexes) allow users to
11021         index not just columns but the results of expressions and function
11022         calls. With this release, the optimizer can gather and use statistics
11023         about the contents of expression indexes.  This will greatly improve
11024         the quality of planning for queries in which an expression index is
11025         relevant.
11026        </para>
11027       </listitem>
11028
11029       <listitem>
11030        <para>
11031         New two-stage sampling method for <command>ANALYZE</command>
11032         (Manfred Koizar)
11033        </para>
11034        <para>
11035         This gives better statistics when the density of valid rows is very
11036         different in different regions of a table.
11037        </para>
11038       </listitem>
11039
11040       <listitem>
11041        <para>
11042         Speed up <command>TRUNCATE</command> (Tom)
11043        </para>
11044        <para>
11045         This buys back some of the performance loss observed in 7.4, while still
11046         keeping <command>TRUNCATE</command> transaction-safe.
11047        </para>
11048       </listitem>
11049
11050      </itemizedlist>
11051     </sect3>
11052
11053
11054     <sect3>
11055      <title>Server Changes</title>
11056      <itemizedlist>
11057
11058       <listitem>
11059        <para>
11060         Add WAL file archiving and point-in-time recovery (Simon Riggs)
11061        </para>
11062       </listitem>
11063
11064       <listitem>
11065        <para>
11066         Add tablespaces so admins can control disk layout (Gavin)
11067        </para>
11068       </listitem>
11069
11070       <listitem>
11071        <para>
11072         Add a built-in log rotation program (Andreas Pflug)
11073        </para>
11074        <para>
11075         It is now possible to log server messages conveniently without
11076         relying on either <application>syslog</> or an external log
11077         rotation program.
11078        </para>
11079       </listitem>
11080
11081       <listitem>
11082        <para>
11083         Add new read-only server configuration parameters to show server
11084         compile-time settings: <varname>block_size</>,
11085         <varname>integer_datetimes</>, <varname>max_function_args</>,
11086         <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
11087        </para>
11088       </listitem>
11089
11090       <listitem>
11091        <para>
11092         Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
11093         <literal>all</> remove special meaning of these terms in
11094         <filename>pg_hba.conf</> (Andrew)
11095        </para>
11096       </listitem>
11097
11098       <listitem>
11099        <para>
11100         Use clearer IPv6 name <literal>::1/128</> for
11101         <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
11102        </para>
11103       </listitem>
11104
11105       <listitem>
11106        <para>
11107         Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
11108        </para>
11109       </listitem>
11110
11111       <listitem>
11112        <para>
11113         Rename server configuration parameters <varname>SortMem</> and
11114         <varname>VacuumMem</> to <varname>work_mem</> and
11115         <varname>maintenance_work_mem</> (Old names still supported) (Tom)
11116        </para>
11117        <para>
11118         This change was made to clarify that bulk operations such as index and
11119         foreign key creation use <varname>maintenance_work_mem</>, while
11120         <varname>work_mem</> is for workspaces used during query execution.
11121        </para>
11122       </listitem>
11123
11124       <listitem>
11125        <para>
11126         Allow logging of session disconnections using server configuration
11127         <varname>log_disconnections</> (Andrew)
11128        </para>
11129       </listitem>
11130
11131       <listitem>
11132        <para>
11133         Add new server configuration parameter <varname>log_line_prefix</> to
11134         allow control of information emitted in each log line (Andrew)
11135        </para>
11136        <para>
11137         Available information includes user name, database name, remote IP
11138         address, and session start time.
11139        </para>
11140       </listitem>
11141
11142       <listitem>
11143        <para>
11144         Remove server configuration parameters <varname>log_pid</>,
11145         <varname>log_timestamp</>, <varname>log_source_port</>; functionality
11146         superseded by <varname>log_line_prefix</> (Andrew)
11147        </para>
11148       </listitem>
11149
11150       <listitem>
11151        <para>
11152         Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
11153         parameters with a unified <varname>listen_addresses</> parameter
11154         (Andrew, Tom)
11155        </para>
11156        <para>
11157         <varname>virtual_host</> could only specify a single IP address to
11158         listen on.  <varname>listen_addresses</> allows multiple addresses
11159         to be specified.
11160        </para>
11161       </listitem>
11162
11163       <listitem>
11164        <para>
11165         Listen on localhost by default, which eliminates the need for the
11166         <option>-i</> postmaster switch in many scenarios (Andrew)
11167        </para>
11168        <para>
11169         Listening on localhost (<literal>127.0.0.1</>) opens no new
11170         security holes but allows configurations like Windows and JDBC,
11171         which do not support local sockets, to work without special
11172         adjustments.
11173        </para>
11174       </listitem>
11175
11176       <listitem>
11177        <para>
11178         Remove <varname>syslog</> server configuration parameter, and add more
11179         logical <varname>log_destination</> variable to control log output
11180         location (Magnus)
11181        </para>
11182       </listitem>
11183
11184       <listitem>
11185        <para>
11186         Change server configuration parameter <varname>log_statement</> to take
11187         values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
11188         <varname>none</> to select which queries are logged (Bruce)
11189        </para>
11190        <para>
11191         This allows administrators to log only data definition changes or
11192         only data modification statements.
11193        </para>
11194       </listitem>
11195
11196       <listitem>
11197        <para>
11198         Some logging-related configuration parameters could formerly be adjusted
11199         by ordinary users, but only in the <quote>more verbose</> direction.
11200         They are now treated more strictly: only superusers can set them.
11201         However, a superuser can use <command>ALTER USER</> to provide per-user
11202         settings of these values for non-superusers.  Also, it is now possible
11203         for superusers to set values of superuser-only configuration parameters
11204         via <literal>PGOPTIONS</>.
11205        </para>
11206       </listitem>
11207
11208       <listitem>
11209        <para>
11210         Allow configuration files to be placed outside the data directory (mlw)
11211        </para>
11212        <para>
11213         By default, configuration files are kept in the cluster's top directory.
11214         With this addition, configuration files can be placed outside the
11215         data directory, easing administration.
11216        </para>
11217       </listitem>
11218
11219       <listitem>
11220        <para>
11221         Plan prepared queries only when first executed so constants can be
11222         used for statistics (Oliver Jowett)
11223        </para>
11224        <para>
11225         Prepared statements plan queries once and execute them many
11226         times. While prepared queries avoid the overhead of re-planning
11227         on each use, the quality of the plan suffers from not knowing the exact
11228         parameters to be used in the query.  In this release, planning of
11229         unnamed prepared statements is delayed until the first execution,
11230         and the actual parameter values of that execution are used as
11231         optimization hints.  This allows use of out-of-line parameter passing
11232         without incurring a performance penalty.
11233        </para>
11234       </listitem>
11235
11236       <listitem>
11237        <para>
11238         Allow <command>DECLARE CURSOR</command> to take parameters
11239         (Oliver Jowett)
11240        </para>
11241        <para>
11242         It is now useful to issue <command>DECLARE CURSOR</command> in a
11243         <function>Parse</> message with parameters. The parameter values
11244         sent at <function>Bind</> time will be substituted into the
11245         execution of the cursor's query.
11246        </para>
11247       </listitem>
11248
11249       <listitem>
11250        <para>
11251         Fix hash joins and aggregates of <type>inet</type> and
11252         <type>cidr</type> data types (Tom)
11253        </para>
11254        <para>
11255         Release 7.4 handled hashing of mixed <type>inet</type> and
11256         <type>cidr</type> values incorrectly.  (This bug did not exist
11257         in prior releases because they wouldn't try to hash either
11258         data type.)
11259        </para>
11260       </listitem>
11261
11262       <listitem>
11263        <para>
11264         Make <varname>log_duration</> print only when <varname>log_statement</>
11265         prints the query (Ed L.)
11266        </para>
11267       </listitem>
11268
11269      </itemizedlist>
11270     </sect3>
11271
11272
11273     <sect3>
11274      <title>Query Changes</title>
11275      <itemizedlist>
11276
11277       <listitem>
11278        <para>
11279         Add savepoints (nested transactions) (Alvaro)
11280        </para>
11281       </listitem>
11282
11283       <listitem>
11284        <para>
11285         Unsupported isolation levels are now accepted and promoted to the
11286         nearest supported level (Peter)
11287        </para>
11288        <para>
11289         The SQL specification states that if a database doesn't support a
11290         specific isolation level, it should use the next more restrictive level.
11291         This change complies with that recommendation.
11292        </para>
11293       </listitem>
11294
11295       <listitem>
11296        <para>
11297         Allow <command>BEGIN WORK</command> to specify transaction
11298         isolation levels like <command>START TRANSACTION</command> does
11299         (Bruce)
11300        </para>
11301       </listitem>
11302
11303       <listitem>
11304        <para>
11305         Fix table permission checking for cases in which rules generate
11306         a query type different from the originally submitted query (Tom)
11307        </para>
11308       </listitem>
11309
11310       <listitem>
11311        <para>
11312         Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
11313         David Fetter)
11314        </para>
11315        <para>
11316         In previous releases, because single quotes had to be used to
11317         quote a function's body, the use of single quotes inside the
11318         function text required use of two single quotes or other error-prone
11319         notations. With this release we add the ability to use "dollar
11320         quoting" to quote a block of text.  The ability to use different
11321         quoting delimiters at different nesting levels greatly simplifies
11322         the task of quoting correctly, especially in complex functions.
11323         Dollar quoting can be used anywhere quoted text is needed.
11324        </para>
11325       </listitem>
11326
11327       <listitem>
11328        <para>
11329         Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
11330        </para>
11331        <para>
11332         <option>CASE</> no longer evaluates the tested expression multiple
11333         times. This has benefits when the expression is complex or is
11334         volatile.
11335        </para>
11336       </listitem>
11337
11338       <listitem>
11339        <para>
11340         Test <option>HAVING</> before computing target list of an
11341         aggregate query (Tom)
11342        </para>
11343        <para>
11344         Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
11345         ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
11346         could fail with divide-by-zero.
11347        </para>
11348       </listitem>
11349
11350       <listitem>
11351        <para>
11352         Replace <varname>max_expr_depth</> parameter with
11353         <varname>max_stack_depth</> parameter, measured in kilobytes of stack
11354         size (Tom)
11355        </para>
11356        <para>
11357        This gives us a fairly bulletproof defense against crashing due to
11358        runaway recursive functions. Instead of measuring the depth of expression
11359        nesting, we now directly measure the size of the execution stack.
11360        </para>
11361       </listitem>
11362
11363       <listitem>
11364        <para>
11365         Allow arbitrary row expressions (Tom)
11366        </para>
11367        <para>
11368         This release allows SQL expressions to contain arbitrary composite
11369         types, that is, row values. It also allows functions to more easily
11370         take rows as arguments and return row values.
11371        </para>
11372       </listitem>
11373
11374       <listitem>
11375        <para>
11376         Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
11377         in row and subselect comparisons (Fabien Coelho)
11378        </para>
11379       </listitem>
11380
11381       <listitem>
11382        <para>
11383         Avoid locale-specific case conversion of basic ASCII letters in
11384         identifiers and keywords (Tom)
11385        </para>
11386        <para>
11387         This solves the <quote>Turkish problem</> with mangling of words
11388         containing <literal>I</> and  <literal>i</>.  Folding of characters
11389         outside the 7-bit-ASCII set is still locale-aware.
11390        </para>
11391       </listitem>
11392
11393       <listitem>
11394        <para>
11395         Improve syntax error reporting (Fabien, Tom)
11396        </para>
11397        <para>
11398         Syntax error reports are more useful than before.
11399        </para>
11400       </listitem>
11401
11402       <listitem>
11403        <para>
11404         Change <command>EXECUTE</command> to return a completion tag
11405         matching the executed statement (Kris Jurka)
11406        </para>
11407        <para>
11408         Previous releases return an <command>EXECUTE</command> tag for
11409         any <command>EXECUTE</command> call. In this release, the tag
11410         returned will reflect the command executed.
11411        </para>
11412       </listitem>
11413
11414       <listitem>
11415        <para>
11416         Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
11417        </para>
11418        <para>
11419         Such a clause makes no logical sense, but in some cases the rule
11420         decompiler formerly produced this syntax.
11421        </para>
11422       </listitem>
11423
11424      </itemizedlist>
11425     </sect3>
11426
11427
11428     <sect3>
11429      <title>Object Manipulation Changes</title>
11430      <itemizedlist>
11431
11432       <listitem>
11433        <para>
11434         Add <command>COMMENT ON</> for casts, conversions, languages,
11435         operator classes, and large objects (Christopher)
11436        </para>
11437       </listitem>
11438
11439       <listitem>
11440        <para>
11441         Add new server configuration parameter <varname>default_with_oids</> to
11442         control whether tables are created with <type>OID</>s by default (Neil)
11443        </para>
11444        <para>
11445         This allows administrators to control whether <command>CREATE
11446         TABLE</command> commands create tables with or without <type>OID</>
11447         columns by default.  (Note: the current factory default setting for
11448         <varname>default_with_oids</> is <literal>TRUE</>, but the default
11449         will become <literal>FALSE</> in future releases.)
11450        </para>
11451       </listitem>
11452
11453       <listitem>
11454        <para>
11455         Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
11456         <command>CREATE TABLE AS</command> (Neil)
11457        </para>
11458       </listitem>
11459
11460       <listitem>
11461        <para>
11462         Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
11463         column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
11464         (Tom)
11465        </para>
11466       </listitem>
11467
11468       <listitem>
11469        <para>
11470         Allow composite types as table columns (Tom)
11471        </para>
11472       </listitem>
11473
11474       <listitem>
11475        <para>
11476         Allow <command>ALTER ... ADD COLUMN</> with defaults and
11477         <option>NOT NULL</> constraints; works per SQL spec (Rod)
11478        </para>
11479        <para>
11480         It is now possible for <option>ADD COLUMN</> to create a column
11481         that is not initially filled with NULLs, but with a specified
11482         default value.
11483        </para>
11484       </listitem>
11485
11486       <listitem>
11487        <para>
11488         Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
11489        </para>
11490        <para>
11491         It is now possible to alter a column's data type without dropping
11492         and re-adding the column.
11493        </para>
11494       </listitem>
11495
11496       <listitem>
11497        <para>
11498         Allow multiple <command>ALTER</> actions in a single <command>ALTER
11499         TABLE</command> command (Rod)
11500        </para>
11501        <para>
11502         This is particularly useful for <command>ALTER</> commands that
11503         rewrite the table (which include <option>ALTER COLUMN TYPE</> and
11504         <option>ADD COLUMN</> with a default). By grouping
11505         <command>ALTER</> commands together, the table need be rewritten
11506         only once.
11507        </para>
11508       </listitem>
11509
11510       <listitem>
11511        <para>
11512         Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
11513         columns (Tom)
11514        </para>
11515        <para>
11516         This falls out from the new capability of specifying defaults for new
11517         columns.
11518        </para>
11519       </listitem>
11520
11521       <listitem>
11522        <para>
11523         Allow changing the owners of aggregates, conversions, databases,
11524         functions, operators, operator classes, schemas, types, and tablespaces
11525         (Christopher, Euler Taveira de Oliveira)
11526        </para>
11527        <para>
11528         Previously this required modifying the system tables directly.
11529        </para>
11530       </listitem>
11531
11532       <listitem>
11533        <para>
11534         Allow temporary object creation to be limited to <option>SECURITY
11535         DEFINER</> functions (Sean Chittenden)
11536        </para>
11537       </listitem>
11538
11539       <listitem>
11540        <para>
11541         Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
11542        </para>
11543        <para>
11544         Prior to this release, there was no way to clear an auto-cluster
11545         specification except to modify the system tables.
11546        </para>
11547       </listitem>
11548
11549       <listitem>
11550        <para>
11551         Constraint/Index/<type>SERIAL</> names are now
11552         <replaceable>table_column_type</>
11553         with numbers appended to guarantee uniqueness within the schema
11554         (Tom)
11555        </para>
11556        <para>
11557         The SQL specification states that such names should be unique
11558         within a schema.
11559        </para>
11560       </listitem>
11561
11562       <listitem>
11563        <para>
11564         Add <function>pg_get_serial_sequence()</> to return a
11565         <type>SERIAL</> column's sequence name (Christopher)
11566        </para>
11567        <para>
11568         This allows automated scripts to reliably find the <type>SERIAL</>
11569         sequence name.
11570        </para>
11571       </listitem>
11572
11573       <listitem>
11574        <para>
11575         Warn when primary/foreign key data type mismatch requires costly lookup
11576        </para>
11577       </listitem>
11578
11579       <listitem>
11580        <para>
11581         New <command>ALTER INDEX</> command to allow moving of indexes
11582         between tablespaces (Gavin)
11583        </para>
11584       </listitem>
11585
11586       <listitem>
11587        <para>
11588         Make <command>ALTER TABLE OWNER</> change dependent sequence
11589         ownership too (Alvaro)
11590        </para>
11591       </listitem>
11592
11593
11594      </itemizedlist>
11595     </sect3>
11596
11597
11598     <sect3>
11599      <title>Utility Command Changes</title>
11600      <itemizedlist>
11601
11602       <listitem>
11603        <para>
11604         Allow <command>CREATE SCHEMA</command> to create triggers,
11605         indexes, and sequences (Neil)
11606        </para>
11607       </listitem>
11608
11609       <listitem>
11610        <para>
11611         Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
11612         Coelho)
11613        </para>
11614        <para>
11615         This allows <option>ALSO</> to be added to rule creation to contrast it with
11616         <option>INSTEAD</> rules.
11617        </para>
11618       </listitem>
11619
11620       <listitem>
11621        <para>
11622         Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
11623        </para>
11624        <para>
11625         This allows the <command>LOCK</command> command to fail if it
11626         would have to wait for the requested lock.
11627        </para>
11628       </listitem>
11629
11630       <listitem>
11631        <para>
11632         Allow <command>COPY</command> to read and write
11633         comma-separated-value (CSV) files (Andrew, Bruce)
11634        </para>
11635       </listitem>
11636
11637       <listitem>
11638        <para>
11639         Generate error if the <command>COPY</command> delimiter and NULL
11640         string conflict (Bruce)
11641        </para>
11642       </listitem>
11643
11644       <listitem>
11645        <para>
11646         <command>GRANT</command>/<command>REVOKE</command> behavior
11647         follows the SQL spec more closely
11648        </para>
11649       </listitem>
11650
11651       <listitem>
11652        <para>
11653         Avoid locking conflict between <command>CREATE INDEX</command>
11654         and <command>CHECKPOINT</command> (Tom)
11655        </para>
11656        <para>
11657         In 7.3 and 7.4, a long-running B-tree index build could block concurrent
11658         <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
11659         WAL log could not be recycled.
11660        </para>
11661       </listitem>
11662
11663       <listitem>
11664        <para>
11665         Database-wide <command>ANALYZE</command> does not hold locks
11666         across tables (Tom)
11667        </para>
11668        <para>
11669         This reduces the potential for deadlocks against other backends
11670         that want exclusive locks on tables.  To get the benefit of this
11671         change, do not execute database-wide <command>ANALYZE</command>
11672         inside a transaction block (<command>BEGIN</command> block); it
11673         must be able to commit and start a new transaction for each
11674         table.
11675        </para>
11676       </listitem>
11677
11678       <listitem>
11679        <para>
11680         <command>REINDEX</command> does not exclusively lock the index's
11681         parent table anymore
11682        </para>
11683        <para>
11684         The index itself is still exclusively locked, but readers of the
11685         table can continue if they are not using the particular index
11686         being rebuilt.
11687        </para>
11688       </listitem>
11689
11690       <listitem>
11691        <para>
11692         Erase MD5 user passwords when a user is renamed (Bruce)
11693        </para>
11694        <para>
11695         <productname>PostgreSQL</productname> uses the user name as salt
11696         when encrypting passwords via MD5. When a user's name is changed,
11697         the salt will no longer match the stored MD5 password, so the
11698         stored password becomes useless.  In this release a notice is
11699         generated and the password is cleared.  A new password must then
11700         be assigned if the user is to be able to log in with a password.
11701        </para>
11702       </listitem>
11703
11704       <listitem>
11705        <para>
11706         New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
11707        </para>
11708        <para>
11709         Windows does not have a <literal>kill</> command to send signals to
11710         backends so this capability was added to <application>pg_ctl</>.
11711        </para>
11712       </listitem>
11713
11714       <listitem>
11715        <para>
11716         Information schema improvements
11717        </para>
11718       </listitem>
11719
11720       <listitem>
11721        <para>
11722         Add <option>--pwfile</> option to
11723         <application>initdb</application> so the initial password can be
11724         set by GUI tools (Magnus)
11725        </para>
11726       </listitem>
11727
11728       <listitem>
11729        <para>
11730         Detect locale/encoding mismatch in
11731         <application>initdb</application> (Peter)
11732        </para>
11733       </listitem>
11734
11735       <listitem>
11736        <para>
11737         Add <option>register</> command to <application>pg_ctl</> to
11738         register Windows operating system service (Dave Page)
11739        </para>
11740       </listitem>
11741
11742      </itemizedlist>
11743     </sect3>
11744
11745
11746     <sect3>
11747      <title>Data Type and Function Changes</title>
11748      <itemizedlist>
11749
11750       <listitem>
11751        <para>
11752         More complete support for composite types (row types)  (Tom)
11753        </para>
11754        <para>
11755         Composite values can be used in many places where only scalar values
11756         worked before.
11757        </para>
11758       </listitem>
11759
11760       <listitem>
11761        <para>
11762         Reject nonrectangular array values as erroneous (Joe)
11763        </para>
11764        <para>
11765         Formerly, <function>array_in</> would silently build a
11766         surprising result.
11767        </para>
11768       </listitem>
11769
11770        <listitem>
11771         <para>
11772          Overflow in integer arithmetic operations is now detected (Tom)
11773         </para>
11774        </listitem>
11775
11776        <listitem>
11777         <para>
11778          The arithmetic operators associated with the single-byte
11779          <type>"char"</> data type have been removed.
11780         </para>
11781         <para>
11782          Formerly, the parser would select these operators in many situations
11783          where an <quote>unable to select an operator</> error would be more
11784          appropriate, such as <literal>null * null</>.  If you actually want
11785          to do arithmetic on a <type>"char"</> column, you can cast it to
11786          integer explicitly.
11787         </para>
11788        </listitem>
11789
11790       <listitem>
11791         <para>
11792          Syntax checking of array input values considerably tightened up (Joe)
11793         </para>
11794        <para>
11795          Junk that was previously allowed in odd places with odd results
11796          now causes an <literal>ERROR</>, for example, non-whitespace
11797          after the closing right brace.
11798         </para>
11799       </listitem>
11800
11801       <listitem>
11802         <para>
11803          Empty-string array element values must now be written as
11804          <literal>""</>, rather than writing nothing (Joe)
11805         </para>
11806        <para>
11807          Formerly, both ways of writing an empty-string element value were
11808          allowed, but now a quoted empty string is required.  The case where
11809          nothing at all appears will probably be considered to be a NULL
11810          element value in some future release.
11811         </para>
11812       </listitem>
11813
11814       <listitem>
11815         <para>
11816          Array element trailing whitespace is now ignored (Joe)
11817         </para>
11818        <para>
11819          Formerly leading whitespace was ignored, but trailing whitespace
11820          between an element value and the delimiter or right brace was
11821          significant.  Now trailing whitespace is also ignored.
11822         </para>
11823       </listitem>
11824
11825       <listitem>
11826        <para>
11827         Emit array values with explicit array bounds when lower bound is not one
11828         (Joe)
11829        </para>
11830       </listitem>
11831
11832       <listitem>
11833        <para>
11834         Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
11835        </para>
11836       </listitem>
11837
11838       <listitem>
11839        <para>
11840         Make <function>netmask</> and <function>hostmask</> functions
11841         return maximum-length mask length (Tom)
11842        </para>
11843       </listitem>
11844
11845       <listitem>
11846        <para>
11847         Change factorial function to return <type>numeric</type> (Gavin)
11848        </para>
11849        <para>
11850         Returning <type>numeric</type> allows the factorial function to
11851         work for a wider range of input values.
11852        </para>
11853       </listitem>
11854
11855       <listitem>
11856        <para>
11857         <function>to_char</>/<function>to_date()</> date conversion
11858         improvements (Kurt Roeckx, Fabien Coelho)
11859        </para>
11860       </listitem>
11861
11862       <listitem>
11863        <para>
11864         Make <function>length()</> disregard trailing spaces in
11865         <type>CHAR(n)</> (Gavin)
11866        </para>
11867        <para>
11868         This change was made to improve consistency: trailing spaces are
11869         semantically insignificant in <type>CHAR(n)</> data, so they
11870         should not be counted by <function>length()</>.
11871        </para>
11872       </listitem>
11873
11874       <listitem>
11875        <para>
11876         Warn about empty string being passed to
11877         <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
11878        </para>
11879        <para>
11880         8.1 will throw an error instead.
11881        </para>
11882       </listitem>
11883
11884       <listitem>
11885        <para>
11886         Allow leading or trailing whitespace in
11887         <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
11888         input routines
11889         (Neil)
11890        </para>
11891       </listitem>
11892
11893       <listitem>
11894        <para>
11895         Better support for IEEE <literal>Infinity</> and <literal>NaN</>
11896         values in <type>float4</type>/<type>float8</type> (Neil)
11897        </para>
11898        <para>
11899         These should now work on all platforms that support IEEE-compliant
11900         floating point arithmetic.
11901        </para>
11902       </listitem>
11903
11904       <listitem>
11905        <para>
11906         Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
11907        </para>
11908       </listitem>
11909
11910       <listitem>
11911        <para>
11912         Fix <function>to_char</function> for <literal>1 BC</>
11913         (previously it returned <literal>1 AD</>) (Bruce)
11914        </para>
11915       </listitem>
11916
11917       <listitem>
11918        <para>
11919         Fix <function>date_part(year)</> for BC dates (previously it
11920         returned one less than the correct year) (Bruce)
11921        </para>
11922       </listitem>
11923
11924       <listitem>
11925        <para>
11926         Fix <function>date_part()</> to return the proper millennium and
11927         century (Fabien Coelho)
11928        </para>
11929        <para>
11930         In previous versions, the century and millennium results had a wrong
11931         number and started in the wrong year, as compared to standard
11932         reckoning of such things.
11933        </para>
11934       </listitem>
11935
11936       <listitem>
11937        <para>
11938         Add <function>ceiling()</> as an alias for <function>ceil()</>,
11939         and <function>power()</> as an alias for <function>pow()</> for
11940         standards compliance (Neil)
11941        </para>
11942       </listitem>
11943
11944       <listitem>
11945        <para>
11946         Change <function>ln()</>, <function>log()</>,
11947         <function>power()</>, and <function>sqrt()</> to emit the correct
11948         <literal>SQLSTATE</> error codes for certain error conditions, as
11949         specified by SQL:2003 (Neil)
11950        </para>
11951       </listitem>
11952
11953       <listitem>
11954        <para>
11955         Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
11956        </para>
11957       </listitem>
11958
11959       <listitem>
11960        <para>
11961         Add <function>generate_series()</> functions to simplify working
11962         with numeric sets (Joe)
11963        </para>
11964       </listitem>
11965
11966       <listitem>
11967        <para>
11968         Fix <function>upper/lower/initcap()</> functions to work with
11969         multibyte encodings (Tom)
11970        </para>
11971       </listitem>
11972
11973       <listitem>
11974        <para>
11975         Add boolean and bitwise integer <option>AND</>/<option>OR</>
11976         aggregates (Fabien Coelho)
11977        </para>
11978       </listitem>
11979
11980       <listitem>
11981        <para>
11982         New session information functions to return network addresses for client
11983         and server (Sean Chittenden)
11984        </para>
11985       </listitem>
11986
11987       <listitem>
11988        <para>
11989         Add function to determine the area of a closed path (Sean Chittenden)
11990        </para>
11991       </listitem>
11992
11993       <listitem>
11994        <para>
11995         Add function to send cancel request to other backends (Magnus)
11996        </para>
11997       </listitem>
11998
11999       <listitem>
12000        <para>
12001         Add <type>interval</> plus <type>datetime</> operators (Tom)
12002        </para>
12003        <para>
12004         The reverse ordering, <type>datetime</> plus <type>interval</>,
12005         was already supported, but both are required by the SQL standard.
12006        </para>
12007       </listitem>
12008
12009       <listitem>
12010        <para>
12011         Casting an integer to <type>BIT(N)</> selects the rightmost N bits
12012         of the integer
12013         (Tom)
12014        </para>
12015        <para>
12016         In prior releases, the leftmost N bits were selected, but this was
12017         deemed unhelpful, not to mention inconsistent with casting from bit
12018         to int.
12019        </para>
12020       </listitem>
12021
12022       <listitem>
12023        <para>
12024         Require <type>CIDR</> values to have all nonmasked bits be zero
12025         (Kevin Brintnall)
12026        </para>
12027       </listitem>
12028
12029      </itemizedlist>
12030     </sect3>
12031
12032
12033     <sect3>
12034      <title>Server-Side Language Changes</title>
12035      <itemizedlist>
12036
12037       <listitem>
12038        <para>
12039         In <literal>READ COMMITTED</> serialization mode, volatile functions
12040         now see the results of concurrent transactions committed up to the
12041         beginning of each statement within the function, rather than up to the
12042         beginning of the interactive command that called the function.
12043        </para>
12044       </listitem>
12045
12046       <listitem>
12047        <para>
12048         Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
12049         use the snapshot of the calling query, and therefore do not see the
12050         effects of actions taken after the calling query starts, whether in
12051         their own transaction or other transactions.  Such a function must be
12052         read-only, too, meaning that it cannot use any SQL commands other than
12053         <command>SELECT</>.  There is a considerable performance gain from
12054         declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
12055         rather than <literal>VOLATILE</>.
12056        </para>
12057       </listitem>
12058
12059       <listitem>
12060        <para>
12061         Nondeferred <option>AFTER</> triggers are now fired immediately
12062         after completion of the triggering query, rather than upon
12063         finishing the current interactive command. This makes a difference
12064         when the triggering query occurred within a function: the trigger
12065         is invoked before the function proceeds to its next operation. For
12066         example, if a function inserts a new row into a table, any
12067         nondeferred foreign key checks occur before proceeding with the
12068         function.
12069        </para>
12070       </listitem>
12071
12072       <listitem>
12073        <para>
12074         Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
12075        </para>
12076        <para>
12077         This allows better documentation of functions.  Whether the names
12078         actually do anything depends on the specific function language
12079         being used.
12080        </para>
12081       </listitem>
12082
12083       <listitem>
12084        <para>
12085         Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
12086        </para>
12087        <para>
12088         This basically creates an automatic alias for each named parameter.
12089        </para>
12090       </listitem>
12091
12092       <listitem>
12093        <para>
12094         Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
12095        </para>
12096        <para>
12097         This allows us to catch simple syntax errors sooner.
12098        </para>
12099       </listitem>
12100
12101       <listitem>
12102        <para>
12103         More support for composite types (row and record variables) in PL/pgSQL
12104        </para>
12105        <para>
12106         For example, it now works to pass a rowtype variable to another function
12107         as a single variable.
12108        </para>
12109       </listitem>
12110
12111       <listitem>
12112        <para>
12113         Default values for PL/pgSQL variables can now reference previously
12114         declared variables
12115        </para>
12116       </listitem>
12117
12118       <listitem>
12119        <para>
12120         Improve parsing of PL/pgSQL FOR loops (Tom)
12121        </para>
12122        <para>
12123         Parsing is now driven by presence of <literal>".."</> rather than
12124         data type of <option>FOR</> variable. This makes no difference for
12125         correct functions, but should result in more understandable error
12126         messages when a mistake is made.
12127        </para>
12128       </listitem>
12129
12130       <listitem>
12131        <para>
12132         Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
12133        </para>
12134       </listitem>
12135
12136       <listitem>
12137        <para>
12138         In PL/Tcl, SPI commands are now run in subtransactions.  If an error
12139         occurs, the subtransaction is cleaned up and the error is reported
12140         as an ordinary Tcl error, which can be trapped with <literal>catch</>.
12141         Formerly, it was not possible to catch such errors.
12142        </para>
12143       </listitem>
12144
12145       <listitem>
12146        <para>
12147         Accept <command>ELSEIF</> in PL/pgSQL (Neil)
12148        </para>
12149        <para>
12150         Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
12151         are accustomed to spelling this keyword <command>ELSEIF</>.
12152        </para>
12153       </listitem>
12154
12155      </itemizedlist>
12156     </sect3>
12157
12158
12159     <sect3>
12160      <title><application>psql</> Changes</title>
12161      <itemizedlist>
12162
12163       <listitem>
12164        <para>
12165         Improve <application>psql</> information display about database
12166         objects (Christopher)
12167        </para>
12168       </listitem>
12169
12170       <listitem>
12171        <para>
12172         Allow <application>psql</> to display group membership in
12173         <command>\du</> and <command>\dg</> (Markus Bertheau)
12174        </para>
12175       </listitem>
12176
12177       <listitem>
12178        <para>
12179         Prevent <application>psql</> <command>\dn</command> from showing
12180         temporary schemas (Bruce)
12181        </para>
12182       </listitem>
12183
12184       <listitem>
12185        <para>
12186         Allow <application>psql</> to handle tilde user expansion for file
12187         names (Zach Irmen)
12188        </para>
12189       </listitem>
12190
12191       <listitem>
12192        <para>
12193         Allow <application>psql</> to display fancy prompts, including
12194         color, via <application>readline</> (Reece Hart, Chet Ramey)
12195        </para>
12196       </listitem>
12197
12198       <listitem>
12199        <para>
12200         Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
12201         fully (Tom)
12202        </para>
12203       </listitem>
12204
12205       <listitem>
12206        <para>
12207         Show the location of syntax errors (Fabien Coelho, Tom)
12208        </para>
12209       </listitem>
12210
12211       <listitem>
12212        <para>
12213         Add <command>CLUSTER</command> information to <application>psql</>
12214         <command>\d</> display
12215         (Bruce)
12216        </para>
12217       </listitem>
12218
12219       <listitem>
12220        <para>
12221         Change <application>psql</> <command>\copy stdin/stdout</> to read
12222         from command input/output (Bruce)
12223        </para>
12224       </listitem>
12225
12226       <listitem>
12227        <para>
12228         Add <option>pstdin</>/<option>pstdout</> to read from
12229         <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
12230         Feit)
12231        </para>
12232       </listitem>
12233
12234       <listitem>
12235        <para>
12236         Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
12237         (Bruce)
12238        </para>
12239        <para>
12240         This allows a central file where global <application>psql</> startup commands can
12241         be stored.
12242        </para>
12243       </listitem>
12244
12245       <listitem>
12246        <para>
12247         Have <application>psql</> <command>\d+</> indicate if the table
12248         has an <type>OID</> column (Neil)
12249        </para>
12250       </listitem>
12251
12252       <listitem>
12253        <para>
12254         On Windows, use binary mode in <application>psql</> when reading files so control-Z
12255         is not seen as end-of-file
12256        </para>
12257       </listitem>
12258
12259       <listitem>
12260        <para>
12261         Have <command>\dn+</> show permissions and description for schemas (Dennis
12262         Bj&ouml;rklund)
12263        </para>
12264       </listitem>
12265
12266       <listitem>
12267        <para>
12268         Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
12269        </para>
12270       </listitem>
12271
12272       <listitem>
12273        <para>
12274         Allow boolean settings to be set using upper or lower case (Michael Paesold)
12275        </para>
12276       </listitem>
12277
12278      </itemizedlist>
12279     </sect3>
12280
12281
12282     <sect3>
12283      <title><application>pg_dump</> Changes</title>
12284      <itemizedlist>
12285
12286       <listitem>
12287        <para>
12288         Use dependency information to improve the reliability of
12289         <application>pg_dump</> (Tom)
12290        </para>
12291        <para>
12292         This should solve the longstanding problems with related objects
12293         sometimes being dumped in the wrong order.
12294        </para>
12295       </listitem>
12296
12297       <listitem>
12298        <para>
12299         Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
12300        </para>
12301        <para>
12302         This should make it easier to identify changes between
12303         dump files.
12304        </para>
12305       </listitem>
12306
12307       <listitem>
12308        <para>
12309         Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
12310        </para>
12311        <para>
12312         This makes <application>pg_restore</>'s behavior similar to the
12313         results of feeding a <application>pg_dump</> output script to
12314         <application>psql</>. In most cases, ignoring errors and plowing
12315         ahead is the most useful thing to do. Also added was a pg_restore
12316         option to give the old behavior of exiting on an error.
12317        </para>
12318       </listitem>
12319
12320       <listitem>
12321        <para>
12322         <application>pg_restore</> <option>-l</> display now includes
12323         objects' schema names
12324        </para>
12325       </listitem>
12326
12327       <listitem>
12328        <para>
12329         New begin/end markers in <application>pg_dump</> text output (Bruce)
12330        </para>
12331       </listitem>
12332
12333       <listitem>
12334        <para>
12335         Add start/stop times for
12336         <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
12337         (Bruce)
12338        </para>
12339       </listitem>
12340
12341       <listitem>
12342        <para>
12343         Allow most <application>pg_dump</> options in
12344         <application>pg_dumpall</> (Christopher)
12345        </para>
12346       </listitem>
12347
12348       <listitem>
12349        <para>
12350         Have <application>pg_dump</> use <command>ALTER OWNER</> rather
12351         than <command>SET SESSION AUTHORIZATION</> by default
12352         (Christopher)
12353        </para>
12354       </listitem>
12355
12356      </itemizedlist>
12357     </sect3>
12358
12359
12360     <sect3>
12361      <title>libpq Changes</title>
12362      <itemizedlist>
12363
12364       <listitem>
12365        <para>
12366         Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
12367        </para>
12368       </listitem>
12369
12370       <listitem>
12371        <para>
12372         Add <function>PQmbdsplen()</> which returns the display length
12373         of a character (Tatsuo)
12374        </para>
12375       </listitem>
12376
12377       <listitem>
12378        <para>
12379         Add thread locking to <application>SSL</> and
12380         <application>Kerberos</> connections (Manfred Spraul)
12381        </para>
12382       </listitem>
12383
12384       <listitem>
12385        <para>
12386         Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
12387         <function>PQoidStatus()</> to work on <command>EXECUTE</command>
12388         commands (Neil)
12389        </para>
12390       </listitem>
12391
12392       <listitem>
12393        <para>
12394         Add <function>PQserverVersion()</> to provide more convenient
12395         access to the server version number (Greg Sabino Mullane)
12396        </para>
12397       </listitem>
12398
12399       <listitem>
12400        <para>
12401         Add <function>PQprepare/PQsendPrepared()</> functions to support
12402         preparing statements without necessarily specifying the data types
12403         of their parameters (Abhijit Menon-Sen)
12404        </para>
12405       </listitem>
12406
12407       <listitem>
12408        <para>
12409         Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
12410        </para>
12411       </listitem>
12412
12413      </itemizedlist>
12414     </sect3>
12415
12416
12417     <sect3>
12418      <title>Source Code Changes</title>
12419      <itemizedlist>
12420
12421       <listitem>
12422        <para>
12423         Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
12424        </para>
12425       </listitem>
12426
12427       <listitem>
12428        <para>
12429         Shell script commands converted to C versions for Windows support (Andrew)
12430        </para>
12431       </listitem>
12432
12433       <listitem>
12434        <para>
12435         Create an extension makefile framework (Fabien Coelho, Peter)
12436        </para>
12437        <para>
12438         This simplifies the task of building extensions outside the original
12439         source tree.
12440        </para>
12441       </listitem>
12442
12443       <listitem>
12444        <para>
12445         Support relocatable installations (Bruce)
12446        </para>
12447        <para>
12448         Directory paths for installed files (such as the
12449         <filename>/share</> directory) are now computed relative to the
12450         actual location of the executables, so that an installation tree
12451         can be moved to another place without reconfiguring and
12452         rebuilding.
12453        </para>
12454       </listitem>
12455
12456       <listitem>
12457        <para>
12458         Use <option>--with-docdir</> to choose installation location of documentation; also
12459         allow <option>--infodir</> (Peter)
12460        </para>
12461       </listitem>
12462
12463       <listitem>
12464        <para>
12465         Add <option>--without-docdir</> to prevent installation of documentation (Peter)
12466        </para>
12467       </listitem>
12468
12469       <listitem>
12470        <para>
12471         Upgrade to <application>DocBook</> V4.2 SGML (Peter)
12472        </para>
12473       </listitem>
12474
12475       <listitem>
12476        <para>
12477         New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
12478        </para>
12479        <para>
12480         This was done to make it easier for organizations to manage their
12481         own copies of the <productname>PostgreSQL</productname>
12482         <application>CVS</> repository. File version stamps from the master
12483         repository will not get munged by checking into or out of a copied
12484         repository.
12485        </para>
12486       </listitem>
12487
12488       <listitem>
12489        <para>
12490         Clarify locking code (Manfred Koizar)
12491        </para>
12492       </listitem>
12493
12494       <listitem>
12495        <para>
12496         Buffer manager cleanup (Neil)
12497        </para>
12498       </listitem>
12499
12500       <listitem>
12501        <para>
12502         Decouple platform tests from CPU spinlock code (Bruce, Tom)
12503        </para>
12504       </listitem>
12505
12506       <listitem>
12507        <para>
12508         Add inlined test-and-set code on PA-RISC for <application>gcc</>
12509         (ViSolve, Tom)
12510        </para>
12511       </listitem>
12512
12513       <listitem>
12514        <para>
12515         Improve i386 spinlock code (Manfred Spraul)
12516        </para>
12517       </listitem>
12518
12519       <listitem>
12520        <para>
12521         Clean up spinlock assembly code to avoid warnings from newer
12522         <application>gcc</> releases (Tom)
12523        </para>
12524       </listitem>
12525
12526       <listitem>
12527        <para>
12528         Remove JDBC from source tree; now a separate project
12529        </para>
12530       </listitem>
12531
12532       <listitem>
12533        <para>
12534         Remove the libpgtcl client interface; now a separate project
12535        </para>
12536       </listitem>
12537
12538       <listitem>
12539        <para>
12540         More accurately estimate memory and file descriptor usage (Tom)
12541        </para>
12542       </listitem>
12543
12544       <listitem>
12545        <para>
12546         Improvements to the Mac OS X startup scripts (Ray A.)
12547        </para>
12548       </listitem>
12549
12550       <listitem>
12551        <para>
12552         New <function>fsync()</> test program (Bruce)
12553        </para>
12554       </listitem>
12555
12556       <listitem>
12557        <para>
12558         Major documentation improvements (Neil, Peter)
12559        </para>
12560       </listitem>
12561
12562       <listitem>
12563        <para>
12564         Remove <application>pg_encoding</application>; not needed
12565         anymore
12566        </para>
12567       </listitem>
12568
12569       <listitem>
12570        <para>
12571         Remove <application>pg_id</application>; not needed anymore
12572        </para>
12573       </listitem>
12574
12575       <listitem>
12576        <para>
12577         Remove <application>initlocation</application>; not needed
12578         anymore
12579        </para>
12580       </listitem>
12581
12582       <listitem>
12583        <para>
12584         Auto-detect thread flags (no more manual testing) (Bruce)
12585        </para>
12586       </listitem>
12587
12588       <listitem>
12589        <para>
12590         Use Olson's public domain <application>timezone</> library (Magnus)
12591        </para>
12592       </listitem>
12593
12594       <listitem>
12595        <para>
12596         With threading enabled, use thread flags on Unixware for
12597         backend executables too (Bruce)
12598        </para>
12599        <para>
12600         Unixware cannot mix threaded and nonthreaded object files in the
12601         same executable, so everything must be compiled as threaded.
12602        </para>
12603       </listitem>
12604
12605       <listitem>
12606        <para>
12607         <application>psql</> now uses a <application>flex</>-generated
12608         lexical analyzer to process command strings
12609        </para>
12610       </listitem>
12611
12612       <listitem>
12613        <para>
12614         Reimplement the linked list data structure used throughout the
12615         backend (Neil)
12616        </para>
12617        <para>
12618         This improves performance by allowing list append and length
12619         operations to be more efficient.
12620        </para>
12621       </listitem>
12622
12623       <listitem>
12624        <para>
12625         Allow dynamically loaded modules to create their own server configuration
12626         parameters (Thomas Hallgren)
12627        </para>
12628       </listitem>
12629
12630       <listitem>
12631        <para>
12632         New Brazilian version of FAQ (Euler Taveira de Oliveira)
12633        </para>
12634       </listitem>
12635
12636       <listitem>
12637        <para>
12638         Add French FAQ (Guillaume Lelarge)
12639        </para>
12640       </listitem>
12641
12642       <listitem>
12643        <para>
12644         New <application>pgevent</> for Windows logging
12645        </para>
12646       </listitem>
12647
12648       <listitem>
12649        <para>
12650         Make libpq and ECPG build as proper shared libraries on OS X (Tom)
12651        </para>
12652       </listitem>
12653
12654      </itemizedlist>
12655     </sect3>
12656
12657
12658     <sect3>
12659      <title>Contrib Changes</title>
12660      <itemizedlist>
12661
12662       <listitem>
12663        <para>
12664         Overhaul of <filename>contrib/dblink</> (Joe)
12665        </para>
12666       </listitem>
12667
12668       <listitem>
12669        <para>
12670         <filename>contrib/dbmirror</> improvements (Steven Singer)
12671        </para>
12672       </listitem>
12673
12674       <listitem>
12675        <para>
12676         New <filename>contrib/xml2</> (John Gray, Torchbox)
12677        </para>
12678       </listitem>
12679
12680       <listitem>
12681        <para>
12682         Updated <filename>contrib/mysql</filename>
12683        </para>
12684       </listitem>
12685
12686       <listitem>
12687        <para>
12688         New version of <filename>contrib/btree_gist</> (Teodor)
12689        </para>
12690       </listitem>
12691
12692       <listitem>
12693        <para>
12694         New <filename>contrib/trgm</>, trigram matching for
12695         <productname>PostgreSQL</productname> (Teodor)
12696        </para>
12697       </listitem>
12698
12699       <listitem>
12700        <para>
12701         Many <filename>contrib/tsearch2</> improvements (Teodor)
12702        </para>
12703       </listitem>
12704
12705       <listitem>
12706        <para>
12707         Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
12708        </para>
12709       </listitem>
12710
12711       <listitem>
12712        <para>
12713         Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
12714        </para>
12715       </listitem>
12716
12717       <listitem>
12718        <para>
12719         Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
12720        </para>
12721       </listitem>
12722
12723       <listitem>
12724        <para>
12725         Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
12726         subprocess
12727        </para>
12728       </listitem>
12729
12730       <listitem>
12731        <para>
12732         Removed <filename>contrib/rserv</>: obsoleted by various separate projects
12733        </para>
12734       </listitem>
12735
12736      </itemizedlist>
12737     </sect3>
12738
12739    </sect2>
12740   </sect1>
12741
12742   <sect1 id="release-7-4-18">
12743    <title>Release 7.4.18</title>
12744
12745    <note>
12746    <title>Release date</title>
12747    <simpara>2007-09-17</simpara>
12748    </note>
12749
12750    <para>
12751     This release contains fixes from 7.4.17.
12752    </para>
12753
12754    <sect2>
12755     <title>Migration to version 7.4.18</title>
12756
12757     <para>
12758      A dump/restore is not required for those running 7.4.X.  However,
12759      if you are upgrading from a version earlier than 7.4.11, see the release
12760      notes for 7.4.11.
12761     </para>
12762
12763    </sect2>
12764
12765    <sect2>
12766     <title>Changes</title>
12767
12768     <itemizedlist>
12769
12770      <listitem>
12771       <para>
12772        Prevent index corruption when a transaction inserts rows and
12773        then aborts close to the end of a concurrent <command>VACUUM</>
12774        on the same table (Tom)
12775       </para>
12776      </listitem>
12777
12778      <listitem>
12779       <para>
12780        Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
12781       </para>
12782      </listitem>
12783
12784      <listitem>
12785       <para>
12786        Fix excessive logging of <acronym>SSL</> error messages (Tom)
12787       </para>
12788      </listitem>
12789
12790      <listitem>
12791       <para>
12792        Fix crash when <varname>log_min_error_statement</> logging runs out
12793        of memory (Tom)
12794       </para>
12795      </listitem>
12796
12797      <listitem>
12798       <para>
12799        Prevent <command>CLUSTER</> from failing
12800        due to attempting to process temporary tables of other sessions (Alvaro)
12801       </para>
12802      </listitem>
12803
12804      <listitem>
12805       <para>
12806        Require non-superusers who use <filename>/contrib/dblink</> to use only
12807        password authentication, as a security measure (Joe)
12808       </para>
12809      </listitem>
12810
12811     </itemizedlist>
12812
12813    </sect2>
12814   </sect1>
12815  
12816   <sect1 id="release-7-4-17">
12817    <title>Release 7.4.17</title>
12818
12819    <note>
12820    <title>Release date</title>
12821    <simpara>2007-04-23</simpara>
12822    </note>
12823
12824    <para>
12825     This release contains fixes from 7.4.16,
12826     including a security fix.
12827    </para>
12828
12829    <sect2>
12830     <title>Migration to version 7.4.17</title>
12831
12832     <para>
12833      A dump/restore is not required for those running 7.4.X.  However,
12834      if you are upgrading from a version earlier than 7.4.11, see the release
12835      notes for 7.4.11.
12836     </para>
12837
12838    </sect2>
12839
12840    <sect2>
12841     <title>Changes</title>
12842
12843     <itemizedlist>
12844
12845      <listitem>
12846      <para>
12847       Support explicit placement of the temporary-table schema within
12848       <varname>search_path</>, and disable searching it for functions
12849       and operators (Tom)
12850      </para>
12851      <para>
12852       This is needed to allow a security-definer function to set a
12853       truly secure value of <varname>search_path</>.  Without it,
12854       an unprivileged SQL user can use temporary objects to execute code
12855       with the privileges of the security-definer function (CVE-2007-2138).
12856       See <command>CREATE FUNCTION</> for more information.
12857      </para>
12858      </listitem>
12859
12860      <listitem>
12861      <para>
12862       <filename>/contrib/tsearch2</> crash fixes (Teodor)
12863      </para>
12864      </listitem>
12865
12866      <listitem>
12867      <para>
12868       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
12869       <command>UPDATE</> chains (Tom, Pavan Deolasee)
12870      </para>
12871      </listitem>
12872
12873      <listitem>
12874      <para>
12875       Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
12876       (Tom)
12877      </para>
12878      </listitem>
12879
12880     </itemizedlist>
12881
12882    </sect2>
12883   </sect1>
12884  
12885   <sect1 id="release-7-4-16">
12886    <title>Release 7.4.16</title>
12887
12888    <note>
12889    <title>Release date</title>
12890    <simpara>2007-02-05</simpara>
12891    </note>
12892
12893    <para>
12894     This release contains a variety of fixes from 7.4.15, including
12895     a security fix.
12896    </para>
12897
12898    <sect2>
12899     <title>Migration to version 7.4.16</title>
12900
12901     <para>
12902      A dump/restore is not required for those running 7.4.X.  However,
12903      if you are upgrading from a version earlier than 7.4.11, see the release
12904      notes for 7.4.11.
12905     </para>
12906
12907    </sect2>
12908
12909    <sect2>
12910     <title>Changes</title>
12911
12912     <itemizedlist>
12913
12914      <listitem>
12915      <para>
12916       Remove security vulnerability that allowed connected users
12917       to read backend memory (Tom)
12918      </para>
12919      <para>
12920       The vulnerability involves suppressing the normal check that a SQL
12921       function returns the data type it's declared to, or changing the
12922       data type of a table column used in a SQL function (CVE-2007-0555).
12923       This error can easily be exploited to cause a backend crash, and in
12924       principle might be used to read database content that the user
12925       should not be able to access.
12926      </para>
12927      </listitem>
12928
12929      <listitem>
12930      <para>
12931       Fix rare bug wherein btree index page splits could fail
12932       due to choosing an infeasible split point (Heikki Linnakangas)
12933      </para>
12934      </listitem>
12935
12936      <listitem>
12937      <para>
12938       Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
12939      </para>
12940      </listitem>
12941
12942      <listitem>
12943      <para>
12944       Tighten security of multi-byte character processing for UTF8 sequences
12945       over three bytes long (Tom)
12946      </para>
12947      </listitem>
12948
12949     </itemizedlist>
12950
12951    </sect2>
12952   </sect1>
12953
12954   <sect1 id="release-7-4-15">
12955    <title>Release 7.4.15</title>
12956
12957    <note>
12958    <title>Release date</title>
12959    <simpara>2007-01-08</simpara>
12960    </note>
12961
12962    <para>
12963     This release contains a variety of fixes from 7.4.14.
12964    </para>
12965
12966    <sect2>
12967     <title>Migration to version 7.4.15</title>
12968
12969     <para>
12970      A dump/restore is not required for those running 7.4.X.  However,
12971      if you are upgrading from a version earlier than 7.4.11, see the release
12972      notes for 7.4.11.
12973     </para>
12974
12975    </sect2>
12976
12977    <sect2>
12978     <title>Changes</title>
12979
12980     <itemizedlist>
12981
12982      <listitem>
12983       <para>
12984        Improve handling of <function>getaddrinfo()</> on AIX (Tom)
12985       </para>
12986
12987       <para>
12988        This fixes a problem with starting the statistics collector,
12989        among other things.
12990       </para>
12991      </listitem>
12992
12993       <listitem>
12994        <para>
12995         Fix <quote>failed to re-find parent key</> errors in
12996         <command>VACUUM</> (Tom)
12997        </para>
12998       </listitem>
12999
13000       <listitem>
13001        <para>
13002         Fix bugs affecting multi-gigabyte hash indexes (Tom)
13003        </para>
13004       </listitem>
13005
13006      <listitem>
13007       <para>
13008        Fix error when constructing an <literal>ARRAY[]</> made up of multiple
13009        empty elements (Tom)
13010       </para>
13011      </listitem>
13012
13013      <listitem>
13014       <para>
13015        <function>to_number()</> and <function>to_char(numeric)</>
13016        are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
13017        new <application>initdb</> installs (Tom)
13018       </para>
13019
13020       <para>
13021        This is because <varname>lc_numeric</> can potentially
13022        change the output of these functions.
13023       </para>
13024      </listitem>
13025
13026      <listitem>
13027       <para>
13028        Improve index usage of regular expressions that use parentheses (Tom)
13029       </para>
13030
13031       <para>
13032        This improves <application>psql</> <literal>\d</> performance also.
13033       </para>
13034      </listitem>
13035
13036     </itemizedlist>
13037
13038    </sect2>
13039   </sect1>
13040
13041   <sect1 id="release-7-4-14">
13042    <title>Release 7.4.14</title>
13043
13044    <note>
13045    <title>Release date</title>
13046    <simpara>2006-10-16</simpara>
13047    </note>
13048
13049    <para>
13050     This release contains a variety of fixes from 7.4.13.
13051    </para>
13052
13053    <sect2>
13054     <title>Migration to version 7.4.14</title>
13055
13056     <para>
13057      A dump/restore is not required for those running 7.4.X.  However,
13058      if you are upgrading from a version earlier than 7.4.11, see the release
13059      notes for 7.4.11.
13060     </para>
13061
13062    </sect2>
13063
13064    <sect2>
13065     <title>Changes</title>
13066
13067 <itemizedlist>
13068 <listitem><para>Fix core dump when an untyped literal is taken as
13069 ANYARRAY</para></listitem>
13070 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
13071   matches for the separator string</para>
13072 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
13073 </para></listitem>
13074 <listitem><para>Fix corner cases in pattern matching for
13075   <application>psql</>'s <literal>\d</> commands</para></listitem>
13076 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
13077   (Teodor)</para></listitem>
13078 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
13079 <listitem><para>Adjust regression tests for recent changes in US DST laws
13080 </para> </listitem>
13081 </itemizedlist>
13082
13083    </sect2>
13084   </sect1>
13085
13086   <sect1 id="release-7-4-13">
13087    <title>Release 7.4.13</title>
13088
13089    <note>
13090    <title>Release date</title>
13091    <simpara>2006-05-23</simpara>
13092    </note>
13093
13094    <para>
13095     This release contains a variety of fixes from 7.4.12,
13096     including patches for extremely serious security issues.
13097    </para>
13098
13099    <sect2>
13100     <title>Migration to version 7.4.13</title>
13101
13102     <para>
13103      A dump/restore is not required for those running 7.4.X.  However,
13104      if you are upgrading from a version earlier than 7.4.11, see the release
13105      notes for 7.4.11.
13106     </para>
13107
13108     <para>
13109      Full security against the SQL-injection attacks described in
13110      CVE-2006-2313 and CVE-2006-2314 might require changes in application
13111      code.  If you have applications that embed untrustworthy strings
13112      into SQL commands, you should examine them as soon as possible to
13113      ensure that they are using recommended escaping techniques.  In
13114      most cases, applications should be using subroutines provided by
13115      libraries or drivers (such as <application>libpq</>'s
13116      <function>PQescapeStringConn()</>) to perform string escaping,
13117      rather than relying on <foreignphrase>ad hoc</> code to do it.
13118     </para>
13119    </sect2>
13120
13121    <sect2>
13122     <title>Changes</title>
13123
13124 <itemizedlist>
13125 <listitem><para>Change the server to reject invalidly-encoded multibyte
13126 characters in all cases (Tatsuo, Tom)</para>
13127 <para>While <productname>PostgreSQL</> has been moving in this direction for
13128 some time, the checks are now applied uniformly to all encodings and all
13129 textual input, and are now always errors not merely warnings.  This change
13130 defends against SQL-injection attacks of the type described in CVE-2006-2313.
13131 </para></listitem>
13132
13133 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
13134 <para>As a server-side defense against SQL-injection attacks of the type
13135 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
13136 <literal>\'</> as a representation of ASCII single quote in SQL string
13137 literals.  By default, <literal>\'</> is rejected only when
13138 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
13139 GB18030, or UHC), which is the scenario in which SQL injection is possible.
13140 A new configuration parameter <varname>backslash_quote</> is available to
13141 adjust this behavior when needed.  Note that full security against
13142 CVE-2006-2314 might require client-side changes; the purpose of
13143 <varname>backslash_quote</> is in part to make it obvious that insecure
13144 clients are insecure.
13145 </para></listitem>
13146
13147 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
13148 aware of encoding considerations and
13149 <varname>standard_conforming_strings</></para>
13150 <para>This fixes <application>libpq</>-using applications for the security
13151 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
13152 them against the planned changeover to SQL-standard string literal syntax.
13153 Applications that use multiple <productname>PostgreSQL</> connections
13154 concurrently should migrate to <function>PQescapeStringConn()</> and
13155 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
13156 for the settings in use in each database connection.  Applications that
13157 do string escaping <quote>by hand</> should be modified to rely on library
13158 routines instead.
13159 </para></listitem>
13160
13161 <listitem><para>Fix some incorrect encoding conversion functions</para>
13162 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
13163 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
13164 <function>mic_to_euc_tw</> were all broken to varying
13165 extents.
13166 </para></listitem>
13167
13168 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
13169 (Bruce, Jan)</para></listitem>
13170
13171 <listitem><para>Fix bug that sometimes caused OR'd index scans to
13172 miss rows they should have returned</para></listitem>
13173
13174 <listitem><para>Fix WAL replay for case where a btree index has been
13175 truncated</para></listitem>
13176
13177 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
13178 <literal>|</> (Tom)</para></listitem>
13179
13180 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
13181 Fuhr)</para></listitem>
13182
13183 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
13184
13185 <listitem><para>Fix various minor memory leaks</para></listitem>
13186 </itemizedlist>
13187
13188    </sect2>
13189   </sect1>
13190
13191   <sect1 id="release-7-4-12">
13192    <title>Release 7.4.12</title>
13193
13194    <note>
13195    <title>Release date</title>
13196    <simpara>2006-02-14</simpara>
13197    </note>
13198
13199    <para>
13200     This release contains a variety of fixes from 7.4.11.
13201    </para>
13202
13203    <sect2>
13204     <title>Migration to version 7.4.12</title>
13205
13206     <para>
13207      A dump/restore is not required for those running 7.4.X.  However,
13208      if you are upgrading from a version earlier than 7.4.11, see the release
13209      notes for 7.4.11.
13210     </para>
13211    </sect2>
13212
13213    <sect2>
13214     <title>Changes</title>
13215
13216 <itemizedlist>
13217
13218 <listitem><para>Fix potential crash in <command>SET
13219 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
13220 <para>An unprivileged user could crash the server process, resulting in
13221 momentary denial of service to other users, if the server has been compiled
13222 with Asserts enabled (which is not the default).
13223 Thanks to Akio Ishida for reporting this problem.
13224 </para></listitem>
13225
13226 <listitem><para>Fix bug with row visibility logic in self-inserted
13227 rows (Tom)</para>
13228 <para>Under rare circumstances a row inserted by the current command
13229 could be seen as already valid, when it should not be.  Repairs bug
13230 created in 7.4.9 and 7.3.11 releases.
13231 </para></listitem>
13232
13233 <listitem><para>Fix race condition that could lead to <quote>file already
13234 exists</> errors during pg_clog file creation
13235 (Tom)</para></listitem>
13236
13237 <listitem><para>Properly check <literal>DOMAIN</> constraints for
13238 <literal>UNKNOWN</> parameters in prepared statements
13239 (Neil)</para></listitem>
13240
13241 <listitem><para>Fix to allow restoring dumps that have cross-schema
13242 references to custom operators (Tom)</para></listitem>
13243
13244 <listitem><para>Portability fix for testing presence of <function>finite</>
13245 and <function>isinf</> during configure (Tom)</para></listitem>
13246
13247 </itemizedlist>
13248
13249    </sect2>
13250   </sect1>
13251
13252   <sect1 id="release-7-4-11">
13253    <title>Release 7.4.11</title>
13254
13255    <note>
13256    <title>Release date</title>
13257    <simpara>2006-01-09</simpara>
13258    </note>
13259
13260    <para>
13261     This release contains a variety of fixes from 7.4.10.
13262    </para>
13263
13264    <sect2>
13265     <title>Migration to version 7.4.11</title>
13266
13267     <para>
13268      A dump/restore is not required for those running 7.4.X.  However,
13269      if you are upgrading from a version earlier than 7.4.8, see the release
13270      notes for 7.4.8.
13271      Also, you might need to <command>REINDEX</> indexes on textual
13272      columns after updating, if you are affected by the locale or
13273      <application>plperl</> issues described below.
13274     </para>
13275    </sect2>
13276
13277    <sect2>
13278     <title>Changes</title>
13279
13280 <itemizedlist>
13281
13282 <listitem><para>Fix for protocol-level Describe messages issued
13283 outside a transaction or in a failed transaction (Tom)</para></listitem>
13284
13285 <listitem><para>Fix character string comparison for locales that consider
13286 different character combinations as equal, such as Hungarian (Tom)</para>
13287 <para>This might require <command>REINDEX</> to fix existing indexes on
13288 textual columns.</para></listitem>
13289
13290 <listitem><para>Set locale environment variables during postmaster startup
13291 to ensure that <application>plperl</> won't change the locale later</para>
13292 <para>This fixes a problem that occurred if the <application>postmaster</> was
13293 started with environment variables specifying a different locale than what
13294 <application>initdb</> had been told.  Under these conditions, any use of
13295 <application>plperl</> was likely to lead to corrupt indexes.  You might need
13296 <command>REINDEX</> to fix existing indexes on
13297 textual columns if this has happened to you.</para></listitem>
13298
13299 <listitem><para>Fix longstanding bug in strpos() and regular expression
13300 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
13301 </para></listitem>
13302
13303 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
13304 which caused it not to use all available salt space for MD5 and
13305 XDES algorithms (Marko Kreen, Solar Designer)</para>
13306 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
13307
13308 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
13309 rather than crashing, when the number of columns specified is different from
13310 what's actually returned by the query (Joe)</para></listitem>
13311
13312 </itemizedlist>
13313
13314    </sect2>
13315   </sect1>
13316
13317   <sect1 id="release-7-4-10">
13318    <title>Release 7.4.10</title>
13319
13320    <note>
13321    <title>Release date</title>
13322    <simpara>2005-12-12</simpara>
13323    </note>
13324
13325    <para>
13326     This release contains a variety of fixes from 7.4.9.
13327    </para>
13328
13329    <sect2>
13330     <title>Migration to version 7.4.10</title>
13331
13332     <para>
13333      A dump/restore is not required for those running 7.4.X.  However,
13334      if you are upgrading from a version earlier than 7.4.8, see the release
13335      notes for 7.4.8.
13336     </para>
13337    </sect2>
13338
13339    <sect2>
13340     <title>Changes</title>
13341
13342 <itemizedlist>
13343
13344 <listitem><para>Fix race condition in transaction log management</para>
13345 <para>There was a narrow window in which an I/O operation could be initiated
13346 for the wrong page, leading to an Assert failure or data
13347 corruption.</para>
13348 </listitem>
13349
13350 <listitem><para>Prevent failure if client sends Bind protocol message
13351 when current transaction is already aborted</para></listitem>
13352
13353 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
13354
13355 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
13356
13357 <listitem><para>Fix longstanding planning error for outer joins</para>
13358 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
13359 only supported with merge-joinable join conditions</>.</para></listitem>
13360
13361 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
13362 table has been dropped</para></listitem>
13363 </itemizedlist>
13364
13365    </sect2>
13366   </sect1>
13367
13368   <sect1 id="release-7-4-9">
13369    <title>Release 7.4.9</title>
13370
13371    <note>
13372    <title>Release date</title>
13373    <simpara>2005-10-04</simpara>
13374    </note>
13375
13376    <para>
13377     This release contains a variety of fixes from 7.4.8.
13378    </para>
13379
13380    <sect2>
13381     <title>Migration to version 7.4.9</title>
13382
13383     <para>
13384      A dump/restore is not required for those running 7.4.X.  However,
13385      if you are upgrading from a version earlier than 7.4.8, see the release
13386      notes for 7.4.8.
13387     </para>
13388    </sect2>
13389
13390    <sect2>
13391     <title>Changes</title>
13392
13393 <itemizedlist>
13394 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
13395 <literal>ctid</> chains too soon, and add more checking in code that follows
13396 <literal>ctid</> links</para>
13397 <para>This fixes a long-standing problem that could cause crashes in very rare
13398 circumstances.</para></listitem>
13399 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
13400 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
13401 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
13402 because it only padded to the specified number of bytes without
13403 considering how many characters were stored.</para></listitem>
13404 <listitem><para>Fix the sense of the test for read-only transaction
13405 in <command>COPY</></para>
13406 <para>The code formerly prohibited <command>COPY TO</>, where it should
13407 prohibit <command>COPY FROM</>.
13408 </para></listitem>
13409 <listitem><para>Fix planning problem with outer-join ON clauses that reference
13410 only the inner-side relation</para></listitem>
13411 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
13412 cases</para></listitem>
13413 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
13414 paranoid about validating their OID parameter</para></listitem>
13415 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
13416 a...</> with GiST index on column <literal>a</></para></listitem>
13417 <listitem><para>Improve robustness of datetime parsing</para></listitem>
13418 <listitem><para>Improve checking for partially-written WAL
13419 pages</para></listitem>
13420 <listitem><para>Improve robustness of signal handling when SSL is
13421 enabled</para></listitem>
13422 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
13423 files during postmaster startup</para></listitem>
13424 <listitem><para>Various memory leakage fixes</para></listitem>
13425 <listitem><para>Various portability improvements</para></listitem>
13426 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
13427 the variable is of pass-by-reference type</para></listitem>
13428 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
13429 code</para></listitem>
13430 </itemizedlist>
13431
13432    </sect2>
13433   </sect1>
13434
13435   <sect1 id="release-7-4-8">
13436    <title>Release 7.4.8</title>
13437
13438    <note>
13439    <title>Release date</title>
13440    <simpara>2005-05-09</simpara>
13441    </note>
13442
13443    <para>
13444     This release contains a variety of fixes from 7.4.7, including several
13445     security-related issues.
13446    </para>
13447
13448    <sect2>
13449     <title>Migration to version 7.4.8</title>
13450
13451     <para>
13452      A dump/restore is not required for those running 7.4.X.  However,
13453      it is one possible way of handling two significant security problems
13454      that have been found in the initial contents of 7.4.X system
13455      catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
13456      automatically correct these problems.
13457     </para>
13458
13459     <para>
13460      The larger security problem is that the built-in character set encoding
13461      conversion functions can be invoked from SQL commands by unprivileged
13462      users, but the functions were not designed for such use and are not
13463      secure against malicious choices of arguments.  The fix involves changing
13464      the declared parameter list of these functions so that they can no longer
13465      be invoked from SQL commands.  (This does not affect their normal use
13466      by the encoding conversion machinery.)
13467     </para>
13468
13469     <para>
13470      The lesser problem is that the <filename>contrib/tsearch2</> module
13471      creates several functions that are misdeclared to return
13472      <type>internal</> when they do not accept <type>internal</> arguments.
13473      This breaks type safety for all functions using <type>internal</>
13474      arguments.
13475     </para>
13476
13477     <para>
13478      It is strongly recommended that all installations repair these errors,
13479      either by initdb or by following the manual repair procedures given
13480      below.  The errors at least allow unprivileged database users to crash
13481      their server process, and might allow unprivileged users to gain the
13482      privileges of a database superuser.
13483     </para>
13484
13485     <para>
13486      If you wish not to do an initdb, perform the following procedures instead.
13487      As the database superuser, do:
13488
13489 <programlisting>
13490 BEGIN;
13491 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
13492 WHERE pronamespace = 11 AND pronargs = 5
13493       AND proargtypes[2] = 'cstring'::regtype;
13494 -- The command should report having updated 90 rows;
13495 -- if not, rollback and investigate instead of committing!
13496 COMMIT;
13497 </programlisting>
13498
13499      Next, if you have installed <filename>contrib/tsearch2</>, do:
13500
13501 <programlisting>
13502 BEGIN;
13503 UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
13504 WHERE oid IN (
13505     'dex_init(text)'::regprocedure,
13506     'snb_en_init(text)'::regprocedure,
13507     'snb_ru_init(text)'::regprocedure,
13508     'spell_init(text)'::regprocedure,
13509     'syn_init(text)'::regprocedure
13510 );
13511 -- The command should report having updated 5 rows;
13512 -- if not, rollback and investigate instead of committing!
13513 COMMIT;
13514 </programlisting>
13515
13516      If this command fails with a message like <quote>function
13517      "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
13518      is not installed in this database, or you already did the update.
13519     </para>
13520
13521     <para>
13522      The above procedures must be carried out in <emphasis>each</> database
13523      of an installation, including <literal>template1</>, and ideally
13524      including <literal>template0</> as well.  If you do not fix the
13525      template databases then any subsequently created databases will contain
13526      the same errors.  <literal>template1</> can be fixed in the same way
13527      as any other database, but fixing <literal>template0</> requires
13528      additional steps.  First, from any database issue:
13529 <programlisting>
13530 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
13531 </programlisting>
13532       Next connect to <literal>template0</> and perform the above repair
13533       procedures.  Finally, do:
13534 <programlisting>
13535 -- re-freeze template0:
13536 VACUUM FREEZE;
13537 -- and protect it against future alterations:
13538 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
13539 </programlisting>
13540     </para>
13541    </sect2>
13542
13543    <sect2>
13544     <title>Changes</title>
13545
13546 <itemizedlist>
13547 <listitem><para>Change encoding function signature to prevent
13548 misuse</para></listitem>
13549 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
13550 <type>INTERNAL</> function results</para></listitem>
13551 <listitem><para>Repair ancient race condition that allowed a transaction to be
13552 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
13553 than for other purposes</para>
13554 <para>This is an extremely serious bug since it could lead to apparent
13555 data inconsistencies being briefly visible to applications.</para></listitem>
13556 <listitem><para>Repair race condition between relation extension and
13557 VACUUM</para>
13558 <para>This could theoretically have caused loss of a page's worth of
13559 freshly-inserted data, although the scenario seems of very low probability.
13560 There are no known cases of it having caused more than an Assert failure.
13561 </para></listitem>
13562 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
13563 <para>
13564 The comparison code was wrong in the case where the
13565 <literal>--enable-integer-datetimes</> configuration switch had been used.
13566 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
13567 it will need to be <command>REINDEX</>ed after installing this update, because
13568 the fix corrects the sort order of column values.
13569 </para></listitem>
13570 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
13571 <type>TIME WITH TIME ZONE</> values</para></listitem>
13572 <listitem><para>Fix mis-display of negative fractional seconds in
13573 <type>INTERVAL</> values</para>
13574 <para>
13575 This error only occurred when the
13576 <literal>--enable-integer-datetimes</> configuration switch had been used.
13577 </para></listitem>
13578 <listitem><para>Ensure operations done during backend shutdown are counted by
13579 statistics collector</para>
13580 <para>
13581  This is expected to resolve reports of <application>pg_autovacuum</>
13582  not vacuuming the system catalogs often enough &mdash; it was not being
13583  told about catalog deletions caused by temporary table removal during
13584  backend exit.
13585 </para></listitem>
13586 <listitem><para>Additional buffer overrun checks in plpgsql
13587 (Neil)</para></listitem>
13588 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
13589 correctly (Neil)</para></listitem>
13590 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
13591 (Marko Kreen)</para></listitem>
13592 <listitem><para>Still more 64-bit fixes for
13593 <filename>contrib/intagg</></para></listitem>
13594 <listitem><para>Prevent incorrect optimization of functions returning
13595 <type>RECORD</></para></listitem>
13596 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
13597 month-related formats</para></listitem>
13598 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
13599 <listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
13600 <listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
13601 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
13602 <listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
13603 <para>
13604 This fixes a lock management error that would only be visible if a transaction
13605 was kicked out of a wait for a lock (typically by query cancel) and then the
13606 holder of the lock released it within a very narrow window.
13607 </para></listitem>
13608 <listitem><para>Fix problem with untyped parameter appearing in
13609 <command>INSERT ... SELECT</></para></listitem>
13610 <listitem><para>Fix <command>CLUSTER</> failure after
13611 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
13612 </itemizedlist>
13613
13614    </sect2>
13615   </sect1>
13616
13617   <sect1 id="release-7-4-7">
13618    <title>Release 7.4.7</title>
13619
13620    <note>
13621    <title>Release date</title>
13622    <simpara>2005-01-31</simpara>
13623    </note>
13624
13625    <para>
13626     This release contains a variety of fixes from 7.4.6, including several
13627     security-related issues.
13628    </para>
13629
13630    <sect2>
13631     <title>Migration to version 7.4.7</title>
13632
13633     <para>
13634      A dump/restore is not required for those running 7.4.X.
13635     </para>
13636    </sect2>
13637
13638    <sect2>
13639     <title>Changes</title>
13640
13641 <itemizedlist>
13642 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
13643 <para>
13644 On platforms that will automatically execute initialization functions of a
13645 shared library (this includes at least Windows and ELF-based Unixen),
13646 <command>LOAD</> can be used to make the server execute arbitrary code.
13647 Thanks to NGS Software for reporting this.</para></listitem>
13648 <listitem><para>Check that creator of an aggregate function has the right to
13649 execute the specified transition functions</para>
13650 <para>
13651 This oversight made it possible to bypass denial of EXECUTE
13652 permission on a function.</para></listitem>
13653 <listitem><para>Fix security and 64-bit issues in
13654 contrib/intagg</para></listitem>
13655 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
13656 Jurka)</para></listitem>
13657 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
13658 many parameters (Neil)</para></listitem>
13659 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
13660 <para>
13661 The result of the join was mistakenly supposed to be sorted the same as the
13662 left input.  This could not only deliver mis-sorted output to the user, but
13663 in case of nested merge joins could give outright wrong answers.
13664 </para></listitem>
13665 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
13666 <listitem><para>Fix display of negative intervals in SQL and GERMAN
13667 datestyles</para></listitem>
13668 <listitem><para>Make age(timestamptz) do calculation in local timezone not
13669 GMT</para></listitem>
13670 </itemizedlist>
13671
13672    </sect2>
13673   </sect1>
13674
13675   <sect1 id="release-7-4-6">
13676    <title>Release 7.4.6</title>
13677
13678    <note>
13679    <title>Release date</title>
13680    <simpara>2004-10-22</simpara>
13681    </note>
13682
13683    <para>
13684     This release contains a variety of fixes from 7.4.5.
13685    </para>
13686
13687
13688    <sect2>
13689     <title>Migration to version 7.4.6</title>
13690
13691     <para>
13692      A dump/restore is not required for those running 7.4.X.
13693     </para>
13694    </sect2>
13695
13696    <sect2>
13697     <title>Changes</title>
13698
13699 <itemizedlist>
13700 <listitem><para>Repair possible failure to update hint bits on disk</para>
13701 <para>
13702 Under rare circumstances this oversight could lead to
13703 <quote>could not access transaction status</> failures, which qualifies
13704 it as a potential-data-loss bug.
13705 </para></listitem>
13706 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
13707 <para>
13708 Very large left joins using a hash join plan could fail to output unmatched
13709 left-side rows given just the right data distribution.
13710 </para></listitem>
13711 <listitem><para>Disallow running <application>pg_ctl</> as root</para>
13712 <para>
13713 This is to guard against any possible security issues.
13714 </para></listitem>
13715 <listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
13716 <para>
13717 This has been reported as a security issue, though it's hardly worthy of
13718 concern since there is no reason for non-developers to use this script anyway.
13719 </para></listitem>
13720 <listitem><para>Prevent forced backend shutdown from re-emitting prior command
13721 result</para>
13722 <para>
13723 In rare cases, a client might think that its last command had succeeded when
13724 it really had been aborted by forced database shutdown.
13725 </para></listitem>
13726 <listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
13727 <para>
13728 This could lead to misbehavior in some of the system-statistics views.
13729 </para></listitem>
13730 <listitem><para>Fix small memory leak in postmaster</para></listitem>
13731 <listitem><para>Fix <quote>expected both swapped tables to have TOAST
13732 tables</> bug</para>
13733 <para>
13734 This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
13735 </para></listitem>
13736 <listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
13737 <listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
13738 <listitem><para><literal>::</> is no longer interpreted as a variable in an
13739 ECPG prepare statement</para></listitem>
13740 </itemizedlist>
13741
13742    </sect2>
13743   </sect1>
13744
13745   <sect1 id="release-7-4-5">
13746    <title>Release 7.4.5</title>
13747
13748    <note>
13749    <title>Release date</title>
13750    <simpara>2004-08-18</simpara>
13751    </note>
13752
13753    <para>
13754     This release contains one serious bug fix over 7.4.4.
13755    </para>
13756
13757
13758    <sect2>
13759     <title>Migration to version 7.4.5</title>
13760
13761     <para>
13762      A dump/restore is not required for those running 7.4.X.
13763     </para>
13764    </sect2>
13765
13766    <sect2>
13767     <title>Changes</title>
13768
13769 <itemizedlist>
13770 <listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
13771 <para>
13772 This patch fixes a rare case in which concurrent insertions into a B-tree index
13773 could result in a server panic.  No permanent damage would result, but it's
13774 still worth a re-release.  The bug does not exist in pre-7.4 releases.
13775 </para></listitem>
13776 </itemizedlist>
13777
13778    </sect2>
13779   </sect1>
13780
13781   <sect1 id="release-7-4-4">
13782    <title>Release 7.4.4</title>
13783
13784    <note>
13785    <title>Release date</title>
13786    <simpara>2004-08-16</simpara>
13787    </note>
13788
13789    <para>
13790     This release contains a variety of fixes from 7.4.3.
13791    </para>
13792
13793
13794    <sect2>
13795     <title>Migration to version 7.4.4</title>
13796
13797     <para>
13798      A dump/restore is not required for those running 7.4.X.
13799     </para>
13800    </sect2>
13801
13802    <sect2>
13803     <title>Changes</title>
13804
13805 <itemizedlist>
13806 <listitem><para>Prevent possible loss of committed transactions during crash</para>
13807 <para>
13808 Due to insufficient interlocking between transaction commit and checkpointing,
13809 it was possible for transactions committed just before the most recent
13810 checkpoint to be lost, in whole or in part, following a database crash and
13811 restart.  This is a serious bug that has existed
13812 since <productname>PostgreSQL</productname> 7.1.
13813 </para></listitem>
13814 <listitem><para>Check HAVING restriction before evaluating result list of an
13815 aggregate plan</para></listitem>
13816 <listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
13817 <listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
13818 <listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
13819 <listitem><para>Pretty-print UNION queries correctly</para></listitem>
13820 <listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
13821 <listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
13822 <listitem><para>Fix thread support for OS X and Solaris</para></listitem>
13823 <listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
13824 <listitem><para>ECPG fixes</para></listitem>
13825 <listitem><para>Translation updates (various contributors)</para></listitem>
13826 </itemizedlist>
13827
13828    </sect2>
13829   </sect1>
13830
13831   <sect1 id="release-7-4-3">
13832    <title>Release 7.4.3</title>
13833
13834    <note>
13835    <title>Release date</title>
13836    <simpara>2004-06-14</simpara>
13837    </note>
13838
13839    <para>
13840     This release contains a variety of fixes from 7.4.2.
13841    </para>
13842
13843
13844    <sect2>
13845     <title>Migration to version 7.4.3</title>
13846
13847     <para>
13848      A dump/restore is not required for those running 7.4.X.
13849     </para>
13850    </sect2>
13851
13852    <sect2>
13853     <title>Changes</title>
13854
13855 <itemizedlist>
13856 <listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
13857 <listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
13858 <listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
13859 <listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
13860 <listitem><para>Several important fixes in pg_autovacuum, including fixes for
13861 large tables, unsigned oids, stability, temp tables, and debug mode
13862 (Matthew T. O'Connor)</para></listitem>
13863 <listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
13864 <listitem><para>Several JDBC fixes</para></listitem>
13865 <listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
13866 <listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
13867 <listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
13868 <listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
13869 <listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
13870 <listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
13871 <para>
13872 Select-list aliases within the sub-select will now take precedence over
13873 names from outer query levels.
13874 </para></listitem>
13875 <listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
13876 <listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
13877 <para>
13878   This fixes a difficult-to-exploit security hole.
13879 </para></listitem>
13880 <listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
13881 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
13882 </itemizedlist>
13883
13884    </sect2>
13885   </sect1>
13886
13887   <sect1 id="release-7-4-2">
13888    <title>Release 7.4.2</title>
13889
13890    <note>
13891    <title>Release date</title>
13892    <simpara>2004-03-08</simpara>
13893    </note>
13894
13895    <para>
13896     This release contains a variety of fixes from 7.4.1.
13897    </para>
13898
13899
13900    <sect2>
13901     <title>Migration to version 7.4.2</title>
13902
13903     <para>
13904      A dump/restore is not required for those running 7.4.X.  However,
13905      it might be advisable as the easiest method of incorporating fixes for
13906      two errors that have been found in the initial contents of 7.4.X system
13907      catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
13908      automatically correct these problems.
13909     </para>
13910
13911     <para>
13912      The more severe of the two errors is that data type <type>anyarray</>
13913      has the wrong alignment label; this is a problem because the
13914      <structname>pg_statistic</> system catalog uses <type>anyarray</>
13915      columns.  The mislabeling can cause planner misestimations and even
13916      crashes when planning queries that involve <literal>WHERE</> clauses on
13917      double-aligned columns (such as <type>float8</> and <type>timestamp</>).
13918      It is strongly recommended that all installations repair this error,
13919      either by initdb or by following the manual repair procedure given
13920      below.
13921     </para>
13922
13923     <para>
13924      The lesser error is that the system view <structname>pg_settings</>
13925      ought to be marked as having public update access, to allow
13926      <literal>UPDATE pg_settings</> to be used as a substitute for
13927      <command>SET</>.  This can also be fixed either by initdb or manually,
13928      but it is not necessary to fix unless you want to use <literal>UPDATE
13929      pg_settings</>.
13930     </para>
13931
13932     <para>
13933      If you wish not to do an initdb, the following procedure will work
13934      for fixing <structname>pg_statistic</>.  As the database superuser,
13935      do:
13936
13937 <programlisting>
13938 -- clear out old data in pg_statistic:
13939 DELETE FROM pg_statistic;
13940 VACUUM pg_statistic;
13941 -- this should update 1 row:
13942 UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
13943 -- this should update 6 rows:
13944 UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
13945 --
13946 -- At this point you MUST start a fresh backend to avoid a crash!
13947 --
13948 -- repopulate pg_statistic:
13949 ANALYZE;
13950 </programlisting>
13951
13952      This can be done in a live database, but beware that all backends
13953      running in the altered database must be restarted before it is safe to
13954      repopulate <structname>pg_statistic</>.
13955     </para>
13956
13957     <para>
13958      To repair the <structname>pg_settings</> error, simply do:
13959 <programlisting>
13960 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
13961 </programlisting>
13962     </para>
13963
13964     <para>
13965      The above procedures must be carried out in <emphasis>each</> database
13966      of an installation, including <literal>template1</>, and ideally
13967      including <literal>template0</> as well.  If you do not fix the
13968      template databases then any subsequently created databases will contain
13969      the same errors.  <literal>template1</> can be fixed in the same way
13970      as any other database, but fixing <literal>template0</> requires
13971      additional steps.  First, from any database issue:
13972 <programlisting>
13973 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
13974 </programlisting>
13975       Next connect to <literal>template0</> and perform the above repair
13976       procedures.  Finally, do:
13977 <programlisting>
13978 -- re-freeze template0:
13979 VACUUM FREEZE;
13980 -- and protect it against future alterations:
13981 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
13982 </programlisting>
13983     </para>
13984    </sect2>
13985
13986    <sect2>
13987     <title>Changes</title>
13988
13989 <para>
13990     Release 7.4.2 incorporates all the fixes included in release 7.3.6,
13991     plus the following fixes:
13992 </para>
13993
13994 <itemizedlist>
13995 <listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
13996 <para>See above for details about this problem.</para></listitem>
13997 <listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
13998 <listitem><para>Fix several optimizer bugs, most of which led to
13999 <quote>variable not found in subplan target lists</> errors</para></listitem>
14000 <listitem><para>Avoid out-of-memory failure during startup of large multiple
14001 index scan</para></listitem>
14002 <listitem><para>Fix multibyte problem that could lead to <quote>out of
14003 memory</> error during <command>COPY IN</></para></listitem>
14004 <listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
14005 TABLE AS</> from tables without OIDs</para></listitem>
14006 <listitem><para>Fix problems with <filename>alter_table</> regression test
14007 during parallel testing</para></listitem>
14008 <listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
14009 <listitem><para>Partial fix for Turkish-locale issues</para>
14010 <para>initdb will succeed now in Turkish locale, but there are still some
14011 inconveniences associated with the <literal>i/I</> problem.</para></listitem>
14012 <listitem><para>Make pg_dump set client encoding on restore</para></listitem>
14013 <listitem><para>Other minor pg_dump fixes</para></listitem>
14014 <listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
14015 <listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
14016 <literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem>
14017 <listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
14018 <listitem><para>Various other ecpg fixes (Michael)</para></listitem>
14019 <listitem><para>Fixes for Borland compiler</para></listitem>
14020 <listitem><para>Thread build improvements (Bruce)</para></listitem>
14021 <listitem><para>Various other build fixes</para></listitem>
14022 <listitem><para>Various JDBC fixes</para></listitem>
14023 </itemizedlist>
14024
14025    </sect2>
14026   </sect1>
14027
14028   <sect1 id="release-7-4-1">
14029    <title>Release 7.4.1</title>
14030
14031    <note>
14032    <title>Release date</title>
14033    <simpara>2003-12-22</simpara>
14034    </note>
14035
14036    <para>
14037     This release contains a variety of fixes from 7.4.
14038    </para>
14039
14040
14041    <sect2>
14042     <title>Migration to version 7.4.1</title>
14043
14044     <para>
14045      A dump/restore is <emphasis>not</emphasis> required for those
14046      running 7.4.
14047     </para>
14048
14049     <para>
14050      If you want to install the fixes in the information schema
14051      you need to reload it into the database.
14052      This is either accomplished by initializing a new cluster
14053      by running <command>initdb</command>, or by running the following
14054      sequence of SQL commands in each database (ideally including
14055      <literal>template1</literal>) as a superuser in
14056      <application>psql</application>, after installing the new release:
14057 <programlisting>
14058 DROP SCHEMA information_schema CASCADE;
14059 \i /usr/local/pgsql/share/information_schema.sql
14060 </programlisting>
14061      Substitute your installation path in the second command.
14062     </para>
14063
14064    </sect2>
14065
14066    <sect2>
14067     <title>Changes</title>
14068
14069 <itemizedlist>
14070 <listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
14071 <listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
14072 <listitem><para>Fix for subqueries that used hash joins (Tom)</para>
14073 <para>
14074     Certain subqueries that used hash joins would crash because of
14075     improperly shared structures.
14076 </para></listitem>
14077 <listitem><para>Fix free space map compaction bug (Tom)</para>
14078 <para>
14079     This fixes a bug where compaction of the free space map could lead
14080     to a database server shutdown.
14081 </para>
14082 </listitem>
14083 <listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
14084 <listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
14085 <para>
14086     Fix these functions to return values consistent with pre-7.4
14087     releases.
14088 </para>
14089 </listitem>
14090 <listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
14091 <para>
14092     Fixes include improper variable initialization, missing vacuum after
14093     <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
14094 </para>
14095 </listitem>
14096 <listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
14097 <listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
14098 <para>
14099     Fix crash on Solaris caused by use of any type of password
14100     authentication when no passwords were defined.
14101 </para>
14102 </listitem>
14103 <listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
14104 <listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
14105 <listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
14106 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
14107 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
14108 <listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
14109 <listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
14110 <para>
14111   If different client encodings are used for <type>bytea</type> output and input, it
14112   is possible for <type>bytea</type> values to be corrupted by the differing
14113   encodings.  This fix escapes all bytes that might be affected.
14114 </para>
14115 </listitem>
14116 <listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
14117 <listitem><para>New Czech FAQ</para></listitem>
14118 <listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
14119 <listitem><para>ECPG fixes (Michael)</para></listitem>
14120 <listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
14121 <listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
14122 <listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
14123 <para>
14124   Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
14125   By installing them in their own directory, name conflicts have been reduced.
14126 </para>
14127 </listitem>
14128 <listitem><para>Fix SSL memory leak (Neil)</para>
14129 <para>
14130   This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
14131 </para>
14132 </listitem>
14133 <listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
14134 <listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
14135 </itemizedlist>
14136
14137   </sect2>
14138  </sect1>
14139
14140  <sect1 id="release-7-4">
14141   <title>Release 7.4</title>
14142
14143   <note>
14144    <title>Release date</title>
14145    <simpara>2003-11-17</simpara>
14146   </note>
14147
14148   <sect2>
14149    <title>Overview</title>
14150
14151    <para>
14152     Major changes in this release:
14153    </para>
14154
14155    <variablelist>
14156     <varlistentry>
14157      <term>
14158       <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
14159       now much more efficient
14160      </term>
14161
14162      <listitem>
14163       <para>
14164        In previous releases, <literal>IN</literal>/<literal>NOT
14165        IN</literal> subqueries were joined to the upper query by
14166        sequentially scanning the subquery looking for a match.  The
14167        7.4 code uses the same sophisticated techniques used by
14168        ordinary joins and so is much faster.  An
14169        <literal>IN</literal> will now usually be as fast as or faster
14170        than an equivalent <literal>EXISTS</literal> subquery; this
14171        reverses the conventional wisdom that applied to previous
14172        releases.
14173       </para>
14174      </listitem>
14175     </varlistentry>
14176
14177     <varlistentry>
14178      <term>
14179       Improved <literal>GROUP BY</literal> processing by using hash buckets
14180      </term>
14181
14182      <listitem>
14183       <para>
14184        In previous releases, rows to be grouped had to be sorted
14185        first.  The 7.4 code can do <literal>GROUP BY</literal>
14186        without sorting, by accumulating results into a hash table
14187        with one entry per group.  It will still use the sort
14188        technique, however, if the hash table is estimated to be too
14189        large to fit in <varname>sort_mem</>.
14190       </para>
14191      </listitem>
14192     </varlistentry>
14193
14194     <varlistentry>
14195      <term>
14196       New multikey hash join capability
14197      </term>
14198
14199      <listitem>
14200       <para>
14201        In previous releases, hash joins could only occur on single
14202        keys.  This release allows multicolumn hash joins.
14203       </para>
14204      </listitem>
14205     </varlistentry>
14206
14207     <varlistentry>
14208      <term>
14209       Queries using the explicit <literal>JOIN</literal> syntax are
14210       now better optimized
14211      </term>
14212
14213      <listitem>
14214       <para>
14215        Prior releases evaluated queries using the explicit
14216        <literal>JOIN</literal> syntax only in the order implied by
14217        the syntax. 7.4 allows full optimization of these queries,
14218        meaning the optimizer considers all possible join orderings
14219        and chooses the most efficient.  Outer joins, however, must
14220        still follow the declared ordering.
14221       </para>
14222      </listitem>
14223     </varlistentry>
14224
14225     <varlistentry>
14226      <term>
14227       Faster and more powerful regular expression code
14228      </term>
14229
14230      <listitem>
14231       <para>
14232        The entire regular expression module has been replaced with a
14233        new version by Henry Spencer, originally written for Tcl.  The
14234        code greatly improves performance and supports several flavors
14235        of regular expressions.
14236       </para>
14237      </listitem>
14238     </varlistentry>
14239
14240     <varlistentry>
14241      <term>
14242       Function-inlining for simple SQL functions
14243      </term>
14244
14245      <listitem>
14246       <para>
14247        Simple SQL functions can now be inlined by including their SQL
14248        in the main query.  This improves performance by eliminating
14249        per-call overhead.  That means simple SQL functions now
14250        behave like macros.
14251       </para>
14252      </listitem>
14253     </varlistentry>
14254
14255     <varlistentry>
14256      <term>
14257       Full support for IPv6 connections and IPv6 address data types
14258      </term>
14259
14260      <listitem>
14261       <para>
14262        Previous releases allowed only IPv4 connections, and the IP
14263        data types only supported IPv4 addresses. This release adds
14264        full IPv6 support in both of these areas.
14265       </para>
14266      </listitem>
14267     </varlistentry>
14268
14269     <varlistentry>
14270      <term>
14271       Major improvements in SSL performance and reliability
14272      </term>
14273
14274      <listitem>
14275       <para>
14276        Several people very familiar with the SSL API have overhauled
14277        our SSL code to improve SSL key negotiation and error
14278        recovery.
14279       </para>
14280      </listitem>
14281     </varlistentry>
14282
14283     <varlistentry>
14284      <term>
14285       Make free space map efficiently reuse empty index pages,
14286       and other free space management improvements
14287      </term>
14288
14289      <listitem>
14290       <para>
14291        In previous releases, B-tree index pages that were left empty
14292        because of deleted rows could only be reused by rows with
14293        index values similar to the rows originally indexed on that
14294        page. In 7.4, <command>VACUUM</command> records empty index
14295        pages and allows them to be reused for any future index rows.
14296       </para>
14297      </listitem>
14298     </varlistentry>
14299
14300     <varlistentry>
14301      <term>
14302       SQL-standard information schema
14303      </term>
14304
14305      <listitem>
14306       <para>
14307        The information schema provides a standardized and stable way
14308        to access information about the schema objects defined in a
14309        database.
14310       </para>
14311      </listitem>
14312     </varlistentry>
14313
14314     <varlistentry>
14315      <term>
14316       Cursors conform more closely to the SQL standard
14317      </term>
14318
14319      <listitem>
14320       <para>
14321        The commands <command>FETCH</command> and
14322        <command>MOVE</command> have been overhauled to conform more
14323        closely to the SQL standard.
14324       </para>
14325      </listitem>
14326     </varlistentry>
14327
14328     <varlistentry>
14329      <term>
14330       Cursors can exist outside transactions
14331      </term>
14332
14333      <listitem>
14334       <para>
14335        These cursors are also called holdable cursors.
14336       </para>
14337      </listitem>
14338     </varlistentry>
14339
14340     <varlistentry>
14341      <term>
14342       New client-to-server protocol
14343      </term>
14344
14345      <listitem>
14346       <para>
14347        The new protocol adds error codes, more status information,
14348        faster startup, better support for binary data transmission,
14349        parameter values separated from SQL commands, prepared
14350        statements available at the protocol level, and cleaner
14351        recovery from <command>COPY</command> failures.  The older
14352        protocol is still supported by both server and clients.
14353       </para>
14354      </listitem>
14355     </varlistentry>
14356
14357     <varlistentry>
14358      <term>
14359       <application>libpq</application> and
14360       <application>ECPG</application> applications are now fully
14361       thread-safe
14362      </term>
14363
14364      <listitem>
14365       <para>
14366        While previous <application>libpq</application> releases
14367        already supported threads, this release improves thread safety
14368        by fixing some non-thread-safe code that was used during
14369        database connection startup.  The <command>configure</command>
14370        option <option>--enable-thread-safety</option> must be used to
14371        enable this feature.
14372       </para>
14373      </listitem>
14374     </varlistentry>
14375
14376     <varlistentry>
14377      <term>
14378       New version of full-text indexing
14379      </term>
14380
14381      <listitem>
14382       <para>
14383        A new full-text indexing suite is available in
14384        <filename>contrib/tsearch2</filename>.
14385       </para>
14386      </listitem>
14387     </varlistentry>
14388
14389     <varlistentry>
14390      <term>
14391       New autovacuum tool
14392      </term>
14393
14394      <listitem>
14395       <para>
14396        The new autovacuum tool in
14397        <filename>contrib/autovacuum</filename> monitors the database
14398        statistics tables for
14399        <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
14400        activity and automatically vacuums tables when needed.
14401       </para>
14402      </listitem>
14403     </varlistentry>
14404
14405     <varlistentry>
14406      <term>
14407       Array handling has been improved and moved into the server core
14408      </term>
14409
14410      <listitem>
14411       <para>
14412        Many array limitations have been removed, and arrays behave
14413        more like fully-supported data types.
14414       </para>
14415      </listitem>
14416     </varlistentry>
14417
14418    </variablelist>
14419   </sect2>
14420
14421   <sect2>
14422    <title>Migration to version 7.4</title>
14423
14424    <para>
14425     A dump/restore using <application>pg_dump</application> is
14426     required for those wishing to migrate data from any previous
14427     release.
14428    </para>
14429
14430    <para>
14431     Observe the following incompatibilities:
14432    </para>
14433
14434    <itemizedlist>
14435     <listitem>
14436      <para>
14437       The server-side autocommit setting was removed and
14438       reimplemented in client applications and languages.
14439       Server-side autocommit was causing too many problems with
14440       languages and applications that wanted to control their own
14441       autocommit behavior, so autocommit was removed from the server
14442       and added to individual client APIs as appropriate.
14443      </para>
14444     </listitem>
14445
14446     <listitem>
14447      <para>
14448       Error message wording has changed substantially in this
14449       release.  Significant effort was invested to make the messages
14450       more consistent and user-oriented.  If your applications try to
14451       detect different error conditions by parsing the error message,
14452       you are strongly encouraged to use the new error code facility instead.
14453      </para>
14454     </listitem>
14455
14456     <listitem>
14457      <para>
14458       Inner joins using the explicit <literal>JOIN</literal> syntax
14459       might behave differently because they are now better
14460       optimized.
14461      </para>
14462     </listitem>
14463
14464     <listitem>
14465      <para>
14466       A number of server configuration parameters have been renamed
14467       for clarity, primarily those related to
14468       logging.
14469      </para>
14470     </listitem>
14471
14472     <listitem>
14473      <para>
14474       <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
14475       does nothing.  In prior releases, <literal>FETCH 0</literal>
14476       would fetch all remaining rows, and <literal>MOVE 0</literal>
14477       would move to the end of the cursor.
14478      </para>
14479     </listitem>
14480
14481     <listitem>
14482      <para>
14483       <command>FETCH</command> and <command>MOVE</command> now return
14484       the actual number of rows fetched/moved, or zero if at the
14485       beginning/end of the cursor.  Prior releases would return the
14486       row count passed to the command, not the number of rows
14487       actually fetched or moved.
14488      </para>
14489     </listitem>
14490
14491     <listitem>
14492      <para>
14493       <command>COPY</command> now can process files that use
14494       carriage-return or carriage-return/line-feed end-of-line
14495       sequences. Literal carriage-returns and line-feeds are no
14496       longer accepted in data values; use <literal>\r</literal> and
14497       <literal>\n</literal> instead.
14498      </para>
14499     </listitem>
14500
14501     <listitem>
14502      <para>
14503       Trailing spaces are now trimmed when converting from type
14504       <type>char(<replaceable>n</>)</type> to
14505       <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
14506       This is what most people always expected to happen anyway.
14507      </para>
14508     </listitem>
14509
14510     <listitem>
14511      <para>
14512       The data type <type>float(<replaceable>p</>)</type> now
14513       measures <replaceable>p</> in binary digits, not decimal
14514       digits.  The new behavior follows the SQL standard.
14515      </para>
14516     </listitem>
14517
14518     <listitem>
14519      <para>
14520       Ambiguous date values now must match the ordering specified by
14521       the <varname>datestyle</varname> setting.  In prior releases, a
14522       date specification of <literal>10/20/03</> was interpreted as a
14523       date in October even if <varname>datestyle</> specified that
14524       the day should be first.  7.4 will throw an error if a date
14525       specification is invalid for the current setting of
14526       <varname>datestyle</>.
14527      </para>
14528     </listitem>
14529
14530     <listitem>
14531      <para>
14532       The functions <function>oidrand</function>,
14533       <function>oidsrand</function>, and
14534       <function>userfntest</function> have been removed.  These
14535       functions were determined to be no longer useful.
14536      </para>
14537     </listitem>
14538
14539     <listitem>
14540      <para>
14541       String literals specifying time-varying date/time values, such
14542       as <literal>'now'</literal> or <literal>'today'</literal> will
14543       no longer work as expected in column default expressions; they
14544       now cause the time of the table creation to be the default, not
14545       the time of the insertion.  Functions such as
14546       <function>now()</>, <function>current_timestamp</>, or
14547       <function>current_date</function> should be used instead.
14548      </para>
14549
14550      <para>
14551       In previous releases, there was special code so that strings
14552       such as <literal>'now'</literal> were interpreted at
14553       <command>INSERT</> time and not at table creation time, but
14554       this work around didn't cover all cases.  Release 7.4 now
14555       requires that defaults be defined properly using functions such
14556       as <function>now()</> or <function>current_timestamp</>. These
14557       will work in all situations.
14558      </para>
14559     </listitem>
14560
14561     <listitem>
14562      <para>
14563       The dollar sign (<literal>$</>) is no longer allowed in
14564       operator names.  It can instead be a non-first character in
14565       identifiers.  This was done to improve compatibility with other
14566       database systems, and to avoid syntax problems when parameter
14567       placeholders (<literal>$<replaceable>n</></>) are written
14568       adjacent to operators.
14569      </para>
14570     </listitem>
14571
14572    </itemizedlist>
14573   </sect2>
14574
14575   <sect2>
14576    <title>Changes</title>
14577
14578    <para>
14579     Below you will find a detailed account of the changes between
14580     release 7.4 and the previous major release.
14581    </para>
14582
14583   <sect3>
14584    <title>Server Operation Changes</title>
14585
14586    <itemizedlist>
14587     <listitem>
14588      <para>
14589       Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
14590       Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
14591      </para>
14592     </listitem>
14593
14594     <listitem>
14595      <para>
14596       Fix SSL to handle errors cleanly (Nathan Mueller)
14597      </para>
14598      <para>
14599       In prior releases, certain SSL API error reports were not
14600       handled correctly.  This release fixes those problems.
14601      </para>
14602     </listitem>
14603
14604     <listitem>
14605      <para>
14606       SSL protocol security and performance improvements (Sean Chittenden)
14607      </para>
14608      <para>
14609       SSL key renegotiation was happening too frequently, causing poor
14610       SSL performance.  Also, initial key handling was improved.
14611      </para>
14612     </listitem>
14613
14614     <listitem>
14615      <para>
14616       Print lock information when a deadlock is detected (Tom)
14617      </para>
14618      <para>
14619       This allows easier debugging of deadlock situations.
14620      </para>
14621     </listitem>
14622
14623     <listitem>
14624      <para>
14625       Update <filename>/tmp</filename> socket modification times
14626       regularly to avoid their removal (Tom)
14627      </para>
14628      <para>
14629       This should help prevent <filename>/tmp</filename> directory
14630       cleaner administration scripts from removing server socket
14631       files.
14632      </para>
14633     </listitem>
14634
14635     <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
14636
14637     <listitem>
14638      <para>Make B-tree indexes fully WAL-safe (Tom)</para>
14639      <para>
14640       In prior releases, under certain rare cases, a server crash
14641       could cause B-tree indexes to become corrupt. This release
14642       removes those last few rare cases.
14643      </para>
14644     </listitem>
14645
14646     <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
14647
14648     <listitem>
14649      <para>
14650       Fix inconsistent index lookups during split of first root page (Tom)
14651      </para>
14652      <para>
14653       In prior releases, when a single-page index split into two
14654       pages, there was a brief period when another database session
14655       could miss seeing an index entry.  This release fixes that rare
14656       failure case.
14657      </para>
14658     </listitem>
14659
14660     <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
14661
14662     <listitem>
14663      <para>Preserve free space information between server restarts (Tom)</para>
14664      <para>
14665       In prior releases, the free space map was not saved when the
14666       postmaster was stopped, so newly started servers had no free
14667       space information. This release saves the free space map, and
14668       reloads it when the server is restarted.
14669      </para>
14670     </listitem>
14671
14672     <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
14673     <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
14674     <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
14675     <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
14676     <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
14677     <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
14678     <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
14679    </itemizedlist>
14680   </sect3>
14681
14682   <sect3>
14683    <title>Performance Improvements</title>
14684
14685    <itemizedlist>
14686     <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
14687     <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
14688     <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
14689     <listitem><para>Improve constant folding (Tom)</para></listitem>
14690     <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
14691
14692     <listitem>
14693      <para>Reduce memory usage for queries using complex functions (Tom)</para>
14694      <para>
14695       In prior releases, functions returning allocated memory would
14696       not free it until the query completed. This release allows the
14697       freeing of function-allocated memory when the function call
14698       completes, reducing the total memory used by functions.
14699      </para>
14700     </listitem>
14701
14702     <listitem>
14703      <para>Improve GEQO optimizer performance (Tom)</para>
14704      <para>
14705       This release fixes several inefficiencies in the way the GEQO optimizer
14706       manages potential query paths.
14707      </para>
14708     </listitem>
14709
14710     <listitem>
14711      <para>
14712       Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
14713       tables (Tom)
14714      </para>
14715     </listitem>
14716
14717     <listitem>
14718      <para>
14719       Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
14720       performance (Tom)
14721      </para>
14722     </listitem>
14723
14724     <listitem>
14725      <para>
14726       Allow most <literal>IN</literal> subqueries to be processed as
14727       joins (Tom)
14728      </para>
14729     </listitem>
14730
14731     <listitem>
14732      <para>
14733       Pattern matching operations can use indexes regardless of
14734       locale (Peter)
14735      </para>
14736      <para>
14737       There is no way for non-ASCII locales to use the standard
14738       indexes for <literal>LIKE</literal> comparisons. This release
14739       adds a way to create a special index for
14740       <literal>LIKE</literal>.
14741      </para>
14742     </listitem>
14743
14744     <listitem>
14745      <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
14746      <para>
14747       For shared libraries that require a long time to load, this
14748       option is available so the library can be preloaded in the
14749       postmaster and inherited by all database sessions.
14750      </para>
14751     </listitem>
14752
14753     <listitem>
14754      <para>
14755       Improve optimizer cost computations, particularly for subqueries (Tom)
14756      </para>
14757     </listitem>
14758
14759     <listitem>
14760      <para>
14761       Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
14762      </para>
14763     </listitem>
14764
14765     <listitem>
14766      <para>
14767       Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
14768       means <literal>a.x = 42</literal> (Tom)
14769      </para>
14770     </listitem>
14771
14772     <listitem>
14773      <para>
14774       Allow hash/merge joins on complex joins (Tom)
14775      </para>
14776     </listitem>
14777
14778     <listitem>
14779      <para>
14780       Allow hash joins for more data types (Tom)
14781      </para>
14782     </listitem>
14783
14784     <listitem>
14785      <para>
14786       Allow join optimization of explicit inner joins, disable with
14787       <varname>join_collapse_limit</varname> (Tom)
14788      </para>
14789     </listitem>
14790
14791     <listitem>
14792      <para>
14793       Add parameter <varname>from_collapse_limit</varname> to control
14794       conversion of subqueries to joins (Tom)
14795      </para>
14796     </listitem>
14797
14798     <listitem>
14799      <para>
14800       Use faster and more powerful regular expression code from Tcl
14801       (Henry Spencer, Tom)
14802      </para>
14803     </listitem>
14804
14805     <listitem>
14806      <para>
14807       Use bit-mapped relation sets in the optimizer (Tom)
14808      </para>
14809     </listitem>
14810
14811     <listitem>
14812      <para>Improve connection startup time (Tom)</para>
14813      <para>
14814       The new client/server protocol requires fewer network packets to
14815       start a database session.
14816      </para>
14817     </listitem>
14818
14819     <listitem>
14820      <para>
14821       Improve trigger/constraint performance (Stephan)
14822      </para>
14823     </listitem>
14824
14825     <listitem>
14826      <para>
14827       Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
14828      </para>
14829     </listitem>
14830
14831     <listitem>
14832      <para>
14833       Fix hash indexes which were broken in rare cases (Tom)
14834      </para>
14835     </listitem>
14836
14837     <listitem><para>Improve hash index concurrency and speed (Tom)</para>
14838      <para>
14839       Prior releases suffered from poor hash index performance,
14840       particularly for high concurrency situations. This release fixes
14841       that, and the development group is interested in reports
14842       comparing B-tree and hash index performance.
14843      </para>
14844     </listitem>
14845
14846     <listitem>
14847      <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
14848      <para>
14849       Certain CPU's perform faster data copies when addresses are
14850       32-byte aligned.
14851      </para>
14852     </listitem>
14853
14854     <listitem>
14855      <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
14856      <para>
14857       <type>numeric</type> used to be stored in base 100. The new code
14858       uses base 10000, for significantly better performance.
14859      </para>
14860     </listitem>
14861    </itemizedlist>
14862   </sect3>
14863
14864   <sect3>
14865    <title>Server Configuration Changes</title>
14866
14867    <itemizedlist>
14868     <listitem>
14869      <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
14870      <para>
14871       This was done so most parameters that control the server logs
14872       begin with <literal>log_</>.
14873      </para>
14874     </listitem>
14875
14876     <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
14877     <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
14878     <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
14879
14880     <listitem>
14881      <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
14882      <para>
14883       In prior releases, it was difficult to determine if checkpoint
14884       was happening too frequently. This feature adds a warning to the
14885       server logs when excessive checkpointing happens.
14886      </para>
14887     </listitem>
14888
14889     <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
14890
14891     <listitem>
14892      <para>
14893       Change debug server log messages to output as <literal>DEBUG</>
14894       rather than <literal>LOG</> (Bruce)
14895      </para>
14896     </listitem>
14897
14898     <listitem>
14899      <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
14900      <para>
14901       This is a security feature so non-superusers cannot disable
14902       logging that was enabled by the administrator.
14903      </para>
14904     </listitem>
14905
14906     <listitem>
14907      <para>
14908       <varname>log_min_messages</>/<varname>client_min_messages</> now
14909       controls <varname>debug_*</> output (Bruce)
14910      </para>
14911      <para>
14912       This centralizes client debug information so all debug output
14913       can be sent to either the client or server logs.
14914      </para>
14915     </listitem>
14916
14917     <listitem>
14918      <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
14919      <para>
14920       This allows Mac OS X hosts to query the network for available
14921       <productname>PostgreSQL</productname> servers.
14922      </para>
14923     </listitem>
14924
14925     <listitem>
14926      <para>
14927       Add ability to print only slow statements using
14928       <varname>log_min_duration_statement</varname>
14929       (Christopher)
14930      </para>
14931      <para>
14932       This is an often requested debugging feature that allows
14933       administrators to see only slow queries in their server logs.
14934      </para>
14935     </listitem>
14936
14937     <listitem>
14938      <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
14939      <para>
14940       This allows administrators to merge the host IP address and
14941       netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
14942      </para>
14943     </listitem>
14944
14945     <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
14946
14947     <listitem>
14948      <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
14949      <para>
14950       This works with the new error reporting feature to supply
14951       additional error information like hints, file names and line
14952       numbers.
14953      </para>
14954     </listitem>
14955
14956     <listitem>
14957      <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
14958      <para>
14959       This option is useful for administration tools that need to know
14960       the configuration variable names and their minimums, maximums,
14961       defaults, and descriptions.
14962      </para>
14963     </listitem>
14964
14965     <listitem>
14966      <para>
14967       Add new columns in <literal>pg_settings</literal>:
14968       <literal>context</>, <literal>type</>, <literal>source</>,
14969       <literal>min_val</>, <literal>max_val</> (Joe)
14970      </para>
14971     </listitem>
14972
14973     <listitem>
14974      <para>
14975       Make default <varname>shared_buffers</> 1000 and
14976       <varname>max_connections</> 100, if possible (Tom)
14977      </para>
14978      <para>
14979       Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
14980       would start on even very old systems. This release tests the
14981       amount of shared memory allowed by the platform and selects more
14982       reasonable default values if possible.  Of course, users are
14983       still encouraged to evaluate their resource load and size
14984       <varname>shared_buffers</varname> accordingly.
14985      </para>
14986     </listitem>
14987
14988     <listitem>
14989      <para>
14990       New <filename>pg_hba.conf</filename> record type
14991       <literal>hostnossl</> to prevent SSL connections (Jon
14992       Jensen)
14993      </para>
14994      <para>
14995       In prior releases, there was no way to prevent SSL connections
14996       if both the client and server supported SSL. This option allows
14997       that capability.
14998      </para>
14999     </listitem>
15000
15001     <listitem>
15002      <para>
15003       Remove parameter <varname>geqo_random_seed</varname>
15004       (Tom)
15005      </para>
15006     </listitem>
15007
15008     <listitem>
15009      <para>
15010       Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
15011      </para>
15012     </listitem>
15013
15014     <listitem>
15015      <para>
15016       Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
15017      </para>
15018     </listitem>
15019    </itemizedlist>
15020   </sect3>
15021
15022   <sect3>
15023    <title>Query Changes</title>
15024
15025    <itemizedlist>
15026     <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
15027     <listitem><para>Add read-only transactions (Peter)</para></listitem>
15028     <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
15029
15030     <listitem>
15031      <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
15032      <para>
15033       In prior releases, only the superuser could see query strings
15034       using <literal>pg_stat_activity</literal>. Now ordinary users
15035       can see their own query strings.
15036      </para>
15037     </listitem>
15038
15039     <listitem>
15040      <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
15041      <para>
15042       The SQL standard says that an aggregate function appearing
15043       within a nested subquery belongs to the outer query if its
15044       argument contains only outer-query variables.  Prior
15045       <productname>PostgreSQL</productname> releases did not handle
15046       this fine point correctly.
15047      </para>
15048     </listitem>
15049
15050     <listitem>
15051      <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
15052      <para>
15053       By default, tables mentioned in the query are automatically
15054       added to the <literal>FROM</> clause if they are not already
15055       there.  This is compatible with historic
15056       <productname>POSTGRES</productname> behavior but is contrary to
15057       the SQL standard.  This option allows selecting
15058       standard-compatible behavior.
15059      </para>
15060     </listitem>
15061
15062     <listitem>
15063      <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
15064      <para>
15065       This allows <command>UPDATE</command> to set a column to its
15066       declared default value.
15067      </para>
15068     </listitem>
15069
15070     <listitem>
15071      <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
15072      <para>
15073       In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
15074       only use constants, not expressions.
15075      </para>
15076     </listitem>
15077
15078     <listitem>
15079      <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
15080     </listitem>
15081    </itemizedlist>
15082   </sect3>
15083
15084   <sect3>
15085    <title>Object Manipulation Changes</title>
15086
15087    <itemizedlist>
15088     <listitem>
15089      <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
15090     </listitem>
15091
15092     <listitem>
15093      <para>Add statement-level triggers (Neil)</para>
15094      <para>
15095       While this allows a trigger to fire at the end of a statement,
15096       it does not allow the trigger to access all rows modified by the
15097       statement.  This capability is planned for a future release.
15098      </para>
15099     </listitem>
15100
15101     <listitem>
15102      <para>Add check constraints for domains (Rod)</para>
15103      <para>
15104       This greatly increases the usefulness of domains by allowing
15105       them to use check constraints.
15106      </para>
15107     </listitem>
15108
15109     <listitem>
15110      <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
15111      <para>
15112       This allows manipulation of existing domains.
15113      </para>
15114     </listitem>
15115
15116     <listitem>
15117      <para>Fix several zero-column table bugs (Tom)</para>
15118      <para>
15119       <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
15120       that occur when using such tables.
15121      </para>
15122     </listitem>
15123
15124     <listitem>
15125      <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
15126      <para>
15127       In prior releases, <literal>ALTER TABLE ... ADD
15128       PRIMARY</literal> would add a unique index, but not a not-null
15129       constraint.  That is fixed in this release.
15130      </para>
15131     </listitem>
15132
15133     <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
15134      <para>
15135       This allows control over whether new and updated rows will have
15136       an OID column.  This is most useful for saving storage space.
15137      </para>
15138     </listitem>
15139
15140     <listitem>
15141      <para>
15142       Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
15143       increment, cache, cycle values (Rod)
15144      </para>
15145     </listitem>
15146
15147     <listitem>
15148      <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
15149      <para>
15150       This command is used by <command>pg_dump</command> to record the
15151       cluster column for each table previously clustered. This
15152       information is used by database-wide cluster to cluster all
15153       previously clustered tables.
15154      </para>
15155     </listitem>
15156
15157     <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
15158     <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
15159     <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
15160
15161     <listitem>
15162      <para>
15163       Allow copying table schema using <literal>LIKE
15164       <replaceable>subtable</replaceable></literal>, also SQL:2003
15165       feature <literal>INCLUDING DEFAULTS</literal> (Rod)
15166      </para>
15167     </listitem>
15168
15169     <listitem>
15170      <para>
15171       Add <literal>WITH GRANT OPTION</literal> clause to
15172       <command>GRANT</command> (Peter)
15173      </para>
15174      <para>
15175       This enabled <command>GRANT</command> to give other users the
15176       ability to grant privileges on a object.
15177      </para>
15178     </listitem>
15179    </itemizedlist>
15180   </sect3>
15181
15182   <sect3>
15183    <title>Utility Command Changes</title>
15184
15185    <itemizedlist>
15186     <listitem>
15187      <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
15188      <para>
15189       This adds the ability for a table to be dropped or all rows
15190       deleted on transaction commit.
15191      </para>
15192     </listitem>
15193
15194     <listitem>
15195      <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
15196      <para>
15197       In previous releases, cursors were removed at the end of the
15198       transaction that created them. Cursors can now be created with
15199       the <literal>WITH HOLD</literal> option, which allows them to
15200       continue to be accessed after the creating transaction has
15201       committed.
15202      </para>
15203     </listitem>
15204
15205     <listitem>
15206      <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
15207      <para>
15208       In previous releases, <literal>FETCH 0</literal> fetched all
15209       remaining rows, and <literal>MOVE 0</literal> moved to the end
15210       of the cursor.
15211      </para>
15212     </listitem>
15213
15214     <listitem>
15215      <para>
15216       Cause <command>FETCH</command> and <command>MOVE</command> to
15217       return the number of rows fetched/moved, or zero if at the
15218       beginning/end of cursor, per SQL standard (Bruce)
15219      </para>
15220      <para>
15221       In prior releases, the row count returned by
15222       <command>FETCH</command> and <command>MOVE</command> did not
15223       accurately reflect the number of rows processed.
15224      </para>
15225     </listitem>
15226
15227     <listitem>
15228      <para>Properly handle <literal>SCROLL</literal> with cursors, or
15229      report an error (Neil)</para>
15230      <para>
15231       Allowing random access (both forward and backward scrolling) to
15232       some kinds of queries cannot be done without some additional
15233       work. If <literal>SCROLL</literal> is specified when the cursor
15234       is created, this additional work will be performed. Furthermore,
15235       if the cursor has been created with <literal>NO SCROLL</literal>,
15236       no random access is allowed.
15237      </para>
15238     </listitem>
15239
15240     <listitem>
15241      <para>
15242       Implement SQL-compatible options <literal>FIRST</>,
15243       <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
15244       <literal>RELATIVE <replaceable>n</></> for
15245       <command>FETCH</command> and <command>MOVE</command> (Tom)
15246      </para>
15247     </listitem>
15248
15249     <listitem>
15250      <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
15251     </listitem>
15252
15253     <listitem>
15254      <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
15255     </listitem>
15256
15257     <listitem>
15258      <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
15259      <para>
15260       This allows all previously clustered tables in a database to be
15261       reclustered with a single command.
15262      </para>
15263     </listitem>
15264
15265     <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
15266
15267     <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
15268
15269     <listitem>
15270      <para>
15271       Disallow literal carriage return as a data value,
15272       backslash-carriage-return and <literal>\r</> are still allowed
15273       (Bruce)
15274      </para>
15275     </listitem>
15276
15277     <listitem>
15278      <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
15279     </listitem>
15280
15281     <listitem>
15282      <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
15283     </listitem>
15284
15285     <listitem>
15286      <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
15287     </listitem>
15288
15289     <listitem>
15290      <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
15291      <para>
15292       <command>TRUNCATE</command> can now be used inside a
15293       transaction. If the transaction aborts, the changes made by the
15294       <command>TRUNCATE</command> are automatically rolled back.
15295      </para>
15296     </listitem>
15297
15298     <listitem>
15299      <para>
15300       Allow prepare/bind of utility commands like
15301       <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
15302      </para>
15303     </listitem>
15304
15305     <listitem>
15306      <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
15307     </listitem>
15308
15309     <listitem>
15310      <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
15311     </listitem>
15312
15313     <listitem>
15314      <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
15315      <para>
15316       In prior releases, functional indexes only supported a simple
15317       function applied to one or more column names.  This release
15318       allows any type of scalar expression.
15319      </para>
15320     </listitem>
15321
15322     <listitem>
15323      <para>
15324       Have <command>SHOW TRANSACTION ISOLATION</command> match input
15325       to <command>SET TRANSACTION ISOLATION</command>
15326       (Tom)
15327      </para>
15328     </listitem>
15329
15330     <listitem>
15331      <para>
15332        Have <command>COMMENT ON DATABASE</command> on nonlocal
15333        database generate a warning, rather than an error (Rod)
15334       </para>
15335
15336      <para>
15337       Database comments are stored in database-local tables so
15338       comments on a database have to be stored in each database.
15339      </para>
15340     </listitem>
15341
15342     <listitem>
15343      <para>
15344       Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
15345      </para>
15346     </listitem>
15347
15348     <listitem>
15349      <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
15350      <para>
15351       This allows system tables to be reindexed without the
15352       requirement of a standalone session, which was necessary in
15353       previous releases. The only tables that now require a standalone
15354       session for reindexing are the global system tables
15355       <literal>pg_database</>, <literal>pg_shadow</>, and
15356       <literal>pg_group</>.
15357      </para>
15358     </listitem>
15359    </itemizedlist>
15360   </sect3>
15361
15362   <sect3>
15363    <title>Data Type and Function Changes</title>
15364
15365    <itemizedlist>
15366     <listitem>
15367      <para>
15368       New server parameter <varname>extra_float_digits</varname> to
15369       control precision display of floating-point numbers (Pedro
15370       Ferreira, Tom)
15371      </para>
15372      <para>
15373       This controls output precision which was causing regression
15374       testing problems.
15375      </para>
15376     </listitem>
15377
15378     <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
15379
15380     <listitem>
15381      <para>
15382       Remove rarely used functions <function>oidrand</>,
15383       <function>oidsrand</>, and <function>userfntest</> functions
15384       (Neil)
15385      </para>
15386     </listitem>
15387
15388     <listitem>
15389      <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
15390      <para>
15391       An MD5 function was frequently requested. For more complex
15392       encryption capabilities, use
15393       <filename>contrib/pgcrypto</filename>.
15394      </para>
15395     </listitem>
15396
15397     <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
15398
15399     <listitem>
15400      <para>
15401       Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
15402       <type>timestamp without time zone</type> is assumed to be in
15403       local time, not GMT (Tom)
15404      </para>
15405     </listitem>
15406
15407     <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
15408     <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
15409     <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
15410     <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
15411
15412     <listitem>
15413      <para>
15414       Allow functions that can take any argument data type and return
15415       any data type, using <type>anyelement</type> and
15416       <type>anyarray</type> (Joe)
15417      </para>
15418      <para>
15419       This allows the creation of functions that can work with any
15420       data type.
15421      </para>
15422     </listitem>
15423
15424     <listitem>
15425      <para>
15426       Arrays can now be specified as <literal>ARRAY[1,2,3]</literal>,
15427       <literal>ARRAY[['a','b'],['c','d']]</literal>, or
15428       <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
15429      </para>
15430     </listitem>
15431
15432     <listitem>
15433      <para>
15434       Allow proper comparisons for arrays, including <literal>ORDER
15435       BY</literal> and <literal>DISTINCT</literal> support
15436       (Joe)
15437      </para>
15438     </listitem>
15439
15440     <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
15441     <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
15442
15443     <listitem>
15444      <para>
15445       Allow <literal>WHERE</literal> qualification
15446       <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
15447       (<replaceable>array_expr</>)</literal> (Joe)
15448      </para>
15449      <para>
15450       This allows arrays to behave like a list of values, for purposes
15451       like <literal>SELECT * FROM tab WHERE col IN
15452       (array_val)</literal>.
15453      </para>
15454     </listitem>
15455
15456     <listitem>
15457      <para>
15458       New array functions <function>array_append</>,
15459       <function>array_cat</>, <function>array_lower</>,
15460       <function>array_prepend</>, <function>array_to_string</>,
15461       <function>array_upper</>, <function>string_to_array</> (Joe)
15462      </para>
15463     </listitem>
15464
15465     <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
15466     <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
15467
15468     <listitem>
15469      <para>
15470       Allow 60 in seconds fields of <type>time</type>,
15471       <type>timestamp</type>, and <type>interval</type> input values
15472       (Tom)
15473      </para>
15474      <para>
15475       Sixty-second values are needed for leap seconds.
15476      </para>
15477     </listitem>
15478
15479     <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
15480
15481     <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
15482
15483     <listitem>
15484      <para>
15485       Trim trailing spaces when <type>char</type> is cast to
15486       <type>varchar</> or <type>text</> (Tom)
15487      </para>
15488     </listitem>
15489
15490     <listitem>
15491      <para>
15492       Make <type>float(<replaceable>p</>)</> measure the precision
15493       <replaceable>p</> in binary digits, not decimal digits
15494       (Tom)
15495      </para>
15496     </listitem>
15497
15498     <listitem>
15499      <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
15500     </listitem>
15501
15502     <listitem>
15503      <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
15504     </listitem>
15505
15506     <listitem>
15507      <para>
15508       Have <literal>SHOW datestyle</literal> generate output similar
15509       to that used by <literal>SET datestyle</literal> (Tom)
15510      </para>
15511     </listitem>
15512
15513     <listitem>
15514      <para>
15515       Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
15516       TIME ZONE</literal> follow the SQL convention for the sign of
15517       time zone offsets, i.e., positive is east from UTC (Tom)
15518      </para>
15519     </listitem>
15520
15521     <listitem>
15522      <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
15523      <para>
15524       Prior releases returned an incorrect value for this function call.
15525      </para>
15526     </listitem>
15527
15528     <listitem>
15529      <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
15530      <para>
15531       <function>initcap()</function> now uppercases a letter appearing
15532       after any non-alphanumeric character, rather than only after
15533       whitespace.
15534      </para>
15535     </listitem>
15536
15537     <listitem>
15538      <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
15539     </listitem>
15540
15541     <listitem>
15542      <para>
15543       Add new <varname>datestyle</varname> values <literal>MDY</>,
15544       <literal>DMY</>, and <literal>YMD</> to set input field order;
15545       honor <literal>US</> and <literal>European</> for backward
15546       compatibility (Tom)
15547      </para>
15548     </listitem>
15549
15550     <listitem>
15551      <para>
15552       String literals like <literal>'now'</literal> or
15553       <literal>'today'</literal> will no longer work as a column
15554       default. Use functions such as <function>now()</function>,
15555       <function>current_timestamp</function> instead.  (change
15556       required for prepared statements) (Tom)
15557      </para>
15558     </listitem>
15559
15560     <listitem>
15561      <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
15562      <para>
15563       NaN was already sorted after ordinary numeric values for most
15564       purposes, but <function>min()</> and <function>max()</> didn't
15565       get this right.
15566      </para>
15567     </listitem>
15568
15569     <listitem>
15570      <para>Prevent interval from suppressing <literal>:00</literal>
15571      seconds display</para>
15572     </listitem>
15573
15574     <listitem>
15575      <para>
15576       New functions <function>pg_get_triggerdef(prettyprint)</function>
15577       and <function>pg_conversion_is_visible()</function> (Christopher)
15578      </para>
15579     </listitem>
15580
15581     <listitem>
15582      <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
15583     </listitem>
15584
15585     <listitem>
15586      <para>
15587       Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
15588       match <varname>datestyle</varname>
15589      </para>
15590     </listitem>
15591
15592     <listitem>
15593      <para>
15594       Make <function>pg_get_constraintdef</function> support
15595       unique, primary-key, and check constraints (Christopher)
15596      </para>
15597     </listitem>
15598    </itemizedlist>
15599   </sect3>
15600
15601   <sect3>
15602    <title>Server-Side Language Changes</title>
15603
15604    <itemizedlist>
15605     <listitem>
15606      <para>
15607       Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
15608       used on a zero-row record variable (Tom)
15609      </para>
15610     </listitem>
15611
15612     <listitem>
15613      <para>
15614       Make PL/Python's <function>spi_execute</function> interface
15615       handle null values properly (Andrew Bosma)
15616      </para>
15617     </listitem>
15618
15619     <listitem>
15620      <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
15621     </listitem>
15622
15623     <listitem>
15624      <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
15625     </listitem>
15626
15627     <listitem>
15628      <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
15629      <para>
15630       The Python language no longer supports a restricted execution
15631       environment, so the trusted version of PL/Python was removed. If
15632       this situation changes, a version of PL/Python that can be used
15633       by non-superusers will be readded.
15634      </para>
15635     </listitem>
15636
15637     <listitem>
15638      <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
15639     </listitem>
15640
15641     <listitem>
15642      <para>Allow polymorphic SQL functions (Joe)</para>
15643     </listitem>
15644
15645     <listitem>
15646      <para>
15647       Improved compiled function caching mechanism in PL/pgSQL with
15648       full support for polymorphism (Joe)
15649      </para>
15650     </listitem>
15651
15652     <listitem>
15653      <para>
15654       Add new parameter <literal>$0</> in PL/pgSQL representing the
15655       function's actual return type (Joe)
15656      </para>
15657     </listitem>
15658
15659     <listitem>
15660      <para>
15661       Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
15662      </para>
15663     </listitem>
15664
15665     <listitem>
15666      <para>
15667       Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
15668       qualified type names in the parameter type list
15669       (Jan)
15670      </para>
15671     </listitem>
15672    </itemizedlist>
15673   </sect3>
15674
15675   <sect3>
15676    <title>psql Changes</title>
15677
15678    <itemizedlist>
15679     <listitem>
15680      <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
15681      <para>
15682       This forces the pager to be used even if the number of rows is
15683       less than the screen height.  This is valuable for rows that
15684       wrap across several screen rows.
15685      </para>
15686     </listitem>
15687
15688     <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
15689     <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
15690     <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
15691
15692     <listitem>
15693      <para>
15694       <command>\encoding</> now changes based on the server parameter
15695       <varname>client_encoding</varname> (Tom)
15696      </para>
15697      <para>
15698       In previous versions, <command>\encoding</command> was not aware
15699       of encoding changes made using <literal>SET
15700       client_encoding</literal>.
15701      </para>
15702     </listitem>
15703
15704     <listitem>
15705      <para>Save editor buffer into readline history (Ross)</para>
15706      <para>
15707       When <command>\e</> is used to edit a query, the result is saved
15708       in the readline history for retrieval using the up arrow.
15709      </para>
15710     </listitem>
15711
15712     <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
15713     <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
15714
15715     <listitem>
15716      <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
15717      <para>
15718       This takes the place of the removed server parameter <varname>autocommit</varname>.
15719      </para>
15720     </listitem>
15721
15722     <listitem>
15723      <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
15724      <para>
15725       This controls the new error reporting details.
15726      </para>
15727     </listitem>
15728
15729     <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
15730     <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
15731    </itemizedlist>
15732   </sect3>
15733
15734   <sect3>
15735    <title>pg_dump Changes</title>
15736
15737    <itemizedlist>
15738     <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
15739     <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
15740
15741     <listitem>
15742      <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
15743      <para>
15744       This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
15745      </para>
15746     </listitem>
15747
15748     <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
15749
15750     <listitem>
15751      <para>
15752       Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privileges (Tom)
15753      </para>
15754     </listitem>
15755
15756     <listitem>
15757      <para>
15758       Allow pg_dumpall to support the options <option>-a</>,
15759       <option>-s</>, <option>-x</> of pg_dump (Tom)
15760      </para>
15761     </listitem>
15762
15763     <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
15764
15765     <listitem>
15766      <para>
15767       pg_dump options <option>--use-set-session-authorization</option>
15768       and <option>--no-reconnect</option> now do nothing, all dumps
15769       use <command>SET SESSION AUTHORIZATION</command>
15770      </para>
15771      <para>
15772       pg_dump no longer reconnects to switch users, but instead always
15773       uses <command>SET SESSION AUTHORIZATION</command>. This will
15774       reduce password prompting during restores.
15775      </para>
15776     </listitem>
15777
15778     <listitem>
15779      <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
15780      <para>
15781       <productname>PostgreSQL</productname> now includes its own
15782       long-option processing routines.
15783      </para>
15784     </listitem>
15785    </itemizedlist>
15786   </sect3>
15787
15788   <sect3>
15789    <title>libpq Changes</title>
15790
15791    <itemizedlist>
15792     <listitem>
15793      <para>
15794       Add function <function>PQfreemem</function> for freeing memory on
15795       Windows, suggested for <command>NOTIFY</command> (Bruce)
15796      </para>
15797      <para>
15798       Windows requires that memory allocated in a library be freed by
15799       a function in the same library, hence
15800       <function>free()</function> doesn't work for freeing memory
15801       allocated by libpq. <function>PQfreemem</function> is the proper
15802       way to free libpq memory, especially on Windows, and is
15803       recommended for other platforms as well.
15804      </para>
15805     </listitem>
15806
15807     <listitem>
15808      <para>Document service capability, and add sample file (Bruce)</para>
15809      <para>
15810       This allows clients to look up connection information in a
15811       central file on the client machine.
15812      </para>
15813     </listitem>
15814
15815     <listitem>
15816      <para>
15817       Make <function>PQsetdbLogin</function> have the same defaults as
15818       <function>PQconnectdb</function> (Tom)
15819      </para>
15820     </listitem>
15821
15822     <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
15823
15824     <listitem>
15825      <para>
15826       Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
15827      </para>
15828     </listitem>
15829
15830     <listitem>
15831      <para>
15832       Allow thread-safe libpq with <filename>configure</filename>
15833       option <option>--enable-thread-safety</option> (Lee Kindness,
15834       Philip Yarra)
15835      </para>
15836     </listitem>
15837
15838     <listitem>
15839      <para>
15840       Allow function <function>pqInternalNotice</function> to accept a
15841       format string and arguments instead of just a preformatted
15842       message (Tom, Sean Chittenden)
15843      </para>
15844     </listitem>
15845
15846     <listitem>
15847      <para>
15848       Control SSL negotiation with <literal>sslmode</literal> values
15849       <literal>disable</literal>, <literal>allow</literal>,
15850       <literal>prefer</literal>, and <literal>require</literal> (Jon
15851       Jensen)
15852      </para>
15853     </listitem>
15854
15855     <listitem>
15856      <para>Allow new error codes and levels of text (Tom)</para>
15857     </listitem>
15858
15859     <listitem>
15860      <para>Allow access to the underlying table and column of a query result (Tom)</para>
15861      <para>
15862       This is helpful for query-builder applications that want to know
15863       the underlying table and column names associated with a specific
15864       result set.
15865      </para>
15866     </listitem>
15867
15868     <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
15869     <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
15870
15871     <listitem>
15872      <para>
15873       Add function <function>PQexecPrepared</function> and
15874       <function>PQsendQueryPrepared</function> functions which perform
15875       bind/execute of previously prepared statements (Tom)
15876       </para>
15877      </listitem>
15878    </itemizedlist>
15879   </sect3>
15880
15881   <sect3>
15882    <title>JDBC Changes</title>
15883
15884    <itemizedlist>
15885     <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
15886     <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
15887     <listitem><para>Support SSL connections (Barry)</para></listitem>
15888     <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
15889     <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
15890    </itemizedlist>
15891   </sect3>
15892
15893   <sect3>
15894    <title>Miscellaneous Interface Changes</title>
15895
15896    <itemizedlist>
15897     <listitem>
15898      <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
15899     </listitem>
15900     <listitem>
15901      <para>Add Informix compatibility to ECPG (Michael)</para>
15902      <para>
15903       This allows ECPG to process embedded C programs that were
15904       written using certain Informix extensions.
15905      </para>
15906     </listitem>
15907
15908     <listitem>
15909      <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
15910     </listitem>
15911
15912     <listitem>
15913      <para>
15914       Allow thread-safe embedded SQL programs with
15915       <filename>configure</filename> option
15916       <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
15917      </para>
15918      <para>
15919       This allows multiple threads to access the database at the same
15920       time.
15921      </para>
15922     </listitem>
15923
15924     <listitem>
15925      <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
15926     </listitem>
15927    </itemizedlist>
15928   </sect3>
15929
15930   <sect3>
15931    <title>Source Code Changes</title>
15932
15933    <itemizedlist>
15934     <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
15935     <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
15936     <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
15937     <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
15938     <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
15939     <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
15940     <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
15941     <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
15942     <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
15943     <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
15944     <listitem><para> Bison &gt;= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
15945     <listitem><para>Merge documentation into one book (Peter)</para></listitem>
15946     <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
15947     <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
15948     <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
15949     <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
15950     <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
15951     <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
15952     <listitem>
15953      <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
15954      <para>
15955       This was no longer needed now that we have <command>CREATE CONVERSION</command>.
15956      </para>
15957     </listitem>
15958     <listitem>
15959      <para>Generate a compile error if spinlock code is not found (Bruce)</para>
15960      <para>
15961       Platforms without spinlock code will now fail to compile, rather
15962       than silently using semaphores. This failure can be disabled
15963       with a new <command>configure</command> option.
15964      </para>
15965     </listitem>
15966    </itemizedlist>
15967   </sect3>
15968
15969   <sect3>
15970    <title>Contrib Changes</title>
15971
15972    <itemizedlist>
15973     <listitem><para>Change dbmirror license to BSD</para></listitem>
15974     <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
15975     <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
15976     <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
15977     <listitem><para>Update oracle</para></listitem>
15978     <listitem><para>Update mysql</para></listitem>
15979     <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
15980     <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
15981     <listitem><para>Update btree_gist (Oleg)</para></listitem>
15982     <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
15983     <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
15984     <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
15985     <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
15986     <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
15987     <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
15988     <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
15989     <listitem><para>Improve pgstattuple (Rod)</para></listitem>
15990     <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
15991     <listitem><para>Improve adddepend (Rod)</para></listitem>
15992     <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
15993     <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
15994     <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
15995    </itemizedlist>
15996   </sect3>
15997   </sect2>
15998  </sect1>
15999
16000   <sect1 id="release-7-3-20">
16001    <title>Release 7.3.20</title>
16002
16003    <note>
16004    <title>Release date</title>
16005    <simpara>2007-09-17</simpara>
16006    </note>
16007
16008    <para>
16009     This release contains fixes from 7.3.19.
16010    </para>
16011
16012    <sect2>
16013     <title>Migration to version 7.3.20</title>
16014
16015     <para>
16016      A dump/restore is not required for those running 7.3.X.  However,
16017      if you are upgrading from a version earlier than 7.3.13, see the release
16018      notes for 7.3.13.
16019     </para>
16020
16021    </sect2>
16022
16023    <sect2>
16024     <title>Changes</title>
16025
16026     <itemizedlist>
16027
16028      <listitem>
16029       <para>
16030        Prevent index corruption when a transaction inserts rows and
16031        then aborts close to the end of a concurrent <command>VACUUM</>
16032        on the same table (Tom)
16033       </para>
16034      </listitem>
16035
16036      <listitem>
16037       <para>
16038        Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
16039       </para>
16040      </listitem>
16041
16042      <listitem>
16043       <para>
16044        Fix crash when <varname>log_min_error_statement</> logging runs out
16045        of memory (Tom)
16046       </para>
16047      </listitem>
16048
16049      <listitem>
16050       <para>
16051        Require non-superusers who use <filename>/contrib/dblink</> to use only
16052        password authentication, as a security measure (Joe)
16053       </para>
16054      </listitem>
16055
16056     </itemizedlist>
16057
16058    </sect2>
16059   </sect1>
16060
16061   <sect1 id="release-7-3-19">
16062    <title>Release 7.3.19</title>
16063
16064    <note>
16065    <title>Release date</title>
16066    <simpara>2007-04-23</simpara>
16067    </note>
16068
16069    <para>
16070     This release contains fixes from 7.3.18,
16071     including a security fix.
16072    </para>
16073
16074    <sect2>
16075     <title>Migration to version 7.3.19</title>
16076
16077     <para>
16078      A dump/restore is not required for those running 7.3.X.  However,
16079      if you are upgrading from a version earlier than 7.3.13, see the release
16080      notes for 7.3.13.
16081     </para>
16082
16083    </sect2>
16084
16085    <sect2>
16086     <title>Changes</title>
16087
16088     <itemizedlist>
16089
16090      <listitem>
16091      <para>
16092       Support explicit placement of the temporary-table schema within
16093       <varname>search_path</>, and disable searching it for functions
16094       and operators (Tom)
16095      </para>
16096      <para>
16097       This is needed to allow a security-definer function to set a
16098       truly secure value of <varname>search_path</>.  Without it,
16099       an unprivileged SQL user can use temporary objects to execute code
16100       with the privileges of the security-definer function (CVE-2007-2138).
16101       See <command>CREATE FUNCTION</> for more information.
16102      </para>
16103      </listitem>
16104
16105      <listitem>
16106      <para>
16107       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
16108       <command>UPDATE</> chains (Tom, Pavan Deolasee)
16109      </para>
16110      </listitem>
16111
16112     </itemizedlist>
16113
16114    </sect2>
16115   </sect1>
16116
16117   <sect1 id="release-7-3-18">
16118    <title>Release 7.3.18</title>
16119
16120    <note>
16121    <title>Release date</title>
16122    <simpara>2007-02-05</simpara>
16123    </note>
16124
16125    <para>
16126     This release contains a variety of fixes from 7.3.17, including
16127     a security fix.
16128    </para>
16129
16130    <sect2>
16131     <title>Migration to version 7.3.18</title>
16132
16133     <para>
16134      A dump/restore is not required for those running 7.3.X.  However,
16135      if you are upgrading from a version earlier than 7.3.13, see the release
16136      notes for 7.3.13.
16137     </para>
16138
16139    </sect2>
16140
16141    <sect2>
16142     <title>Changes</title>
16143
16144     <itemizedlist>
16145
16146      <listitem>
16147      <para>
16148       Remove security vulnerability that allowed connected users
16149       to read backend memory (Tom)
16150      </para>
16151      <para>
16152       The vulnerability involves changing the
16153       data type of a table column used in a SQL function (CVE-2007-0555).
16154       This error can easily be exploited to cause a backend crash, and in
16155       principle might be used to read database content that the user
16156       should not be able to access.
16157      </para>
16158      </listitem>
16159
16160      <listitem>
16161      <para>
16162       Fix rare bug wherein btree index page splits could fail
16163       due to choosing an infeasible split point (Heikki Linnakangas)
16164      </para>
16165      </listitem>
16166
16167      <listitem>
16168      <para>
16169       Tighten security of multi-byte character processing for UTF8 sequences
16170       over three bytes long (Tom)
16171      </para>
16172      </listitem>
16173
16174     </itemizedlist>
16175
16176    </sect2>
16177   </sect1>
16178
16179   <sect1 id="release-7-3-17">
16180    <title>Release 7.3.17</title>
16181
16182    <note>
16183    <title>Release date</title>
16184    <simpara>2007-01-08</simpara>
16185    </note>
16186
16187    <para>
16188     This release contains a variety of fixes from 7.3.16.
16189    </para>
16190
16191    <sect2>
16192     <title>Migration to version 7.3.17</title>
16193
16194     <para>
16195      A dump/restore is not required for those running 7.3.X.  However,
16196      if you are upgrading from a version earlier than 7.3.13, see the release
16197      notes for 7.3.13.
16198     </para>
16199
16200    </sect2>
16201
16202    <sect2>
16203     <title>Changes</title>
16204
16205     <itemizedlist>
16206
16207      <listitem>
16208       <para>
16209        <function>to_number()</> and <function>to_char(numeric)</>
16210        are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
16211        new <application>initdb</> installs (Tom)
16212       </para>
16213
16214       <para>
16215        This is because <varname>lc_numeric</> can potentially
16216        change the output of these functions.
16217       </para>
16218      </listitem>
16219
16220      <listitem>
16221       <para>
16222        Improve index usage of regular expressions that use parentheses (Tom)
16223       </para>
16224
16225       <para>
16226        This improves <application>psql</> <literal>\d</> performance also.
16227       </para>
16228      </listitem>
16229
16230     </itemizedlist>
16231
16232    </sect2>
16233   </sect1>
16234
16235   <sect1 id="release-7-3-16">
16236    <title>Release 7.3.16</title>
16237
16238    <note>
16239    <title>Release date</title>
16240    <simpara>2006-10-16</simpara>
16241    </note>
16242
16243    <para>
16244     This release contains a variety of fixes from 7.3.15.
16245    </para>
16246
16247    <sect2>
16248     <title>Migration to version 7.3.16</title>
16249
16250     <para>
16251      A dump/restore is not required for those running 7.3.X.  However,
16252      if you are upgrading from a version earlier than 7.3.13, see the release
16253      notes for 7.3.13.
16254     </para>
16255
16256    </sect2>
16257
16258    <sect2>
16259     <title>Changes</title>
16260
16261 <itemizedlist>
16262 <listitem><para>Fix corner cases in pattern matching for
16263   <application>psql</>'s <literal>\d</> commands</para></listitem>
16264 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
16265   (Teodor)</para></listitem>
16266 <listitem><para>Back-port 7.4 spinlock code to improve performance and support
16267 64-bit architectures better</para> </listitem>
16268 <listitem><para>Fix SSL-related memory leak in libpq</para> </listitem>
16269 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
16270 <listitem><para>Adjust regression tests for recent changes in US DST laws
16271 </para> </listitem>
16272 </itemizedlist>
16273
16274    </sect2>
16275   </sect1>
16276
16277   <sect1 id="release-7-3-15">
16278    <title>Release 7.3.15</title>
16279
16280    <note>
16281    <title>Release date</title>
16282    <simpara>2006-05-23</simpara>
16283    </note>
16284
16285    <para>
16286     This release contains a variety of fixes from 7.3.14,
16287     including patches for extremely serious security issues.
16288    </para>
16289
16290    <sect2>
16291     <title>Migration to version 7.3.15</title>
16292
16293     <para>
16294      A dump/restore is not required for those running 7.3.X.  However,
16295      if you are upgrading from a version earlier than 7.3.13, see the release
16296      notes for 7.3.13.
16297     </para>
16298
16299     <para>
16300      Full security against the SQL-injection attacks described in
16301      CVE-2006-2313 and CVE-2006-2314 might require changes in application
16302      code.  If you have applications that embed untrustworthy strings
16303      into SQL commands, you should examine them as soon as possible to
16304      ensure that they are using recommended escaping techniques.  In
16305      most cases, applications should be using subroutines provided by
16306      libraries or drivers (such as <application>libpq</>'s
16307      <function>PQescapeStringConn()</>) to perform string escaping,
16308      rather than relying on <foreignphrase>ad hoc</> code to do it.
16309     </para>
16310    </sect2>
16311
16312    <sect2>
16313     <title>Changes</title>
16314
16315 <itemizedlist>
16316 <listitem><para>Change the server to reject invalidly-encoded multibyte
16317 characters in all cases (Tatsuo, Tom)</para>
16318 <para>While <productname>PostgreSQL</> has been moving in this direction for
16319 some time, the checks are now applied uniformly to all encodings and all
16320 textual input, and are now always errors not merely warnings.  This change
16321 defends against SQL-injection attacks of the type described in CVE-2006-2313.
16322 </para></listitem>
16323
16324 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
16325 <para>As a server-side defense against SQL-injection attacks of the type
16326 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
16327 <literal>\'</> as a representation of ASCII single quote in SQL string
16328 literals.  By default, <literal>\'</> is rejected only when
16329 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
16330 GB18030, or UHC), which is the scenario in which SQL injection is possible.
16331 A new configuration parameter <varname>backslash_quote</> is available to
16332 adjust this behavior when needed.  Note that full security against
16333 CVE-2006-2314 might require client-side changes; the purpose of
16334 <varname>backslash_quote</> is in part to make it obvious that insecure
16335 clients are insecure.
16336 </para></listitem>
16337
16338 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
16339 aware of encoding considerations</para>
16340 <para>This fixes <application>libpq</>-using applications for the security
16341 issues described in CVE-2006-2313 and CVE-2006-2314.
16342 Applications that use multiple <productname>PostgreSQL</> connections
16343 concurrently should migrate to <function>PQescapeStringConn()</> and
16344 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
16345 for the settings in use in each database connection.  Applications that
16346 do string escaping <quote>by hand</> should be modified to rely on library
16347 routines instead.
16348 </para></listitem>
16349
16350 <listitem><para>Fix some incorrect encoding conversion functions</para>
16351 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
16352 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
16353 <function>mic_to_euc_tw</> were all broken to varying
16354 extents.
16355 </para></listitem>
16356
16357 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
16358 (Bruce, Jan)</para></listitem>
16359
16360 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
16361 Fuhr)</para></listitem>
16362
16363 <listitem><para>Fix various minor memory leaks</para></listitem>
16364 </itemizedlist>
16365
16366    </sect2>
16367   </sect1>
16368
16369   <sect1 id="release-7-3-14">
16370    <title>Release 7.3.14</title>
16371
16372    <note>
16373    <title>Release date</title>
16374    <simpara>2006-02-14</simpara>
16375    </note>
16376
16377    <para>
16378     This release contains a variety of fixes from 7.3.13.
16379    </para>
16380
16381    <sect2>
16382     <title>Migration to version 7.3.14</title>
16383
16384     <para>
16385      A dump/restore is not required for those running 7.3.X.  However,
16386      if you are upgrading from a version earlier than 7.3.13, see the release
16387      notes for 7.3.13.
16388     </para>
16389    </sect2>
16390
16391    <sect2>
16392     <title>Changes</title>
16393
16394 <itemizedlist>
16395
16396 <listitem><para>Fix potential crash in <command>SET
16397 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
16398 <para>An unprivileged user could crash the server process, resulting in
16399 momentary denial of service to other users, if the server has been compiled
16400 with Asserts enabled (which is not the default).
16401 Thanks to Akio Ishida for reporting this problem.
16402 </para></listitem>
16403
16404 <listitem><para>Fix bug with row visibility logic in self-inserted
16405 rows (Tom)</para>
16406 <para>Under rare circumstances a row inserted by the current command
16407 could be seen as already valid, when it should not be.  Repairs bug
16408 created in 7.3.11 release.
16409 </para></listitem>
16410
16411 <listitem><para>Fix race condition that could lead to <quote>file already
16412 exists</> errors during pg_clog file creation
16413 (Tom)</para></listitem>
16414
16415 <listitem><para>Fix to allow restoring dumps that have cross-schema
16416 references to custom operators (Tom)</para></listitem>
16417
16418 <listitem><para>Portability fix for testing presence of <function>finite</>
16419 and <function>isinf</> during configure (Tom)</para></listitem>
16420
16421 </itemizedlist>
16422
16423    </sect2>
16424   </sect1>
16425
16426   <sect1 id="release-7-3-13">
16427    <title>Release 7.3.13</title>
16428
16429    <note>
16430    <title>Release date</title>
16431    <simpara>2006-01-09</simpara>
16432    </note>
16433
16434    <para>
16435     This release contains a variety of fixes from 7.3.12.
16436    </para>
16437
16438    <sect2>
16439     <title>Migration to version 7.3.13</title>
16440
16441     <para>
16442      A dump/restore is not required for those running 7.3.X.  However,
16443      if you are upgrading from a version earlier than 7.3.10, see the release
16444      notes for 7.3.10.
16445      Also, you might need to <command>REINDEX</> indexes on textual
16446      columns after updating, if you are affected by the locale or
16447      <application>plperl</> issues described below.
16448     </para>
16449    </sect2>
16450
16451    <sect2>
16452     <title>Changes</title>
16453
16454 <itemizedlist>
16455
16456 <listitem><para>Fix character string comparison for locales that consider
16457 different character combinations as equal, such as Hungarian (Tom)</para>
16458 <para>This might require <command>REINDEX</> to fix existing indexes on
16459 textual columns.</para></listitem>
16460
16461 <listitem><para>Set locale environment variables during postmaster startup
16462 to ensure that <application>plperl</> won't change the locale later</para>
16463 <para>This fixes a problem that occurred if the <application>postmaster</> was
16464 started with environment variables specifying a different locale than what
16465 <application>initdb</> had been told.  Under these conditions, any use of
16466 <application>plperl</> was likely to lead to corrupt indexes.  You might need
16467 <command>REINDEX</> to fix existing indexes on
16468 textual columns if this has happened to you.</para></listitem>
16469
16470 <listitem><para>Fix longstanding bug in strpos() and regular expression
16471 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
16472 </para></listitem>
16473
16474 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
16475 which caused it not to use all available salt space for MD5 and
16476 XDES algorithms (Marko Kreen, Solar Designer)</para>
16477 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
16478
16479 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
16480 rather than crashing, when the number of columns specified is different from
16481 what's actually returned by the query (Joe)</para></listitem>
16482
16483 </itemizedlist>
16484
16485    </sect2>
16486   </sect1>
16487
16488   <sect1 id="release-7-3-12">
16489    <title>Release 7.3.12</title>
16490
16491    <note>
16492    <title>Release date</title>
16493    <simpara>2005-12-12</simpara>
16494    </note>
16495
16496    <para>
16497     This release contains a variety of fixes from 7.3.11.
16498    </para>
16499
16500    <sect2>
16501     <title>Migration to version 7.3.12</title>
16502
16503     <para>
16504      A dump/restore is not required for those running 7.3.X.  However,
16505      if you are upgrading from a version earlier than 7.3.10, see the release
16506      notes for 7.3.10.
16507     </para>
16508    </sect2>
16509
16510    <sect2>
16511     <title>Changes</title>
16512
16513 <itemizedlist>
16514
16515 <listitem><para>Fix race condition in transaction log management</para>
16516 <para>There was a narrow window in which an I/O operation could be initiated
16517 for the wrong page, leading to an Assert failure or data
16518 corruption.</para>
16519 </listitem>
16520
16521 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
16522
16523 <listitem><para>Fix longstanding planning error for outer joins</para>
16524 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
16525 only supported with merge-joinable join conditions</>.</para></listitem>
16526
16527 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
16528 table has been dropped</para></listitem>
16529
16530 </itemizedlist>
16531
16532    </sect2>
16533   </sect1>
16534
16535   <sect1 id="release-7-3-11">
16536    <title>Release 7.3.11</title>
16537
16538    <note>
16539    <title>Release date</title>
16540    <simpara>2005-10-04</simpara>
16541    </note>
16542
16543    <para>
16544     This release contains a variety of fixes from 7.3.10.
16545    </para>
16546
16547    <sect2>
16548     <title>Migration to version 7.3.11</title>
16549
16550     <para>
16551      A dump/restore is not required for those running 7.3.X.  However,
16552      if you are upgrading from a version earlier than 7.3.10, see the release
16553      notes for 7.3.10.
16554     </para>
16555    </sect2>
16556
16557    <sect2>
16558     <title>Changes</title>
16559
16560 <itemizedlist>
16561 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
16562 <literal>ctid</> chains too soon, and add more checking in code that follows
16563 <literal>ctid</> links</para>
16564 <para>This fixes a long-standing problem that could cause crashes in very rare
16565 circumstances.</para></listitem>
16566 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
16567 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
16568 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
16569 because it only padded to the specified number of bytes without
16570 considering how many characters were stored.</para></listitem>
16571 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
16572 a...</> with GiST index on column <literal>a</></para></listitem>
16573 <listitem><para>Improve checking for partially-written WAL
16574 pages</para></listitem>
16575 <listitem><para>Improve robustness of signal handling when SSL is
16576 enabled</para></listitem>
16577 <listitem><para>Various memory leakage fixes</para></listitem>
16578 <listitem><para>Various portability improvements</para></listitem>
16579 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
16580 the variable is of pass-by-reference type</para></listitem>
16581 </itemizedlist>
16582
16583    </sect2>
16584   </sect1>
16585
16586   <sect1 id="release-7-3-10">
16587    <title>Release 7.3.10</title>
16588
16589    <note>
16590    <title>Release date</title>
16591    <simpara>2005-05-09</simpara>
16592    </note>
16593
16594    <para>
16595     This release contains a variety of fixes from 7.3.9, including several
16596     security-related issues.
16597    </para>
16598
16599    <sect2>
16600     <title>Migration to version 7.3.10</title>
16601
16602     <para>
16603      A dump/restore is not required for those running 7.3.X.  However,
16604      it is one possible way of handling a significant security problem
16605      that has been found in the initial contents of 7.3.X system
16606      catalogs.  A dump/initdb/reload sequence using 7.3.10's initdb will
16607      automatically correct this problem.
16608     </para>
16609
16610     <para>
16611      The security problem is that the built-in character set encoding
16612      conversion functions can be invoked from SQL commands by unprivileged
16613      users, but the functions were not designed for such use and are not
16614      secure against malicious choices of arguments.  The fix involves changing
16615      the declared parameter list of these functions so that they can no longer
16616      be invoked from SQL commands.  (This does not affect their normal use
16617      by the encoding conversion machinery.)
16618      It is strongly recommended that all installations repair this error,
16619      either by initdb or by following the manual repair procedure given
16620      below.  The error at least allows unprivileged database users to crash
16621      their server process, and might allow unprivileged users to gain the
16622      privileges of a database superuser.
16623     </para>
16624
16625     <para>
16626      If you wish not to do an initdb, perform the following procedure instead.
16627      As the database superuser, do:
16628
16629 <programlisting>
16630 BEGIN;
16631 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
16632 WHERE pronamespace = 11 AND pronargs = 5
16633       AND proargtypes[2] = 'cstring'::regtype;
16634 -- The command should report having updated 90 rows;
16635 -- if not, rollback and investigate instead of committing!
16636 COMMIT;
16637 </programlisting>
16638     </para>
16639
16640     <para>
16641      The above procedure must be carried out in <emphasis>each</> database
16642      of an installation, including <literal>template1</>, and ideally
16643      including <literal>template0</> as well.  If you do not fix the
16644      template databases then any subsequently created databases will contain
16645      the same error.  <literal>template1</> can be fixed in the same way
16646      as any other database, but fixing <literal>template0</> requires
16647      additional steps.  First, from any database issue:
16648 <programlisting>
16649 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
16650 </programlisting>
16651       Next connect to <literal>template0</> and perform the above repair
16652       procedure.  Finally, do:
16653 <programlisting>
16654 -- re-freeze template0:
16655 VACUUM FREEZE;
16656 -- and protect it against future alterations:
16657 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
16658 </programlisting>
16659     </para>
16660    </sect2>
16661
16662    <sect2>
16663     <title>Changes</title>
16664
16665 <itemizedlist>
16666 <listitem><para>Change encoding function signature to prevent
16667 misuse</para></listitem>
16668 <listitem><para>Repair ancient race condition that allowed a transaction to be
16669 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
16670 than for other purposes</para>
16671 <para>This is an extremely serious bug since it could lead to apparent
16672 data inconsistencies being briefly visible to applications.</para></listitem>
16673 <listitem><para>Repair race condition between relation extension and
16674 VACUUM</para>
16675 <para>This could theoretically have caused loss of a page's worth of
16676 freshly-inserted data, although the scenario seems of very low probability.
16677 There are no known cases of it having caused more than an Assert failure.
16678 </para></listitem>
16679 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
16680 <para>
16681 The comparison code was wrong in the case where the
16682 <literal>--enable-integer-datetimes</> configuration switch had been used.
16683 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
16684 it will need to be <command>REINDEX</>ed after installing this update, because
16685 the fix corrects the sort order of column values.
16686 </para></listitem>
16687 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
16688 <type>TIME WITH TIME ZONE</> values</para></listitem>
16689 <listitem><para>Fix mis-display of negative fractional seconds in
16690 <type>INTERVAL</> values</para>
16691 <para>
16692 This error only occurred when the
16693 <literal>--enable-integer-datetimes</> configuration switch had been used.
16694 </para></listitem>
16695 <listitem><para>Additional buffer overrun checks in plpgsql
16696 (Neil)</para></listitem>
16697 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
16698 correctly (Neil)</para></listitem>
16699 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
16700 month-related formats</para></listitem>
16701 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
16702 (Marko Kreen)</para></listitem>
16703 <listitem><para>Still more 64-bit fixes for
16704 <filename>contrib/intagg</></para></listitem>
16705 <listitem><para>Prevent incorrect optimization of functions returning
16706 <type>RECORD</></para></listitem>
16707 </itemizedlist>
16708
16709   </sect2>
16710  </sect1>
16711
16712   <sect1 id="release-7-3-9">
16713    <title>Release 7.3.9</title>
16714
16715    <note>
16716    <title>Release date</title>
16717    <simpara>2005-01-31</simpara>
16718    </note>
16719
16720    <para>
16721     This release contains a variety of fixes from 7.3.8, including several
16722     security-related issues.
16723    </para>
16724
16725    <sect2>
16726     <title>Migration to version 7.3.9</title>
16727
16728     <para>
16729      A dump/restore is not required for those running 7.3.X.
16730     </para>
16731    </sect2>
16732
16733    <sect2>
16734     <title>Changes</title>
16735
16736 <itemizedlist>
16737 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
16738 <para>
16739 On platforms that will automatically execute initialization functions of a
16740 shared library (this includes at least Windows and ELF-based Unixen),
16741 <command>LOAD</> can be used to make the server execute arbitrary code.
16742 Thanks to NGS Software for reporting this.</para></listitem>
16743 <listitem><para>Check that creator of an aggregate function has the right to
16744 execute the specified transition functions</para>
16745 <para>
16746 This oversight made it possible to bypass denial of EXECUTE
16747 permission on a function.</para></listitem>
16748 <listitem><para>Fix security and 64-bit issues in
16749 contrib/intagg</para></listitem>
16750 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
16751 Jurka)</para></listitem>
16752 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
16753 many parameters (Neil)</para></listitem>
16754 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
16755 <para>
16756 The result of the join was mistakenly supposed to be sorted the same as the
16757 left input.  This could not only deliver mis-sorted output to the user, but
16758 in case of nested merge joins could give outright wrong answers.
16759 </para></listitem>
16760 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
16761 <listitem><para>Fix display of negative intervals in SQL and GERMAN
16762 datestyles</para></listitem>
16763 </itemizedlist>
16764
16765   </sect2>
16766  </sect1>
16767
16768   <sect1 id="release-7-3-8">
16769    <title>Release 7.3.8</title>
16770
16771    <note>
16772    <title>Release date</title>
16773    <simpara>2004-10-22</simpara>
16774    </note>
16775
16776    <para>
16777     This release contains a variety of fixes from 7.3.7.
16778    </para>
16779
16780
16781    <sect2>
16782     <title>Migration to version 7.3.8</title>
16783
16784     <para>
16785      A dump/restore is not required for those running 7.3.X.
16786     </para>
16787    </sect2>
16788
16789    <sect2>
16790     <title>Changes</title>
16791
16792 <itemizedlist>
16793 <listitem><para>Repair possible failure to update hint bits on disk</para>
16794 <para>
16795 Under rare circumstances this oversight could lead to
16796 <quote>could not access transaction status</> failures, which qualifies
16797 it as a potential-data-loss bug.
16798 </para></listitem>
16799 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
16800 <para>
16801 Very large left joins using a hash join plan could fail to output unmatched
16802 left-side rows given just the right data distribution.
16803 </para></listitem>
16804 <listitem><para>Disallow running pg_ctl as root</para>
16805 <para>
16806 This is to guard against any possible security issues.
16807 </para></listitem>
16808 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
16809 <para>
16810 This has been reported as a security issue, though it's hardly worthy of
16811 concern since there is no reason for non-developers to use this script anyway.
16812 </para></listitem>
16813 </itemizedlist>
16814
16815   </sect2>
16816  </sect1>
16817
16818   <sect1 id="release-7-3-7">
16819    <title>Release 7.3.7</title>
16820
16821    <note>
16822    <title>Release date</title>
16823    <simpara>2004-08-16</simpara>
16824    </note>
16825
16826    <para>
16827     This release contains one critical fix over 7.3.6, and some minor items.
16828    </para>
16829
16830
16831    <sect2>
16832     <title>Migration to version 7.3.7</title>
16833
16834     <para>
16835      A dump/restore is not required for those running 7.3.X.
16836     </para>
16837    </sect2>
16838
16839    <sect2>
16840     <title>Changes</title>
16841
16842 <itemizedlist>
16843 <listitem><para>Prevent possible loss of committed transactions during crash</para>
16844 <para>
16845 Due to insufficient interlocking between transaction commit and checkpointing,
16846 it was possible for transactions committed just before the most recent
16847 checkpoint to be lost, in whole or in part, following a database crash and
16848 restart.  This is a serious bug that has existed
16849 since <productname>PostgreSQL</productname> 7.1.
16850 </para></listitem>
16851 <listitem><para>Remove asymmetrical word processing in tsearch (Teodor)</para></listitem>
16852 <listitem><para>Properly schema-qualify function names when pg_dump'ing a CAST</para></listitem>
16853 </itemizedlist>
16854
16855   </sect2>
16856  </sect1>
16857
16858   <sect1 id="release-7-3-6">
16859    <title>Release 7.3.6</title>
16860
16861    <note>
16862    <title>Release date</title>
16863    <simpara>2004-03-02</simpara>
16864    </note>
16865
16866    <para>
16867     This release contains a variety of fixes from 7.3.5.
16868    </para>
16869
16870
16871    <sect2>
16872     <title>Migration to version 7.3.6</title>
16873
16874     <para>
16875      A dump/restore is <emphasis>not</emphasis> required for those
16876      running 7.3.*.
16877     </para>
16878
16879    </sect2>
16880
16881    <sect2>
16882     <title>Changes</title>
16883
16884 <itemizedlist>
16885 <listitem><para>Revert erroneous changes in rule permissions checking</para>
16886 <para>A patch applied in 7.3.3 to fix a corner case in rule permissions checks
16887 turns out to have disabled rule-related permissions checks in many
16888 not-so-corner cases.  This would for example allow users to insert into views
16889 they weren't supposed to have permission to insert into.  We have therefore
16890 reverted the 7.3.3 patch.  The original bug will be fixed in 8.0.
16891 </para></listitem>
16892 <listitem><para>Repair incorrect order of operations in
16893 GetNewTransactionId()</para>
16894 <para>
16895 This bug could result in failure under out-of-disk-space conditions, including
16896 inability to restart even after disk space is freed.
16897 </para></listitem>
16898 <listitem><para>Ensure configure selects -fno-strict-aliasing even when
16899 an external value for CFLAGS is supplied</para>
16900 <para>
16901 On some platforms, building with -fstrict-aliasing causes bugs.
16902 </para></listitem>
16903 <listitem><para>Make pg_restore handle 64-bit off_t correctly</para>
16904 <para>
16905 This bug prevented proper restoration from archive files exceeding 4 GB.
16906 </para></listitem>
16907 <listitem><para>Make contrib/dblink not assume that local and remote type OIDs
16908 match (Joe)</para></listitem>
16909 <listitem><para>Quote connectby()'s start_with argument properly (Joe)</para></listitem>
16910 <listitem><para>Don't crash when a rowtype argument to a plpgsql function is
16911 NULL</para></listitem>
16912 <listitem><para>Avoid generating invalid character encoding sequences in
16913 corner cases when planning LIKE operations</para></listitem>
16914 <listitem><para>Ensure text_position() cannot scan past end of source string
16915 in multibyte cases (Korea PostgreSQL Users' Group)</para></listitem>
16916 <listitem><para>Fix index optimization and selectivity estimates for LIKE
16917 operations on bytea columns (Joe)</para></listitem>
16918 </itemizedlist>
16919
16920   </sect2>
16921  </sect1>
16922
16923   <sect1 id="release-7-3-5">
16924    <title>Release 7.3.5</title>
16925
16926    <note>
16927    <title>Release date</title>
16928    <simpara>2003-12-03</simpara>
16929    </note>
16930
16931    <para>
16932     This has a variety of fixes from 7.3.4.
16933    </para>
16934
16935
16936    <sect2>
16937     <title>Migration to version 7.3.5</title>
16938
16939     <para>
16940      A dump/restore is <emphasis>not</emphasis> required for those
16941      running 7.3.*.
16942     </para>
16943    </sect2>
16944
16945    <sect2>
16946     <title>Changes</title>
16947
16948 <itemizedlist>
16949 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
16950 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
16951 <listitem><para>Force stats processes to detach from shared memory, ensuring cleaner shutdown</para></listitem>
16952 <listitem><para>Make PQescapeBytea and byteaout consistent with each other (Joe)</para></listitem>
16953 <listitem><para>Added missing SPI_finish() calls to dblink's get_tuple_of_interest() (Joe)</para></listitem>
16954 <listitem><para>Fix for possible foreign key violation when rule rewrites INSERT (Jan)</para></listitem>
16955 <listitem><para>Support qualified type names in PL/Tcl's spi_prepare command (Jan)</para></listitem>
16956 <listitem><para>Make pg_dump handle a procedural language handler located in pg_catalog</para></listitem>
16957 <listitem><para>Make pg_dump handle cases where a custom opclass is in another schema</para></listitem>
16958 <listitem><para>Make pg_dump dump binary-compatible casts correctly (Jan)</para></listitem>
16959 <listitem><para>Fix insertion of expressions containing subqueries into rule bodies</para></listitem>
16960 <listitem><para>Fix incorrect argument processing in clusterdb script (Anand Ranganathan)</para></listitem>
16961 <listitem><para>Fix problems with dropped columns in plpython triggers</para></listitem>
16962 <listitem><para>Repair problems with to_char() reading past end of its input string (Karel)</para></listitem>
16963 <listitem><para>Fix GB18030 mapping errors (Tatsuo)</para></listitem>
16964 <listitem><para>Fix several problems with SSL error handling and asynchronous SSL I/O</para></listitem>
16965 <listitem><para>Remove ability to bind a list of values to a single parameter in JDBC
16966 (prevents possible SQL-injection attacks)</para></listitem>
16967 <listitem><para>Fix some errors in HAVE_INT64_TIMESTAMP code paths</para></listitem>
16968 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
16969 </itemizedlist>
16970
16971   </sect2>
16972  </sect1>
16973
16974   <sect1 id="release-7-3-4">
16975    <title>Release 7.3.4</title>
16976
16977    <note>
16978    <title>Release date</title>
16979    <simpara>2003-07-24</simpara>
16980    </note>
16981
16982    <para>
16983     This has a variety of fixes from 7.3.3.
16984    </para>
16985
16986
16987    <sect2>
16988     <title>Migration to version 7.3.4</title>
16989
16990     <para>
16991      A dump/restore is <emphasis>not</emphasis> required for those
16992      running 7.3.*.
16993     </para>
16994    </sect2>
16995
16996    <sect2>
16997     <title>Changes</title>
16998
16999 <itemizedlist>
17000 <listitem><para>Repair breakage in timestamp-to-date conversion for dates before 2000</para></listitem>
17001 <listitem><para>Prevent rare possibility of server startup failure (Tom)</para></listitem>
17002 <listitem><para>Fix bugs in interval-to-time conversion (Tom)</para></listitem>
17003 <listitem><para>Add constraint names in a few places in pg_dump (Rod)</para></listitem>
17004 <listitem><para>Improve performance of functions with many parameters (Tom)</para></listitem>
17005 <listitem><para>Fix to_ascii() buffer overruns (Tom)</para></listitem>
17006 <listitem><para>Prevent restore of database comments from throwing an error (Tom)</para></listitem>
17007 <listitem><para>Work around buggy strxfrm() present in some Solaris releases (Tom)</para></listitem>
17008 <listitem><para>Properly escape jdbc setObject() strings to improve security (Barry)</para></listitem>
17009 </itemizedlist>
17010    </sect2>
17011   </sect1>
17012
17013
17014  <sect1 id="release-7-3-3">
17015   <title>Release 7.3.3</title>
17016
17017   <note>
17018    <title>Release date</title>
17019    <simpara>2003-05-22</simpara>
17020   </note>
17021
17022   <para>
17023    This release contains a variety of fixes for version 7.3.2.
17024   </para>
17025
17026   <sect2>
17027    <title>Migration to version 7.3.3</title>
17028
17029    <para>
17030     A dump/restore is <emphasis>not</emphasis> required for those
17031     running version 7.3.*.
17032    </para>
17033   </sect2>
17034
17035   <sect2>
17036    <title>Changes</title>
17037
17038 <itemizedlist>
17039 <listitem><para>Repair sometimes-incorrect computation of StartUpID after a crash</para></listitem>
17040 <listitem><para>Avoid slowness with lots of deferred triggers in one transaction (Stephan)</para></listitem>
17041 <listitem><para>Don't lock referenced row when <command>UPDATE</command> doesn't change foreign key's value (Jan)</para></listitem>
17042 <listitem><para>Use <command>-fPIC</command> not <command>-fpic</command> on Sparc (Tom Callaway)</para></listitem>
17043 <listitem><para>Repair lack of schema-awareness in contrib/reindexdb</para></listitem>
17044 <listitem><para>Fix contrib/intarray error for zero-element result array (Teodor)</para></listitem>
17045 <listitem><para>Ensure createuser script will exit on control-C (Oliver)</para></listitem>
17046 <listitem><para>Fix errors when the type of a dropped column has itself been dropped</para></listitem>
17047 <listitem><para><command>CHECKPOINT</command> does not cause database panic on failure in noncritical steps</para></listitem>
17048 <listitem><para>Accept 60 in seconds fields of timestamp, time, interval input values</para></listitem>
17049 <listitem><para>Issue notice, not error, if <type>TIMESTAMP</type>,
17050 <type> TIME</type>, or <type>INTERVAL</type> precision too large</para></listitem>
17051 <listitem><para>Fix <function>abstime-to-time</function> cast function (fix is
17052        not applied unless you <application>initdb</application>)</para></listitem>
17053 <listitem><para>Fix <application>pg_proc</application> entry for
17054       <type>timestampt_izone</type> (fix is not applied unless you
17055         <application>initdb</application>)</para></listitem>
17056 <listitem><para>Make <function>EXTRACT(EPOCH FROM timestamp without time zone)</function> treat input as local time</para></listitem>
17057 <listitem><para><command>'now'::timestamptz</command> gave wrong answer if timezone changed earlier in transaction</para></listitem>
17058 <listitem><para><envar>HAVE_INT64_TIMESTAMP</envar> code for time with timezone overwrote its input</para></listitem>
17059 <listitem><para>Accept <command>GLOBAL TEMP/TEMPORARY</command> as a
17060        synonym for <command>TEMPORARY</command></para></listitem>
17061 <listitem><para>Avoid improper schema-privilege-check failure in foreign-key triggers</para></listitem>
17062 <listitem><para>Fix bugs in foreign-key triggers for <command>SET DEFAULT</command> action</para></listitem>
17063 <listitem><para>Fix incorrect time-qual check in row fetch for
17064        <command>UPDATE</command> and <command>DELETE</command> triggers</para></listitem>
17065 <listitem><para>Foreign-key clauses were parsed but ignored in
17066        <command>ALTER TABLE ADD COLUMN</command></para></listitem>
17067 <listitem><para>Fix createlang script breakage for case where handler function already exists</para></listitem>
17068 <listitem><para>Fix misbehavior on zero-column tables in <application>pg_dump</application>, COPY, ANALYZE, other places</para></listitem>
17069 <listitem><para>Fix misbehavior of <function>func_error()</function> on type names containing '%'</para></listitem>
17070 <listitem><para>Fix misbehavior of <function>replace()</function> on strings containing '%'</para></listitem>
17071 <listitem><para>Regular-expression patterns containing certain multibyte characters failed</para></listitem>
17072 <listitem><para>Account correctly for <command>NULL</command>s in more cases in join size estimation</para></listitem>
17073 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
17074 <listitem><para>Fix failure to convert large code point values in EUC_TW conversions (Tatsuo)</para></listitem>
17075 <listitem><para>Fix error recovery for <function>SSL_read</function>/<function>SSL_write</function> calls</para></listitem>
17076 <listitem><para>Don't do early constant-folding of type coercion expressions</para></listitem>
17077 <listitem><para>Validate page header fields immediately after reading in any page</para></listitem>
17078 <listitem><para>Repair incorrect check for ungrouped variables in unnamed joins</para></listitem>
17079 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
17080 <listitem><para>contrib/ltree fixes (Teodor)</para></listitem>
17081 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
17082 <listitem><para>Avoid running out of buffers in many-way indexscan (bug introduced in 7.3)</para></listitem>
17083 <listitem><para>Fix planner's selectivity estimation functions to handle domains properly</para></listitem>
17084 <listitem><para>Fix <application>dbmirror</application> memory-allocation bug (Steven Singer)</para></listitem>
17085 <listitem><para>Prevent infinite loop in <function>ln(numeric)</function> due to roundoff error</para></listitem>
17086 <listitem><para><command>GROUP BY</command> got confused if there were multiple equal GROUP BY items</para></listitem>
17087 <listitem><para>Fix bad plan when inherited <command>UPDATE</command>/<command>DELETE</command> references another inherited table</para></listitem>
17088 <listitem><para>Prevent clustering on incomplete (partial or non-NULL-storing) indexes</para></listitem>
17089 <listitem><para>Service shutdown request at proper time if it arrives while still starting up</para></listitem>
17090 <listitem><para>Fix left-links in temporary indexes (could make backwards scans miss entries)</para></listitem>
17091 <listitem><para>Fix incorrect handling of client_encoding setting in postgresql.conf (Tatsuo)</para></listitem>
17092 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
17093 <listitem><para>Fix SPI for case where rule contains multiple statements of the same type</para></listitem>
17094 <listitem><para>Fix problem with checking for wrong type of access privilege in rule query</para></listitem>
17095 <listitem><para>Fix problem with <command>EXCEPT</command> in <command>CREATE RULE</command></para></listitem>
17096 <listitem><para>Prevent problem with dropping temp tables having serial columns</para></listitem>
17097 <listitem><para>Fix replace_vars_with_subplan_refs failure in complex views</para></listitem>
17098 <listitem><para>Fix regexp slowness in single-byte encodings (Tatsuo)</para></listitem>
17099 <listitem><para>Allow qualified type names in <command>CREATE CAST</command>
17100        and <command> DROP CAST</command></para></listitem>
17101 <listitem><para>Accept <function>SETOF type[]</function>, which formerly had to
17102        be written <function>SETOF _type</function></para></listitem>
17103 <listitem><para>Fix <application>pg_dump</application> core dump in some cases with procedural languages</para></listitem>
17104 <listitem><para>Force ISO datestyle in <application>pg_dump</application> output, for portability (Oliver)</para></listitem>
17105 <listitem><para><application>pg_dump</application> failed to handle error return
17106        from <function>lo_read</function> (Oleg Drokin)</para></listitem>
17107 <listitem><para><application>pg_dumpall</application> failed with groups having no members (Nick Eskelinen)</para></listitem>
17108 <listitem><para><application>pg_dumpall</application> failed to recognize --globals-only switch</para></listitem>
17109 <listitem><para>pg_restore failed to restore blobs if -X disable-triggers is specified</para></listitem>
17110 <listitem><para>Repair intrafunction memory leak in plpgsql</para></listitem>
17111 <listitem><para>pltcl's <command>elog</command> command dumped core if given wrong parameters (Ian Harding)</para></listitem>
17112 <listitem><para>plpython used wrong value of <envar>atttypmod</envar> (Brad McLean)</para></listitem>
17113 <listitem><para>Fix improper quoting of boolean values in Python interface (D'Arcy)</para></listitem>
17114 <listitem><para>Added <function>addDataType()</function> method to PGConnection interface for JDBC</para></listitem>
17115 <listitem><para>Fixed various problems with updateable ResultSets for JDBC (Shawn Green)</para></listitem>
17116 <listitem><para>Fixed various problems with DatabaseMetaData for JDBC (Kris Jurka, Peter Royal)</para></listitem>
17117 <listitem><para>Fixed problem with parsing table ACLs in JDBC</para></listitem>
17118 <listitem><para>Better error message for character set conversion problems in JDBC</para></listitem>
17119 </itemizedlist>
17120   </sect2>
17121  </sect1>
17122
17123
17124  <sect1 id="release-7-3-2">
17125   <title>Release 7.3.2</title>
17126
17127   <note>
17128    <title>Release date</title>
17129    <simpara>2003-02-04</simpara>
17130   </note>
17131
17132   <para>
17133    This release contains a variety of fixes for version 7.3.1.
17134   </para>
17135
17136
17137   <sect2>
17138    <title>Migration to version 7.3.2</title>
17139
17140    <para>
17141     A dump/restore is <emphasis>not</emphasis> required for those
17142     running version 7.3.*.
17143    </para>
17144   </sect2>
17145
17146   <sect2>
17147    <title>Changes</title>
17148
17149 <itemizedlist>
17150 <listitem><para>Restore creation of OID column in CREATE TABLE AS / SELECT INTO</para></listitem>
17151 <listitem><para>Fix <application>pg_dump</> core dump when dumping views having comments</para></listitem>
17152 <listitem><para>Dump DEFERRABLE/INITIALLY DEFERRED constraints properly</para></listitem>
17153 <listitem><para>Fix UPDATE when child table's column numbering differs from parent</para></listitem>
17154 <listitem><para>Increase default value of max_fsm_relations</para></listitem>
17155 <listitem><para>Fix problem when fetching backwards in a cursor for a single-row query</para></listitem>
17156 <listitem><para>Make backward fetch work properly with cursor on SELECT DISTINCT query</para></listitem>
17157 <listitem><para>Fix problems with loading <application>pg_dump</> files containing contrib/lo usage</para></listitem>
17158 <listitem><para>Fix problem with all-numeric user names</para></listitem>
17159 <listitem><para>Fix possible memory leak and core dump during disconnect in libpgtcl</para></listitem>
17160 <listitem><para>Make plpython's spi_execute command handle nulls properly (Andrew Bosma)</para></listitem>
17161 <listitem><para>Adjust plpython error reporting so that its regression test passes again</para></listitem>
17162 <listitem><para>Work with bison 1.875</para></listitem>
17163 <listitem><para>Handle mixed-case names properly in plpgsql's %type (Neil)</para></listitem>
17164 <listitem><para>Fix core dump in pltcl when executing a query rewritten by a rule</para></listitem>
17165 <listitem><para>Repair array subscript overruns (per report from Yichen Xie)</para></listitem>
17166 <listitem><para>Reduce MAX_TIME_PRECISION from 13 to 10 in floating-point case</para></listitem>
17167 <listitem><para>Correctly case-fold variable names in per-database and per-user settings</para></listitem>
17168 <listitem><para>Fix coredump in plpgsql's RETURN NEXT when SELECT into record returns no rows</para></listitem>
17169 <listitem><para>Fix outdated use of pg_type.typprtlen in python client interface</para></listitem>
17170 <listitem><para>Correctly handle fractional seconds in timestamps in JDBC driver</para></listitem>
17171 <listitem><para>Improve performance of getImportedKeys() in JDBC</para></listitem>
17172 <listitem><para>Make shared-library symlinks work standardly on HPUX (Giles)</para></listitem>
17173 <listitem><para>Repair inconsistent rounding behavior for timestamp, time, interval</para></listitem>
17174 <listitem><para>SSL negotiation fixes (Nathan Mueller)</para></listitem>
17175 <listitem><para>Make libpq's ~/.pgpass feature work when connecting with PQconnectDB</para></listitem>
17176 <listitem><para>Update my2pg, ora2pg</para></listitem>
17177 <listitem><para>Translation updates</para></listitem>
17178 <listitem><para>Add casts between types lo and oid in contrib/lo</para></listitem>
17179 <listitem><para>fastpath code now checks for privilege to call function</para></listitem>
17180 </itemizedlist>
17181   </sect2>
17182  </sect1>
17183
17184
17185  <sect1 id="release-7-3-1">
17186   <title>Release 7.3.1</title>
17187
17188   <note>
17189    <title>Release date</title>
17190    <simpara>2002-12-18</simpara>
17191   </note>
17192
17193   <para>
17194    This release contains a variety of fixes for version 7.3.
17195   </para>
17196
17197
17198   <sect2>
17199    <title>Migration to version 7.3.1</title>
17200
17201    <para>
17202     A dump/restore is <emphasis>not</emphasis> required for those
17203     running version 7.3. However, it should be noted that the main
17204     <productname>PostgreSQL</productname> interface library, libpq,
17205     has a new major version number for this release, which might require
17206     recompilation of client code in certain cases.
17207    </para>
17208   </sect2>
17209
17210   <sect2>
17211    <title>Changes</title>
17212
17213 <itemizedlist>
17214 <listitem><para>Fix a core dump of COPY TO when client/server encodings don't match (Tom)</para></listitem>
17215 <listitem><para>Allow <application>pg_dump</> to work with pre-7.2 servers (Philip)</para></listitem>
17216 <listitem><para>contrib/adddepend fixes (Tom)</para></listitem>
17217 <listitem><para>Fix problem with deletion of per-user/per-database config settings (Tom)</para></listitem>
17218 <listitem><para>contrib/vacuumlo fix (Tom)</para></listitem>
17219 <listitem><para>Allow 'password' encryption even when pg_shadow contains MD5 passwords (Bruce)</para></listitem>
17220 <listitem><para>contrib/dbmirror fix (Steven Singer)</para></listitem>
17221 <listitem><para>Optimizer fixes (Tom)</para></listitem>
17222 <listitem><para>contrib/tsearch fixes (Teodor Sigaev, Magnus)</para></listitem>
17223 <listitem><para>Allow locale names to be mixed case (Nicolai Tufar)</para></listitem>
17224 <listitem><para>Increment libpq library's major version number (Bruce)</para></listitem>
17225 <listitem><para>pg_hba.conf error reporting fixes (Bruce, Neil)</para></listitem>
17226 <listitem><para>Add SCO Openserver 5.0.4 as a supported platform (Bruce)</para></listitem>
17227 <listitem><para>Prevent EXPLAIN from crashing server (Tom)</para></listitem>
17228 <listitem><para>SSL fixes (Nathan Mueller)</para></listitem>
17229 <listitem><para>Prevent composite column creation via ALTER TABLE (Tom)</para></listitem>
17230 </itemizedlist>
17231   </sect2>
17232  </sect1>
17233
17234
17235  <sect1 id="release-7-3">
17236   <title>Release 7.3</title>
17237
17238   <note>
17239    <title>Release date</title>
17240    <simpara>2002-11-27</simpara>
17241   </note>
17242
17243   <sect2>
17244    <title>Overview</title>
17245
17246    <para>
17247     Major changes in this release:
17248    </para>
17249
17250    <variablelist>
17251     <varlistentry>
17252      <term>Schemas</term>
17253      <listitem>
17254       <para>
17255        Schemas allow users to create objects in separate namespaces,
17256        so two people or applications can have tables with the same
17257        name. There is also a public schema for shared tables.
17258        Table/index creation can be restricted by removing privileges
17259        on the public schema.
17260       </para>
17261      </listitem>
17262     </varlistentry>
17263
17264     <varlistentry>
17265      <term>Drop Column</term>
17266      <listitem>
17267       <para>
17268        <productname>PostgreSQL</productname> now supports the
17269        <literal>ALTER TABLE ... DROP COLUMN</literal> functionality.
17270       </para>
17271      </listitem>
17272     </varlistentry>
17273
17274     <varlistentry>
17275      <term>Table Functions</term>
17276      <listitem>
17277       <para>
17278        Functions returning multiple rows and/or multiple columns are
17279        now much easier to use than before.  You can call such a
17280        <quote>table function</quote> in the <literal>SELECT</literal>
17281        <literal>FROM</literal> clause, treating its output like a
17282        table. Also, <application>PL/pgSQL</application> functions can
17283        now return sets.
17284       </para>
17285      </listitem>
17286     </varlistentry>
17287
17288     <varlistentry>
17289      <term>Prepared Queries</term>
17290      <listitem>
17291       <para>
17292        <productname>PostgreSQL</productname> now supports prepared
17293        queries, for improved performance.
17294       </para>
17295      </listitem>
17296     </varlistentry>
17297
17298     <varlistentry>
17299      <term>Dependency Tracking</term>
17300      <listitem>
17301       <para>
17302        <productname>PostgreSQL</productname> now records object
17303        dependencies, which allows improvements in many areas.
17304        <command>DROP</command> statements now take either
17305        <literal>CASCADE</> or <literal>RESTRICT</> to control whether
17306        dependent objects are also dropped.
17307       </para>
17308      </listitem>
17309     </varlistentry>
17310
17311     <varlistentry>
17312      <term>Privileges</term>
17313      <listitem>
17314       <para>
17315        Functions and procedural languages now have privileges, and
17316        functions can be defined to run with the privileges of their
17317        creator.
17318       </para>
17319      </listitem>
17320     </varlistentry>
17321
17322     <varlistentry>
17323      <term>Internationalization</term>
17324      <listitem>
17325       <para>
17326        Both multibyte and locale support are now always enabled.
17327       </para>
17328      </listitem>
17329     </varlistentry>
17330
17331     <varlistentry>
17332      <term>Logging</term>
17333      <listitem>
17334       <para>
17335        A variety of logging options have been enhanced.
17336       </para>
17337      </listitem>
17338     </varlistentry>
17339
17340     <varlistentry>
17341      <term>Interfaces</term>
17342      <listitem>
17343       <para>
17344        A large number of interfaces have been moved to <ulink
17345        url="http://gborg.postgresql.org">http://gborg.postgresql.org</>
17346        where they can be developed and released independently.
17347       </para>
17348      </listitem>
17349     </varlistentry>
17350
17351     <varlistentry>
17352      <term>Functions/Identifiers</term>
17353      <listitem>
17354       <para>
17355        By default, functions can now take up to 32 parameters, and
17356        identifiers can be up to 63 bytes long.  Also, <literal>OPAQUE</>
17357        is now deprecated: there are specific <quote>pseudo-datatypes</>
17358        to represent each of the former meanings of <literal>OPAQUE</>
17359        in function argument and result types.
17360       </para>
17361      </listitem>
17362     </varlistentry>
17363
17364    </variablelist>
17365   </sect2>
17366
17367   <sect2>
17368    <title>Migration to version 7.3</title>
17369
17370    <para>
17371     A dump/restore using <application>pg_dump</> is required for those
17372     wishing to migrate data from any previous release. If your
17373     application examines the system catalogs, additional changes will
17374     be required due to the introduction of schemas in 7.3; for more
17375     information, see: <ulink
17376     url="http://developer.postgresql.org/~momjian/upgrade_tips_7.3"></>.
17377    </para>
17378
17379    <para>
17380     Observe the following incompatibilities:
17381    </para>
17382
17383    <itemizedlist>
17384     <listitem>
17385      <para>
17386       Pre-6.3 clients are no longer supported.
17387      </para>
17388     </listitem>
17389
17390     <listitem>
17391      <para>
17392       <filename>pg_hba.conf</filename> now has a column for the user
17393       name and additional features.  Existing files need to be
17394       adjusted.
17395      </para>
17396     </listitem>
17397
17398     <listitem>
17399      <para>
17400       Several <filename>postgresql.conf</filename> logging parameters
17401       have been renamed.
17402      </para>
17403     </listitem>
17404
17405     <listitem>
17406      <para>
17407       <literal>LIMIT #,#</literal> has been disabled; use
17408       <literal>LIMIT # OFFSET #</literal>.
17409      </para>
17410     </listitem>
17411
17412     <listitem>
17413      <para>
17414       <command>INSERT</command> statements with column lists must
17415       specify a value for each specified column. For example,
17416       <literal>INSERT INTO tab (col1, col2) VALUES ('val1')</literal>
17417       is now invalid.  It's still allowed to supply fewer columns than
17418       expected if the <command>INSERT</command> does not have a column list.
17419      </para>
17420     </listitem>
17421
17422     <listitem>
17423      <para>
17424       <type>serial</type> columns are no longer automatically
17425       <literal>UNIQUE</>; thus, an index will not automatically be
17426       created.
17427      </para>
17428     </listitem>
17429
17430     <listitem>
17431      <para>
17432       A <command>SET</command> command inside an aborted transaction
17433       is now rolled back.
17434      </para>
17435     </listitem>
17436
17437     <listitem>
17438      <para>
17439       <command>COPY</command> no longer considers missing trailing
17440       columns to be null.  All columns need to be specified.
17441       (However, one can achieve a similar effect by specifying a
17442       column list in the <command>COPY</command> command.)
17443      </para>
17444     </listitem>
17445
17446     <listitem>
17447      <para>
17448       The data type <type>timestamp</type> is now equivalent to
17449       <type>timestamp without time zone</type>, instead of
17450       <type>timestamp with time zone</type>.
17451      </para>
17452     </listitem>
17453
17454     <listitem>
17455      <para>
17456       Pre-7.3 databases loaded into 7.3 will not have the new object
17457       dependencies for <type>serial</type> columns, unique
17458       constraints, and foreign keys. See the directory
17459       <filename>contrib/adddepend/</filename> for a detailed
17460       description and a script that will add such dependencies.
17461      </para>
17462     </listitem>
17463
17464     <listitem>
17465      <para>
17466       An empty string (<literal>''</literal>) is no longer allowed as
17467       the input into an integer field.  Formerly, it was silently
17468       interpreted as 0.
17469      </para>
17470     </listitem>
17471
17472    </itemizedlist>
17473   </sect2>
17474
17475   <sect2>
17476    <title>Changes</title>
17477
17478    <sect3>
17479     <title>Server Operation</title>
17480 <itemizedlist>
17481 <listitem><para>Add pg_locks view to show locks (Neil)</para></listitem>
17482 <listitem><para>Security fixes for password negotiation memory allocation (Neil)</para></listitem>
17483 <listitem><para>Remove support for version 0 FE/BE protocol (<productname>PostgreSQL</productname> 6.2 and earlier) (Tom)</para></listitem>
17484 <listitem><para>Reserve the last few backend slots for superusers, add parameter superuser_reserved_connections to control this (Nigel J. Andrews)</para></listitem>
17485 </itemizedlist>
17486    </sect3>
17487
17488    <sect3>
17489     <title>Performance</title>
17490 <itemizedlist>
17491 <listitem><para>Improve startup by calling localtime() only once (Tom)</para></listitem>
17492 <listitem><para>Cache system catalog information in flat files for faster startup (Tom)</para></listitem>
17493 <listitem><para>Improve caching of index information (Tom)</para></listitem>
17494 <listitem><para>Optimizer improvements (Tom, Fernando Nasser)</para></listitem>
17495 <listitem><para>Catalog caches now store failed lookups (Tom)</para></listitem>
17496 <listitem><para>Hash function improvements (Neil)</para></listitem>
17497 <listitem><para>Improve performance of query tokenization and network handling (Peter)</para></listitem>
17498 <listitem><para>Speed improvement for large object restore (Mario Weilguni)</para></listitem>
17499 <listitem><para>Mark expired index entries on first lookup, saving later heap fetches (Tom)</para></listitem>
17500 <listitem><para>Avoid excessive NULL bitmap padding (Manfred Koizar)</para></listitem>
17501 <listitem><para>Add BSD-licensed qsort() for Solaris, for performance (Bruce)</para></listitem>
17502 <listitem><para>Reduce per-row overhead by four bytes (Manfred Koizar)</para></listitem>
17503 <listitem><para>Fix GEQO optimizer bug (Neil Conway)</para></listitem>
17504 <listitem><para>Make WITHOUT OID actually save four bytes per row (Manfred Koizar)</para></listitem>
17505 <listitem><para>Add default_statistics_target variable to specify ANALYZE buckets (Neil)</para></listitem>
17506 <listitem><para>Use local buffer cache for temporary tables so no WAL overhead (Tom)</para></listitem>
17507 <listitem><para>Improve free space map performance on large tables (Stephen Marshall, Tom)</para></listitem>
17508 <listitem><para>Improved WAL write concurrency (Tom)</para></listitem>
17509 </itemizedlist>
17510    </sect3>
17511
17512    <sect3>
17513     <title>Privileges</title>
17514 <itemizedlist>
17515 <listitem><para>Add privileges on functions and procedural languages (Peter)</para></listitem>
17516 <listitem><para>Add OWNER to CREATE DATABASE so superusers can create databases on behalf of unprivileged users (Gavin Sherry, Tom)</para></listitem>
17517 <listitem><para>Add new object privilege bits EXECUTE and USAGE (Tom)</para></listitem>
17518 <listitem><para>Add SET SESSION AUTHORIZATION DEFAULT and RESET SESSION AUTHORIZATION (Tom)</para></listitem>
17519 <listitem><para>Allow functions to be executed with the privilege of the function owner (Peter)</para></listitem>
17520 </itemizedlist>
17521    </sect3>
17522
17523    <sect3>
17524     <title>Server Configuration</title>
17525 <itemizedlist>
17526 <listitem><para>Server log messages now tagged with LOG, not DEBUG (Bruce)</para></listitem>
17527 <listitem><para>Add user column to pg_hba.conf (Bruce)</para></listitem>
17528 <listitem><para>Have log_connections output two lines in log file (Tom)</para></listitem>
17529 <listitem><para>Remove debug_level from postgresql.conf, now server_min_messages (Bruce)</para></listitem>
17530 <listitem><para>New ALTER DATABASE/USER ... SET command for per-user/database initialization (Peter)</para></listitem>
17531 <listitem><para>New parameters server_min_messages and client_min_messages to control which messages are sent to the server logs or client applications (Bruce)</para></listitem>
17532 <listitem><para>Allow pg_hba.conf to specify lists of users/databases separated by commas, group names prepended with +, and file names prepended with @ (Bruce)</para></listitem>
17533 <listitem><para>Remove secondary password file capability and pg_password utility (Bruce)</para></listitem>
17534 <listitem><para>Add variable db_user_namespace for database-local user names (Bruce)</para></listitem>
17535 <listitem><para>SSL improvements (Bear Giles)</para></listitem>
17536 <listitem><para>Make encryption of stored passwords the default (Bruce)</para></listitem>
17537 <listitem><para>Allow pg_statistics to be reset by calling pg_stat_reset() (Christopher)</para></listitem>
17538 <listitem><para>Add log_duration parameter (Bruce)</para></listitem>
17539 <listitem><para>Rename debug_print_query to log_statement (Bruce)</para></listitem>
17540 <listitem><para>Rename show_query_stats to show_statement_stats (Bruce)</para></listitem>
17541 <listitem><para>Add param log_min_error_statement to print commands to logs on error (Gavin)</para></listitem>
17542 </itemizedlist>
17543    </sect3>
17544
17545    <sect3>
17546     <title>Queries</title>
17547 <itemizedlist>
17548 <listitem><para>Make cursors insensitive, meaning their contents do not change (Tom)</para></listitem>
17549 <listitem><para>Disable LIMIT #,# syntax; now only LIMIT # OFFSET # supported (Bruce)</para></listitem>
17550 <listitem><para>Increase identifier length to 63 (Neil, Bruce)</para></listitem>
17551 <listitem><para>UNION fixes for merging &gt;= 3 columns of different lengths (Tom)</para></listitem>
17552 <listitem><para>Add DEFAULT key word to INSERT, e.g., INSERT ... (..., DEFAULT, ...) (Rod)</para></listitem>
17553 <listitem><para>Allow views to have default values using ALTER COLUMN ... SET DEFAULT (Neil)</para></listitem>
17554 <listitem><para>Fail on INSERTs with column lists that don't supply all column values, e.g., INSERT INTO tab (col1, col2) VALUES ('val1');  (Rod)</para></listitem>
17555 <listitem><para>Fix for join aliases (Tom)</para></listitem>
17556 <listitem><para>Fix for FULL OUTER JOINs (Tom)</para></listitem>
17557 <listitem><para>Improve reporting of invalid identifier and location (Tom, Gavin)</para></listitem>
17558 <listitem><para>Fix OPEN cursor(args) (Tom)</para></listitem>
17559 <listitem><para>Allow 'ctid' to be used in a view and currtid(viewname) (Hiroshi)</para></listitem>
17560 <listitem><para>Fix for CREATE TABLE AS with UNION (Tom)</para></listitem>
17561 <listitem><para>SQL99 syntax improvements (Thomas)</para></listitem>
17562 <listitem><para>Add statement_timeout variable to cancel queries (Bruce)</para></listitem>
17563 <listitem><para>Allow prepared queries with PREPARE/EXECUTE (Neil)</para></listitem>
17564 <listitem><para>Allow FOR UPDATE to appear after LIMIT/OFFSET (Bruce)</para></listitem>
17565 <listitem><para>Add variable autocommit (Tom, David Van Wie)</para></listitem>
17566 </itemizedlist>
17567    </sect3>
17568
17569    <sect3>
17570     <title>Object Manipulation</title>
17571 <itemizedlist>
17572 <listitem><para>Make equals signs optional in CREATE DATABASE (Gavin Sherry)</para></listitem>
17573 <listitem><para>Make ALTER TABLE OWNER change index ownership too (Neil)</para></listitem>
17574 <listitem><para>New ALTER TABLE tabname ALTER COLUMN colname SET STORAGE controls TOAST storage, compression (John Gray)</para></listitem>
17575 <listitem><para>Add schema support, CREATE/DROP SCHEMA (Tom)</para></listitem>
17576 <listitem><para>Create schema for temporary tables (Tom)</para></listitem>
17577 <listitem><para>Add variable search_path for schema search (Tom)</para></listitem>
17578 <listitem><para>Add ALTER TABLE SET/DROP NOT NULL (Christopher)</para></listitem>
17579 <listitem><para>New CREATE FUNCTION volatility levels (Tom)</para></listitem>
17580 <listitem><para>Make rule names unique only per table (Tom)</para></listitem>
17581 <listitem><para>Add 'ON tablename' clause to DROP RULE and COMMENT ON RULE (Tom)</para></listitem>
17582 <listitem><para>Add ALTER TRIGGER RENAME (Joe)</para></listitem>
17583 <listitem><para>New current_schema() and current_schemas() inquiry functions (Tom)</para></listitem>
17584 <listitem><para>Allow functions to return multiple rows (table functions) (Joe)</para></listitem>
17585 <listitem><para>Make WITH optional in CREATE DATABASE, for consistency (Bruce)</para></listitem>
17586 <listitem><para>Add object dependency tracking (Rod, Tom)</para></listitem>
17587 <listitem><para>Add RESTRICT/CASCADE to DROP commands (Rod)</para></listitem>
17588 <listitem><para>Add ALTER TABLE DROP for non-CHECK CONSTRAINT (Rod)</para></listitem>
17589 <listitem><para>Autodestroy sequence on DROP of table with SERIAL (Rod)</para></listitem>
17590 <listitem><para>Prevent column dropping if column is used by foreign key (Rod)</para></listitem>
17591 <listitem><para>Automatically drop constraints/functions when object is dropped (Rod)</para></listitem>
17592 <listitem><para>Add CREATE/DROP OPERATOR CLASS (Bill Studenmund, Tom)</para></listitem>
17593 <listitem><para>Add ALTER TABLE DROP COLUMN (Christopher, Tom, Hiroshi)</para></listitem>
17594 <listitem><para>Prevent inherited columns from being removed or renamed (Alvaro Herrera)</para></listitem>
17595 <listitem><para>Fix foreign key constraints to not error on intermediate database states (Stephan)</para></listitem>
17596 <listitem><para>Propagate column or table renaming to foreign key constraints</para></listitem>
17597 <listitem><para>Add CREATE OR REPLACE VIEW (Gavin, Neil, Tom)</para></listitem>
17598 <listitem><para>Add CREATE OR REPLACE RULE (Gavin, Neil, Tom)</para></listitem>
17599 <listitem><para>Have rules execute alphabetically, returning more predictable values (Tom)</para></listitem>
17600 <listitem><para>Triggers are now fired in alphabetical order (Tom)</para></listitem>
17601 <listitem><para>Add /contrib/adddepend to handle pre-7.3 object dependencies (Rod)</para></listitem>
17602 <listitem><para>Allow better casting when inserting/updating values (Tom)</para></listitem>
17603 </itemizedlist>
17604    </sect3>
17605
17606    <sect3>
17607     <title>Utility Commands</title>
17608 <itemizedlist>
17609 <listitem><para>Have COPY TO output embedded carriage returns and newlines as \r and \n (Tom)</para></listitem>
17610 <listitem><para>Allow DELIMITER in COPY FROM to be 8-bit clean (Tatsuo)</para></listitem>
17611 <listitem><para>Make <application>pg_dump</> use ALTER TABLE ADD PRIMARY KEY, for performance (Neil)</para></listitem>
17612 <listitem><para>Disable brackets in multistatement rules (Bruce)</para></listitem>
17613 <listitem><para>Disable VACUUM from being called inside a function (Bruce)</para></listitem>
17614 <listitem><para>Allow dropdb and other scripts to use identifiers with spaces (Bruce)</para></listitem>
17615 <listitem><para>Restrict database comment changes to the current database</para></listitem>
17616 <listitem><para>Allow comments on operators, independent of the underlying function (Rod)</para></listitem>
17617 <listitem><para>Rollback SET commands in aborted transactions (Tom)</para></listitem>
17618 <listitem><para>EXPLAIN now outputs as a query (Tom)</para></listitem>
17619 <listitem><para>Display condition expressions and sort keys in EXPLAIN (Tom)</para></listitem>
17620 <listitem><para>Add 'SET LOCAL var = value' to set configuration variables for a single transaction (Tom)</para></listitem>
17621 <listitem><para>Allow ANALYZE to run in a transaction (Bruce)</para></listitem>
17622 <listitem><para>Improve COPY syntax using new WITH clauses, keep backward compatibility (Bruce)</para></listitem>
17623 <listitem><para>Fix <application>pg_dump</> to consistently output tags in non-ASCII dumps (Bruce)</para></listitem>
17624 <listitem><para>Make foreign key constraints clearer in dump file (Rod)</para></listitem>
17625 <listitem><para>Add COMMENT ON CONSTRAINT (Rod)</para></listitem>
17626 <listitem><para>Allow COPY TO/FROM to specify column names (Brent Verner)</para></listitem>
17627 <listitem><para>Dump UNIQUE and PRIMARY KEY constraints as ALTER TABLE (Rod)</para></listitem>
17628 <listitem><para>Have SHOW output a query result (Joe)</para></listitem>
17629 <listitem><para>Generate failure on short COPY lines rather than pad NULLs (Neil)</para></listitem>
17630 <listitem><para>Fix CLUSTER to preserve all table attributes (Alvaro Herrera)</para></listitem>
17631 <listitem><para>New pg_settings table to view/modify GUC settings (Joe)</para></listitem>
17632 <listitem><para>Add smart quoting, portability improvements to <application>pg_dump</> output (Peter)</para></listitem>
17633 <listitem><para>Dump serial columns out as SERIAL (Tom)</para></listitem>
17634 <listitem><para>Enable large file support, &gt;2G for <application>pg_dump</> (Peter, Philip Warner, Bruce)</para></listitem>
17635 <listitem><para>Disallow TRUNCATE on tables that are involved in referential constraints (Rod)</para></listitem>
17636 <listitem><para>Have TRUNCATE also auto-truncate the toast table of the relation (Tom)</para></listitem>
17637 <listitem><para>Add clusterdb utility that will auto-cluster an entire database based on previous CLUSTER operations (Alvaro Herrera)</para></listitem>
17638 <listitem><para>Overhaul pg_dumpall (Peter)</para></listitem>
17639 <listitem><para>Allow REINDEX of TOAST tables (Tom)</para></listitem>
17640 <listitem><para>Implemented START TRANSACTION, per SQL99 (Neil)</para></listitem>
17641 <listitem><para>Fix rare index corruption when a page split affects bulk delete (Tom)</para></listitem>
17642 <listitem><para>Fix ALTER TABLE ... ADD COLUMN for inheritance (Alvaro Herrera)</para></listitem>
17643 </itemizedlist>
17644    </sect3>
17645
17646    <sect3>
17647     <title>Data Types and Functions</title>
17648 <itemizedlist>
17649 <listitem><para>Fix factorial(0) to return 1 (Bruce)</para></listitem>
17650 <listitem><para>Date/time/timezone improvements (Thomas)</para></listitem>
17651 <listitem><para>Fix for array slice extraction (Tom)</para></listitem>
17652 <listitem><para>Fix extract/date_part to report proper microseconds for timestamp (Tatsuo)</para></listitem>
17653 <listitem><para>Allow text_substr() and bytea_substr() to read TOAST values more efficiently (John Gray)</para></listitem>
17654 <listitem><para>Add domain support (Rod)</para></listitem>
17655 <listitem><para>Make WITHOUT TIME ZONE the default for TIMESTAMP and TIME data types (Thomas)</para></listitem>
17656 <listitem><para>Allow alternate storage scheme of 64-bit integers for date/time types using --enable-integer-datetimes in configure (Thomas)</para></listitem>
17657 <listitem><para>Make timezone(timestamptz) return timestamp rather than a string (Thomas)</para></listitem>
17658 <listitem><para>Allow fractional seconds in date/time types for dates prior to 1BC (Thomas)</para></listitem>
17659 <listitem><para>Limit timestamp data types to 6 decimal places of precision (Thomas)</para></listitem>
17660 <listitem><para>Change timezone conversion functions from timetz() to timezone() (Thomas)</para></listitem>
17661 <listitem><para>Add configuration variables datestyle and timezone (Tom)</para></listitem>
17662 <listitem><para>Add OVERLAY(), which allows substitution of a substring in a string (Thomas)</para></listitem>
17663 <listitem><para>Add SIMILAR TO (Thomas, Tom)</para></listitem>
17664 <listitem><para>Add regular expression SUBSTRING(string FROM pat FOR escape) (Thomas)</para></listitem>
17665 <listitem><para>Add LOCALTIME and LOCALTIMESTAMP functions (Thomas)</para></listitem>
17666 <listitem><para>Add named composite types using CREATE TYPE typename AS (column) (Joe)</para></listitem>
17667 <listitem><para>Allow composite type definition in the table alias clause (Joe)</para></listitem>
17668 <listitem><para>Add new API to simplify creation of C language table functions (Joe)</para></listitem>
17669 <listitem><para>Remove ODBC-compatible empty parentheses from calls to SQL99 functions for which these parentheses do not match the standard (Thomas)</para></listitem>
17670 <listitem><para>Allow macaddr data type to accept 12 hex digits with no separators (Mike Wyer)</para></listitem>
17671 <listitem><para>Add CREATE/DROP CAST (Peter)</para></listitem>
17672 <listitem><para>Add IS DISTINCT FROM operator (Thomas)</para></listitem>
17673 <listitem><para>Add SQL99 TREAT() function, synonym for CAST() (Thomas)</para></listitem>
17674 <listitem><para>Add pg_backend_pid() to output backend pid (Bruce)</para></listitem>
17675 <listitem><para>Add IS OF / IS NOT OF type predicate (Thomas)</para></listitem>
17676 <listitem><para>Allow bit string constants without fully-specified length (Thomas)</para></listitem>
17677 <listitem><para>Allow conversion between 8-byte integers and bit strings (Thomas)</para></listitem>
17678 <listitem><para>Implement hex literal conversion to bit string literal (Thomas)</para></listitem>
17679 <listitem><para>Allow table functions to appear in the FROM clause (Joe)</para></listitem>
17680 <listitem><para>Increase maximum number of function parameters to 32 (Bruce)</para></listitem>
17681 <listitem><para>No longer automatically create index for SERIAL column (Tom)</para></listitem>
17682 <listitem><para>Add current_database() (Rod)</para></listitem>
17683 <listitem><para>Fix cash_words() to not overflow buffer (Tom)</para></listitem>
17684 <listitem><para>Add functions replace(), split_part(), to_hex() (Joe)</para></listitem>
17685 <listitem><para>Fix LIKE for bytea as a right-hand argument (Joe)</para></listitem>
17686 <listitem><para>Prevent crashes caused by SELECT cash_out(2) (Tom)</para></listitem>
17687 <listitem><para>Fix to_char(1,'FM999.99') to return a period (Karel)</para></listitem>
17688 <listitem><para>Fix trigger/type/language functions returning OPAQUE to return proper type (Tom)</para></listitem>
17689 </itemizedlist>
17690    </sect3>
17691
17692    <sect3>
17693     <title>Internationalization</title>
17694 <itemizedlist>
17695 <listitem><para>Add additional encodings: Korean (JOHAB), Thai (WIN874), Vietnamese (TCVN), Arabic (WIN1256), Simplified Chinese (GBK), Korean (UHC) (Eiji Tokuya)</para></listitem>
17696 <listitem><para>Enable locale support by default (Peter)</para></listitem>
17697 <listitem><para>Add locale variables (Peter)</para></listitem>
17698 <listitem><para>Escape byes &gt;= 0x7f for multibyte in PQescapeBytea/PQunescapeBytea (Tatsuo)</para></listitem>
17699 <listitem><para>Add locale awareness to regular expression character classes</para></listitem>
17700 <listitem><para>Enable multibyte support by default (Tatsuo)</para></listitem>
17701 <listitem><para>Add GB18030 multibyte support (Bill Huang)</para></listitem>
17702 <listitem><para>Add CREATE/DROP CONVERSION, allowing loadable encodings (Tatsuo, Kaori)</para></listitem>
17703 <listitem><para>Add pg_conversion table (Tatsuo)</para></listitem>
17704 <listitem><para>Add SQL99 CONVERT() function (Tatsuo)</para></listitem>
17705 <listitem><para>pg_dumpall, pg_controldata, and pg_resetxlog now national-language aware (Peter)</para></listitem>
17706 <listitem><para>New and updated translations</para></listitem>
17707 </itemizedlist>
17708    </sect3>
17709
17710    <sect3>
17711     <title>Server-side Languages</title>
17712 <itemizedlist>
17713 <listitem><para>Allow recursive SQL function (Peter)</para></listitem>
17714 <listitem><para>Change PL/Tcl build to use configured compiler and Makefile.shlib (Peter)</para></listitem>
17715 <listitem><para>Overhaul the PL/pgSQL FOUND variable to be more Oracle-compatible (Neil, Tom)</para></listitem>
17716 <listitem><para>Allow PL/pgSQL to handle quoted identifiers (Tom)</para></listitem>
17717 <listitem><para>Allow set-returning PL/pgSQL functions (Neil)</para></listitem>
17718 <listitem><para>Make PL/pgSQL schema-aware (Joe)</para></listitem>
17719 <listitem><para>Remove some memory leaks (Nigel J. Andrews, Tom)</para></listitem>
17720 </itemizedlist>
17721    </sect3>
17722
17723    <sect3>
17724     <title>psql</title>
17725 <itemizedlist>
17726 <listitem><para>Don't lowercase psql \connect database name for 7.2.0 compatibility (Tom)</para></listitem>
17727 <listitem><para>Add psql \timing to time user queries (Greg Sabino Mullane)</para></listitem>
17728 <listitem><para>Have psql \d show index information (Greg Sabino Mullane)</para></listitem>
17729 <listitem><para>New psql \dD shows domains (Jonathan Eisler)</para></listitem>
17730 <listitem><para>Allow psql to show rules on views (Paul ?)</para></listitem>
17731 <listitem><para>Fix for psql variable substitution (Tom)</para></listitem>
17732 <listitem><para>Allow psql \d to show temporary table structure (Tom)</para></listitem>
17733 <listitem><para>Allow psql \d to show foreign keys (Rod)</para></listitem>
17734 <listitem><para>Fix \? to honor \pset pager (Bruce)</para></listitem>
17735 <listitem><para>Have psql reports its version number on startup (Tom)</para></listitem>
17736 <listitem><para>Allow \copy to specify column names (Tom)</para></listitem>
17737 </itemizedlist>
17738    </sect3>
17739
17740    <sect3>
17741     <title>libpq</title>
17742 <itemizedlist>
17743 <listitem><para>Add ~/.pgpass to store host/user password combinations (Alvaro Herrera)</para></listitem>
17744 <listitem><para>Add PQunescapeBytea() function to libpq (Patrick Welche)</para></listitem>
17745 <listitem><para>Fix for sending large queries over non-blocking connections (Bernhard Herzog)</para></listitem>
17746 <listitem><para>Fix for libpq using timers on Win9X (David Ford)</para></listitem>
17747 <listitem><para>Allow libpq notify to handle servers with different-length identifiers (Tom)</para></listitem>
17748 <listitem><para>Add libpq PQescapeString() and PQescapeBytea() to Windows (Bruce)</para></listitem>
17749 <listitem><para>Fix for SSL with non-blocking connections (Jack Bates)</para></listitem>
17750 <listitem><para>Add libpq connection timeout parameter (Denis A Ustimenko)</para></listitem>
17751 </itemizedlist>
17752    </sect3>
17753
17754    <sect3>
17755     <title>JDBC</title>
17756 <itemizedlist>
17757 <listitem><para>Allow JDBC to compile with JDK 1.4 (Dave)</para></listitem>
17758 <listitem><para>Add JDBC 3 support (Barry)</para></listitem>
17759 <listitem><para>Allows JDBC to set loglevel by adding ?loglevel=X to the connection URL (Barry)</para></listitem>
17760 <listitem><para>Add Driver.info() message that prints out the version number (Barry)</para></listitem>
17761 <listitem><para>Add updateable result sets (Raghu Nidagal, Dave)</para></listitem>
17762 <listitem><para>Add support for callable statements (Paul Bethe)</para></listitem>
17763 <listitem><para>Add query cancel capability</para></listitem>
17764 <listitem><para>Add refresh row (Dave)</para></listitem>
17765 <listitem><para>Fix MD5 encryption handling for multibyte servers (Jun Kawai)</para></listitem>
17766 <listitem><para>Add support for prepared statements (Barry)</para></listitem>
17767 </itemizedlist>
17768    </sect3>
17769
17770    <sect3>
17771     <title>Miscellaneous Interfaces</title>
17772 <itemizedlist>
17773 <listitem><para>Fixed ECPG bug concerning octal numbers in single quotes (Michael)</para></listitem>
17774 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17775 <listitem><para>Improve Python interface (Elliot Lee, Andrew Johnson, Greg Copeland)</para></listitem>
17776 <listitem><para>Add libpgtcl connection close event (Gerhard Hintermayer)</para></listitem>
17777 <listitem><para>Move src/interfaces/libpq++ to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17778 <listitem><para>Move src/interfaces/odbc to http://gborg.postgresql.org (Marc)</para></listitem>
17779 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17780 <listitem><para>Move src/interfaces/perl5 to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17781 <listitem><para>Remove src/bin/pgaccess from main tree, now at http://www.pgaccess.org (Bruce)</para></listitem>
17782 <listitem><para>Add pg_on_connection_loss command to libpgtcl (Gerhard Hintermayer, Tom)</para></listitem>
17783 </itemizedlist>
17784    </sect3>
17785
17786    <sect3>
17787     <title>Source Code</title>
17788 <itemizedlist>
17789 <listitem><para>Fix for parallel make (Peter)</para></listitem>
17790 <listitem><para>AIX fixes for linking Tcl (Andreas Zeugswetter)</para></listitem>
17791 <listitem><para>Allow PL/Perl to build under Cygwin (Jason Tishler)</para></listitem>
17792 <listitem><para>Improve MIPS compiles (Peter, Oliver Elphick)</para></listitem>
17793 <listitem><para>Require Autoconf version 2.53 (Peter)</para></listitem>
17794 <listitem><para>Require readline and zlib by default in configure (Peter)</para></listitem>
17795 <listitem><para>Allow Solaris to use Intimate Shared Memory (ISM), for performance (Scott Brunza, P.J. Josh Rovero)</para></listitem>
17796 <listitem><para>Always enable syslog in compile, remove --enable-syslog option (Tatsuo)</para></listitem>
17797 <listitem><para>Always enable multibyte in compile, remove --enable-multibyte option (Tatsuo)</para></listitem>
17798 <listitem><para>Always enable locale in compile, remove --enable-locale option (Peter)</para></listitem>
17799 <listitem><para>Fix for Win9x DLL creation (Magnus Naeslund)</para></listitem>
17800 <listitem><para>Fix for link() usage by WAL code on Windows, BeOS (Jason Tishler)</para></listitem>
17801 <listitem><para>Add sys/types.h to c.h, remove from main files (Peter, Bruce)</para></listitem>
17802 <listitem><para>Fix AIX hang on SMP machines (Tomoyuki Niijima)</para></listitem>
17803 <listitem><para>AIX SMP hang fix (Tomoyuki Niijima)</para></listitem>
17804 <listitem><para>Fix pre-1970 date handling on newer glibc libraries (Tom)</para></listitem>
17805 <listitem><para>Fix PowerPC SMP locking (Tom)</para></listitem>
17806 <listitem><para>Prevent gcc -ffast-math from being used (Peter, Tom)</para></listitem>
17807 <listitem><para>Bison &gt;= 1.50 now required for developer builds</para></listitem>
17808 <listitem><para>Kerberos 5 support now builds with Heimdal (Peter)</para></listitem>
17809 <listitem><para>Add appendix in the User's Guide which lists SQL features (Thomas)</para></listitem>
17810 <listitem><para>Improve loadable module linking to use RTLD_NOW (Tom)</para></listitem>
17811 <listitem><para>New error levels WARNING, INFO, LOG, DEBUG[1-5] (Bruce)</para></listitem>
17812 <listitem><para>New src/port directory holds replaced libc functions (Peter, Bruce)</para></listitem>
17813 <listitem><para>New pg_namespace system catalog for schemas (Tom)</para></listitem>
17814 <listitem><para>Add pg_class.relnamespace for schemas (Tom)</para></listitem>
17815 <listitem><para>Add pg_type.typnamespace for schemas (Tom)</para></listitem>
17816 <listitem><para>Add pg_proc.pronamespace for schemas (Tom)</para></listitem>
17817 <listitem><para>Restructure aggregates to have pg_proc entries (Tom)</para></listitem>
17818 <listitem><para>System relations now have their own namespace, pg_* test not required (Fernando Nasser)</para></listitem>
17819 <listitem><para>Rename TOAST index names to be *_index rather than *_idx (Neil)</para></listitem>
17820 <listitem><para>Add namespaces for operators, opclasses (Tom)</para></listitem>
17821 <listitem><para>Add additional checks to server control file (Thomas)</para></listitem>
17822 <listitem><para>New Polish FAQ (Marcin Mazurek)</para></listitem>
17823 <listitem><para>Add Posix semaphore support (Tom)</para></listitem>
17824 <listitem><para>Document need for reindex (Bruce)</para></listitem>
17825 <listitem><para>Rename some internal identifiers to simplify Windows compile (Jan, Katherine Ward)</para></listitem>
17826 <listitem><para>Add documentation on computing disk space (Bruce)</para></listitem>
17827 <listitem><para>Remove KSQO from GUC (Bruce)</para></listitem>
17828 <listitem><para>Fix memory leak in rtree (Kenneth Been)</para></listitem>
17829 <listitem><para>Modify a few error messages for consistency (Bruce)</para></listitem>
17830 <listitem><para>Remove unused system table columns (Peter)</para></listitem>
17831 <listitem><para>Make system columns NOT NULL where appropriate (Tom)</para></listitem>
17832 <listitem><para>Clean up use of sprintf in favor of snprintf() (Neil, Jukka Holappa)</para></listitem>
17833 <listitem><para>Remove OPAQUE and create specific subtypes (Tom)</para></listitem>
17834 <listitem><para>Cleanups in array internal handling (Joe, Tom)</para></listitem>
17835 <listitem><para>Disallow pg_atoi('') (Bruce)</para></listitem>
17836 <listitem><para>Remove parameter wal_files because WAL files are now recycled (Bruce)</para></listitem>
17837 <listitem><para>Add version numbers to heap pages (Tom)</para></listitem>
17838 </itemizedlist>
17839    </sect3>
17840
17841    <sect3>
17842     <title>Contrib</title>
17843 <itemizedlist>
17844 <listitem><para>Allow inet arrays in /contrib/array (Neil)</para></listitem>
17845 <listitem><para>GiST fixes (Teodor Sigaev, Neil)</para></listitem>
17846 <listitem><para>Upgrade /contrib/mysql</para></listitem>
17847 <listitem><para>Add /contrib/dbsize which shows table sizes without vacuum (Peter)</para></listitem>
17848 <listitem><para>Add /contrib/intagg, integer aggregator routines (mlw)</para></listitem>
17849 <listitem><para>Improve /contrib/oid2name (Neil, Bruce)</para></listitem>
17850 <listitem><para>Improve /contrib/tsearch (Oleg, Teodor Sigaev)</para></listitem>
17851 <listitem><para>Cleanups of /contrib/rserver (Alexey V. Borzov)</para></listitem>
17852 <listitem><para>Update /contrib/oracle conversion utility (Gilles Darold)</para></listitem>
17853 <listitem><para>Update /contrib/dblink (Joe)</para></listitem>
17854 <listitem><para>Improve options supported by /contrib/vacuumlo (Mario Weilguni)</para></listitem>
17855 <listitem><para>Improvements to /contrib/intarray (Oleg, Teodor Sigaev, Andrey Oktyabrski)</para></listitem>
17856 <listitem><para>Add /contrib/reindexdb utility (Shaun Thomas)</para></listitem>
17857 <listitem><para>Add indexing to /contrib/isbn_issn (Dan Weston)</para></listitem>
17858 <listitem><para>Add /contrib/dbmirror (Steven Singer)</para></listitem>
17859 <listitem><para>Improve /contrib/pgbench (Neil)</para></listitem>
17860 <listitem><para>Add /contrib/tablefunc table function examples (Joe)</para></listitem>
17861 <listitem><para>Add /contrib/ltree data type for tree structures (Teodor Sigaev, Oleg Bartunov)</para></listitem>
17862 <listitem><para>Move /contrib/pg_controldata, pg_resetxlog into main tree (Bruce)</para></listitem>
17863 <listitem><para>Fixes to /contrib/cube (Bruno Wolff)</para></listitem>
17864 <listitem><para>Improve /contrib/fulltextindex (Christopher)</para></listitem>
17865 </itemizedlist>
17866    </sect3>
17867
17868   </sect2>
17869  </sect1>
17870
17871   <sect1 id="release-7-2-8">
17872    <title>Release 7.2.8</title>
17873
17874    <note>
17875    <title>Release date</title>
17876    <simpara>2005-05-09</simpara>
17877    </note>
17878
17879    <para>
17880     This release contains a variety of fixes from 7.2.7, including one
17881     security-related issue.
17882    </para>
17883
17884    <sect2>
17885     <title>Migration to version 7.2.8</title>
17886
17887     <para>
17888      A dump/restore is not required for those running 7.2.X.
17889     </para>
17890    </sect2>
17891
17892    <sect2>
17893     <title>Changes</title>
17894
17895 <itemizedlist>
17896 <listitem><para>Repair ancient race condition that allowed a transaction to be
17897 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
17898 than for other purposes</para>
17899 <para>This is an extremely serious bug since it could lead to apparent
17900 data inconsistencies being briefly visible to applications.</para></listitem>
17901 <listitem><para>Repair race condition between relation extension and
17902 VACUUM</para>
17903 <para>This could theoretically have caused loss of a page's worth of
17904 freshly-inserted data, although the scenario seems of very low probability.
17905 There are no known cases of it having caused more than an Assert failure.
17906 </para></listitem>
17907 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
17908 <type>TIME WITH TIME ZONE</> values</para></listitem>
17909 <listitem><para>Additional buffer overrun checks in plpgsql
17910 (Neil)</para></listitem>
17911 <listitem><para>Fix pg_dump to dump index names and trigger names containing
17912 <literal>%</> correctly (Neil)</para></listitem>
17913 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
17914 month-related formats</para></listitem>
17915 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
17916 (Marko Kreen)</para></listitem>
17917 </itemizedlist>
17918
17919   </sect2>
17920  </sect1>
17921
17922   <sect1 id="release-7-2-7">
17923    <title>Release 7.2.7</title>
17924
17925    <note>
17926    <title>Release date</title>
17927    <simpara>2005-01-31</simpara>
17928    </note>
17929
17930    <para>
17931     This release contains a variety of fixes from 7.2.6, including several
17932     security-related issues.
17933    </para>
17934
17935    <sect2>
17936     <title>Migration to version 7.2.7</title>
17937
17938     <para>
17939      A dump/restore is not required for those running 7.2.X.
17940     </para>
17941    </sect2>
17942
17943    <sect2>
17944     <title>Changes</title>
17945
17946 <itemizedlist>
17947 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
17948 <para>
17949 On platforms that will automatically execute initialization functions of a
17950 shared library (this includes at least Windows and ELF-based Unixen),
17951 <command>LOAD</> can be used to make the server execute arbitrary code.
17952 Thanks to NGS Software for reporting this.</para></listitem>
17953 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
17954 Jurka)</para></listitem>
17955 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
17956 many parameters (Neil)</para></listitem>
17957 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
17958 <para>
17959 The result of the join was mistakenly supposed to be sorted the same as the
17960 left input.  This could not only deliver mis-sorted output to the user, but
17961 in case of nested merge joins could give outright wrong answers.
17962 </para></listitem>
17963 <listitem><para>Fix display of negative intervals in SQL and GERMAN
17964 datestyles</para></listitem>
17965 </itemizedlist>
17966
17967   </sect2>
17968  </sect1>
17969
17970   <sect1 id="release-7-2-6">
17971    <title>Release 7.2.6</title>
17972
17973    <note>
17974    <title>Release date</title>
17975    <simpara>2004-10-22</simpara>
17976    </note>
17977
17978    <para>
17979     This release contains a variety of fixes from 7.2.5.
17980    </para>
17981
17982
17983    <sect2>
17984     <title>Migration to version 7.2.6</title>
17985
17986     <para>
17987      A dump/restore is not required for those running 7.2.X.
17988     </para>
17989    </sect2>
17990
17991    <sect2>
17992     <title>Changes</title>
17993
17994 <itemizedlist>
17995 <listitem><para>Repair possible failure to update hint bits on disk</para>
17996 <para>
17997 Under rare circumstances this oversight could lead to
17998 <quote>could not access transaction status</> failures, which qualifies
17999 it as a potential-data-loss bug.
18000 </para></listitem>
18001 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
18002 <para>
18003 Very large left joins using a hash join plan could fail to output unmatched
18004 left-side rows given just the right data distribution.
18005 </para></listitem>
18006 <listitem><para>Disallow running pg_ctl as root</para>
18007 <para>
18008 This is to guard against any possible security issues.
18009 </para></listitem>
18010 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
18011 <para>
18012 This has been reported as a security issue, though it's hardly worthy of
18013 concern since there is no reason for non-developers to use this script anyway.
18014 </para></listitem>
18015 <listitem><para>Update to newer versions of Bison</para></listitem>
18016 </itemizedlist>
18017
18018   </sect2>
18019  </sect1>
18020
18021   <sect1 id="release-7-2-5">
18022    <title>Release 7.2.5</title>
18023
18024    <note>
18025    <title>Release date</title>
18026    <simpara>2004-08-16</simpara>
18027    </note>
18028
18029    <para>
18030     This release contains a variety of fixes from 7.2.4.
18031    </para>
18032
18033
18034    <sect2>
18035     <title>Migration to version 7.2.5</title>
18036
18037     <para>
18038      A dump/restore is not required for those running 7.2.X.
18039     </para>
18040    </sect2>
18041
18042    <sect2>
18043     <title>Changes</title>
18044
18045 <itemizedlist>
18046 <listitem><para>Prevent possible loss of committed transactions during crash</para>
18047 <para>
18048 Due to insufficient interlocking between transaction commit and checkpointing,
18049 it was possible for transactions committed just before the most recent
18050 checkpoint to be lost, in whole or in part, following a database crash and
18051 restart.  This is a serious bug that has existed
18052 since <productname>PostgreSQL</productname> 7.1.
18053 </para></listitem>
18054 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
18055 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
18056 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
18057 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
18058 <listitem><para>Repair memory leaks in pg_dump</para></listitem>
18059 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
18060 </itemizedlist>
18061   </sect2>
18062  </sect1>
18063
18064  <sect1 id="release-7-2-4">
18065   <title>Release 7.2.4</title>
18066
18067   <note>
18068    <title>Release date</title>
18069    <simpara>2003-01-30</simpara>
18070   </note>
18071
18072   <para>
18073    This release contains a variety of fixes for version 7.2.3,
18074    including fixes to prevent possible data loss.
18075   </para>
18076
18077   <sect2>
18078    <title>Migration to version 7.2.4</title>
18079
18080    <para>
18081     A dump/restore is <emphasis>not</emphasis> required for those
18082     running version 7.2.*.
18083    </para>
18084   </sect2>
18085
18086   <sect2>
18087    <title>Changes</title>
18088
18089 <itemizedlist>
18090 <listitem><para>Fix some additional cases of VACUUM "No one parent tuple was found" error</para></listitem>
18091 <listitem><para>Prevent VACUUM from being called inside a function  (Bruce)</para></listitem>
18092 <listitem><para>Ensure pg_clog updates are sync'd to disk before marking checkpoint complete</para></listitem>
18093 <listitem><para>Avoid integer overflow during large hash joins</para></listitem>
18094 <listitem><para>Make GROUP commands work when pg_group.grolist is large enough to be toasted</para></listitem>
18095 <listitem><para>Fix errors in datetime tables; some timezone names weren't being recognized</para></listitem>
18096 <listitem><para>Fix integer overflows in circle_poly(), path_encode(), path_add()  (Neil)</para></listitem>
18097 <listitem><para>Repair long-standing logic errors in lseg_eq(), lseg_ne(), lseg_center()</para></listitem>
18098 </itemizedlist>
18099   </sect2>
18100  </sect1>
18101
18102
18103  <sect1 id="release-7-2-3">
18104   <title>Release 7.2.3</title>
18105
18106   <note>
18107    <title>Release date</title>
18108    <simpara>2002-10-01</simpara>
18109   </note>
18110
18111   <para>
18112    This release contains a variety of fixes for version 7.2.2,
18113    including fixes to prevent possible data loss.
18114   </para>
18115
18116   <sect2>
18117    <title>Migration to version 7.2.3</title>
18118
18119    <para>
18120     A dump/restore is <emphasis>not</emphasis> required for those
18121     running version 7.2.*.
18122    </para>
18123   </sect2>
18124
18125   <sect2>
18126    <title>Changes</title>
18127
18128 <itemizedlist>
18129 <listitem><para>Prevent possible compressed transaction log loss (Tom)</para></listitem>
18130 <listitem><para>Prevent non-superuser from increasing most recent vacuum info (Tom)</para></listitem>
18131 <listitem><para>Handle pre-1970 date values in newer versions of glibc (Tom)</para></listitem>
18132 <listitem><para>Fix possible hang during server shutdown</para></listitem>
18133 <listitem><para>Prevent spinlock hangs on SMP PPC machines (Tomoyuki Niijima)</para></listitem>
18134 <listitem><para>Fix <application>pg_dump</> to properly dump FULL JOIN USING (Tom)</para></listitem>
18135 </itemizedlist>
18136   </sect2>
18137  </sect1>
18138
18139
18140  <sect1 id="release-7-2-2">
18141   <title>Release 7.2.2</title>
18142
18143   <note>
18144    <title>Release date</title>
18145    <simpara>2002-08-23</simpara>
18146   </note>
18147
18148   <para>
18149    This release contains a variety of fixes for version 7.2.1.
18150   </para>
18151
18152   <sect2>
18153    <title>Migration to version 7.2.2</title>
18154
18155    <para>
18156     A dump/restore is <emphasis>not</emphasis> required for those
18157     running version 7.2.*.
18158    </para>
18159   </sect2>
18160
18161   <sect2>
18162    <title>Changes</title>
18163
18164 <itemizedlist>
18165 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
18166 <listitem><para>Fix for compressed transaction log id wraparound (Tom)</para></listitem>
18167 <listitem><para>Fix PQescapeBytea/PQunescapeBytea so that they handle bytes &gt; 0x7f (Tatsuo)</para></listitem>
18168 <listitem><para>Fix for psql and <application>pg_dump</> crashing when invoked with non-existent long options (Tatsuo)</para></listitem>
18169 <listitem><para>Fix crash when invoking geometric operators (Tom)</para></listitem>
18170 <listitem><para>Allow OPEN cursor(args) (Tom)</para></listitem>
18171 <listitem><para>Fix for rtree_gist index build (Teodor)</para></listitem>
18172 <listitem><para>Fix for dumping user-defined aggregates (Tom)</para></listitem>
18173 <listitem><para>contrib/intarray fixes (Oleg)</para></listitem>
18174 <listitem><para>Fix for complex UNION/EXCEPT/INTERSECT queries using parens (Tom)</para></listitem>
18175 <listitem><para>Fix to pg_convert (Tatsuo)</para></listitem>
18176 <listitem><para>Fix for crash with long DATA strings (Thomas, Neil)</para></listitem>
18177 <listitem><para>Fix for repeat(), lpad(), rpad() and long strings (Neil)</para></listitem>
18178 </itemizedlist>
18179   </sect2>
18180  </sect1>
18181
18182
18183  <sect1 id="release-7-2-1">
18184   <title>Release 7.2.1</title>
18185
18186   <note>
18187    <title>Release date</title>
18188    <simpara>2002-03-21</simpara>
18189   </note>
18190
18191   <para>
18192    This release contains a variety of fixes for version 7.2.
18193   </para>
18194
18195   <sect2>
18196    <title>Migration to version 7.2.1</title>
18197
18198    <para>
18199     A dump/restore is <emphasis>not</emphasis> required for those
18200     running version 7.2.
18201    </para>
18202   </sect2>
18203
18204   <sect2>
18205    <title>Changes</title>
18206
18207 <itemizedlist>
18208 <listitem><para>Ensure that sequence counters do not go backwards after a crash (Tom)</para></listitem>
18209 <listitem><para>Fix pgaccess kanji-conversion key binding (Tatsuo)</para></listitem>
18210 <listitem><para>Optimizer improvements (Tom)</para></listitem>
18211 <listitem><para>Cash I/O improvements (Tom)</para></listitem>
18212 <listitem><para>New Russian FAQ</para></listitem>
18213 <listitem><para>Compile fix for missing AuthBlockSig (Heiko)</para></listitem>
18214 <listitem><para>Additional time zones and time zone fixes (Thomas)</para></listitem>
18215 <listitem><para>Allow psql \connect to handle mixed case database and user names (Tom)</para></listitem>
18216 <listitem><para>Return proper OID on command completion even with ON INSERT rules (Tom)</para></listitem>
18217 <listitem><para>Allow COPY FROM to use 8-bit DELIMITERS (Tatsuo)</para></listitem>
18218 <listitem><para>Fix bug in extract/date_part for milliseconds/microseconds (Tatsuo)</para></listitem>
18219 <listitem><para>Improve handling of multiple UNIONs with different lengths (Tom)</para></listitem>
18220 <listitem><para>contrib/btree_gist improvements (Teodor Sigaev)</para></listitem>
18221 <listitem><para>contrib/tsearch dictionary improvements, see README.tsearch for an additional installation step (Thomas T. Thai, Teodor Sigaev)</para></listitem>
18222 <listitem><para>Fix for array subscripts handling (Tom)</para></listitem>
18223 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
18224 </itemizedlist>
18225   </sect2>
18226  </sect1>
18227
18228
18229  <sect1 id="release-7-2">
18230   <title>Release 7.2</title>
18231
18232   <note>
18233    <title>Release date</title>
18234    <simpara>2002-02-04</simpara>
18235   </note>
18236
18237   <sect2>
18238    <title>Overview</title>
18239
18240    <para>
18241     This release improves <productname>PostgreSQL</> for use in
18242     high-volume applications.
18243    </para>
18244
18245    <para>
18246     Major changes in this release:
18247    </para>
18248
18249    <variablelist>
18250     <varlistentry>
18251      <term>VACUUM</term>
18252      <listitem>
18253       <para>
18254        Vacuuming no longer locks tables, thus allowing normal user
18255        access during the vacuum.  A new <command>VACUUM FULL</>
18256        command does old-style vacuum by locking the table and
18257        shrinking the on-disk copy of the table.
18258       </para>
18259      </listitem>
18260     </varlistentry>
18261
18262     <varlistentry>
18263      <term>Transactions</term>
18264      <listitem>
18265       <para>
18266        There is no longer a problem with installations that exceed
18267        four billion transactions.
18268       </para>
18269      </listitem>
18270     </varlistentry>
18271
18272     <varlistentry>
18273      <term>OIDs</term>
18274      <listitem>
18275       <para>
18276        OIDs are now optional.  Users can now create tables without
18277        OIDs for cases where OID usage is excessive.
18278       </para>
18279      </listitem>
18280     </varlistentry>
18281
18282     <varlistentry>
18283      <term>Optimizer</term>
18284      <listitem>
18285       <para>
18286        The system now computes histogram column statistics during
18287        <command>ANALYZE</>, allowing much better optimizer choices.
18288       </para>
18289      </listitem>
18290     </varlistentry>
18291
18292     <varlistentry>
18293      <term>Security</term>
18294      <listitem>
18295       <para>
18296        A new MD5 encryption option allows more secure storage and
18297        transfer of passwords.  A new Unix-domain socket
18298        authentication option is available on Linux and BSD systems.
18299       </para>
18300      </listitem>
18301     </varlistentry>
18302
18303     <varlistentry>
18304      <term>Statistics</term>
18305      <listitem>
18306       <para>
18307        Administrators can use the new table access statistics module
18308        to get fine-grained information about table and index usage.
18309       </para>
18310      </listitem>
18311     </varlistentry>
18312
18313     <varlistentry>
18314      <term>Internationalization</term>
18315      <listitem>
18316       <para>
18317        Program and library messages can now be displayed in several
18318        languages.
18319       </para>
18320      </listitem>
18321     </varlistentry>
18322
18323    </variablelist>
18324   </sect2>
18325
18326   <sect2>
18327    <title>Migration to version 7.2</title>
18328
18329    <para>
18330     A dump/restore using <command>pg_dump</command> is required for
18331     those wishing to migrate data from any previous release.
18332    </para>
18333
18334    <para>
18335     Observe the following incompatibilities:
18336    </para>
18337
18338    <itemizedlist>
18339     <listitem>
18340      <para>
18341       The semantics of the <command>VACUUM</command> command have
18342       changed in this release.  You might wish to update your
18343       maintenance procedures accordingly.
18344      </para>
18345     </listitem>
18346
18347     <listitem>
18348      <para>
18349       In this release, comparisons using <literal>= NULL</literal>
18350       will always return false (or NULL, more precisely).  Previous
18351       releases automatically transformed this syntax to <literal>IS
18352       NULL</literal>.  The old behavior can be re-enabled using a
18353       <filename>postgresql.conf</filename> parameter.
18354      </para>
18355     </listitem>
18356
18357     <listitem>
18358      <para>
18359       The <filename>pg_hba.conf</> and <filename>pg_ident.conf</>
18360       configuration is now only reloaded after receiving a
18361       <systemitem>SIGHUP</> signal, not with each connection.
18362      </para>
18363     </listitem>
18364
18365     <listitem>
18366      <para>
18367       The function <filename>octet_length()</> now returns the uncompressed data length.
18368      </para>
18369     </listitem>
18370
18371     <listitem>
18372      <para>
18373       The date/time value <literal>'current'</literal> is no longer
18374       available.  You will need to rewrite your applications.
18375      </para>
18376     </listitem>
18377
18378     <listitem>
18379      <para>
18380       The <literal>timestamp()</literal>, <literal>time()</literal>,
18381       and <literal>interval()</literal> functions are no longer
18382       available.  Instead of <literal>timestamp()</literal>, use
18383       <literal>timestamp 'string'</literal> or <literal>CAST</literal>.
18384      </para>
18385     </listitem>
18386
18387    </itemizedlist>
18388
18389    <para>
18390     The <literal>SELECT ... LIMIT #,#</literal> syntax will be removed
18391     in the next release. You should change your queries to use
18392     separate LIMIT and OFFSET clauses, e.g. <literal>LIMIT 10 OFFSET
18393     20</literal>.
18394    </para>
18395   </sect2>
18396
18397   <sect2>
18398    <title>Changes</title>
18399
18400    <sect3>
18401     <title>Server Operation</title>
18402 <itemizedlist>
18403 <listitem><para>Create temporary files in a separate directory (Bruce)</para></listitem>
18404 <listitem><para>Delete orphaned temporary files on postmaster startup (Bruce)</para></listitem>
18405 <listitem><para>Added unique indexes to some system tables (Tom)</para></listitem>
18406 <listitem><para>System table operator reorganization (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
18407 <listitem><para>Renamed pg_log to pg_clog (Tom)</para></listitem>
18408 <listitem><para>Enable SIGTERM, SIGQUIT to kill backends (Jan)</para></listitem>
18409 <listitem><para>Removed compile-time limit on number of backends (Tom)</para></listitem>
18410 <listitem><para>Better cleanup for semaphore resource failure (Tatsuo, Tom)</para></listitem>
18411 <listitem><para>Allow safe transaction ID wraparound (Tom)</para></listitem>
18412 <listitem><para>Removed OIDs from some system tables (Tom)</para></listitem>
18413 <listitem><para>Removed "triggered data change violation" error check (Tom)</para></listitem>
18414 <listitem><para>SPI portal creation of prepared/saved plans (Jan)</para></listitem>
18415 <listitem><para>Allow SPI column functions to work for system columns (Tom)</para></listitem>
18416 <listitem><para>Long value compression improvement (Tom)</para></listitem>
18417 <listitem><para>Statistics collector for table, index access (Jan)</para></listitem>
18418 <listitem><para>Truncate extra-long sequence names to a reasonable value (Tom)</para></listitem>
18419 <listitem><para>Measure transaction times in milliseconds (Thomas)</para></listitem>
18420 <listitem><para>Fix TID sequential scans (Hiroshi)</para></listitem>
18421 <listitem><para>Superuser ID now fixed at 1 (Peter E)</para></listitem>
18422 <listitem><para>New pg_ctl "reload" option (Tom)</para></listitem>
18423 </itemizedlist>
18424    </sect3>
18425
18426    <sect3>
18427     <title>Performance</title>
18428 <itemizedlist>
18429 <listitem><para>Optimizer improvements (Tom)</para></listitem>
18430 <listitem><para>New histogram column statistics for optimizer (Tom)</para></listitem>
18431 <listitem><para>Reuse write-ahead log files rather than discarding them (Tom)</para></listitem>
18432 <listitem><para>Cache improvements (Tom)</para></listitem>
18433 <listitem><para>IS NULL, IS NOT NULL optimizer improvement (Tom)</para></listitem>
18434 <listitem><para>Improve lock manager to reduce lock contention (Tom)</para></listitem>
18435 <listitem><para>Keep relcache entries for index access support functions (Tom)</para></listitem>
18436 <listitem><para>Allow better selectivity with NaN and infinities in NUMERIC (Tom)</para></listitem>
18437 <listitem><para>R-tree performance improvements (Kenneth Been)</para></listitem>
18438 <listitem><para>B-tree splits more efficient (Tom)</para></listitem>
18439 </itemizedlist>
18440    </sect3>
18441
18442    <sect3>
18443     <title>Privileges</title>
18444 <itemizedlist>
18445 <listitem><para>Change UPDATE, DELETE privileges to be distinct (Peter E)</para></listitem>
18446 <listitem><para>New REFERENCES, TRIGGER privileges (Peter E)</para></listitem>
18447 <listitem><para>Allow GRANT/REVOKE to/from more than one user at a time (Peter E)</para></listitem>
18448 <listitem><para>New has_table_privilege() function (Joe Conway)</para></listitem>
18449 <listitem><para>Allow non-superuser to vacuum database (Tom)</para></listitem>
18450 <listitem><para>New SET SESSION AUTHORIZATION command (Peter E)</para></listitem>
18451 <listitem><para>Fix bug in privilege modifications on newly created tables (Tom)</para></listitem>
18452 <listitem><para>Disallow access to pg_statistic for non-superuser, add user-accessible views (Tom)</para></listitem>
18453 </itemizedlist>
18454    </sect3>
18455
18456    <sect3>
18457     <title>Client Authentication</title>
18458 <itemizedlist>
18459 <listitem><para>Fork postmaster before doing authentication to prevent hangs (Peter E)</para></listitem>
18460 <listitem><para>Add ident authentication over Unix domain sockets on Linux, *BSD (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)</para></listitem>
18461 <listitem><para>Add a password authentication method that uses MD5 encryption (Bruce)</para></listitem>
18462 <listitem><para>Allow encryption of stored passwords using MD5 (Bruce)</para></listitem>
18463 <listitem><para>PAM authentication (Dominic J. Eidson)</para></listitem>
18464 <listitem><para>Load pg_hba.conf and pg_ident.conf only on startup and SIGHUP (Bruce)</para></listitem>
18465 </itemizedlist>
18466    </sect3>
18467
18468    <sect3>
18469     <title>Server Configuration</title>
18470 <itemizedlist>
18471 <listitem><para>Interpretation of some time zone abbreviations as Australian rather than North American now settable at run time (Bruce)</para></listitem>
18472 <listitem><para>New parameter to set default transaction isolation level (Peter E)</para></listitem>
18473 <listitem><para>New parameter to enable conversion of "expr = NULL" into "expr IS NULL", off by default (Peter E)</para></listitem>
18474 <listitem><para>New parameter to control memory usage by VACUUM (Tom)</para></listitem>
18475 <listitem><para>New parameter to set client authentication timeout (Tom)</para></listitem>
18476 <listitem><para>New parameter to set maximum number of open files (Tom)</para></listitem>
18477 </itemizedlist>
18478    </sect3>
18479
18480    <sect3>
18481     <title>Queries</title>
18482 <itemizedlist>
18483 <listitem><para>Statements added by INSERT rules now execute after the INSERT (Jan)</para></listitem>
18484 <listitem><para>Prevent unadorned relation names in target list (Bruce)</para></listitem>
18485 <listitem><para>NULLs now sort after all normal values in ORDER BY (Tom)</para></listitem>
18486 <listitem><para>New IS UNKNOWN, IS NOT UNKNOWN Boolean tests (Tom)</para></listitem>
18487 <listitem><para>New SHARE UPDATE EXCLUSIVE lock mode (Tom)</para></listitem>
18488 <listitem><para>New EXPLAIN ANALYZE command that shows run times and row counts (Martijn van Oosterhout)</para></listitem>
18489 <listitem><para>Fix problem with LIMIT and subqueries (Tom)</para></listitem>
18490 <listitem><para>Fix for LIMIT, DISTINCT ON pushed into subqueries (Tom)</para></listitem>
18491 <listitem><para>Fix nested EXCEPT/INTERSECT (Tom)</para></listitem>
18492 </itemizedlist>
18493    </sect3>
18494
18495    <sect3>
18496     <title>Schema Manipulation</title>
18497 <itemizedlist>
18498 <listitem><para>Fix SERIAL in temporary tables (Bruce)</para></listitem>
18499 <listitem><para>Allow temporary sequences (Bruce)</para></listitem>
18500 <listitem><para>Sequences now use int8 internally (Tom)</para></listitem>
18501 <listitem><para>New SERIAL8 creates int8 columns with sequences, default still SERIAL4 (Tom)</para></listitem>
18502 <listitem><para>Make OIDs optional using WITHOUT OIDS (Tom)</para></listitem>
18503 <listitem><para>Add %TYPE syntax to CREATE TYPE (Ian Lance Taylor)</para></listitem>
18504 <listitem><para>Add ALTER TABLE / DROP CONSTRAINT for CHECK constraints (Christopher Kings-Lynne)</para></listitem>
18505 <listitem><para>New CREATE OR REPLACE FUNCTION to alter existing function (preserving the function OID) (Gavin Sherry)</para></listitem>
18506 <listitem><para>Add ALTER TABLE / ADD [ UNIQUE | PRIMARY ] (Christopher Kings-Lynne)</para></listitem>
18507 <listitem><para>Allow column renaming in views</para></listitem>
18508 <listitem><para>Make ALTER TABLE / RENAME COLUMN update column names of indexes (Brent Verner)</para></listitem>
18509 <listitem><para>Fix for ALTER TABLE / ADD CONSTRAINT ... CHECK with inherited tables (Stephan Szabo)</para></listitem>
18510 <listitem><para>ALTER TABLE RENAME update foreign-key trigger arguments correctly (Brent Verner)</para></listitem>
18511 <listitem><para>DROP AGGREGATE and COMMENT ON AGGREGATE now accept an aggtype (Tom)</para></listitem>
18512 <listitem><para>Add automatic return type data casting for SQL functions (Tom)</para></listitem>
18513 <listitem><para>Allow GiST indexes to handle NULLs and multikey indexes (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
18514 <listitem><para>Enable partial indexes (Martijn van Oosterhout)</para></listitem>
18515 </itemizedlist>
18516    </sect3>
18517
18518    <sect3>
18519     <title>Utility Commands</title>
18520 <itemizedlist>
18521 <listitem><para>Add RESET ALL, SHOW ALL (Marko Kreen)</para></listitem>
18522 <listitem><para>CREATE/ALTER USER/GROUP now allow options in any order (Vince)</para></listitem>
18523 <listitem><para>Add LOCK A, B, C functionality (Neil Padgett)</para></listitem>
18524 <listitem><para>New ENCRYPTED/UNENCRYPTED option to CREATE/ALTER USER (Bruce)</para></listitem>
18525 <listitem><para>New light-weight VACUUM does not lock table; old semantics are available as VACUUM FULL (Tom)</para></listitem>
18526 <listitem><para>Disable COPY TO/FROM on views (Bruce)</para></listitem>
18527 <listitem><para>COPY DELIMITERS string must be exactly one character (Tom)</para></listitem>
18528 <listitem><para>VACUUM warning about index tuples fewer than heap now only appears when appropriate (Martijn van Oosterhout)</para></listitem>
18529 <listitem><para>Fix privilege checks for CREATE INDEX (Tom)</para></listitem>
18530 <listitem><para>Disallow inappropriate use of CREATE/DROP INDEX/TRIGGER/VIEW (Tom)</para></listitem>
18531 </itemizedlist>
18532    </sect3>
18533
18534    <sect3>
18535     <title>Data Types and Functions</title>
18536 <itemizedlist>
18537 <listitem><para>SUM(), AVG(), COUNT() now uses int8 internally for speed (Tom)</para></listitem>
18538 <listitem><para>Add convert(), convert2() (Tatsuo)</para></listitem>
18539 <listitem><para>New function bit_length() (Peter E)</para></listitem>
18540 <listitem><para>Make the "n" in CHAR(n)/VARCHAR(n) represents letters, not bytes (Tatsuo)</para></listitem>
18541 <listitem><para>CHAR(), VARCHAR() now reject strings that are too long (Peter E)</para></listitem>
18542 <listitem><para>BIT VARYING now rejects bit strings that are too long (Peter E)</para></listitem>
18543 <listitem><para>BIT now rejects bit strings that do not match declared size (Peter E)</para></listitem>
18544 <listitem><para>INET, CIDR text conversion functions (Alex Pilosov)</para></listitem>
18545 <listitem><para>INET, CIDR operators &lt;&lt; and &lt;&lt;= indexable (Alex Pilosov)</para></listitem>
18546 <listitem><para>Bytea \### now requires valid three digit octal number</para></listitem>
18547 <listitem><para>Bytea comparison improvements, now supports =, &lt;&gt;, &gt;, &gt;=, &lt;, and &lt;=</para></listitem>
18548 <listitem><para>Bytea now supports B-tree indexes</para></listitem>
18549 <listitem><para>Bytea now supports LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE</para></listitem>
18550 <listitem><para>Bytea now supports concatenation</para></listitem>
18551 <listitem><para>New bytea functions: position, substring, trim, btrim, and length</para></listitem>
18552 <listitem><para>New encode() function mode, "escaped", converts minimally escaped bytea to/from text</para></listitem>
18553 <listitem><para>Add pg_database_encoding_max_length() (Tatsuo)</para></listitem>
18554 <listitem><para>Add pg_client_encoding() function (Tatsuo)</para></listitem>
18555 <listitem><para>now() returns time with millisecond precision (Thomas)</para></listitem>
18556 <listitem><para>New TIMESTAMP WITHOUT TIMEZONE data type (Thomas)</para></listitem>
18557 <listitem><para>Add ISO date/time specification with "T", yyyy-mm-ddThh:mm:ss (Thomas)</para></listitem>
18558 <listitem><para>New xid/int comparison functions (Hiroshi)</para></listitem>
18559 <listitem><para>Add precision to TIME, TIMESTAMP, and INTERVAL data types (Thomas)</para></listitem>
18560 <listitem><para>Modify type coercion logic to attempt binary-compatible functions first (Tom)</para></listitem>
18561 <listitem><para>New encode() function installed by default (Marko Kreen)</para></listitem>
18562 <listitem><para>Improved to_*() conversion functions (Karel Zak)</para></listitem>
18563 <listitem><para>Optimize LIKE/ILIKE when using single-byte encodings (Tatsuo)</para></listitem>
18564 <listitem><para>New functions in contrib/pgcrypto: crypt(), hmac(), encrypt(), gen_salt() (Marko Kreen)</para></listitem>
18565 <listitem><para>Correct description of translate() function (Bruce)</para></listitem>
18566 <listitem><para>Add INTERVAL argument for SET TIME ZONE (Thomas)</para></listitem>
18567 <listitem><para>Add INTERVAL YEAR TO MONTH (etc.) syntax (Thomas)</para></listitem>
18568 <listitem><para>Optimize length functions when using single-byte encodings (Tatsuo)</para></listitem>
18569 <listitem><para>Fix path_inter, path_distance, path_length, dist_ppath to handle closed paths (Curtis Barrett, Tom)</para></listitem>
18570 <listitem><para>octet_length(text) now returns non-compressed length (Tatsuo, Bruce)</para></listitem>
18571 <listitem><para>Handle "July" full name in date/time literals (Greg Sabino Mullane)</para></listitem>
18572 <listitem><para>Some datatype() function calls now evaluated differently</para></listitem>
18573 <listitem><para>Add support for Julian and ISO time specifications (Thomas)</para></listitem>
18574 </itemizedlist>
18575    </sect3>
18576
18577    <sect3>
18578     <title>Internationalization</title>
18579 <itemizedlist>
18580 <listitem><para>National language support in psql, <application>pg_dump</>, libpq, and server (Peter E)</para></listitem>
18581 <listitem><para>Message translations in Chinese (simplified, traditional), Czech, French, German, Hungarian, Russian, Swedish (Peter E, Serguei A. Mokhov, Karel Zak, Weiping He, Zhenbang Wei, Kovacs Zoltan)</para></listitem>
18582 <listitem><para>Make trim, ltrim, rtrim, btrim, lpad, rpad, translate multibyte aware (Tatsuo)</para></listitem>
18583 <listitem><para>Add LATIN5,6,7,8,9,10 support (Tatsuo)</para></listitem>
18584 <listitem><para>Add ISO 8859-5,6,7,8 support (Tatsuo)</para></listitem>
18585 <listitem><para>Correct LATIN5 to mean ISO-8859-9, not ISO-8859-5 (Tatsuo)</para></listitem>
18586 <listitem><para>Make mic2ascii() non-ASCII aware (Tatsuo)</para></listitem>
18587 <listitem><para>Reject invalid multibyte character sequences (Tatsuo)</para></listitem>
18588 </itemizedlist>
18589    </sect3>
18590
18591    <sect3>
18592     <title><application>PL/pgSQL</></title>
18593 <itemizedlist>
18594 <listitem><para>Now uses portals for SELECT loops, allowing huge result sets (Jan)</para></listitem>
18595 <listitem><para>CURSOR and REFCURSOR support (Jan)</para></listitem>
18596 <listitem><para>Can now return open cursors (Jan)</para></listitem>
18597 <listitem><para>Add ELSEIF (Klaus Reger)</para></listitem>
18598 <listitem><para>Improve PL/pgSQL error reporting, including location of error (Tom)</para></listitem>
18599 <listitem><para>Allow IS or FOR key words in cursor declaration, for compatibility (Bruce)</para></listitem>
18600 <listitem><para>Fix for SELECT ... FOR UPDATE (Tom)</para></listitem>
18601 <listitem><para>Fix for PERFORM returning multiple rows (Tom)</para></listitem>
18602 <listitem><para>Make PL/pgSQL use the server's type coercion code (Tom)</para></listitem>
18603 <listitem><para>Memory leak fix (Jan, Tom)</para></listitem>
18604 <listitem><para>Make trailing semicolon optional (Tom)</para></listitem>
18605 </itemizedlist>
18606    </sect3>
18607
18608    <sect3>
18609     <title>PL/Perl</title>
18610 <itemizedlist>
18611 <listitem><para>New untrusted PL/Perl (Alex Pilosov)</para></listitem>
18612 <listitem><para>PL/Perl is now built on some platforms even if libperl is not shared (Peter E)</para></listitem>
18613 </itemizedlist>
18614     </sect3>
18615
18616    <sect3>
18617     <title>PL/Tcl</title>
18618 <itemizedlist>
18619 <listitem><para>Now reports errorInfo (Vsevolod Lobko)</para></listitem>
18620 <listitem><para>Add spi_lastoid function (bob@redivi.com)</para></listitem>
18621 </itemizedlist>
18622    </sect3>
18623
18624    <sect3>
18625     <title>PL/Python</title>
18626 <itemizedlist>
18627 <listitem><para>...is new (Andrew Bosma)</para></listitem>
18628 </itemizedlist>
18629    </sect3>
18630
18631    <sect3>
18632     <title><application>psql</></title>
18633 <itemizedlist>
18634 <listitem><para>\d displays indexes in unique, primary groupings (Christopher Kings-Lynne)</para></listitem>
18635 <listitem><para>Allow trailing semicolons in backslash commands (Greg Sabino Mullane)</para></listitem>
18636 <listitem><para>Read password from /dev/tty if possible</para></listitem>
18637 <listitem><para>Force new password prompt when changing user and database (Tatsuo, Tom)</para></listitem>
18638 <listitem><para>Format the correct number of columns for Unicode (Patrice)</para></listitem>
18639 </itemizedlist>
18640    </sect3>
18641
18642    <sect3>
18643     <title><application>libpq</></title>
18644 <itemizedlist>
18645 <listitem><para>New function PQescapeString() to escape quotes in command strings (Florian Weimer)</para></listitem>
18646 <listitem><para>New function PQescapeBytea() escapes binary strings for use as SQL string literals</para></listitem>
18647 </itemizedlist>
18648    </sect3>
18649
18650    <sect3>
18651     <title>JDBC</title>
18652 <itemizedlist>
18653 <listitem><para>Return OID of INSERT (Ken K)</para></listitem>
18654 <listitem><para>Handle more data types (Ken K)</para></listitem>
18655 <listitem><para>Handle single quotes and newlines in strings (Ken K)</para></listitem>
18656 <listitem><para>Handle NULL variables (Ken K)</para></listitem>
18657 <listitem><para>Fix for time zone handling (Barry Lind)</para></listitem>
18658 <listitem><para>Improved Druid support</para></listitem>
18659 <listitem><para>Allow eight-bit characters with non-multibyte server (Barry Lind)</para></listitem>
18660 <listitem><para>Support BIT, BINARY types (Ned Wolpert)</para></listitem>
18661 <listitem><para>Reduce memory usage (Michael Stephens, Dave Cramer)</para></listitem>
18662 <listitem><para>Update DatabaseMetaData (Peter E)</para></listitem>
18663 <listitem><para>Add DatabaseMetaData.getCatalogs() (Peter E)</para></listitem>
18664 <listitem><para>Encoding fixes (Anders Bengtsson)</para></listitem>
18665 <listitem><para>Get/setCatalog methods (Jason Davies)</para></listitem>
18666 <listitem><para>DatabaseMetaData.getColumns() now returns column defaults (Jason Davies)</para></listitem>
18667 <listitem><para>DatabaseMetaData.getColumns() performance improvement (Jeroen van Vianen)</para></listitem>
18668 <listitem><para>Some JDBC1 and JDBC2 merging (Anders Bengtsson)</para></listitem>
18669 <listitem><para>Transaction performance improvements (Barry Lind)</para></listitem>
18670 <listitem><para>Array fixes (Greg Zoller)</para></listitem>
18671 <listitem><para>Serialize addition </para></listitem>
18672 <listitem><para>Fix batch processing (Rene Pijlman)</para></listitem>
18673 <listitem><para>ExecSQL method reorganization (Anders Bengtsson)</para></listitem>
18674 <listitem><para>GetColumn() fixes (Jeroen van Vianen)</para></listitem>
18675 <listitem><para>Fix isWriteable() function (Rene Pijlman)</para></listitem>
18676 <listitem><para>Improved passage of JDBC2 conformance tests (Rene Pijlman)</para></listitem>
18677 <listitem><para>Add bytea type capability (Barry Lind)</para></listitem>
18678 <listitem><para>Add isNullable() (Rene Pijlman)</para></listitem>
18679 <listitem><para>JDBC date/time test suite fixes (Liam Stewart)</para></listitem>
18680 <listitem><para>Fix for SELECT 'id' AS xxx FROM table (Dave Cramer)</para></listitem>
18681 <listitem><para>Fix DatabaseMetaData to show precision properly (Mark Lillywhite)</para></listitem>
18682 <listitem><para>New getImported/getExported keys (Jason Davies)</para></listitem>
18683 <listitem><para>MD5 password encryption support (Jeremy Wohl)</para></listitem>
18684 <listitem><para>Fix to actually use type cache (Ned Wolpert)</para></listitem>
18685 </itemizedlist>
18686    </sect3>
18687
18688    <sect3>
18689     <title>ODBC</title>
18690 <itemizedlist>
18691 <listitem><para>Remove query size limit (Hiroshi)</para></listitem>
18692 <listitem><para>Remove text field size limit (Hiroshi)</para></listitem>
18693 <listitem><para>Fix for SQLPrimaryKeys in multibyte mode (Hiroshi)</para></listitem>
18694 <listitem><para>Allow ODBC procedure calls (Hiroshi)</para></listitem>
18695 <listitem><para>Improve boolean handing (Aidan Mountford)</para></listitem>
18696 <listitem><para>Most configuration options now settable via DSN (Hiroshi)</para></listitem>
18697 <listitem><para>Multibyte, performance fixes (Hiroshi)</para></listitem>
18698 <listitem><para>Allow driver to be used with iODBC or unixODBC (Peter E)</para></listitem>
18699 <listitem><para>MD5 password encryption support (Bruce)</para></listitem>
18700 <listitem><para>Add more compatibility functions to odbc.sql (Peter E)</para></listitem>
18701 </itemizedlist>
18702    </sect3>
18703
18704    <sect3>
18705     <title><application>ECPG</></title>
18706 <itemizedlist>
18707 <listitem><para>EXECUTE ... INTO implemented (Christof Petig)</para></listitem>
18708 <listitem><para>Multiple row descriptor support (e.g. CARDINALITY) (Christof Petig)</para></listitem>
18709 <listitem><para>Fix for GRANT parameters (Lee Kindness)</para></listitem>
18710 <listitem><para>Fix INITIALLY DEFERRED bug</para></listitem>
18711 <listitem><para>Various bug fixes (Michael, Christof Petig)</para></listitem>
18712 <listitem><para>Auto allocation for indicator variable arrays (int *ind_p=NULL)</para></listitem>
18713 <listitem><para>Auto allocation for string arrays (char **foo_pp=NULL)</para></listitem>
18714 <listitem><para>ECPGfree_auto_mem fixed</para></listitem>
18715 <listitem><para>All function names with external linkage are now prefixed by ECPG</para></listitem>
18716 <listitem><para>Fixes for arrays of structures (Michael)</para></listitem>
18717 </itemizedlist>
18718    </sect3>
18719
18720    <sect3>
18721     <title>Misc. Interfaces</title>
18722 <itemizedlist>
18723 <listitem><para>Python fix fetchone() (Gerhard Haring)</para></listitem>
18724 <listitem><para>Use UTF, Unicode in Tcl where appropriate (Vsevolod Lobko, Reinhard Max)</para></listitem>
18725 <listitem><para>Add Tcl COPY TO/FROM (ljb)</para></listitem>
18726 <listitem><para>Prevent output of default index op class in <application>pg_dump</> (Tom)</para></listitem>
18727 <listitem><para>Fix libpgeasy memory leak (Bruce)</para></listitem>
18728 </itemizedlist>
18729    </sect3>
18730
18731    <sect3>
18732     <title>Build and Install</title>
18733 <itemizedlist>
18734 <listitem><para>Configure, dynamic loader, and shared library fixes (Peter E)</para></listitem>
18735 <listitem><para>Fixes in QNX 4 port (Bernd Tegge)</para></listitem>
18736 <listitem><para>Fixes in Cygwin and Windows ports (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)</para></listitem>
18737 <listitem><para>Fix for Windows socket communication failures (Magnus, Mikhail Terekhov)</para></listitem>
18738 <listitem><para>Hurd compile fix (Oliver Elphick)</para></listitem>
18739 <listitem><para>BeOS fixes (Cyril Velter)</para></listitem>
18740 <listitem><para>Remove configure --enable-unicode-conversion, now enabled by multibyte (Tatsuo)</para></listitem>
18741 <listitem><para>AIX fixes (Tatsuo, Andreas)</para></listitem>
18742 <listitem><para>Fix parallel make (Peter E)</para></listitem>
18743 <listitem><para>Install SQL language manual pages into OS-specific directories (Peter E)</para></listitem>
18744 <listitem><para>Rename config.h to pg_config.h (Peter E)</para></listitem>
18745 <listitem><para>Reorganize installation layout of header files (Peter E)</para></listitem>
18746 </itemizedlist>
18747    </sect3>
18748
18749    <sect3>
18750     <title>Source Code</title>
18751 <itemizedlist>
18752 <listitem><para>Remove SEP_CHAR (Bruce)</para></listitem>
18753 <listitem><para>New GUC hooks (Tom)</para></listitem>
18754 <listitem><para>Merge GUC and command line handling (Marko Kreen)</para></listitem>
18755 <listitem><para>Remove EXTEND INDEX (Martijn van Oosterhout, Tom)</para></listitem>
18756 <listitem><para>New pgjindent utility to indent java code (Bruce)</para></listitem>
18757 <listitem><para>Remove define of true/false when compiling under C++ (Leandro Fanzone, Tom)</para></listitem>
18758 <listitem><para>pgindent fixes (Bruce, Tom)</para></listitem>
18759 <listitem><para>Replace strcasecmp() with strcmp() where appropriate (Peter E)</para></listitem>
18760 <listitem><para>Dynahash portability improvements (Tom)</para></listitem>
18761 <listitem><para>Add 'volatile' usage in spinlock structures</para></listitem>
18762 <listitem><para>Improve signal handling logic (Tom)</para></listitem>
18763 </itemizedlist>
18764    </sect3>
18765
18766    <sect3>
18767     <title>Contrib</title>
18768 <itemizedlist>
18769 <listitem><para>New contrib/rtree_gist (Oleg Bartunov, Teodor Sigaev)</para></listitem>
18770 <listitem><para>New contrib/tsearch full-text indexing (Oleg, Teodor Sigaev)</para></listitem>
18771 <listitem><para>Add contrib/dblink for remote database access (Joe Conway)</para></listitem>
18772 <listitem><para>contrib/ora2pg Oracle conversion utility (Gilles Darold)</para></listitem>
18773 <listitem><para>contrib/xml XML conversion utility (John Gray)</para></listitem>
18774 <listitem><para>contrib/fulltextindex fixes (Christopher Kings-Lynne)</para></listitem>
18775 <listitem><para>New contrib/fuzzystrmatch with levenshtein and metaphone, soundex merged (Joe Conway)</para></listitem>
18776 <listitem><para>Add contrib/intarray boolean queries, binary search, fixes (Oleg Bartunov)</para></listitem>
18777 <listitem><para>New pg_upgrade utility (Bruce)</para></listitem>
18778 <listitem><para>Add new pg_resetxlog options (Bruce, Tom)</para></listitem>
18779 </itemizedlist>
18780    </sect3>
18781   </sect2>
18782  </sect1>
18783
18784
18785   <sect1 id="release-7-1-3">
18786    <title>Release 7.1.3</title>
18787
18788    <note>
18789    <title>Release date</title>
18790    <simpara>2001-08-15</simpara>
18791    </note>
18792
18793    <sect2>
18794     <title>Migration to version 7.1.3</title>
18795
18796     <para>
18797      A dump/restore is <emphasis>not</emphasis> required for those running
18798      7.1.X.
18799     </para>
18800    </sect2>
18801
18802    <sect2>
18803     <title>Changes</title>
18804
18805     <para>
18806      <programlisting>
18807 Remove unused WAL segments of large transactions (Tom)
18808 Multiaction rule fix (Tom)
18809 PL/pgSQL memory allocation fix (Jan)
18810 VACUUM buffer fix (Tom)
18811 Regression test fixes (Tom)
18812 pg_dump fixes for GRANT/REVOKE/comments on views, user-defined types (Tom)
18813 Fix subselects with DISTINCT ON or LIMIT (Tom)
18814 BeOS fix
18815 Disable COPY TO/FROM a view (Tom)
18816 Cygwin build (Jason Tishler)
18817      </programlisting>
18818     </para>
18819    </sect2>
18820   </sect1>
18821
18822
18823   <sect1 id="release-7-1-2">
18824    <title>Release 7.1.2</title>
18825
18826    <note>
18827    <title>Release date</title>
18828    <simpara>2001-05-11</simpara>
18829    </note>
18830
18831    <para>
18832     This has one fix from 7.1.1.
18833    </para>
18834
18835
18836    <sect2>
18837     <title>Migration to version 7.1.2</title>
18838
18839     <para>
18840      A dump/restore is <emphasis>not</emphasis> required for those running
18841      7.1.X.
18842     </para>
18843    </sect2>
18844
18845    <sect2>
18846     <title>Changes</title>
18847
18848     <para>
18849      <programlisting>
18850 Fix PL/pgSQL SELECTs when returning no rows
18851 Fix for psql backslash core dump
18852 Referential integrity privilege fix
18853 Optimizer fixes
18854 pg_dump cleanups
18855      </programlisting>
18856     </para>
18857    </sect2>
18858   </sect1>
18859
18860
18861   <sect1 id="release-7-1-1">
18862    <title>Release 7.1.1</title>
18863
18864    <note>
18865    <title>Release date</title>
18866    <simpara>2001-05-05</simpara>
18867    </note>
18868
18869    <para>
18870     This has a variety of fixes from 7.1.
18871    </para>
18872
18873
18874    <sect2>
18875     <title>Migration to version 7.1.1</title>
18876
18877     <para>
18878      A dump/restore is <emphasis>not</emphasis> required for those running
18879      7.1.
18880     </para>
18881    </sect2>
18882
18883    <sect2>
18884     <title>Changes</title>
18885
18886     <para>
18887      <programlisting>
18888 Fix for numeric MODULO operator (Tom)
18889 pg_dump fixes (Philip)
18890 pg_dump can dump 7.0 databases (Philip)
18891 readline 4.2 fixes (Peter E)
18892 JOIN fixes (Tom)
18893 AIX, MSWIN, VAX, N32K fixes (Tom)
18894 Multibytes fixes (Tom)
18895 Unicode fixes (Tatsuo)
18896 Optimizer improvements (Tom)
18897 Fix for whole rows in functions (Tom)
18898 Fix for pg_ctl and option strings with spaces (Peter E)
18899 ODBC fixes (Hiroshi)
18900 EXTRACT can now take string argument (Thomas)
18901 Python fixes (Darcy)
18902      </programlisting>
18903     </para>
18904    </sect2>
18905   </sect1>
18906
18907
18908   <sect1 id="release-7-1">
18909    <title>Release 7.1</title>
18910
18911    <note>
18912    <title>Release date</title>
18913    <simpara>2001-04-13</simpara>
18914    </note>
18915
18916    <para>
18917         This release focuses on removing limitations that have existed in the
18918         <productname>PostgreSQL</productname> code for many years.
18919    </para>
18920
18921    <para>
18922     Major changes in this release:
18923    </para>
18924
18925    <variablelist>
18926     <varlistentry>
18927      <term>
18928        Write-ahead Log (WAL)
18929      </term>
18930      <listitem>
18931       <para>
18932 To maintain database consistency in case of an operating system crash,
18933 previous releases of <productname>PostgreSQL</productname> have forced
18934 all data modifications to disk before each transaction commit.  With
18935 WAL, only one log file must be flushed to disk, greatly improving
18936 performance.  If you have been using -F in previous releases to
18937 disable disk flushes, you might want to consider discontinuing its use.
18938       </para>
18939      </listitem>
18940     </varlistentry>
18941
18942     <varlistentry>
18943      <term>
18944        TOAST
18945      </term>
18946      <listitem>
18947       <para>
18948        TOAST - Previous releases had a compiled-in row length limit,
18949 typically 8k - 32k. This limit made storage of long text fields
18950 difficult.  With TOAST, long rows of any length can be stored with good
18951 performance.
18952       </para>
18953      </listitem>
18954     </varlistentry>
18955
18956     <varlistentry>
18957      <term>
18958        Outer Joins
18959      </term>
18960      <listitem>
18961       <para>
18962 We now support outer joins.  The UNION/NOT IN
18963 workaround for outer joins is no longer required.  We use the SQL92
18964 outer join syntax.
18965       </para>
18966      </listitem>
18967     </varlistentry>
18968
18969     <varlistentry>
18970      <term>
18971        Function Manager
18972      </term>
18973      <listitem>
18974       <para>
18975 The previous C function manager did not
18976 handle null values properly, nor did it support 64-bit <acronym>CPU</acronym>'s (Alpha).  The new
18977 function manager does.  You can continue using your old custom
18978 functions, but you might want to rewrite them in the future to use the new
18979 function manager call interface.
18980       </para>
18981      </listitem>
18982     </varlistentry>
18983
18984     <varlistentry>
18985      <term>
18986        Complex Queries
18987      </term>
18988      <listitem>
18989       <para>
18990 A large number of complex queries that were
18991 unsupported in previous releases now work.  Many combinations of views,
18992 aggregates, UNION, LIMIT, cursors, subqueries, and inherited tables
18993 now work properly. Inherited tables are now accessed by default.
18994 Subqueries in FROM are now supported.
18995       </para>
18996      </listitem>
18997     </varlistentry>
18998
18999    </variablelist>
19000
19001    <sect2>
19002     <title>Migration to version 7.1</title>
19003
19004     <para>
19005         A dump/restore using pg_dump is required for those wishing to migrate
19006         data from any previous release.
19007     </para>
19008    </sect2>
19009
19010    <sect2>
19011     <title>Changes</title>
19012
19013     <para>
19014      <programlisting>
19015 Bug Fixes
19016 ---------
19017 Many multibyte/Unicode/locale fixes (Tatsuo and others)
19018 More reliable ALTER TABLE RENAME (Tom)
19019 Kerberos V fixes (David Wragg)
19020 Fix for INSERT INTO...SELECT where targetlist has subqueries (Tom)
19021 Prompt username/password on standard error (Bruce)
19022 Large objects inv_read/inv_write fixes (Tom)
19023 Fixes for to_char(), to_date(), to_ascii(), and to_timestamp() (Karel,
19024     Daniel Baldoni)
19025 Prevent query expressions from leaking memory (Tom)
19026 Allow UPDATE of arrays elements (Tom)
19027 Wake up lock waiters during cancel (Hiroshi)
19028 Fix rare cursor crash when using hash join (Tom)
19029 Fix for DROP TABLE/INDEX in rolled-back transaction (Hiroshi)
19030 Fix psql crash from \l+ if MULTIBYTE enabled (Peter E)
19031 Fix truncation of rule names during CREATE VIEW (Ross Reedstrom)
19032 Fix PL/perl (Alex Kapranoff)
19033 Disallow LOCK on views (Mark Hollomon)
19034 Disallow INSERT/UPDATE/DELETE on views (Mark Hollomon)
19035 Disallow DROP RULE, CREATE INDEX, TRUNCATE on views (Mark Hollomon)
19036 Allow PL/pgSQL accept non-ASCII identifiers (Tatsuo)
19037 Allow views to proper handle GROUP BY, aggregates, DISTINCT (Tom)
19038 Fix rare failure with TRUNCATE command (Tom)
19039 Allow UNION/INTERSECT/EXCEPT to be used with ALL, subqueries, views,
19040     DISTINCT, ORDER BY, SELECT...INTO (Tom)
19041 Fix parser failures during aborted transactions (Tom)
19042 Allow temporary relations to properly clean up indexes (Bruce)
19043 Fix VACUUM problem with moving rows in same page (Tom)
19044 Modify pg_dump to better handle user-defined items in template1 (Philip)
19045 Allow LIMIT in VIEW (Tom)
19046 Require cursor FETCH to honor LIMIT (Tom)
19047 Allow PRIMARY/FOREIGN Key definitions on inherited columns (Stephan)
19048 Allow ORDER BY, LIMIT in subqueries (Tom)
19049 Allow UNION in CREATE RULE (Tom)
19050 Make ALTER/DROP TABLE rollback-able (Vadim, Tom)
19051 Store initdb collation in pg_control so collation cannot be changed (Tom)
19052 Fix INSERT...SELECT with rules (Tom)
19053 Fix FOR UPDATE inside views and subselects (Tom)
19054 Fix OVERLAPS operators conform to SQL92 spec regarding NULLs (Tom)
19055 Fix lpad() and rpad() to handle length less than input string (Tom)
19056 Fix use of NOTIFY in some rules (Tom)
19057 Overhaul btree code (Tom)
19058 Fix NOT NULL use in Pl/pgSQL variables (Tom)
19059 Overhaul GIST code (Oleg)
19060 Fix CLUSTER to preserve constraints and column default (Tom)
19061 Improved deadlock detection handling (Tom)
19062 Allow multiple SERIAL columns in a table (Tom)
19063 Prevent occasional index corruption (Vadim)
19064
19065 Enhancements
19066 ------------
19067 Add OUTER JOINs (Tom)
19068 Function manager overhaul (Tom)
19069 Allow ALTER TABLE RENAME on indexes (Tom)
19070 Improve CLUSTER (Tom)
19071 Improve ps status display for more platforms (Peter E, Marc)
19072 Improve CREATE FUNCTION failure message (Ross)
19073 JDBC improvements (Peter, Travis Bauer, Christopher Cain, William Webber,
19074     Gunnar)
19075 Grand Unified Configuration scheme/GUC.  Many options can now be set in
19076     data/postgresql.conf, postmaster/postgres flags, or SET commands (Peter E)
19077 Improved handling of file descriptor cache (Tom)
19078 New warning code about auto-created table alias entries (Bruce)
19079 Overhaul initdb process (Tom, Peter E)
19080 Overhaul of inherited tables; inherited tables now accessed by default;
19081    new ONLY key word prevents it (Chris Bitmead, Tom)
19082 ODBC cleanups/improvements (Nick Gorham, Stephan Szabo, Zoltan Kovacs,
19083     Michael Fork)
19084 Allow renaming of temp tables (Tom)
19085 Overhaul memory manager contexts (Tom)
19086 pg_dumpall uses CREATE USER or CREATE GROUP rather using COPY (Peter E)
19087 Overhaul pg_dump (Philip Warner)
19088 Allow pg_hba.conf secondary password file to specify only username (Peter E)
19089 Allow TEMPORARY or TEMP key word when creating temporary tables (Bruce)
19090 New memory leak checker (Karel)
19091 New SET SESSION CHARACTERISTICS (Thomas)
19092 Allow nested block comments (Thomas)
19093 Add WITHOUT TIME ZONE type qualifier (Thomas)
19094 New ALTER TABLE ADD CONSTRAINT (Stephan)
19095 Use NUMERIC accumulators for INTEGER aggregates (Tom)
19096 Overhaul aggregate code (Tom)
19097 New VARIANCE and STDDEV() aggregates
19098 Improve dependency ordering of pg_dump (Philip)
19099 New pg_restore command (Philip)
19100 New pg_dump tar output option (Philip)
19101 New pg_dump of large objects  (Philip)
19102 New ESCAPE option to LIKE (Thomas)
19103 New case-insensitive LIKE - ILIKE (Thomas)
19104 Allow functional indexes to use binary-compatible type (Tom)
19105 Allow SQL functions to be used in more contexts (Tom)
19106 New pg_config utility (Peter E)
19107 New PL/pgSQL EXECUTE command which allows dynamic SQL and utility statements
19108     (Jan)
19109 New PL/pgSQL GET DIAGNOSTICS statement for SPI value access (Jan)
19110 New quote_identifiers() and quote_literal() functions (Jan)
19111 New ALTER TABLE table OWNER TO user command (Mark Hollomon)
19112 Allow subselects in FROM, i.e. FROM (SELECT ...) [AS] alias (Tom)
19113 Update PyGreSQL to version 3.1 (D'Arcy)
19114 Store tables as files named by OID (Vadim)
19115 New SQL function setval(seq,val,bool) for use in pg_dump (Philip)
19116 Require DROP VIEW to remove views, no DROP TABLE (Mark)
19117 Allow DROP VIEW view1, view2 (Mark)
19118 Allow multiple objects in DROP INDEX, DROP RULE, and DROP TYPE (Tom)
19119 Allow automatic conversion to/from Unicode (Tatsuo, Eiji)
19120 New /contrib/pgcrypto hashing functions (Marko Kreen)
19121 New pg_dumpall --globals-only option (Peter E)
19122 New CHECKPOINT command for WAL which creates new WAL log file (Vadim)
19123 New AT TIME ZONE syntax (Thomas)
19124 Allow location of Unix domain socket to be configurable (David J. MacKenzie)
19125 Allow postmaster to listen on a specific IP address (David J. MacKenzie)
19126 Allow socket path name to be specified in hostname by using leading slash
19127     (David J. MacKenzie)
19128 Allow CREATE DATABASE to specify template database (Tom)
19129 New utility to convert MySQL schema dumps to SQL92 and PostgreSQL (Thomas)
19130 New /contrib/rserv replication toolkit (Vadim)
19131 New file format for COPY BINARY (Tom)
19132 New /contrib/oid2name to map numeric files to table names (B Palmer)
19133 New "idle in transaction" ps status message (Marc)
19134 Update to pgaccess 0.98.7 (Constantin Teodorescu)
19135 pg_ctl now defaults to -w (wait) on shutdown, new -l (log) option
19136 Add rudimentary dependency checking to pg_dump (Philip)
19137
19138 Types
19139 -----
19140 Fix INET/CIDR type ordering and add new functions (Tom)
19141 Make OID behave as an unsigned type (Tom)
19142 Allow BIGINT as synonym for INT8 (Peter E)
19143 New int2 and int8 comparison operators (Tom)
19144 New BIT and BIT VARYING types (Adriaan Joubert, Tom, Peter E)
19145 CHAR() no longer faster than VARCHAR() because of TOAST (Tom)
19146 New GIST seg/cube examples (Gene Selkov)
19147 Improved round(numeric) handling (Tom)
19148 Fix CIDR output formatting (Tom)
19149 New CIDR abbrev() function (Tom)
19150
19151 Performance
19152 -----------
19153 Write-Ahead Log (WAL) to provide crash recovery with less performance
19154     overhead (Vadim)
19155 ANALYZE stage of VACUUM no longer exclusively locks table (Bruce)
19156 Reduced file seeks (Denis Perchine)
19157 Improve BTREE code for duplicate keys (Tom)
19158 Store all large objects in a single table (Denis Perchine, Tom)
19159 Improve memory allocation performance (Karel, Tom)
19160
19161 Source Code
19162 -----------
19163 New function manager call conventions (Tom)
19164 SGI portability fixes (David Kaelbling)
19165 New configure --enable-syslog option (Peter E)
19166 New BSDI README (Bruce)
19167 configure script moved to top level, not /src (Peter E)
19168 Makefile/configuration/compilation overhaul (Peter E)
19169 New configure --with-python option (Peter E)
19170 Solaris cleanups (Peter E)
19171 Overhaul /contrib Makefiles (Karel)
19172 New OpenSSL configuration option (Magnus, Peter E)
19173 AIX fixes (Andreas)
19174 QNX fixes (Maurizio)
19175 New heap_open(), heap_openr() API (Tom)
19176 Remove colon and semi-colon operators (Thomas)
19177 New pg_class.relkind value for views (Mark Hollomon)
19178 Rename ichar() to chr() (Karel)
19179 New documentation for btrim(), ascii(), chr(), repeat() (Karel)
19180 Fixes for NT/Cygwin (Pete Forman)
19181 AIX port fixes (Andreas)
19182 New BeOS port (David Reid, Cyril Velter)
19183 Add proofreader's changes to docs (Addison-Wesley, Bruce)
19184 New Alpha spinlock code (Adriaan Joubert, Compaq)
19185 UnixWare port overhaul (Peter E)
19186 New Darwin/MacOS X port (Peter Bierman, Bruce Hartzler)
19187 New FreeBSD Alpha port (Alfred)
19188 Overhaul shared memory segments (Tom)
19189 Add IBM S/390 support (Neale Ferguson)
19190 Moved macmanuf to /contrib (Larry Rosenman)
19191 Syslog improvements (Larry Rosenman)
19192 New template0 database that contains no user additions (Tom)
19193 New /contrib/cube and /contrib/seg GIST sample code (Gene Selkov)
19194 Allow NetBSD's libedit instead of readline (Peter)
19195 Improved assembly language source code format (Bruce)
19196 New contrib/pg_logger
19197 New --template option to createdb
19198 New contrib/pg_control utility (Oliver)
19199 New FreeBSD tools ipc_check, start-scripts/freebsd
19200      </programlisting>
19201     </para>
19202    </sect2>
19203   </sect1>
19204
19205
19206   <sect1 id="release-7-0-3">
19207    <title>Release 7.0.3</title>
19208
19209    <note>
19210    <title>Release date</title>
19211    <simpara>2000-11-11</simpara>
19212    </note>
19213
19214    <para>
19215     This has a variety of fixes from 7.0.2.
19216    </para>
19217
19218
19219    <sect2>
19220     <title>Migration to version 7.0.3</title>
19221
19222     <para>
19223      A dump/restore is <emphasis>not</emphasis> required for those running
19224      7.0.*.
19225     </para>
19226    </sect2>
19227
19228    <sect2>
19229     <title>Changes</title>
19230
19231     <para>
19232      <programlisting>
19233 Jdbc fixes (Peter)
19234 Large object fix (Tom)
19235 Fix lean in COPY WITH OIDS leak (Tom)
19236 Fix backwards-index-scan (Tom)
19237 Fix SELECT ... FOR UPDATE so it checks for duplicate keys (Hiroshi)
19238 Add --enable-syslog to configure (Marc)
19239 Fix abort transaction at backend exit in rare cases (Tom)
19240 Fix for psql \l+ when multibyte enabled (Tatsuo)
19241 Allow PL/pgSQL to accept non ascii identifiers (Tatsuo)
19242 Make vacuum always flush buffers (Tom)
19243 Fix to allow cancel while waiting for a lock (Hiroshi)
19244 Fix for memory allocation problem in user authentication code (Tom)
19245 Remove bogus use of int4out() (Tom)
19246 Fixes for multiple subqueries in COALESCE or BETWEEN (Tom)
19247 Fix for failure of triggers on heap open in certain cases (Jeroen van
19248     Vianen)
19249 Fix for erroneous selectivity of not-equals (Tom)
19250 Fix for erroneous use of strcmp() (Tom)
19251 Fix for bug where storage manager accesses items beyond end of file
19252     (Tom)
19253 Fix to include kernel errno message in all smgr elog messages (Tom)
19254 Fix for '.' not in PATH at build time (SL Baur)
19255 Fix for out-of-file-descriptors error (Tom)
19256 Fix to make pg_dump dump 'iscachable' flag for functions (Tom)
19257 Fix for subselect in targetlist of Append node (Tom)
19258 Fix for mergejoin plans (Tom)
19259 Fix TRUNCATE failure on relations with indexes (Tom)
19260 Avoid database-wide restart on write error (Hiroshi)
19261 Fix nodeMaterial to honor chgParam by recomputing its output (Tom)
19262 Fix VACUUM problem with moving chain of update row versions when source
19263     and destination of a row version lie on the same page (Tom)
19264 Fix user.c CommandCounterIncrement (Tom)
19265 Fix for AM/PM boundary problem in to_char() (Karel Zak)
19266 Fix TIME aggregate handling (Tom)
19267 Fix to_char() to avoid coredump on NULL input (Tom)
19268 Buffer fix (Tom)
19269 Fix for inserting/copying longer multibyte strings into char() data
19270     types (Tatsuo)
19271 Fix for crash of backend, on abort (Tom)
19272      </programlisting>
19273     </para>
19274    </sect2>
19275   </sect1>
19276
19277
19278   <sect1 id="release-7-0-2">
19279    <title>Release 7.0.2</title>
19280
19281    <note>
19282    <title>Release date</title>
19283    <simpara>2000-06-05</simpara>
19284    </note>
19285
19286    <para>
19287     This is a repackaging of 7.0.1 with added documentation.
19288    </para>
19289
19290
19291    <sect2>
19292     <title>Migration to version 7.0.2</title>
19293
19294     <para>
19295      A dump/restore is <emphasis>not</emphasis> required for those running
19296      7.*.
19297     </para>
19298    </sect2>
19299
19300    <sect2>
19301     <title>Changes</title>
19302
19303     <para>
19304      <programlisting>
19305 Added documentation to tarball.
19306      </programlisting>
19307     </para>
19308    </sect2>
19309   </sect1>
19310
19311
19312   <sect1 id="release-7-0-1">
19313    <title>Release 7.0.1</title>
19314
19315    <note>
19316    <title>Release date</title>
19317    <simpara>2000-06-01</simpara>
19318    </note>
19319
19320    <para>
19321     This is a cleanup release for 7.0.
19322    </para>
19323
19324    <sect2>
19325     <title>Migration to version 7.0.1</title>
19326
19327     <para>
19328      A dump/restore is <emphasis>not</emphasis> required for those running
19329      7.0.
19330     </para>
19331    </sect2>
19332
19333    <sect2>
19334     <title>Changes</title>
19335
19336     <para>
19337      <programlisting>
19338 Fix many CLUSTER failures (Tom)
19339 Allow ALTER TABLE RENAME works on indexes (Tom)
19340 Fix plpgsql to handle datetime-&gt;timestamp and timespan-&gt;interval (Bruce)
19341 New configure --with-setproctitle switch to use setproctitle() (Marc, Bruce)
19342 Fix the off by one errors in ResultSet from 6.5.3, and more.
19343 jdbc ResultSet fixes (Joseph Shraibman)
19344 optimizer tunings (Tom)
19345 Fix create user for pgaccess
19346 Fix for UNLISTEN failure
19347 IRIX fixes (David Kaelbling)
19348 QNX fixes (Andreas Kardos)
19349 Reduce COPY IN lock level (Tom)
19350 Change libpqeasy to use PQconnectdb() style parameters (Bruce)
19351 Fix pg_dump to handle OID indexes (Tom)
19352 Fix small memory leak (Tom)
19353 Solaris fix for createdb/dropdb (Tatsuo)
19354 Fix for non-blocking connections (Alfred Perlstein)
19355 Fix improper recovery after RENAME TABLE failures (Tom)
19356 Copy pg_ident.conf.sample into /lib directory in install (Bruce)
19357 Add SJIS UDC (NEC selection IBM kanji) support (Eiji Tokuya)
19358 Fix too long syslog message (Tatsuo)
19359 Fix problem with quoted indexes that are too long (Tom)
19360 JDBC ResultSet.getTimestamp() fix (Gregory Krasnow & Floyd Marinescu)
19361 ecpg changes (Michael)
19362      </programlisting>
19363     </para>
19364    </sect2>
19365   </sect1>
19366
19367   <sect1 id="release-7-0">
19368    <title>Release 7.0</title>
19369
19370    <note>
19371    <title>Release date</title>
19372    <simpara>2000-05-08</simpara>
19373    </note>
19374
19375    <para>
19376     This release contains improvements in many areas, demonstrating
19377     the continued growth of <productname>PostgreSQL</productname>.
19378     There are more improvements and fixes in 7.0 than in any previous
19379     release. The developers have confidence that this is the best
19380     release yet; we do our best to put out only solid releases, and
19381     this one is no exception.
19382    </para>
19383
19384    <para>
19385     Major changes in this release:
19386    </para>
19387
19388    <variablelist>
19389     <varlistentry>
19390      <term>
19391       Foreign Keys
19392      </term>
19393      <listitem>
19394       <para>
19395        Foreign keys are now implemented, with the exception of PARTIAL MATCH
19396        foreign keys. Many users have been asking for this feature, and we are
19397        pleased to offer it.
19398       </para>
19399      </listitem>
19400     </varlistentry>
19401
19402     <varlistentry>
19403      <term>
19404       Optimizer Overhaul
19405      </term>
19406      <listitem>
19407       <para>
19408        Continuing on work started a year ago, the optimizer has been
19409        improved, allowing better query plan selection and faster performance
19410        with less memory usage.
19411       </para>
19412      </listitem>
19413     </varlistentry>
19414
19415     <varlistentry>
19416      <term>
19417       Updated <application>psql</application>
19418      </term>
19419      <listitem>
19420       <para>
19421        <application>psql</application>, our interactive terminal monitor, has been
19422        updated with a variety of new features. See the <application>psql</application> manual page for details.
19423       </para>
19424      </listitem>
19425     </varlistentry>
19426
19427     <varlistentry>
19428      <term>
19429       Join Syntax
19430      </term>
19431      <listitem>
19432       <para>
19433        SQL92 join syntax is now supported, though only as
19434        <literal>INNER JOIN</> for this release. <literal>JOIN</>,
19435        <literal>NATURAL JOIN</>, <literal>JOIN</>/<literal>USING</>,
19436        and <literal>JOIN</>/<literal>ON</> are available, as are
19437        column correlation names.
19438       </para>
19439      </listitem>
19440
19441     </varlistentry>
19442    </variablelist>
19443
19444    <sect2>
19445     <title>Migration to version 7.0</title>
19446
19447     <para>
19448      A dump/restore using <application>pg_dump</application>
19449      is required for those wishing to migrate data from any
19450      previous release of <productname>PostgreSQL</productname>.
19451      For those upgrading from 6.5.*, you can instead use
19452      <application>pg_upgrade</application> to upgrade to this
19453      release; however, a full dump/reload installation is always the
19454      most robust method for upgrades.
19455     </para>
19456
19457     <para>
19458      Interface and compatibility issues to consider for the new
19459      release include:
19460     </para>
19461
19462     <itemizedlist>
19463      <listitem>
19464       <para>
19465        The date/time types <type>datetime</type> and
19466        <type>timespan</type> have been superseded by the
19467        SQL92-defined types <type>timestamp</type> and
19468        <type>interval</type>. Although there has been some effort to
19469        ease the transition by allowing
19470        <productname>PostgreSQL</productname> to recognize
19471        the deprecated type names and translate them to the new type
19472        names, this mechanism cannot be completely transparent to
19473        your existing application.
19474       </para>
19475      </listitem>
19476
19477      <listitem>
19478       <para>
19479        The optimizer has been substantially improved in the area of
19480        query cost estimation. In some cases, this will result in
19481        decreased query times as the optimizer makes a better choice
19482        for the preferred plan. However, in a small number of cases,
19483        usually involving pathological distributions of data, your
19484        query times might go up. If you are dealing with large amounts
19485        of data, you might want to check your queries to verify
19486        performance.
19487       </para>
19488      </listitem>
19489
19490      <listitem>
19491       <para>
19492        The <acronym>JDBC</acronym> and <acronym>ODBC</acronym>
19493        interfaces have been upgraded and extended.
19494       </para>
19495      </listitem>
19496
19497      <listitem>
19498       <para>
19499        The string function <function>CHAR_LENGTH</function> is now a
19500        native function. Previous versions translated this into a call
19501        to <function>LENGTH</function>, which could result in
19502        ambiguity with other types implementing
19503        <function>LENGTH</function> such as the geometric types.
19504       </para>
19505      </listitem>
19506     </itemizedlist>
19507    </sect2>
19508
19509    <sect2>
19510     <title>Changes</title>
19511
19512     <para>
19513      <programlisting>
19514 Bug Fixes
19515 ---------
19516 Prevent function calls exceeding maximum number of arguments (Tom)
19517 Improve CASE construct (Tom)
19518 Fix SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1 (Tom)
19519 Fix SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0] (Tom)
19520 Fix GROUP BY scan bug (Tom)
19521 Improvements in SQL grammar processing (Tom)
19522 Fix for views involved in INSERT ... SELECT ... (Tom)
19523 Fix for SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2 (Tom)
19524 Fix for subselects in INSERT ... SELECT (Tom)
19525 Prevent INSERT ... SELECT ... ORDER BY (Tom)
19526 Fixes for relations greater than 2GB, including vacuum
19527 Improve propagating system table changes to other backends (Tom)
19528 Improve propagating user table changes to other backends (Tom)
19529 Fix handling of temp tables in complex situations (Bruce, Tom)
19530 Allow table locking at table open, improving concurrent reliability (Tom)
19531 Properly quote sequence names in pg_dump (Ross J. Reedstrom)
19532 Prevent DROP DATABASE while others accessing
19533 Prevent any rows from being returned by GROUP BY if no rows processed (Tom)
19534 Fix SELECT COUNT(1) FROM table WHERE ...' if no rows matching WHERE (Tom)
19535 Fix pg_upgrade so it works for MVCC (Tom)
19536 Fix for SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) &gt; 1) (Tom)
19537 Fix for "f1 datetime DEFAULT 'now'"  (Tom)
19538 Fix problems with CURRENT_DATE used in DEFAULT (Tom)
19539 Allow comment-only lines, and ;;; lines too. (Tom)
19540 Improve recovery after failed disk writes, disk full (Hiroshi)
19541 Fix cases where table is mentioned in FROM but not joined (Tom)
19542 Allow HAVING clause without aggregate functions (Tom)
19543 Fix for "--" comment and no trailing newline, as seen in perl interface
19544 Improve pg_dump failure error reports (Bruce)
19545 Allow sorts and hashes to exceed 2GB file sizes (Tom)
19546 Fix for pg_dump dumping of inherited rules (Tom)
19547 Fix for NULL handling comparisons (Tom)
19548 Fix inconsistent state caused by failed CREATE/DROP commands (Hiroshi)
19549 Fix for dbname with dash
19550 Prevent DROP INDEX from interfering with other backends (Tom)
19551 Fix file descriptor leak in verify_password()
19552 Fix for "Unable to identify an operator =$" problem
19553 Fix ODBC so no segfault if CommLog and Debug enabled (Dirk Niggemann)
19554 Fix for recursive exit call (Massimo)
19555 Fix for extra-long timezones (Jeroen van Vianen)
19556 Make pg_dump preserve primary key information (Peter E)
19557 Prevent databases with single quotes (Peter E)
19558 Prevent DROP DATABASE inside  transaction (Peter E)
19559 ecpg memory leak fixes (Stephen Birch)
19560 Fix for SELECT null::text, SELECT int4fac(null) and SELECT 2 + (null) (Tom)
19561 Y2K timestamp fix (Massimo)
19562 Fix for VACUUM 'HEAP_MOVED_IN was not expected' errors (Tom)
19563 Fix for views with tables/columns containing spaces  (Tom)
19564 Prevent privileges on indexes (Peter E)
19565 Fix for spinlock stuck problem when error is generated (Hiroshi)
19566 Fix ipcclean on Linux
19567 Fix handling of NULL constraint conditions (Tom)
19568 Fix memory leak in odbc driver (Nick Gorham)
19569 Fix for privilege check on UNION tables (Tom)
19570 Fix to allow SELECT 'a' LIKE 'a' (Tom)
19571 Fix for SELECT 1 + NULL (Tom)
19572 Fixes to CHAR
19573 Fix log() on numeric type (Tom)
19574 Deprecate ':' and ';' operators
19575 Allow vacuum of temporary tables
19576 Disallow inherited columns with the same name as new columns
19577 Recover or force failure when disk space is exhausted (Hiroshi)
19578 Fix INSERT INTO ... SELECT with AS columns matching result columns
19579 Fix INSERT ... SELECT ... GROUP BY groups by target columns not source columns (Tom)
19580 Fix CREATE TABLE test (a char(5) DEFAULT text '', b int4) with INSERT (Tom)
19581 Fix UNION with LIMIT
19582 Fix CREATE TABLE x AS SELECT 1 UNION SELECT 2
19583 Fix CREATE TABLE test(col char(2) DEFAULT user)
19584 Fix mismatched types in CREATE TABLE ... DEFAULT
19585 Fix SELECT * FROM pg_class where oid in (0,-1)
19586 Fix SELECT COUNT('asdf') FROM pg_class WHERE oid=12
19587 Prevent user who can create databases can modifying pg_database table (Peter E)
19588 Fix btree to give a useful elog when key &gt; 1/2 (page - overhead) (Tom)
19589 Fix INSERT of 0.0 into DECIMAL(4,4) field (Tom)
19590
19591 Enhancements
19592 ------------
19593 New CLI interface include file sqlcli.h, based on SQL3/SQL98
19594 Remove all limits on query length, row length limit still exists (Tom)
19595 Update jdbc protocol to 2.0 (Jens Glaser <email>jens@jens.de</email>)
19596 Add TRUNCATE command to quickly truncate relation (Mike Mascari)
19597 Fix to give super user and createdb user proper update catalog rights (Peter E)
19598 Allow ecpg bool variables to have NULL values (Christof)
19599 Issue ecpg error if NULL value for variable with no NULL indicator (Christof)
19600 Allow ^C to cancel COPY command (Massimo)
19601 Add SET FSYNC and SHOW PG_OPTIONS commands(Massimo)
19602 Function name overloading for dynamically-loaded C functions (Frankpitt)
19603 Add CmdTuples() to libpq++(Vince)
19604 New CREATE CONSTRAINT TRIGGER and SET CONSTRAINTS commands(Jan)
19605 Allow CREATE FUNCTION/WITH clause to be used for all language types
19606 configure --enable-debug adds -g (Peter E)
19607 configure --disable-debug removes -g (Peter E)
19608 Allow more complex default expressions (Tom)
19609 First real FOREIGN KEY constraint trigger functionality (Jan)
19610 Add FOREIGN KEY ... MATCH FULL ... ON DELETE CASCADE (Jan)
19611 Add FOREIGN KEY ... MATCH &lt;unspecified&gt; referential actions (Don Baccus)
19612 Allow WHERE restriction on ctid (physical heap location) (Hiroshi)
19613 Move pginterface from contrib to interface directory, rename to pgeasy (Bruce)
19614 Change pgeasy connectdb() parameter ordering (Bruce)
19615 Require SELECT DISTINCT target list to have all ORDER BY columns (Tom)
19616 Add Oracle's COMMENT ON command (Mike Mascari <email>mascarim@yahoo.com</email>)
19617 libpq's PQsetNoticeProcessor function now returns previous hook(Peter E)
19618 Prevent PQsetNoticeProcessor from being set to NULL (Peter E)
19619 Make USING in COPY optional (Bruce)
19620 Allow subselects in the target list (Tom)
19621 Allow subselects on the left side of comparison operators (Tom)
19622 New parallel regression test (Jan)
19623 Change backend-side COPY to write files with permissions 644 not 666 (Tom)
19624 Force permissions on PGDATA directory to be secure, even if it exists (Tom)
19625 Added psql LASTOID variable to return last inserted oid (Peter E)
19626 Allow concurrent vacuum and remove pg_vlock vacuum lock file (Tom)
19627 Add privilege check for vacuum (Peter E)
19628 New libpq functions to allow asynchronous connections: PQconnectStart(),
19629    PQconnectPoll(), PQresetStart(), PQresetPoll(), PQsetenvStart(),
19630    PQsetenvPoll(), PQsetenvAbort (Ewan Mellor)
19631 New libpq PQsetenv() function (Ewan Mellor)
19632 create/alter user extension (Peter E)
19633 New postmaster.pid and postmaster.opts under $PGDATA (Tatsuo)
19634 New scripts for create/drop user/db (Peter E)
19635 Major psql overhaul (Peter E)
19636 Add const to libpq interface (Peter E)
19637 New libpq function PQoidValue (Peter E)
19638 Show specific non-aggregate causing problem with GROUP BY (Tom)
19639 Make changes to pg_shadow recreate pg_pwd file (Peter E)
19640 Add aggregate(DISTINCT ...) (Tom)
19641 Allow flag to control COPY input/output of NULLs (Peter E)
19642 Make postgres user have a password by default (Peter E)
19643 Add CREATE/ALTER/DROP GROUP (Peter E)
19644 All administration scripts now support --long options (Peter E, Karel)
19645 Vacuumdb script now supports --all option (Peter E)
19646 ecpg new portable FETCH syntax
19647 Add ecpg EXEC SQL IFDEF, EXEC SQL IFNDEF, EXEC SQL ELSE, EXEC SQL ELIF
19648         and EXEC SQL ENDIF directives
19649 Add pg_ctl script to control backend start-up (Tatsuo)
19650 Add postmaster.opts.default file to store start-up flags (Tatsuo)
19651 Allow --with-mb=SQL_ASCII
19652 Increase maximum number of index keys to 16 (Bruce)
19653 Increase maximum number of function arguments to 16 (Bruce)
19654 Allow configuration of maximum number of index keys and arguments (Bruce)
19655 Allow unprivileged users to change their passwords (Peter E)
19656 Password authentication enabled; required for new users (Peter E)
19657 Disallow dropping a user who owns a database (Peter E)
19658 Change initdb option --with-mb to --enable-multibyte
19659 Add option for initdb to prompts for superuser password (Peter E)
19660 Allow complex type casts like col::numeric(9,2) and col::int2::float8 (Tom)
19661 Updated user interfaces on initdb, initlocation, pg_dump, ipcclean (Peter E)
19662 New pg_char_to_encoding() and pg_encoding_to_char() functions (Tatsuo)
19663 libpq non-blocking mode (Alfred Perlstein)
19664 Improve conversion of types in casts that don't specify a length
19665 New plperl internal programming language (Mark Hollomon)
19666 Allow COPY IN to read file that do not end with a newline (Tom)
19667 Indicate when long identifiers are truncated (Tom)
19668 Allow aggregates to use type equivalency (Peter E)
19669 Add Oracle's to_char(), to_date(), to_datetime(), to_timestamp(), to_number()
19670         conversion functions (Karel Zak &lt;zakkr@zf.jcu.cz&gt;)
19671 Add SELECT DISTINCT ON (expr [, expr ...]) targetlist ... (Tom)
19672 Check to be sure ORDER BY is compatible with the DISTINCT operation (Tom)
19673 Add NUMERIC and int8 types to ODBC
19674 Improve EXPLAIN results for Append, Group, Agg, Unique (Tom)
19675 Add ALTER TABLE ... ADD FOREIGN KEY (Stephan Szabo)
19676 Allow SELECT .. FOR UPDATE in PL/pgSQL (Hiroshi)
19677 Enable backward sequential scan even after reaching EOF (Hiroshi)
19678 Add btree indexing of boolean values, &gt;= and &lt;= (Don Baccus)
19679 Print current line number when COPY FROM fails (Massimo)
19680 Recognize POSIX time zone e.g. "PST+8" and "GMT-8" (Thomas)
19681 Add DEC as synonym for DECIMAL (Thomas)
19682 Add SESSION_USER as SQL92 key word, same as CURRENT_USER (Thomas)
19683 Implement SQL92 column aliases (aka correlation names) (Thomas)
19684 Implement SQL92 join syntax (Thomas)
19685 Make INTERVAL reserved word allowed as a column identifier (Thomas)
19686 Implement REINDEX command (Hiroshi)
19687 Accept ALL in aggregate function SUM(ALL col) (Tom)
19688 Prevent GROUP BY from using column aliases (Tom)
19689 New psql \encoding option (Tatsuo)
19690 Allow PQrequestCancel() to terminate when in waiting-for-lock state (Hiroshi)
19691 Allow negation of a negative number in all cases
19692 Add ecpg descriptors (Christof, Michael)
19693 Allow CREATE VIEW v AS SELECT f1::char(8) FROM tbl
19694 Allow casts with length, like foo::char(8)
19695 New libpq functions PQsetClientEncoding(), PQclientEncoding() (Tatsuo)
19696 Add support for SJIS user defined characters (Tatsuo)
19697 Larger views/rules supported
19698 Make libpq's PQconndefaults() thread-safe (Tom)
19699 Disable // as comment to be ANSI conforming, should use -- (Tom)
19700 Allow column aliases on views CREATE VIEW name (collist)
19701 Fixes for views with subqueries (Tom)
19702 Allow UPDATE table SET fld = (SELECT ...) (Tom)
19703 SET command options no longer require quotes
19704 Update pgaccess to 0.98.6
19705 New SET SEED command
19706 New pg_options.sample file
19707 New SET FSYNC command (Massimo)
19708 Allow pg_descriptions when creating tables
19709 Allow pg_descriptions when creating types, columns, and functions
19710 Allow psql \copy to allow delimiters (Peter E)
19711 Allow psql to print nulls as distinct from "" [null] (Peter E)
19712
19713 Types
19714 -----
19715 Many array fixes (Tom)
19716 Allow bare column names to be subscripted as arrays (Tom)
19717 Improve type casting of int and float constants (Tom)
19718 Cleanups for int8 inputs, range checking, and type conversion (Tom)
19719 Fix for SELECT timespan('21:11:26'::time) (Tom)
19720 netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0 (Oleg Sharoiko)
19721 Add btree index on NUMERIC (Jan)
19722 Perl fix for large objects containing NUL characters (Douglas Thomson)
19723 ODBC fix for large objects (free)
19724 Fix indexing of cidr data type
19725 Fix for Ethernet MAC addresses (macaddr type) comparisons
19726 Fix for date/time types when overflows happened in computations (Tom)
19727 Allow array on int8 (Peter E)
19728 Fix for rounding/overflow of NUMERIC type, like NUMERIC(4,4) (Tom)
19729 Allow NUMERIC arrays
19730 Fix bugs in NUMERIC ceil() and floor() functions (Tom)
19731 Make char_length()/octet_length including trailing blanks (Tom)
19732 Made abstime/reltime use int4 instead of time_t (Peter E)
19733 New lztext data type for compressed text fields
19734 Revise code to handle coercion of int and float constants (Tom)
19735 Start at new code to implement a BIT and BIT VARYING type (Adriaan Joubert)
19736 NUMERIC now accepts scientific notation (Tom)
19737 NUMERIC to int4 rounds (Tom)
19738 Convert float4/8 to NUMERIC properly (Tom)
19739 Allow type conversion with NUMERIC (Thomas)
19740 Make ISO date style (2000-02-16 09:33) the default (Thomas)
19741 Add NATIONAL CHAR [ VARYING ] (Thomas)
19742 Allow NUMERIC round and trunc to accept negative scales (Tom)
19743 New TIME WITH TIME ZONE type (Thomas)
19744 Add MAX()/MIN() on time type (Thomas)
19745 Add abs(), mod(), fac() for int8 (Thomas)
19746 Rename functions to round(), sqrt(), cbrt(), pow() for float8 (Thomas)
19747 Add transcendental math functions (e.g. sin(), acos()) for float8 (Thomas)
19748 Add exp() and ln() for NUMERIC type
19749 Rename NUMERIC power() to pow() (Thomas)
19750 Improved TRANSLATE() function (Edwin Ramirez, Tom)
19751 Allow X=-Y operators  (Tom)
19752 Allow SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1; (Tom)
19753 Allow LOCALE to use indexes in regular expression searches (Tom)
19754 Allow creation of functional indexes to use default types
19755
19756 Performance
19757 -----------
19758 Prevent exponential space consumption with many AND's and OR's (Tom)
19759 Collect attribute selectivity values for system columns (Tom)
19760 Reduce memory usage of aggregates (Tom)
19761 Fix for LIKE optimization to use indexes with multibyte encodings (Tom)
19762 Fix r-tree index optimizer selectivity (Thomas)
19763 Improve optimizer selectivity computations and functions (Tom)
19764 Optimize btree searching for cases where many equal keys exist (Tom)
19765 Enable fast LIKE index processing only if index present (Tom)
19766 Re-use free space on index pages with duplicates (Tom)
19767 Improve hash join processing (Tom)
19768 Prevent descending sort if result is already sorted(Hiroshi)
19769 Allow commuting of index scan query qualifications (Tom)
19770 Prefer index scans in cases where ORDER BY/GROUP BY is required (Tom)
19771 Allocate large memory requests in fix-sized chunks for performance (Tom)
19772 Fix vacuum's performance by reducing memory allocation requests (Tom)
19773 Implement constant-expression simplification (Bernard Frankpitt, Tom)
19774 Use secondary columns to be used to determine start of index scan (Hiroshi)
19775 Prevent quadruple use of disk space when doing internal sorting (Tom)
19776 Faster sorting by calling fewer functions (Tom)
19777 Create system indexes to match all system caches (Bruce, Hiroshi)
19778 Make system caches use system indexes (Bruce)
19779 Make all system indexes unique (Bruce)
19780 Improve pg_statistics management for VACUUM speed improvement (Tom)
19781 Flush backend cache less frequently (Tom, Hiroshi)
19782 COPY now reuses previous memory allocation, improving performance (Tom)
19783 Improve optimization cost estimation (Tom)
19784 Improve optimizer estimate of range queries x &gt; lowbound AND x &lt; highbound (Tom)
19785 Use DNF instead of CNF where appropriate (Tom, Taral)
19786 Further cleanup for OR-of-AND WHERE-clauses (Tom)
19787 Make use of index in OR clauses (x = 1 AND y = 2) OR (x = 2 AND y = 4) (Tom)
19788 Smarter optimizer computations for random index page access (Tom)
19789 New SET variable to control optimizer costs (Tom)
19790 Optimizer queries based on LIMIT, OFFSET, and EXISTS qualifications (Tom)
19791 Reduce optimizer internal housekeeping of join paths for speedup (Tom)
19792 Major subquery speedup (Tom)
19793 Fewer fsync writes when fsync is not disabled (Tom)
19794 Improved LIKE optimizer estimates (Tom)
19795 Prevent fsync in SELECT-only queries (Vadim)
19796 Make index creation use psort code, because it is now faster (Tom)
19797 Allow creation of sort temp tables &gt; 1 Gig
19798
19799 Source Tree Changes
19800 -------------------
19801 Fix for linux PPC compile
19802 New generic expression-tree-walker subroutine (Tom)
19803 Change form() to varargform() to prevent portability problems
19804 Improved range checking for large integers on Alphas
19805 Clean up #include in /include directory (Bruce)
19806 Add scripts for checking includes (Bruce)
19807 Remove un-needed #include's from *.c files (Bruce)
19808 Change #include's to use &lt;&gt; and "" as appropriate (Bruce)
19809 Enable Windows compilation of libpq
19810 Alpha spinlock fix from Uncle George <email>gatgul@voicenet.com</email>
19811 Overhaul of optimizer data structures (Tom)
19812 Fix to cygipc library (Yutaka Tanida)
19813 Allow pgsql to work on newer Cygwin snapshots (Dan)
19814 New catalog version number (Tom)
19815 Add Linux ARM
19816 Rename heap_replace to heap_update
19817 Update for QNX (Dr. Andreas Kardos)
19818 New platform-specific regression handling (Tom)
19819 Rename oid8 -&gt; oidvector and int28 -&gt; int2vector (Bruce)
19820 Included all yacc and lex files into the distribution (Peter E.)
19821 Remove lextest, no longer needed (Peter E)
19822 Fix for libpq and psql on Windows (Magnus)
19823 Internally change datetime and timespan into timestamp and interval (Thomas)
19824 Fix for plpgsql on BSD/OS
19825 Add SQL_ASCII test case to the regression test (Tatsuo)
19826 configure --with-mb now deprecated (Tatsuo)
19827 NT fixes
19828 NetBSD fixes (Johnny C. Lam <email>lamj@stat.cmu.edu</email>)
19829 Fixes for Alpha compiles
19830 New multibyte encodings
19831      </programlisting>
19832     </para>
19833    </sect2>
19834   </sect1>
19835
19836   <sect1 id="release-6-5-3">
19837    <title>Release 6.5.3</title>
19838
19839    <note>
19840    <title>Release date</title>
19841    <simpara>1999-10-13</simpara>
19842    </note>
19843
19844    <para>
19845     This is basically a cleanup release for 6.5.2.  We have added a new
19846     <application>PgAccess</> that was missing in 6.5.2, and installed an NT-specific fix.
19847    </para>
19848
19849
19850    <sect2>
19851     <title>Migration to version 6.5.3</title>
19852
19853     <para>
19854      A dump/restore is <emphasis>not</emphasis> required for those running
19855      6.5.*.
19856     </para>
19857    </sect2>
19858    <sect2>
19859     <title>Changes</title>
19860
19861     <para>
19862      <programlisting>
19863 Updated version of pgaccess 0.98
19864 NT-specific patch
19865 Fix dumping rules on inherited tables
19866      </programlisting>
19867     </para>
19868    </sect2>
19869   </sect1>
19870
19871
19872   <sect1 id="release-6-5-2">
19873    <title>Release 6.5.2</title>
19874
19875    <note>
19876    <title>Release date</title>
19877    <simpara>1999-09-15</simpara>
19878    </note>
19879
19880    <para>
19881     This is basically a cleanup release for 6.5.1.  We have fixed a variety of
19882     problems reported by 6.5.1 users.
19883    </para>
19884
19885
19886    <sect2>
19887     <title>Migration to version 6.5.2</title>
19888
19889     <para>
19890      A dump/restore is <emphasis>not</emphasis> required for those running
19891      6.5.*.
19892     </para>
19893    </sect2>
19894
19895    <sect2>
19896     <title>Changes</title>
19897
19898     <para>
19899      <programlisting>
19900 subselect+CASE fixes(Tom)
19901 Add SHLIB_LINK setting for solaris_i386 and solaris_sparc ports(Daren Sefcik)
19902 Fixes for CASE in WHERE join clauses(Tom)
19903 Fix BTScan abort(Tom)
19904 Repair the check for redundant UNIQUE and PRIMARY KEY indexes(Thomas)
19905 Improve it so that it checks for multicolumn constraints(Thomas)
19906 Fix for Windows making problem with MB enabled(Hiroki Kataoka)
19907 Allow BSD yacc and bison to compile pl code(Bruce)
19908 Fix SET NAMES working
19909 int8 fixes(Thomas)
19910 Fix vacuum's memory consumption(Hiroshi,Tatsuo)
19911 Reduce the total memory consumption of vacuum(Tom)
19912 Fix for timestamp(datetime)
19913 Rule deparsing bugfixes(Tom)
19914 Fix quoting problems in mkMakefile.tcldefs.sh.in and mkMakefile.tkdefs.sh.in(Tom)
19915 This is to re-use space on index pages freed by vacuum(Vadim)
19916 document -x for pg_dump(Bruce)
19917 Fix for unary operators in rule deparser(Tom)
19918 Comment out FileUnlink of excess segments during mdtruncate()(Tom)
19919 IRIX linking fix from Yu Cao &gt;yucao@falcon.kla-tencor.com&lt;
19920 Repair logic error in LIKE: should not return LIKE_ABORT
19921    when reach end of pattern before end of text(Tom)
19922 Repair incorrect cleanup of heap memory allocation during transaction abort(Tom)
19923 Updated version of pgaccess 0.98
19924      </programlisting>
19925     </para>
19926    </sect2>
19927   </sect1>
19928
19929   <sect1 id="release-6-5-1">
19930    <title>Release 6.5.1</title>
19931
19932    <note>
19933    <title>Release date</title>
19934    <simpara>1999-07-15</simpara>
19935    </note>
19936
19937    <para>
19938     This is basically a cleanup release for 6.5.  We have fixed a variety of
19939     problems reported by 6.5 users.
19940    </para>
19941
19942    <sect2>
19943     <title>Migration to version 6.5.1</title>
19944
19945     <para>
19946      A dump/restore is <emphasis>not</emphasis> required for those running
19947      6.5.
19948     </para>
19949    </sect2>
19950
19951    <sect2>
19952     <title>Changes</title>
19953
19954     <para>
19955      <programlisting>
19956 Add NT README file
19957 Portability fixes for linux_ppc, IRIX, linux_alpha, OpenBSD, alpha
19958 Remove QUERY_LIMIT, use SELECT...LIMIT
19959 Fix for EXPLAIN on inheritance(Tom)
19960 Patch to allow vacuum on multisegment tables(Hiroshi)
19961 R-Tree optimizer selectivity fix(Tom)
19962 ACL file descriptor leak fix(Atsushi Ogawa)
19963 New expression subtree code(Tom)
19964 Avoid disk writes for read-only transactions(Vadim)
19965 Fix for removal of temp tables if last transaction was aborted(Bruce)
19966 Fix to prevent too large row from being created(Bruce)
19967 plpgsql fixes
19968 Allow port numbers 32k - 64k(Bruce)
19969 Add ^ precedence(Bruce)
19970 Rename sort files called pg_temp to pg_sorttemp(Bruce)
19971 Fix for microseconds in time values(Tom)
19972 Tutorial source cleanup
19973 New linux_m68k port
19974 Fix for sorting of NULL's in some cases(Tom)
19975 Shared library dependencies fixed (Tom)
19976 Fixed glitches affecting GROUP BY in subselects(Tom)
19977 Fix some compiler warnings (Tomoaki Nishiyama)
19978 Add Win1250 (Czech) support (Pavel Behal)
19979      </programlisting>
19980     </para>
19981    </sect2>
19982   </sect1>
19983
19984   <sect1 id="release-6-5">
19985    <title>Release 6.5</title>
19986
19987    <note>
19988    <title>Release date</title>
19989    <simpara>1999-06-09</simpara>
19990    </note>
19991
19992    <para>
19993     This release marks a major step in the development team's mastery of the source
19994     code we inherited from Berkeley.  You will see we are now easily adding
19995     major features, thanks to the increasing size and experience of our
19996     world-wide development team.
19997    </para>
19998
19999    <para>
20000     Here is a brief summary of the more notable changes:
20001
20002     <variablelist>
20003      <varlistentry>
20004       <term>
20005        Multiversion concurrency control(MVCC)
20006       </term>
20007       <listitem>
20008        <para>
20009         This removes our old table-level locking, and replaces it with
20010         a locking system that is superior to most commercial database
20011         systems.  In a traditional system, each row that is modified
20012         is locked until committed, preventing reads by other users.
20013         MVCC uses the natural multiversion nature of
20014         <productname>PostgreSQL</productname> to allow readers to
20015         continue reading consistent data during writer activity.
20016         Writers continue to use the compact pg_log transaction system.
20017         This is all performed without having to allocate a lock for
20018         every row like traditional database systems.  So, basically,
20019         we no longer are restricted by simple table-level locking; we
20020         have something better than row-level locking.
20021        </para>
20022       </listitem>
20023      </varlistentry>
20024
20025      <varlistentry>
20026       <term>
20027        Hot backups from <application>pg_dump</application>
20028       </term>
20029       <listitem>
20030        <para>
20031         <application>pg_dump</application> takes advantage of the new
20032         MVCC features to give a consistent database dump/backup while
20033         the database stays online and available for queries.
20034        </para>
20035       </listitem>
20036      </varlistentry>
20037
20038      <varlistentry>
20039       <term>
20040        Numeric data type
20041       </term>
20042       <listitem>
20043        <para>
20044         We now have a true numeric data type, with
20045         user-specified precision.
20046        </para>
20047       </listitem>
20048      </varlistentry>
20049
20050      <varlistentry>
20051       <term>
20052        Temporary tables
20053       </term>
20054       <listitem>
20055        <para>
20056         Temporary tables are guaranteed to have unique names
20057         within a database session, and are destroyed on session exit.
20058        </para>
20059       </listitem>
20060      </varlistentry>
20061
20062      <varlistentry>
20063       <term>
20064        New SQL features
20065       </term>
20066       <listitem>
20067        <para>
20068         We now have CASE, INTERSECT, and EXCEPT statement
20069         support.  We have new LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL,
20070         SELECT ... FOR UPDATE, and an improved LOCK TABLE command.
20071        </para>
20072       </listitem>
20073      </varlistentry>
20074
20075      <varlistentry>
20076       <term>
20077        Speedups
20078       </term>
20079       <listitem>
20080        <para>
20081         We continue to speed up <productname>PostgreSQL</productname>,
20082         thanks to the variety of talents within our team.  We have
20083         sped up memory allocation, optimization, table joins, and row
20084         transfer routines.
20085        </para>
20086       </listitem>
20087      </varlistentry>
20088
20089      <varlistentry>
20090       <term>
20091        Ports
20092       </term>
20093       <listitem>
20094        <para>
20095         We continue to expand our port list, this time including
20096         <systemitem class="osname">Windows NT</>/<systemitem>ix86</> and <systemitem class="osname">NetBSD</>/<systemitem>arm32</>.
20097        </para>
20098       </listitem>
20099      </varlistentry>
20100
20101      <varlistentry>
20102       <term>
20103        Interfaces
20104       </term>
20105       <listitem>
20106        <para>
20107         Most interfaces have new versions, and existing functionality
20108         has been improved.
20109        </para>
20110       </listitem>
20111      </varlistentry>
20112
20113      <varlistentry>
20114       <term>
20115        Documentation
20116       </term>
20117       <listitem>
20118        <para>
20119         New and updated material is present throughout the
20120         documentation. New <acronym>FAQ</acronym>s have been
20121         contributed for <systemitem class="osname">SGI</> and <systemitem class="osname">AIX</> platforms.
20122         The <citetitle>Tutorial</citetitle> has introductory information
20123         on <acronym>SQL</acronym> from Stefan Simkovics.
20124         For the <citetitle>User's Guide</citetitle>, there are
20125         reference pages covering the postmaster and more utility
20126         programs, and a new appendix
20127         contains details on date/time behavior.
20128         The <citetitle>Administrator's Guide</citetitle> has a new
20129         chapter on troubleshooting from Tom Lane.
20130         And the <citetitle>Programmer's Guide</citetitle> has a
20131         description of query processing, also from Stefan, and details
20132         on obtaining the <productname>PostgreSQL</productname> source
20133         tree via anonymous <productname>CVS</productname> and
20134         <productname>CVSup</productname>.
20135        </para>
20136       </listitem>
20137      </varlistentry>
20138     </variablelist>
20139    </para>
20140
20141    <sect2>
20142     <title>Migration to version 6.5</title>
20143
20144     <para>
20145      A dump/restore using <application>pg_dump</application>
20146      is required for those wishing to migrate data from any
20147      previous release of <productname>PostgreSQL</productname>.
20148      <application>pg_upgrade</application> can <emphasis>not</emphasis>
20149      be used to upgrade to this release because the on-disk structure
20150      of the tables has changed compared to previous releases.
20151     </para>
20152
20153     <para>
20154      The new Multiversion Concurrency Control (MVCC) features can
20155      give somewhat different behaviors in multiuser
20156      environments. <emphasis>Read and understand the following section
20157       to ensure that your existing applications will give you the
20158       behavior you need.</emphasis>
20159     </para>
20160
20161     <sect3>
20162      <title>Multiversion Concurrency Control</title>
20163
20164      <para>
20165       Because readers in 6.5 don't lock data, regardless of transaction
20166       isolation level, data read by one transaction can be overwritten by
20167       another. In other words, if a row is returned by
20168       <command>SELECT</command> it doesn't mean that this row really exists
20169       at the time it is returned (i.e. sometime after the statement or
20170       transaction began) nor that the row is protected from being deleted or
20171       updated by concurrent transactions before the current transaction does
20172       a commit or rollback.
20173      </para>
20174
20175      <para>
20176       To ensure the actual existence of a row and protect it against
20177       concurrent updates one must use <command>SELECT FOR UPDATE</command> or
20178       an appropriate <command>LOCK TABLE</command> statement. This should be
20179       taken into account when porting applications from previous releases of
20180       <productname>PostgreSQL</productname> and other environments.
20181      </para>
20182
20183      <para>
20184       Keep the above in mind if you are using
20185       <filename>contrib/refint.*</filename> triggers for
20186       referential integrity. Additional techniques are required now. One way is
20187       to use <command>LOCK parent_table IN SHARE ROW EXCLUSIVE MODE</command>
20188       command if a transaction is going to update/delete a primary key and
20189       use <command>LOCK parent_table IN SHARE MODE</command> command if a
20190       transaction is going to update/insert a foreign key.
20191
20192       <note>
20193        <para>
20194         Note that if you run a transaction in SERIALIZABLE mode then you must
20195         execute the <command>LOCK</command> commands above before execution of any
20196         <acronym>DML</acronym> statement
20197         (<command>SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO</command>) in the
20198         transaction.
20199        </para>
20200       </note>
20201      </para>
20202
20203      <para>
20204       These inconveniences will disappear in the future
20205       when the ability to read dirty
20206       (uncommitted) data (regardless of isolation level) and true referential
20207       integrity will be implemented.
20208      </para>
20209     </sect3>
20210     </sect2>
20211
20212    <sect2>
20213     <title>Changes</title>
20214
20215     <para>
20216      <programlisting>
20217 Bug Fixes
20218 ---------
20219 Fix text&lt;-&gt;float8 and text&lt;-&gt;float4 conversion functions(Thomas)
20220 Fix for creating tables with mixed-case constraints(Billy)
20221 Change exp()/pow() behavior to generate error on underflow/overflow(Jan)
20222 Fix bug in pg_dump -z
20223 Memory overrun cleanups(Tatsuo)
20224 Fix for lo_import crash(Tatsuo)
20225 Adjust handling of data type names to suppress double quotes(Thomas)
20226 Use type coercion for matching columns and DEFAULT(Thomas)
20227 Fix deadlock so it only checks once after one second of sleep(Bruce)
20228 Fixes for aggregates and PL/pgsql(Hiroshi)
20229 Fix for subquery crash(Vadim)
20230 Fix for libpq function PQfnumber and case-insensitive names(Bahman Rafatjoo)
20231 Fix for large object write-in-middle, no extra block, memory consumption(Tatsuo)
20232 Fix for pg_dump -d or -D and  quote special characters in INSERT
20233 Repair serious problems with dynahash(Tom)
20234 Fix INET/CIDR portability problems
20235 Fix problem with selectivity error in ALTER TABLE ADD COLUMN(Bruce)
20236 Fix executor so mergejoin of different column types works(Tom)
20237 Fix for Alpha OR selectivity bug
20238 Fix OR index selectivity problem(Bruce)
20239 Fix so \d shows proper length for char()/varchar()(Ryan)
20240 Fix tutorial code(Clark)
20241 Improve destroyuser checking(Oliver)
20242 Fix for Kerberos(Rodney McDuff)
20243 Fix for dropping database while dirty buffers(Bruce)
20244 Fix so sequence nextval() can be case-sensitive(Bruce)
20245 Fix !!= operator
20246 Drop buffers before destroying database files(Bruce)
20247 Fix case where executor evaluates functions twice(Tatsuo)
20248 Allow sequence nextval actions to be case-sensitive(Bruce)
20249 Fix optimizer indexing not working for negative numbers(Bruce)
20250 Fix for memory leak in executor with fjIsNull
20251 Fix for aggregate memory leaks(Erik Riedel)
20252 Allow user name containing a dash to grant privileges
20253 Cleanup of NULL in inet types
20254 Clean up system table bugs(Tom)
20255 Fix problems of PAGER and \? command(Masaaki Sakaida)
20256 Reduce default multisegment file size limit to 1GB(Peter)
20257 Fix for dumping of CREATE OPERATOR(Tom)
20258 Fix for backward scanning of cursors(Hiroshi Inoue)
20259 Fix for COPY FROM STDIN when using \i(Tom)
20260 Fix for subselect is compared inside an expression(Jan)
20261 Fix handling of error reporting while returning rows(Tom)
20262 Fix problems with reference to array types(Tom,Jan)
20263 Prevent UPDATE SET oid(Jan)
20264 Fix pg_dump so -t option can handle case-sensitive tablenames
20265 Fixes for GROUP BY in special cases(Tom, Jan)
20266 Fix for memory leak in failed queries(Tom)
20267 DEFAULT now supports mixed-case identifiers(Tom)
20268 Fix for multisegment uses of DROP/RENAME table, indexes(Ole Gjerde)
20269 Disable use of pg_dump with both -o and -d options(Bruce)
20270 Allow pg_dump to properly dump group privileges(Bruce)
20271 Fix GROUP BY in INSERT INTO table SELECT * FROM table2(Jan)
20272 Fix for computations in views(Jan)
20273 Fix for aggregates on array indexes(Tom)
20274 Fix for DEFAULT handles single quotes in value requiring too many quotes
20275 Fix security problem with non-super users importing/exporting large objects(Tom)
20276 Rollback of transaction that creates table cleaned up properly(Tom)
20277 Fix to allow long table and column names to generate proper serial names(Tom)
20278
20279 Enhancements
20280 ------------
20281 Add "vacuumdb" utility
20282 Speed up libpq by allocating memory better(Tom)
20283 EXPLAIN all indexes used(Tom)
20284 Implement CASE, COALESCE, NULLIF  expression(Thomas)
20285 New pg_dump table output format(Constantin)
20286 Add string min()/max() functions(Thomas)
20287 Extend new type coercion techniques to aggregates(Thomas)
20288 New moddatetime contrib(Terry)
20289 Update to pgaccess 0.96(Constantin)
20290 Add routines for single-byte "char" type(Thomas)
20291 Improved substr() function(Thomas)
20292 Improved multibyte handling(Tatsuo)
20293 Multiversion concurrency control/MVCC(Vadim)
20294 New Serialized mode(Vadim)
20295 Fix for tables over 2gigs(Peter)
20296 New SET TRANSACTION ISOLATION LEVEL(Vadim)
20297 New LOCK TABLE IN ... MODE(Vadim)
20298 Update ODBC driver(Byron)
20299 New NUMERIC data type(Jan)
20300 New SELECT FOR UPDATE(Vadim)
20301 Handle "NaN" and "Infinity" for input values(Jan)
20302 Improved date/year handling(Thomas)
20303 Improved handling of backend connections(Magnus)
20304 New options ELOG_TIMESTAMPS and USE_SYSLOG options for log files(Massimo)
20305 New TCL_ARRAYS option(Massimo)
20306 New INTERSECT and EXCEPT(Stefan)
20307 New pg_index.indisprimary for primary key tracking(D'Arcy)
20308 New pg_dump option to allow dropping of tables before creation(Brook)
20309 Speedup of row output routines(Tom)
20310 New READ COMMITTED isolation level(Vadim)
20311 New TEMP tables/indexes(Bruce)
20312 Prevent sorting if result is already sorted(Jan)
20313 New memory allocation optimization(Jan)
20314 Allow psql to do \p\g(Bruce)
20315 Allow multiple rule actions(Jan)
20316 Added LIMIT/OFFSET functionality(Jan)
20317 Improve optimizer when joining a large number of tables(Bruce)
20318 New intro to SQL from S. Simkovics' Master's Thesis (Stefan, Thomas)
20319 New intro to backend processing from S. Simkovics' Master's Thesis (Stefan)
20320 Improved int8 support(Ryan Bradetich, Thomas, Tom)
20321 New routines to convert between int8 and text/varchar types(Thomas)
20322 New bushy plans, where meta-tables are joined(Bruce)
20323 Enable right-hand queries by default(Bruce)
20324 Allow reliable maximum number of backends to be set at configure time
20325       (--with-maxbackends and postmaster switch (-N backends))(Tom)
20326 GEQO default now 10 tables because of optimizer speedups(Tom)
20327 Allow NULL=Var for MS-SQL portability(Michael, Bruce)
20328 Modify contrib check_primary_key() so either "automatic" or "dependent"(Anand)
20329 Allow psql \d on a view show query(Ryan)
20330 Speedup for LIKE(Bruce)
20331 Ecpg fixes/features, see src/interfaces/ecpg/ChangeLog file(Michael)
20332 JDBC fixes/features, see src/interfaces/jdbc/CHANGELOG(Peter)
20333 Make % operator have precedence like /(Bruce)
20334 Add new postgres -O option to allow system table structure changes(Bruce)
20335 Update contrib/pginterface/findoidjoins script(Tom)
20336 Major speedup in vacuum of deleted rows with indexes(Vadim)
20337 Allow non-SQL functions to run different versions based on arguments(Tom)
20338 Add -E option that shows actual queries sent by \dt and friends(Masaaki Sakaida)
20339 Add version number in start-up banners for psql(Masaaki Sakaida)
20340 New contrib/vacuumlo removes large objects not referenced(Peter)
20341 New initialization for table sizes so non-vacuumed tables perform better(Tom)
20342 Improve error messages when a connection is rejected(Tom)
20343 Support for arrays of char() and varchar() fields(Massimo)
20344 Overhaul of hash code to increase reliability and performance(Tom)
20345 Update to PyGreSQL 2.4(D'Arcy)
20346 Changed debug options so -d4 and -d5 produce different node displays(Jan)
20347 New pg_options: pretty_plan, pretty_parse, pretty_rewritten(Jan)
20348 Better optimization statistics for system table access(Tom)
20349 Better handling of non-default block sizes(Massimo)
20350 Improve GEQO optimizer memory consumption(Tom)
20351 UNION now supports ORDER BY of columns not in target list(Jan)
20352 Major libpq++ improvements(Vince Vielhaber)
20353 pg_dump now uses -z(ACL's) as default(Bruce)
20354 backend cache, memory speedups(Tom)
20355 have pg_dump do everything in one snapshot transaction(Vadim)
20356 fix for large object memory leakage, fix for pg_dumping(Tom)
20357 INET type now respects netmask for comparisons
20358 Make VACUUM ANALYZE only use a readlock(Vadim)
20359 Allow VIEWs on UNIONS(Jan)
20360 pg_dump now can generate consistent snapshots on active databases(Vadim)
20361
20362 Source Tree Changes
20363 -------------------
20364 Improve port matching(Tom)
20365 Portability fixes for SunOS
20366 Add Windows NT backend port and enable dynamic loading(Magnus and Daniel Horak)
20367 New port to Cobalt Qube(Mips) running Linux(Tatsuo)
20368 Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
20369 Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
20370 Port to NetBSD/macppc(Toshimi Aoki)
20371 Fix for tcl/tk configuration(Vince)
20372 Removed CURRENT key word for rule queries(Jan)
20373 NT dynamic loading now works(Daniel Horak)
20374 Add ARM32 support(Andrew McMurry)
20375 Better support for HP-UX 11 and UnixWare
20376 Improve file handling to be more uniform, prevent file descriptor leak(Tom)
20377 New install commands for plpgsql(Jan)
20378      </programlisting>
20379     </para>
20380    </sect2>
20381   </sect1>
20382
20383
20384 <sect1 id="release-6-4-2">
20385 <title>Release 6.4.2</title>
20386
20387    <note>
20388    <title>Release date</title>
20389    <simpara>1998-12-20</simpara>
20390    </note>
20391
20392 <para>
20393 The 6.4.1 release was improperly packaged.  This also has one additional
20394 bug fix.
20395 </para>
20396
20397
20398 <sect2>
20399 <title>Migration to version 6.4.2</title>
20400
20401 <para>
20402 A dump/restore is <emphasis>not</emphasis> required for those running
20403 6.4.*.
20404 </para>
20405 </sect2>
20406 <sect2>
20407 <title>Changes</title>
20408
20409 <para>
20410 <programlisting>
20411 Fix for datetime constant problem on some platforms(Thomas)
20412 </programlisting>
20413 </para>
20414 </sect2>
20415 </sect1>
20416
20417
20418
20419 <sect1 id="release-6-4-1">
20420 <title>Release 6.4.1</title>
20421
20422    <note>
20423    <title>Release date</title>
20424    <simpara>1998-12-18</simpara>
20425    </note>
20426
20427 <para>
20428 This is basically a cleanup release for 6.4.  We have fixed a variety of
20429 problems reported by 6.4 users.
20430 </para>
20431
20432
20433 <sect2>
20434 <title>Migration to version 6.4.1</title>
20435
20436 <para>
20437 A dump/restore is <emphasis>not</emphasis> required for those running
20438 6.4.
20439 </para>
20440 </sect2>
20441 <sect2>
20442 <title>Changes</title>
20443
20444 <para>
20445 <programlisting>
20446 Add pg_dump -N flag to force double quotes around identifiers.  This is
20447         the default(Thomas)
20448 Fix for NOT in where clause causing crash(Bruce)
20449 EXPLAIN VERBOSE coredump fix(Vadim)
20450 Fix shared-library problems on Linux
20451 Fix test for table existence to allow mixed-case and whitespace in
20452         the table name(Thomas)
20453 Fix a couple of pg_dump bugs
20454 Configure matches template/.similar entries better(Tom)
20455 Change builtin function names from SPI_* to spi_*
20456 OR WHERE clause fix(Vadim)
20457 Fixes for mixed-case table names(Billy)
20458 contrib/linux/postgres.init.csh/sh fix(Thomas)
20459 libpq memory overrun fix
20460 SunOS fixes(Tom)
20461 Change exp() behavior to generate error on underflow(Thomas)
20462 pg_dump fixes for memory leak, inheritance constraints, layout change
20463 update pgaccess to 0.93
20464 Fix prototype for 64-bit platforms
20465 Multibyte fixes(Tatsuo)
20466 New ecpg man page
20467 Fix memory overruns(Tatsuo)
20468 Fix for lo_import() crash(Bruce)
20469 Better search for install program(Tom)
20470 Timezone fixes(Tom)
20471 HP-UX fixes(Tom)
20472 Use implicit type coercion for matching DEFAULT values(Thomas)
20473 Add routines to help with single-byte (internal) character type(Thomas)
20474 Compilation of libpq for Windows fixes(Magnus)
20475 Upgrade to PyGreSQL 2.2(D'Arcy)
20476 </programlisting>
20477 </para>
20478 </sect2>
20479 </sect1>
20480
20481
20482
20483 <sect1 id="release-6-4">
20484 <title>Release 6.4</title>
20485
20486    <note>
20487    <title>Release date</title>
20488    <simpara>1998-10-30</simpara>
20489    </note>
20490
20491 <para>
20492 There are <emphasis>many</emphasis> new features and improvements in this release.
20493 Thanks to our developers and maintainers, nearly every aspect of the system
20494 has received some attention since the previous release.
20495 Here is a brief, incomplete summary:
20496
20497 <itemizedlist>
20498 <listitem>
20499 <para>
20500 Views and rules are now functional thanks to extensive new code in the
20501 rewrite rules system from Jan Wieck. He also wrote a chapter on it
20502 for the <citetitle>Programmer's Guide</citetitle>.
20503 </para>
20504 </listitem>
20505 <listitem>
20506 <para>
20507 Jan also contributed a second procedural language, <application>PL/pgSQL</application>, to go with the
20508 original <application>PL/pgTCL</application> procedural language he contributed last release.
20509 </para>
20510 </listitem>
20511
20512 <listitem>
20513 <para>
20514 We have optional multiple-byte character set support from Tatsuo Ishii
20515 to complement our existing locale support.
20516 </para>
20517 </listitem>
20518
20519 <listitem>
20520 <para>
20521 Client/server communications has been cleaned up, with better support for
20522 asynchronous messages and interrupts thanks to Tom Lane.
20523 </para>
20524 </listitem>
20525
20526 <listitem>
20527 <para>
20528 The parser will now perform automatic type coercion to match arguments
20529 to available operators and functions, and to match columns and expressions
20530 with target columns. This uses a generic mechanism which supports
20531 the type extensibility features of <productname>PostgreSQL</productname>.
20532 There is a new chapter in the <citetitle>User's Guide</citetitle>
20533 which covers this topic.
20534 </para>
20535 </listitem>
20536
20537 <listitem>
20538 <para>
20539 Three new data types have been added.
20540 Two types, <type>inet</type> and <type>cidr</type>, support various forms
20541 of IP network, subnet, and machine addressing. There is now an 8-byte integer
20542 type available on some platforms. See the chapter on data types
20543 in the <citetitle>User's Guide</citetitle> for details.
20544 A fourth type, <type>serial</type>, is now supported by the parser as an
20545 amalgam of the <type>int4</type> type, a sequence, and a unique index.
20546 </para>
20547 </listitem>
20548
20549 <listitem>
20550 <para>
20551 Several more <acronym>SQL92</acronym>-compatible syntax features have been
20552 added, including <command>INSERT DEFAULT VALUES</command>
20553 </para>
20554 </listitem>
20555
20556 <listitem>
20557 <para>
20558 The automatic configuration and installation system has received some
20559 attention, and should be more robust for more platforms than it has ever
20560 been.
20561 </para>
20562 </listitem>
20563
20564 </itemizedlist>
20565 </para>
20566
20567 <sect2>
20568 <title>Migration to version 6.4</title>
20569
20570 <para>
20571 A dump/restore using <application>pg_dump</application>
20572 or <application>pg_dumpall</application>
20573 is required for those wishing to migrate data from any
20574 previous release of <productname>PostgreSQL</productname>.
20575 </para>
20576 </sect2>
20577
20578    <sect2>
20579 <title>Changes</title>
20580
20581     <para>
20582      <programlisting>
20583 Bug Fixes
20584 ---------
20585 Fix for a tiny memory leak in PQsetdb/PQfinish(Bryan)
20586 Remove char2-16 data types, use char/varchar(Darren)
20587 Pqfn not handles a NOTICE message(Anders)
20588 Reduced busywaiting overhead for spinlocks with many backends (dg)
20589 Stuck spinlock detection (dg)
20590 Fix up "ISO-style" timespan decoding and encoding(Thomas)
20591 Fix problem with table drop after rollback of transaction(Vadim)
20592 Change error message and remove non-functional update message(Vadim)
20593 Fix for COPY array checking
20594 Fix for SELECT 1 UNION SELECT NULL
20595 Fix for buffer leaks in large object calls(Pascal)
20596 Change owner from oid to int4 type(Bruce)
20597 Fix a bug in the oracle compatibility functions btrim() ltrim() and rtrim()
20598 Fix for shared invalidation cache overflow(Massimo)
20599 Prevent file descriptor leaks in failed COPY's(Bruce)
20600 Fix memory leak in libpgtcl's pg_select(Constantin)
20601 Fix problems with username/passwords over 8 characters(Tom)
20602 Fix problems with handling of asynchronous NOTIFY in backend(Tom)
20603 Fix of many bad system table entries(Tom)
20604
20605 Enhancements
20606 ------------
20607 Upgrade ecpg and ecpglib,see src/interfaces/ecpc/ChangeLog(Michael)
20608 Show the index used in an EXPLAIN(Zeugswetter)
20609 EXPLAIN  invokes  rule system and shows plan(s) for rewritten queries(Jan)
20610 Multibyte awareness of many data types and functions, via configure(Tatsuo)
20611 New configure --with-mb option(Tatsuo)
20612 New initdb --pgencoding option(Tatsuo)
20613 New createdb -E multibyte option(Tatsuo)
20614 Select version(); now returns PostgreSQL version(Jeroen)
20615 libpq now allows asynchronous clients(Tom)
20616 Allow cancel from client of backend query(Tom)
20617 psql now cancels query with Control-C(Tom)
20618 libpq users need not issue dummy queries to get NOTIFY messages(Tom)
20619 NOTIFY now sends sender's PID, so you can tell whether it was your own(Tom)
20620 PGresult struct now includes associated error message, if any(Tom)
20621 Define "tz_hour" and "tz_minute" arguments to date_part()(Thomas)
20622 Add routines to convert between varchar and bpchar(Thomas)
20623 Add routines to allow sizing of varchar and bpchar into target columns(Thomas)
20624 Add bit flags to support timezonehour and minute in data retrieval(Thomas)
20625 Allow more variations on valid floating point numbers (e.g. ".1", "1e6")(Thomas)
20626 Fixes for unary minus parsing with leading spaces(Thomas)
20627 Implement TIMEZONE_HOUR, TIMEZONE_MINUTE per SQL92 specs(Thomas)
20628 Check for and properly ignore FOREIGN KEY column constraints(Thomas)
20629 Define USER as synonym for CURRENT_USER per SQL92 specs(Thomas)
20630 Enable HAVING clause but no fixes elsewhere yet.
20631 Make "char" type a synonym for "char(1)" (actually implemented as bpchar)(Thomas)
20632 Save string type if specified for DEFAULT clause handling(Thomas)
20633 Coerce operations involving different data types(Thomas)
20634 Allow some index use for columns of different types(Thomas)
20635 Add capabilities for automatic type conversion(Thomas)
20636 Cleanups for large objects, so file is truncated on open(Peter)
20637 Readline cleanups(Tom)
20638 Allow psql  \f \ to make spaces as delimiter(Bruce)
20639 Pass pg_attribute.atttypmod to the frontend for column field lengths(Tom,Bruce)
20640 Msql compatibility library in /contrib(Aldrin)
20641 Remove the requirement that ORDER/GROUP BY clause identifiers be
20642 included in the target list(David)
20643 Convert columns to match columns in UNION clauses(Thomas)
20644 Remove fork()/exec() and only do fork()(Bruce)
20645 Jdbc cleanups(Peter)
20646 Show backend status on ps command line(only works on some platforms)(Bruce)
20647 Pg_hba.conf now has a sameuser option in the database field
20648 Make lo_unlink take oid param, not int4
20649 New DISABLE_COMPLEX_MACRO for compilers that cannot handle our macros(Bruce)
20650 Libpgtcl now handles NOTIFY as a Tcl event, need not send dummy queries(Tom)
20651 libpgtcl cleanups(Tom)
20652 Add -error option to libpgtcl's pg_result command(Tom)
20653 New locale patch, see docs/README/locale(Oleg)
20654 Fix for pg_dump so CONSTRAINT and CHECK syntax is correct(ccb)
20655 New contrib/lo code for large object orphan removal(Peter)
20656 New psql command "SET CLIENT_ENCODING TO 'encoding'" for multibytes
20657 feature, see /doc/README.mb(Tatsuo)
20658 contrib/noupdate code to revoke update permission on a column
20659 libpq can now be compiled on Windows(Magnus)
20660 Add PQsetdbLogin() in libpq
20661 New 8-byte integer type, checked by configure for OS support(Thomas)
20662 Better support for quoted table/column names(Thomas)
20663 Surround table and column names with double-quotes in pg_dump(Thomas)
20664 PQreset() now works with passwords(Tom)
20665 Handle case of GROUP BY target list column number out of range(David)
20666 Allow UNION in subselects
20667 Add auto-size to screen to \d? commands(Bruce)
20668 Use UNION to show all \d? results in one query(Bruce)
20669 Add \d? field search feature(Bruce)
20670 Pg_dump issues fewer \connect requests(Tom)
20671 Make pg_dump -z flag work better, document it in manual page(Tom)
20672 Add HAVING clause with full support for subselects and unions(Stephan)
20673 Full text indexing routines in contrib/fulltextindex(Maarten)
20674 Transaction ids now stored in shared memory(Vadim)
20675 New PGCLIENTENCODING when issuing COPY command(Tatsuo)
20676 Support for SQL92 syntax "SET NAMES"(Tatsuo)
20677 Support for LATIN2-5(Tatsuo)
20678 Add UNICODE regression test case(Tatsuo)
20679 Lock manager cleanup, new locking modes for LLL(Vadim)
20680 Allow index use with OR clauses(Bruce)
20681 Allows "SELECT NULL ORDER BY 1;"
20682 Explain VERBOSE prints the plan, and now pretty-prints the plan to
20683 the postmaster log file(Bruce)
20684 Add indexes display to \d command(Bruce)
20685 Allow GROUP BY on functions(David)
20686 New pg_class.relkind for large objects(Bruce)
20687 New way to send libpq NOTICE messages to a different location(Tom)
20688 New \w write command to psql(Bruce)
20689 New /contrib/findoidjoins scans oid columns to find join relationships(Bruce)
20690 Allow binary-compatible indexes to be considered when checking for valid
20691 Indexes for restriction clauses containing a constant(Thomas)
20692 New ISBN/ISSN code in /contrib/isbn_issn
20693 Allow NOT LIKE, IN, NOT IN, BETWEEN, and NOT BETWEEN constraint(Thomas)
20694 New rewrite system fixes many problems with rules and views(Jan)
20695         * Rules on relations work
20696         * Event qualifications on insert/update/delete work
20697         * New OLD variable to reference CURRENT, CURRENT will be remove in future
20698         * Update rules can reference NEW and OLD in rule qualifications/actions
20699         * Insert/update/delete rules on views work
20700         * Multiple rule actions are now supported, surrounded by parentheses
20701         * Regular users can create views/rules on tables they have RULE permits
20702         * Rules and views inherit the privileges of the creator
20703         * No rules at the column level
20704         * No UPDATE NEW/OLD rules
20705         * New pg_tables, pg_indexes, pg_rules and pg_views system views
20706         * Only a single action on SELECT rules
20707         * Total rewrite overhaul, perhaps for 6.5
20708         * handle subselects
20709         * handle aggregates on views
20710         * handle insert into select from view works
20711 System indexes are now multikey(Bruce)
20712 Oidint2, oidint4, and oidname types are removed(Bruce)
20713 Use system cache for more system table lookups(Bruce)
20714 New backend programming language PL/pgSQL in backend/pl(Jan)
20715 New SERIAL data type, auto-creates sequence/index(Thomas)
20716 Enable assert checking without a recompile(Massimo)
20717 User lock enhancements(Massimo)
20718 New setval() command to set sequence value(Massimo)
20719 Auto-remove unix socket file on start-up if no postmaster running(Massimo)
20720 Conditional trace package(Massimo)
20721 New UNLISTEN command(Massimo)
20722 psql and libpq now compile under Windows using win32.mak(Magnus)
20723 Lo_read no longer stores trailing NULL(Bruce)
20724 Identifiers are now truncated to 31 characters internally(Bruce)
20725 Createuser options now available on the command line
20726 Code for 64-bit integer supported added, configure tested, int8 type(Thomas)
20727 Prevent file descriptor leaf from failed COPY(Bruce)
20728 New pg_upgrade command(Bruce)
20729 Updated /contrib directories(Massimo)
20730 New CREATE TABLE DEFAULT VALUES statement available(Thomas)
20731 New INSERT INTO TABLE DEFAULT VALUES statement available(Thomas)
20732 New DECLARE and FETCH feature(Thomas)
20733 libpq's internal structures now not exported(Tom)
20734 Allow up to 8 key indexes(Bruce)
20735 Remove ARCHIVE key word, that is no longer used(Thomas)
20736 pg_dump -n flag to suppress quotes around indentifiers
20737 disable system columns for views(Jan)
20738 new INET and CIDR types for network addresses(TomH, Paul)
20739 no more double quotes in psql output
20740 pg_dump now dumps views(Terry)
20741 new SET QUERY_LIMIT(Tatsuo,Jan)
20742
20743 Source Tree Changes
20744 -------------------
20745 /contrib cleanup(Jun)
20746 Inline some small functions called for every row(Bruce)
20747 Alpha/linux fixes
20748 HP-UX cleanups(Tom)
20749 Multibyte regression tests(Soonmyung.)
20750 Remove --disabled options from configure
20751 Define PGDOC to use POSTGRESDIR by default
20752 Make regression optional
20753 Remove extra braces code to pgindent(Bruce)
20754 Add bsdi shared library support(Bruce)
20755 New --without-CXX support configure option(Brook)
20756 New FAQ_CVS
20757 Update backend flowchart in tools/backend(Bruce)
20758 Change atttypmod from int16 to int32(Bruce, Tom)
20759 Getrusage() fix for platforms that do not have it(Tom)
20760 Add PQconnectdb, PGUSER, PGPASSWORD to libpq man page
20761 NS32K platform fixes(Phil Nelson, John Buller)
20762 SCO 7/UnixWare 2.x fixes(Billy,others)
20763 Sparc/Solaris 2.5 fixes(Ryan)
20764 Pgbuiltin.3 is obsolete, move to doc files(Thomas)
20765 Even more documentation(Thomas)
20766 Nextstep support(Jacek)
20767 Aix support(David)
20768 pginterface manual page(Bruce)
20769 shared libraries all have version numbers
20770 merged all OS-specific shared library defines into one file
20771 smarter TCL/TK configuration checking(Billy)
20772 smarter perl configuration(Brook)
20773 configure uses supplied install-sh if no install script found(Tom)
20774 new Makefile.shlib for shared library configuration(Tom)
20775 </programlisting>
20776 </para>
20777 </sect2>
20778 </sect1>
20779
20780 <sect1 id="release-6-3-2">
20781 <title>Release 6.3.2</title>
20782
20783    <note>
20784    <title>Release date</title>
20785    <simpara>1998-04-07</simpara>
20786    </note>
20787
20788 <para>
20789 This is a bug-fix release for 6.3.x.
20790 Refer to the release notes for version 6.3 for a more complete summary of new features.
20791 </para>
20792 <para>
20793 Summary:
20794
20795 <itemizedlist>
20796 <listitem>
20797 <para>
20798 Repairs automatic configuration support for some platforms, including Linux,
20799 from breakage inadvertently introduced in version 6.3.1.
20800 </para>
20801 </listitem>
20802
20803 <listitem>
20804 <para>
20805 Correctly handles function calls on the left side of BETWEEN and LIKE clauses.
20806 </para>
20807 </listitem>
20808
20809 </itemizedlist>
20810 </para>
20811 <para>
20812 A dump/restore is NOT required for those running 6.3 or 6.3.1.  A
20813 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
20814 This last step should be performed while the postmaster is not running.
20815 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
20816 </para>
20817 <para>
20818 For upgrades from pre-6.3 installations,
20819 refer to the installation and migration instructions for version 6.3.
20820 </para>
20821
20822    <sect2>
20823     <title>Changes</title>
20824
20825     <para>
20826      <programlisting>
20827 Configure detection improvements for tcl/tk(Brook Milligan, Alvin)
20828 Manual page improvements(Bruce)
20829 BETWEEN and LIKE fix(Thomas)
20830 fix for psql \connect used by pg_dump(Oliver Elphick)
20831 New odbc driver
20832 pgaccess, version 0.86
20833 qsort removed, now uses libc version, cleanups(Jeroen)
20834 fix for buffer over-runs detected(Maurice Gittens)
20835 fix for buffer overrun in libpgtcl(Randy Kunkee)
20836 fix for UNION with DISTINCT or ORDER BY(Bruce)
20837 gettimeofday configure check(Doug Winterburn)
20838 Fix "indexes not used" bug(Vadim)
20839 docs additions(Thomas)
20840 Fix for backend memory leak(Bruce)
20841 libreadline cleanup(Erwan MAS)
20842 Remove DISTDIR(Bruce)
20843 Makefile dependency cleanup(Jeroen van Vianen)
20844 ASSERT fixes(Bruce)
20845      </programlisting>
20846     </para>
20847    </sect2>
20848   </sect1>
20849
20850   <sect1 id="release-6-3-1">
20851    <title>Release 6.3.1</title>
20852
20853    <note>
20854    <title>Release date</title>
20855    <simpara>1998-03-23</simpara>
20856    </note>
20857
20858    <para>
20859     Summary:
20860
20861 <itemizedlist>
20862 <listitem>
20863 <para>
20864 Additional support for multibyte character sets.
20865 </para>
20866 </listitem>
20867
20868 <listitem>
20869 <para>
20870 Repair byte ordering for mixed-endian clients and servers.
20871 </para>
20872 </listitem>
20873
20874 <listitem>
20875 <para>
20876 Minor updates to allowed SQL syntax.
20877 </para>
20878 </listitem>
20879
20880 <listitem>
20881 <para>
20882 Improvements to the configuration autodetection for installation.
20883 </para>
20884 </listitem>
20885
20886 </itemizedlist>
20887 </para>
20888 <para>
20889 A dump/restore is NOT required for those running 6.3.  A
20890 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
20891 This last step should be performed while the postmaster is not running.
20892 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
20893 </para>
20894 <para>
20895 For upgrades from pre-6.3 installations,
20896 refer to the installation and migration instructions for version 6.3.
20897 </para>
20898
20899    <sect2>
20900     <title>Changes</title>
20901
20902     <para>
20903      <programlisting>
20904 ecpg cleanup/fixes, now version 1.1(Michael Meskes)
20905 pg_user cleanup(Bruce)
20906 large object fix for pg_dump and tclsh (alvin)
20907 LIKE fix for multiple adjacent underscores
20908 fix for redefining builtin functions(Thomas)
20909 ultrix4 cleanup
20910 upgrade to pg_access 0.83
20911 updated CLUSTER manual page
20912 multibyte character set support, see doc/README.mb(Tatsuo)
20913 configure --with-pgport fix
20914 pg_ident fix
20915 big-endian fix for backend communications(Kataoka)
20916 SUBSTR() and substring() fix(Jan)
20917 several jdbc fixes(Peter)
20918 libpgtcl improvements, see libptcl/README(Randy Kunkee)
20919 Fix for "Datasize = 0" error(Vadim)
20920 Prevent \do from wrapping(Bruce)
20921 Remove duplicate Russian character set entries
20922 Sunos4 cleanup
20923 Allow optional TABLE key word in LOCK and SELECT INTO(Thomas)
20924 CREATE SEQUENCE options to allow a negative integer(Thomas)
20925 Add "PASSWORD" as an allowed column identifier(Thomas)
20926 Add checks for UNION target fields(Bruce)
20927 Fix Alpha port(Dwayne Bailey)
20928 Fix for text arrays containing quotes(Doug Gibson)
20929 Solaris compile fix(Albert Chin-A-Young)
20930 Better identify tcl and tk libs and includes(Bruce)
20931      </programlisting>
20932     </para>
20933    </sect2>
20934   </sect1>
20935
20936   <sect1 id="release-6-3">
20937    <title>Release 6.3</title>
20938
20939    <note>
20940    <title>Release date</title>
20941    <simpara>1998-03-01</simpara>
20942    </note>
20943
20944    <para>
20945     There are <emphasis>many</emphasis> new features and improvements in this release.
20946     Here is a brief, incomplete summary:
20947
20948     <itemizedlist>
20949      <listitem>
20950       <para>
20951        Many new SQL features, including
20952        full <acronym>SQL92</acronym> subselect capability
20953        (everything is here but target-list subselects).
20954       </para>
20955      </listitem>
20956
20957      <listitem>
20958       <para>
20959        Support for client-side environment variables to specify time zone and date style.
20960       </para>
20961      </listitem>
20962
20963      <listitem>
20964       <para>
20965        Socket interface for client/server connection. This is the default now
20966        so you might need to start <application>postmaster</application> with the
20967        <option>-i</option> flag.
20968       </para>
20969      </listitem>
20970
20971      <listitem>
20972       <para>
20973        Better password authorization mechanisms. Default table privileges have changed.
20974       </para>
20975      </listitem>
20976
20977      <listitem>
20978       <para>
20979        Old-style <firstterm>time travel</firstterm>
20980        has been removed. Performance has been improved.
20981       </para>
20982      </listitem>
20983     </itemizedlist>
20984    </para>
20985
20986    <note>
20987     <para>
20988      Bruce Momjian wrote the following notes to introduce the new release.
20989     </para>
20990    </note>
20991
20992    <para>
20993     There are some general 6.3 issues that I want to mention.  These are
20994     only the big items that cannot be described in one sentence.  A review
20995     of the detailed changes list is still needed.
20996    </para>
20997    <para>
20998     First, we now have subselects.  Now that we have them, I would like to
20999     mention that without subselects, SQL is a very limited language.
21000     Subselects are a major feature, and you should review your code for
21001     places where subselects provide a better solution for your queries.  I
21002     think you will find that there are more uses for subselects than you might
21003     think.  Vadim has put us on the big SQL map with subselects, and fully
21004     functional ones too.  The only thing you cannot do with subselects is to
21005     use them in the target list.
21006    </para>
21007    <para>
21008     Second, 6.3 uses Unix domain sockets rather than TCP/IP by default.  To
21009     enable connections from other machines, you have to use the new
21010     postmaster -i option, and of course edit <filename>pg_hba.conf</filename>.  Also, for this
21011     reason, the format of <filename>pg_hba.conf</filename> has changed.
21012    </para>
21013    <para>
21014     Third, <type>char()</type> fields will now allow faster access than <type>varchar()</type> or
21015     <type>text</type>. Specifically, the <type>text</> and <type>varchar()</type> have a penalty for access to
21016     any columns after the first column of this type.  <type>char()</type> used to also
21017     have this access penalty, but it no longer does.  This might suggest that
21018     you redesign some of your tables, especially if you have short character
21019     columns that you have defined as <type>varchar()</type> or <type>text</type>.  This and other
21020     changes make 6.3 even faster than earlier releases.
21021    </para>
21022    <para>
21023     We now have passwords definable independent of any Unix file.  There are
21024     new SQL USER commands.
21025     See the <citetitle>Administrator's Guide</citetitle> for more
21026     information.  There is a new table, pg_shadow, which is used to store
21027     user information and user passwords, and it by default only SELECT-able
21028     by the <systemitem>postgres</systemitem> super-user.  pg_user is now a view of pg_shadow, and is
21029     SELECT-able by PUBLIC.  You should keep using pg_user in your
21030     application without changes.
21031    </para>
21032    <para>
21033     User-created tables now no longer have SELECT privilege to PUBLIC by
21034     default.  This was done because the ANSI standard requires it.  You can
21035     of course GRANT any privileges you want after the table is created.
21036     System tables continue to be SELECT-able by PUBLIC.
21037    </para>
21038    <para>
21039     We also have real deadlock detection code.  No more sixty-second
21040     timeouts.  And the new locking code implements a <acronym>FIFO</acronym> better, so there
21041     should be less resource starvation during heavy use.
21042    </para>
21043    <para>
21044     Many complaints have been made about inadequate documentation in previous
21045     releases.  Thomas has put much effort into many new manuals for this
21046     release.  Check out the doc/ directory.
21047    </para>
21048    <para>
21049     For performance reasons, time travel is gone, but can be implemented
21050     using triggers (see <filename>pgsql/contrib/spi/README</filename>).  Please check out the new
21051     \d command for types, operators, etc.  Also, views have their own
21052     privileges now, not based on the underlying tables, so privileges on
21053     them have to be set separately.  Check <filename>/pgsql/interfaces</filename> for some new
21054     ways to talk to <productname>PostgreSQL</productname>.
21055    </para>
21056    <para>
21057     This is the first release that really required an explanation for
21058     existing users.  In many ways, this was necessary because the new
21059     release removes many limitations, and the work-arounds people were using
21060     are no longer needed.
21061    </para>
21062
21063    <sect2>
21064     <title>Migration to version 6.3</title>
21065
21066     <para>
21067      A dump/restore using <application>pg_dump</application>
21068      or <application>pg_dumpall</application>
21069      is required for those wishing to migrate data from any
21070      previous release of <productname>PostgreSQL</productname>.
21071     </para>
21072    </sect2>
21073
21074    <sect2>
21075     <title>Changes</title>
21076
21077     <para>
21078      <programlisting>
21079 Bug Fixes
21080 ---------
21081 Fix binary cursors broken by MOVE implementation(Vadim)
21082 Fix for tcl library crash(Jan)
21083 Fix for array handling, from Gerhard Hintermayer
21084 Fix acl error, and remove duplicate pqtrace(Bruce)
21085 Fix psql \e for empty file(Bruce)
21086 Fix for textcat on varchar() fields(Bruce)
21087 Fix for DBT Sendproc (Zeugswetter Andres)
21088 Fix vacuum analyze syntax problem(Bruce)
21089 Fix for international identifiers(Tatsuo)
21090 Fix aggregates on inherited tables(Bruce)
21091 Fix substr() for out-of-bounds data
21092 Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2)(Bruce)
21093 Fix notty output to show status result.  -q option still turns it off(Bruce)
21094 Fix for count(*), aggs with views and multiple tables and sum(3)(Bruce)
21095 Fix cluster(Bruce)
21096 Fix for PQtrace start/stop several times(Bruce)
21097 Fix a variety of locking problems like newer lock waiters getting
21098         lock before older waiters, and having readlock people not share
21099         locks if a writer is waiting for a lock, and waiting writers not
21100         getting priority over waiting readers(Bruce)
21101 Fix crashes in psql when executing queries from external files(James)
21102 Fix problem with multiple order by columns, with the first one having
21103         NULL values(Jeroen)
21104 Use correct hash table support functions for float8 and int4(Thomas)
21105 Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
21106 Change precedence for boolean operators to match expected behavior(Thomas)
21107 Generate elog(ERROR) on over-large integer(Bruce)
21108 Allow multiple-argument functions in constraint clauses(Thomas)
21109 Check boolean input literals for 'true','false','yes','no','1','0'
21110         and throw elog(ERROR) if unrecognized(Thomas)
21111 Major large objects fix
21112 Fix for GROUP BY showing duplicates(Vadim)
21113 Fix for index scans in MergeJoin(Vadim)
21114
21115 Enhancements
21116 ------------
21117 Subselects with EXISTS, IN, ALL, ANY key words (Vadim, Bruce, Thomas)
21118 New User Manual(Thomas, others)
21119 Speedup by inlining some frequently-called functions
21120 Real deadlock detection, no more timeouts(Bruce)
21121 Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
21122         CURRENT_USER(Thomas)
21123 Modify constraint syntax to be SQL92-compliant(Thomas)
21124 Implement SQL92 PRIMARY KEY and UNIQUE clauses using indexes(Thomas)
21125 Recognize SQL92 syntax for FOREIGN KEY. Throw elog notice(Thomas)
21126 Allow NOT NULL UNIQUE constraint clause (each allowed separately before)(Thomas)
21127 Allow PostgreSQL-style casting ("::") of non-constants(Thomas)
21128 Add support for SQL3 TRUE and FALSE boolean constants(Thomas)
21129 Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
21130 Allow shorter strings for boolean literals (e.g. "t", "tr", "tru")(Thomas)
21131 Allow SQL92 delimited identifiers(Thomas)
21132 Implement SQL92 binary and hexadecimal string decoding (b'10' and x'1F')(Thomas)
21133 Support SQL92 syntax for type coercion of literal strings
21134         (e.g. "DATETIME 'now'")(Thomas)
21135 Add conversions for int2, int4, and OID types to and from text(Thomas)
21136 Use shared lock when building indexes(Vadim)
21137 Free memory allocated for an user query inside transaction block after
21138         this query is done, was turned off in &lt;= 6.2.1(Vadim)
21139 New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
21140 New <productname>PostgreSQL</productname> Procedural Language (PL) backend interface(Jan)
21141 Rename pg_dump -H option to -h(Bruce)
21142 Add Java support for passwords, European dates(Peter)
21143 Use indexes for LIKE and ~, !~ operations(Bruce)
21144 Add hash functions for datetime and timespan(Thomas)
21145 Time Travel removed(Vadim, Bruce)
21146 Add paging for \d and \z, and fix \i(Bruce)
21147 Add Unix domain socket support to backend and to frontend library(Goran)
21148 Implement CREATE DATABASE/WITH LOCATION and initlocation utility(Thomas)
21149 Allow more SQL92 and/or <productname>PostgreSQL</productname> reserved words as column identifiers(Thomas)
21150 Augment support for SQL92 SET TIME ZONE...(Thomas)
21151 SET/SHOW/RESET TIME ZONE uses TZ backend environment variable(Thomas)
21152 Implement SET keyword = DEFAULT and SET TIME ZONE DEFAULT(Thomas)
21153 Enable SET TIME ZONE using TZ environment variable(Thomas)
21154 Add PGDATESTYLE environment variable to frontend and backend initialization(Thomas)
21155 Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
21156         frontend library initialization environment variables(Thomas)
21157 Regression tests time zone automatically set with "setenv PGTZ PST8PDT"(Thomas)
21158 Add pg_description table for info on tables, columns, operators, types, and
21159         aggregates(Bruce)
21160 Increase 16 char limit on system table/index names to 32 characters(Bruce)
21161 Rename system indexes(Bruce)
21162 Add 'GERMAN' option to SET DATESTYLE(Thomas)
21163 Define an "ISO-style" timespan output format with "hh:mm:ss" fields(Thomas)
21164 Allow fractional values for delta times (e.g. '2.5 days')(Thomas)
21165 Validate numeric input more carefully for delta times(Thomas)
21166 Implement day of year as possible input to date_part()(Thomas)
21167 Define timespan_finite() and text_timespan() functions(Thomas)
21168 Remove archive stuff(Bruce)
21169 Allow for a pg_password authentication database that is separate from
21170         the system password file(Todd)
21171 Dump ACLs, GRANT, REVOKE privileges(Matt)
21172 Define text, varchar, and bpchar string length functions(Thomas)
21173 Fix Query handling for inheritance, and cost computations(Bruce)
21174 Implement CREATE TABLE/AS SELECT (alternative to SELECT/INTO)(Thomas)
21175 Allow NOT, IS NULL, IS NOT NULL in constraints(Thomas)
21176 Implement UNIONs for SELECT(Bruce)
21177 Add UNION, GROUP, DISTINCT to INSERT(Bruce)
21178 varchar() stores only necessary bytes on disk(Bruce)
21179 Fix for BLOBs(Peter)
21180 Mega-Patch for JDBC...see README_6.3 for list of changes(Peter)
21181 Remove unused "option" from PQconnectdb()
21182 New LOCK command and lock manual page describing deadlocks(Bruce)
21183 Add new psql \da, \dd, \df, \do, \dS, and \dT commands(Bruce)
21184 Enhance psql \z to show sequences(Bruce)
21185 Show NOT NULL and DEFAULT in psql \d table(Bruce)
21186 New psql .psqlrc file start-up(Andrew)
21187 Modify sample start-up script in contrib/linux to show syslog(Thomas)
21188 New types for IP and MAC addresses in contrib/ip_and_mac(TomH)
21189 Unix system time conversions with date/time types in contrib/unixdate(Thomas)
21190 Update of contrib stuff(Massimo)
21191 Add Unix socket support to DBD::Pg(Goran)
21192 New python interface (PyGreSQL 2.0)(D'Arcy)
21193 New frontend/backend protocol has a version number, network byte order(Phil)
21194 Security features in pg_hba.conf enhanced and documented, many cleanups(Phil)
21195 CHAR() now faster access than VARCHAR() or TEXT
21196 ecpg embedded SQL preprocessor
21197 Reduce system column overhead(Vadmin)
21198 Remove pg_time table(Vadim)
21199 Add pg_type attribute to identify types that need length (bpchar, varchar)
21200 Add report of offending line when COPY command fails
21201 Allow VIEW privileges to be set separately from the underlying tables.
21202         For security, use GRANT/REVOKE on views as appropriate(Jan)
21203 Tables now have no default GRANT SELECT TO PUBLIC.  You must
21204         explicitly grant such privileges.
21205 Clean up tutorial examples(Darren)
21206
21207 Source Tree Changes
21208 -------------------
21209 Add new html development tools, and flow chart in /tools/backend
21210 Fix for SCO compiles
21211 Stratus computer port Robert Gillies
21212 Added support for shlib for BSD44_derived & i386_solaris
21213 Make configure more automated(Brook)
21214 Add script to check regression test results
21215 Break parser functions into smaller files, group together(Bruce)
21216 Rename heap_create to heap_create_and_catalog, rename heap_creatr
21217         to heap_create()(Bruce)
21218 Sparc/Linux patch for locking(TomS)
21219 Remove PORTNAME and reorganize port-specific stuff(Marc)
21220 Add optimizer README file(Bruce)
21221 Remove some recursion in optimizer and clean up some code there(Bruce)
21222 Fix for NetBSD locking(Henry)
21223 Fix for libptcl make(Tatsuo)
21224 AIX patch(Darren)
21225 Change IS TRUE, IS FALSE, ... to expressions using "=" rather than
21226         function calls to istrue() or isfalse() to allow optimization(Thomas)
21227 Various fixes NetBSD/Sparc related(TomH)
21228 Alpha linux locking(Travis,Ryan)
21229 Change elog(WARN) to elog(ERROR)(Bruce)
21230 FAQ for FreeBSD(Marc)
21231 Bring in the PostODBC source tree as part of our standard distribution(Marc)
21232 A minor patch for HP/UX 10 vs 9(Stan)
21233 New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
21234 UnixWare patches(Billy)
21235 New i386 'lock' for spinlock asm(Billy)
21236 Support for multiplexed backends is removed
21237 Start an OpenBSD port
21238 Start an AUX port
21239 Start a Cygnus port
21240 Add string functions to regression suite(Thomas)
21241 Expand a few function names formerly truncated to 16 characters(Thomas)
21242 Remove un-needed malloc() calls and replace with palloc()(Bruce)
21243 </programlisting>
21244 </para>
21245 </sect2>
21246 </sect1>
21247
21248 <sect1 id="release-6-2-1">
21249 <title>Release 6.2.1</title>
21250
21251    <note>
21252    <title>Release date</title>
21253    <simpara>1997-10-17</simpara>
21254    </note>
21255
21256 <para>
21257 6.2.1 is a bug-fix and usability release on 6.2.
21258 </para>
21259 <para>
21260 Summary:
21261
21262 <itemizedlist>
21263 <listitem>
21264 <para>
21265 Allow strings to span lines, per <acronym>SQL92</acronym>.
21266 </para>
21267 </listitem>
21268
21269 <listitem>
21270 <para>
21271 Include example trigger function for inserting user names on table updates.
21272 </para>
21273 </listitem>
21274
21275 </itemizedlist>
21276 </para>
21277 <para>
21278 This is a minor bug-fix release on 6.2.
21279 For upgrades from pre-6.2 systems, a full dump/reload is required.
21280 Refer to the 6.2 release notes for instructions.
21281 </para>
21282
21283 <sect2>
21284 <title>Migration from version 6.2 to version 6.2.1</title>
21285
21286 <para>
21287 This is a minor bug-fix release. A dump/reload is not required from version 6.2,
21288 but is required from any release prior to 6.2.
21289 </para>
21290 <para>
21291 In upgrading from version 6.2, if you choose to dump/reload you will find that
21292 avg(money) is now calculated correctly. All other bug fixes take effect
21293 upon updating the executables.
21294 </para>
21295 <para>
21296 Another way to avoid dump/reload is to use the following SQL command
21297 from <command>psql</command> to update the existing system table:
21298
21299 <programlisting>
21300   update pg_aggregate set aggfinalfn = 'cash_div_flt8'
21301    where aggname = 'avg' and aggbasetype = 790;
21302 </programlisting>
21303 </para>
21304 <para>
21305 This will need to be done to every existing database, including template1.
21306 </para>
21307 </sect2>
21308
21309    <sect2>
21310     <title>Changes</title>
21311
21312     <para>
21313      <programlisting>
21314 Allow TIME and TYPE column names(Thomas)
21315 Allow larger range of true/false as boolean values(Thomas)
21316 Support output of "now" and "current"(Thomas)
21317 Handle DEFAULT with INSERT of NULL properly(Vadim)
21318 Fix for relation reference counts problem in buffer manager(Vadim)
21319 Allow strings to span lines, like ANSI(Thomas)
21320 Fix for backward cursor with ORDER BY(Vadim)
21321 Fix avg(cash) computation(Thomas)
21322 Fix for specifying a column twice in ORDER/GROUP BY(Vadim)
21323 Documented new libpq function to return affected rows, PQcmdTuples(Bruce)
21324 Trigger function for inserting user names for INSERT/UPDATE(Brook Milligan)
21325      </programlisting>
21326     </para>
21327    </sect2>
21328   </sect1>
21329
21330 <sect1 id="release-6-2">
21331 <title>Release 6.2</title>
21332
21333    <note>
21334    <title>Release date</title>
21335    <simpara>1997-10-02</simpara>
21336    </note>
21337
21338 <para>
21339 A dump/restore is required for those wishing to migrate data from
21340 previous releases of <productname>PostgreSQL</productname>.
21341 </para>
21342
21343 <sect2>
21344 <title>Migration from version 6.1 to version 6.2</title>
21345
21346 <para>
21347 This migration requires a complete dump of the 6.1 database and a
21348 restore of the database in 6.2.
21349 </para>
21350 <para>
21351 Note that the <command>pg_dump</command> and <command>pg_dumpall</command> utility from 6.2 should be used
21352 to dump the 6.1 database.
21353 </para>
21354 </sect2>
21355
21356 <sect2>
21357 <title>Migration from version 1.<replaceable>x</> to version 6.2</title>
21358
21359 <para>
21360 Those migrating from earlier 1.* releases should first upgrade to 1.09
21361 because the COPY output format was improved from the 1.02 release.
21362 </para>
21363 </sect2>
21364
21365    <sect2>
21366     <title>Changes</title>
21367
21368     <para>
21369      <programlisting>
21370 Bug Fixes
21371 ---------
21372 Fix problems with pg_dump for inheritance, sequences, archive tables(Bruce)
21373 Fix compile errors on overflow due to shifts, unsigned, and bad prototypes
21374          from Solaris(Diab Jerius)
21375 Fix bugs in geometric line arithmetic (bad intersection calculations)(Thomas)
21376 Check for geometric intersections at endpoints to avoid rounding ugliness(Thomas)
21377 Catch non-functional delete attempts(Vadim)
21378 Change time function names to be more consistent(Michael Reifenberg)
21379 Check for zero divides(Michael Reifenberg)
21380 Fix very old bug which made rows changed/inserted by a command
21381         visible to the command itself (so we had multiple update of
21382         updated rows, etc.)(Vadim)
21383 Fix for SELECT null, 'fail' FROM pg_am (Patrick)
21384 SELECT NULL as EMPTY_FIELD now allowed(Patrick)
21385 Remove un-needed signal stuff from contrib/pginterface
21386 Fix OR (where x != 1 or x isnull didn't return rows with x NULL) (Vadim)
21387 Fix time_cmp function (Vadim)
21388 Fix handling of functions with non-attribute first argument in
21389         WHERE clauses (Vadim)
21390 Fix GROUP BY when order of entries is different from order
21391         in target list (Vadim)
21392 Fix pg_dump for aggregates without sfunc1 (Vadim)
21393
21394 Enhancements
21395 ------------
21396 Default genetic optimizer GEQO parameter is now 8(Bruce)
21397 Allow use parameters in target list having aggregates in functions(Vadim)
21398 Added JDBC driver as an interface(Adrian & Peter)
21399 pg_password utility
21400 Return number of rows inserted/affected by INSERT/UPDATE/DELETE etc.(Vadim)
21401 Triggers implemented with CREATE TRIGGER (SQL3)(Vadim)
21402 SPI (Server Programming Interface) allows execution of queries inside
21403         C-functions (Vadim)
21404 NOT NULL implemented (SQL92)(Robson Paniago de Miranda)
21405 Include reserved words for string handling, outer joins, and unions(Thomas)
21406 Implement extended comments ("/* ... */") using exclusive states(Thomas)
21407 Add "//" single-line comments(Bruce)
21408 Remove some restrictions on characters in operator names(Thomas)
21409 DEFAULT and CONSTRAINT for tables implemented (SQL92)(Vadim & Thomas)
21410 Add text concatenation operator and function (SQL92)(Thomas)
21411 Support WITH TIME ZONE syntax (SQL92)(Thomas)
21412 Support INTERVAL unit TO unit syntax (SQL92)(Thomas)
21413 Define types DOUBLE PRECISION, INTERVAL, CHARACTER,
21414         and CHARACTER VARYING (SQL92)(Thomas)
21415 Define type FLOAT(p) and rudimentary DECIMAL(p,s), NUMERIC(p,s) (SQL92)(Thomas)
21416 Define EXTRACT(), POSITION(), SUBSTRING(), and TRIM() (SQL92)(Thomas)
21417 Define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP (SQL92)(Thomas)
21418 Add syntax and warnings for UNION, HAVING, INNER and OUTER JOIN (SQL92)(Thomas)
21419 Add more reserved words, mostly for SQL92 compliance(Thomas)
21420 Allow hh:mm:ss time entry for timespan/reltime types(Thomas)
21421 Add center() routines for lseg, path, polygon(Thomas)
21422 Add distance() routines for circle-polygon, polygon-polygon(Thomas)
21423 Check explicitly for points and polygons contained within polygons
21424         using an axis-crossing algorithm(Thomas)
21425 Add routine to convert circle-box(Thomas)
21426 Merge conflicting operators for different geometric data types(Thomas)
21427 Replace distance operator "&lt;===&gt;" with "&lt;-&gt;"(Thomas)
21428 Replace "above" operator "!^" with "&gt;^" and "below" operator "!|" with "&lt;^"(Thomas)
21429 Add routines for text trimming on both ends, substring, and string position(Thomas)
21430 Added conversion routines circle(box) and poly(circle)(Thomas)
21431 Allow internal sorts to be stored in memory rather than in files(Bruce & Vadim)
21432 Allow functions and operators on internally-identical types to succeed(Bruce)
21433 Speed up backend start-up after profiling analysis(Bruce)
21434 Inline frequently called functions for performance(Bruce)
21435 Reduce open() calls(Bruce)
21436 psql:  Add PAGER for \h and \?,\C fix
21437 Fix for psql pager when no tty(Bruce)
21438 New entab utility(Bruce)
21439 General trigger functions for referential integrity (Vadim)
21440 General trigger functions for time travel (Vadim)
21441 General trigger functions for AUTOINCREMENT/IDENTITY feature (Vadim)
21442 MOVE implementation (Vadim)
21443
21444 Source Tree Changes
21445 -------------------
21446 HP-UX 10 patches (Vladimir Turin)
21447 Added SCO support, (Daniel Harris)
21448 MkLinux patches (Tatsuo Ishii)
21449 Change geometric box terminology from "length" to "width"(Thomas)
21450 Deprecate temporary unstored slope fields in geometric code(Thomas)
21451 Remove restart instructions from INSTALL(Bruce)
21452 Look in /usr/ucb first for install(Bruce)
21453 Fix c++ copy example code(Thomas)
21454 Add -o to psql manual page(Bruce)
21455 Prevent relname unallocated string length from being copied into database(Bruce)
21456 Cleanup for NAMEDATALEN use(Bruce)
21457 Fix pg_proc names over 15 chars in output(Bruce)
21458 Add strNcpy() function(Bruce)
21459 remove some (void) casts that are unnecessary(Bruce)
21460 new interfaces directory(Marc)
21461 Replace fopen() calls with calls to fd.c functions(Bruce)
21462 Make functions static where possible(Bruce)
21463 enclose unused functions in #ifdef NOT_USED(Bruce)
21464 Remove call to difftime() in timestamp support to fix SunOS(Bruce & Thomas)
21465 Changes for Digital Unix
21466 Portability fix for pg_dumpall(Bruce)
21467 Rename pg_attribute.attnvals to attdispersion(Bruce)
21468 "intro/unix" manual page now "pgintro"(Bruce)
21469 "built-in" manual page now "pgbuiltin"(Bruce)
21470 "drop" manual page now "drop_table"(Bruce)
21471 Add "create_trigger", "drop_trigger" manual pages(Thomas)
21472 Add constraints regression test(Vadim & Thomas)
21473 Add comments syntax regression test(Thomas)
21474 Add PGINDENT and support program(Bruce)
21475 Massive commit to run PGINDENT on all *.c and *.h files(Bruce)
21476 Files moved to /src/tools directory(Bruce)
21477 SPI and Trigger programming guides (Vadim & D'Arcy)
21478 </programlisting>
21479 </para>
21480 </sect2>
21481 </sect1>
21482
21483 <sect1 id="release-6-1-1">
21484 <title>Release 6.1.1</title>
21485
21486    <note>
21487    <title>Release date</title>
21488    <simpara>1997-07-22</simpara>
21489    </note>
21490
21491 <sect2>
21492 <title>Migration from version 6.1 to version 6.1.1</title>
21493
21494 <para>
21495 This is a minor bug-fix release. A dump/reload is not required from version 6.1,
21496 but is required from any release prior to 6.1.
21497 Refer to the release notes for 6.1 for more details.
21498 </para>
21499 </sect2>
21500
21501    <sect2>
21502     <title>Changes</title>
21503
21504     <para>
21505      <programlisting>
21506 fix for SET with options (Thomas)
21507 allow pg_dump/pg_dumpall to preserve ownership of all tables/objects(Bruce)
21508 new psql \connect option allows changing usernames without changing databases
21509 fix for initdb --debug option(Yoshihiko Ichikawa))
21510 lextest cleanup(Bruce)
21511 hash fixes(Vadim)
21512 fix date/time month boundary arithmetic(Thomas)
21513 fix timezone daylight handling for some ports(Thomas, Bruce, Tatsuo)
21514 timestamp overhauled to use standard functions(Thomas)
21515 other code cleanup in date/time routines(Thomas)
21516 psql's \d now case-insensitive(Bruce)
21517 psql's backslash commands can now have trailing semicolon(Bruce)
21518 fix memory leak in psql when using \g(Bruce)
21519 major fix for endian handling of communication to server(Thomas, Tatsuo)
21520 Fix for Solaris assembler and include files(Yoshihiko Ichikawa)
21521 allow underscores in usernames(Bruce)
21522 pg_dumpall now returns proper status, portability fix(Bruce)
21523      </programlisting>
21524     </para>
21525    </sect2>
21526   </sect1>
21527
21528 <sect1 id="release-6-1">
21529 <title>Release 6.1</title>
21530
21531    <note>
21532    <title>Release date</title>
21533    <simpara>1997-06-08</simpara>
21534    </note>
21535
21536 <para>
21537   The regression tests have been adapted and extensively modified for the
21538   6.1 release of <productname>PostgreSQL</productname>.
21539 </para>
21540
21541 <para>
21542   Three new data types (<type>datetime</type>, <type>timespan</type>, and <type>circle</type>) have been added to
21543   the native set of <productname>PostgreSQL</productname> types. Points, boxes, paths, and polygons
21544   have had their output formats made consistent across the data types.
21545   The polygon output in misc.out has only been spot-checked for correctness
21546   relative to the original regression output.
21547 </para>
21548
21549 <para>
21550   <productname>PostgreSQL</productname> 6.1 introduces a new, alternate
21551 optimizer which uses <firstterm>genetic</firstterm>
21552   algorithms. These algorithms introduce a random behavior in the ordering
21553   of query results when the query contains multiple qualifiers or multiple
21554   tables (giving the optimizer a choice on order of evaluation). Several
21555   regression tests have been modified to explicitly order the results, and
21556   hence are insensitive to optimizer choices. A few regression tests are
21557   for data types which are inherently unordered (e.g. points and time
21558   intervals) and tests involving those types are explicitly bracketed with
21559   <command>set geqo to 'off'</command> and <command>reset geqo</command>.
21560 </para>
21561
21562 <para>
21563   The interpretation of array specifiers (the curly braces around atomic
21564   values) appears to have changed sometime after the original regression
21565   tests were generated. The current <filename>./expected/*.out</filename> files reflect this
21566   new interpretation, which might not be correct!
21567 </para>
21568
21569 <para>
21570   The float8 regression test fails on at least some platforms. This is due
21571   to differences in implementations of <function>pow()</function> and <function>exp()</function> and the signaling
21572   mechanisms used for overflow and underflow conditions.
21573 </para>
21574
21575 <para>
21576   The <quote>random</> results in the random test should cause the
21577   <quote>random</quote> test to be <quote>failed</quote>, since the
21578   regression tests are evaluated using a simple diff. However,
21579   <quote>random</> does not seem to produce random results on my test
21580   machine (Linux/<application>gcc</>/i686).
21581 </para>
21582
21583 <sect2>
21584 <title>Migration to version 6.1</title>
21585
21586 <para>
21587 This migration requires a complete dump of the 6.0 database and a
21588 restore of the database in 6.1.
21589 </para>
21590 <para>
21591 Those migrating from earlier 1.* releases should first upgrade to 1.09
21592 because the COPY output format was improved from the 1.02 release.
21593 </para>
21594 </sect2>
21595
21596    <sect2>
21597     <title>Changes</title>
21598
21599     <para>
21600      <programlisting>
21601 Bug Fixes
21602 ---------
21603 packet length checking in library routines
21604 lock manager priority patch
21605 check for under/over flow of float8(Bruce)
21606 multitable join fix(Vadim)
21607 SIGPIPE crash fix(Darren)
21608 large object fixes(Sven)
21609 allow btree indexes to handle NULLs(Vadim)
21610 timezone fixes(D'Arcy)
21611 select SUM(x) can return NULL on no rows(Thomas)
21612 internal optimizer, executor bug fixes(Vadim)
21613 fix problem where inner loop in &lt; or &lt;= has no rows(Vadim)
21614 prevent re-commuting join index clauses(Vadim)
21615 fix join clauses for multiple tables(Vadim)
21616 fix hash, hashjoin for arrays(Vadim)
21617 fix btree for abstime type(Vadim)
21618 large object fixes(Raymond)
21619 fix buffer leak in hash indexes (Vadim)
21620 fix rtree for use in inner scan (Vadim)
21621 fix gist for use in inner scan, cleanups (Vadim, Andrea)
21622 avoid unnecessary local buffers allocation (Vadim, Massimo)
21623 fix local buffers leak in transaction aborts (Vadim)
21624 fix file manager memmory leaks, cleanups (Vadim, Massimo)
21625 fix storage manager memmory leaks (Vadim)
21626 fix btree duplicates handling (Vadim)
21627 fix deleted rows reincarnation caused by vacuum (Vadim)
21628 fix SELECT varchar()/char() INTO TABLE made zero-length fields(Bruce)
21629 many psql, pg_dump, and libpq memory leaks fixed using Purify (Igor)
21630
21631 Enhancements
21632 ------------
21633 attribute optimization statistics(Bruce)
21634 much faster new btree bulk load code(Paul)
21635 BTREE UNIQUE added to bulk load code(Vadim)
21636 new lock debug code(Massimo)
21637 massive changes to libpg++(Leo)
21638 new GEQO optimizer speeds table multitable optimization(Martin)
21639 new WARN message for non-unique insert into unique key(Marc)
21640 update x=-3, no spaces, now valid(Bruce)
21641 remove case-sensitive identifier handling(Bruce,Thomas,Dan)
21642 debug backend now pretty-prints tree(Darren)
21643 new Oracle character functions(Edmund)
21644 new plaintext password functions(Dan)
21645 no such class or insufficient privilege changed to distinct messages(Dan)
21646 new ANSI timestamp function(Dan)
21647 new ANSI Time and Date types (Thomas)
21648 move large chunks of data in backend(Martin)
21649 multicolumn btree indexes(Vadim)
21650 new SET var TO value command(Martin)
21651 update transaction status on reads(Dan)
21652 new locale settings for character types(Oleg)
21653 new SEQUENCE serial number generator(Vadim)
21654 GROUP BY function now possible(Vadim)
21655 re-organize regression test(Thomas,Marc)
21656 new optimizer operation weights(Vadim)
21657 new psql \z grant/permit option(Marc)
21658 new MONEY data type(D'Arcy,Thomas)
21659 tcp socket communication speed improved(Vadim)
21660 new VACUUM option for attribute statistics, and for certain columns (Vadim)
21661 many geometric type improvements(Thomas,Keith)
21662 additional regression tests(Thomas)
21663 new datestyle variable(Thomas,Vadim,Martin)
21664 more comparison operators for sorting types(Thomas)
21665 new conversion functions(Thomas)
21666 new more compact btree format(Vadim)
21667 allow pg_dumpall to preserve database ownership(Bruce)
21668 new SET GEQO=# and R_PLANS variable(Vadim)
21669 old (!GEQO) optimizer can use right-sided plans (Vadim)
21670 typechecking improvement in SQL parser(Bruce)
21671 new SET, SHOW, RESET commands(Thomas,Vadim)
21672 new \connect database USER option
21673 new destroydb -i option (Igor)
21674 new \dt and \di psql commands (Darren)
21675 SELECT "\n" now escapes newline (A. Duursma)
21676 new geometry conversion functions from old format (Thomas)
21677
21678 Source tree changes
21679 -------------------
21680 new configuration script(Marc)
21681 readline configuration option added(Marc)
21682 OS-specific configuration options removed(Marc)
21683 new OS-specific template files(Marc)
21684 no more need to edit Makefile.global(Marc)
21685 re-arrange include files(Marc)
21686 nextstep patches (Gregor Hoffleit)
21687 removed Windows-specific code(Bruce)
21688 removed postmaster -e option, now only postgres -e option (Bruce)
21689 merge duplicate library code in front/backends(Martin)
21690 now works with eBones, international Kerberos(Jun)
21691 more shared library support
21692 c++ include file cleanup(Bruce)
21693 warn about buggy flex(Bruce)
21694 DG/UX, Ultrix, IRIX, AIX portability fixes
21695 </programlisting>
21696 </para>
21697 </sect2>
21698 </sect1>
21699
21700 <sect1 id="release-6-0">
21701 <title>Release 6.0</title>
21702
21703    <note>
21704    <title>Release date</title>
21705    <simpara>1997-01-29</simpara>
21706    </note>
21707
21708 <para>
21709 A dump/restore is required for those wishing to migrate data from
21710 previous releases of <productname>PostgreSQL</productname>.
21711 </para>
21712
21713 <sect2>
21714 <title>Migration from version 1.09 to version 6.0</title>
21715
21716 <para>
21717 This migration requires a complete dump of the 1.09 database and a
21718 restore of the database in 6.0.
21719 </para>
21720 </sect2>
21721
21722 <sect2>
21723 <title>Migration from pre-1.09 to version 6.0</title>
21724
21725 <para>
21726 Those migrating from earlier 1.* releases should first upgrade to 1.09
21727 because the COPY output format was improved from the 1.02 release.
21728 </para>
21729 </sect2>
21730
21731    <sect2>
21732     <title>Changes</title>
21733
21734     <para>
21735      <programlisting>
21736 Bug Fixes
21737 ---------
21738 ALTER TABLE bug - running postgres process needs to re-read table definition
21739 Allow vacuum to be run on one table or entire database(Bruce)
21740 Array fixes
21741 Fix array over-runs of memory writes(Kurt)
21742 Fix elusive btree range/non-range bug(Dan)
21743 Fix for hash indexes on some types like time and date
21744 Fix for pg_log size explosion
21745 Fix permissions on lo_export()(Bruce)
21746 Fix uninitialized reads of memory(Kurt)
21747 Fixed ALTER TABLE ... char(3) bug(Bruce)
21748 Fixed a few small memory leaks
21749 Fixed EXPLAIN handling of options and changed full_path option name
21750 Fixed output of group acl privileges
21751 Memory leaks (hunt and destroy with tools like Purify(Kurt)
21752 Minor improvements to rules system
21753 NOTIFY fixes
21754 New asserts for run-checking
21755 Overhauled parser/analyze code to properly report errors and increase speed
21756 Pg_dump -d now handles NULL's properly(Bruce)
21757 Prevent SELECT NULL from crashing server (Bruce)
21758 Properly report errors when INSERT ... SELECT columns did not match
21759 Properly report errors when insert column names were not correct
21760 psql \g filename now works(Bruce)
21761 psql fixed problem with multiple statements on one line with multiple outputs
21762 Removed duplicate system OIDs
21763 SELECT * INTO TABLE . GROUP/ORDER BY gives unlink error if table exists(Bruce)
21764 Several fixes for queries that crashed the backend
21765 Starting quote in insert string errors(Bruce)
21766 Submitting an empty query now returns empty status, not just " " query(Bruce)
21767
21768 Enhancements
21769 ------------
21770 Add EXPLAIN manual page(Bruce)
21771 Add UNIQUE index capability(Dan)
21772 Add hostname/user level access control rather than just hostname and user
21773 Add synonym of != for &lt;&gt;(Bruce)
21774 Allow "select oid,* from table"
21775 Allow BY,ORDER BY to specify columns by number, or by non-alias table.column(Bruce)
21776 Allow COPY from the frontend(Bryan)
21777 Allow GROUP BY to use alias column name(Bruce)
21778 Allow actual compression, not just reuse on the same page(Vadim)
21779 Allow installation-configuration option to auto-add all local users(Bryan)
21780 Allow libpq to distinguish between text value '' and null(Bruce)
21781 Allow non-postgres users with createdb privs to destroydb's
21782 Allow restriction on who can create C functions(Bryan)
21783 Allow restriction on who can do backend COPY(Bryan)
21784 Can shrink tables, pg_time and pg_log(Vadim & Erich)
21785 Change debug level 2 to print queries only, changed debug heading layout(Bruce)
21786 Change default decimal constant representation from float4 to float8(Bruce)
21787 European date format now set when postmaster is started
21788 Execute lowercase function names if not found with exact case
21789 Fixes for aggregate/GROUP processing, allow 'select sum(func(x),sum(x+y) from z'
21790 Gist now included in the distribution(Marc)
21791 Idend authentication of local users(Bryan)
21792 Implement BETWEEN qualifier(Bruce)
21793 Implement IN qualifier(Bruce)
21794 libpq has PQgetisnull()(Bruce)
21795 libpq++ improvements
21796 New options to initdb(Bryan)
21797 Pg_dump allow dump of OIDs(Bruce)
21798 Pg_dump create indexes after tables are loaded for speed(Bruce)
21799 Pg_dumpall dumps all databases, and the user table
21800 Pginterface additions for NULL values(Bruce)
21801 Prevent postmaster from being run as root
21802 psql \h and \? is now readable(Bruce)
21803 psql allow backslashed, semicolons anywhere on the line(Bruce)
21804 psql changed command prompt for lines in query or in quotes(Bruce)
21805 psql char(3) now displays as (bp)char in \d output(Bruce)
21806 psql return code now more accurate(Bryan?)
21807 psql updated help syntax(Bruce)
21808 Re-visit and fix vacuum(Vadim)
21809 Reduce size of regression diffs, remove timezone name difference(Bruce)
21810 Remove compile-time parameters to enable binary distributions(Bryan)
21811 Reverse meaning of HBA masks(Bryan)
21812 Secure Authentication of local users(Bryan)
21813 Speed up vacuum(Vadim)
21814 Vacuum now had VERBOSE option(Bruce)
21815
21816 Source tree changes
21817 -------------------
21818 All functions now have prototypes that are compared against the calls
21819 Allow asserts to be disabled easily from Makefile.global(Bruce)
21820 Change oid constants used in code to #define names
21821 Decoupled sparc and solaris defines(Kurt)
21822 Gcc -Wall compiles cleanly with warnings only from unfixable constructs
21823 Major include file reorganization/reduction(Marc)
21824 Make now stops on compile failure(Bryan)
21825 Makefile restructuring(Bryan, Marc)
21826 Merge bsdi_2_1 to bsdi(Bruce)
21827 Monitor program removed
21828 Name change from Postgres95 to PostgreSQL
21829 New config.h file(Marc, Bryan)
21830 PG_VERSION now set to 6.0 and used by postmaster
21831 Portability additions, including Ultrix, DG/UX, AIX, and Solaris
21832 Reduced the number of #define's, centralized #define's
21833 Remove duplicate OIDS in system tables(Dan)
21834 Remove duplicate system catalog info or report mismatches(Dan)
21835 Removed many os-specific #define's
21836 Restructured object file generation/location(Bryan, Marc)
21837 Restructured port-specific file locations(Bryan, Marc)
21838 Unused/uninitialized variables corrected
21839 </programlisting>
21840 </para>
21841 </sect2>
21842 </sect1>
21843
21844 <sect1 id="release-1-09">
21845 <title>Release 1.09</title>
21846
21847    <note>
21848    <title>Release date</title>
21849    <simpara>1996-11-04</simpara>
21850    </note>
21851
21852 <para>
21853 Sorry, we didn't keep track of changes from 1.02 to 1.09.  Some of
21854 the changes listed in 6.0 were actually included in the 1.02.1 to 1.09
21855 releases.
21856 </para>
21857 </sect1>
21858
21859 <sect1 id="release-1-02">
21860 <title>Release 1.02</title>
21861
21862    <note>
21863    <title>Release date</title>
21864    <simpara>1996-08-01</simpara>
21865    </note>
21866
21867 <sect2>
21868 <title>Migration from version 1.02 to version 1.02.1</title>
21869
21870 <para>
21871 Here is a new migration file for 1.02.1.  It includes the 'copy' change
21872 and a script to convert old <acronym>ASCII</acronym> files.
21873 </para>
21874 <note>
21875 <para>
21876 The following notes are for the benefit of users who want to migrate
21877 databases from <productname>Postgres95</> 1.01 and 1.02 to <productname>Postgres95</> 1.02.1.
21878 </para>
21879 <para>
21880 If you are starting afresh with <productname>Postgres95</> 1.02.1 and do not need
21881 to migrate old databases, you do not need to read any further.
21882 </para>
21883 </note>
21884
21885 <para>
21886 In order to upgrade older <productname>Postgres95</> version 1.01 or 1.02 databases to
21887 version 1.02.1, the following steps are required:
21888 </para>
21889 <procedure>
21890 <step>
21891 <para>
21892 Start up a new 1.02.1 postmaster
21893 </para>
21894 </step>
21895 <step>
21896 <para>
21897 Add the new built-in functions and operators of 1.02.1 to 1.01 or 1.02
21898    databases.  This is done by running the new 1.02.1 server against
21899    your own 1.01 or 1.02 database and applying the queries attached at
21900    the end of the file.   This can be done easily through <command>psql</>.  If your
21901    1.01 or 1.02 database is named <literal>testdb</literal> and you have cut the commands
21902    from the end of this file and saved them in <filename>addfunc.sql</filename>:
21903 <programlisting>
21904         % psql testdb -f addfunc.sql
21905 </programlisting>
21906
21907 Those upgrading 1.02 databases will get a warning when executing the
21908 last two statements in the file because they are already present in 1.02.  This is
21909 not a cause for concern.
21910 </para>
21911 </step>
21912 </procedure>
21913 </sect2>
21914
21915 <sect2>
21916 <title>Dump/Reload Procedure</title>
21917
21918 <para>
21919 If you are trying to reload a pg_dump or text-mode, <literal>copy tablename to
21920 stdout</literal> generated with a previous version, you will need to run the
21921 attached <command>sed</command> script on the ASCII file before loading it into the
21922 database.  The old format used '.' as end-of-data, while '\.' is now the
21923 end-of-data marker.  Also, empty strings are now loaded in as '' rather
21924 than NULL. See the copy manual page for full details.
21925
21926 <programlisting>
21927         sed 's/^\.$/\\./g' &lt;in_file &gt;out_file
21928 </programlisting>
21929 </para>
21930 <para>
21931 If you are loading an older binary copy or non-<systemitem>stdout</> copy, there is no
21932 end-of-data character, and hence no conversion necessary.
21933
21934 <programlisting>
21935 -- following lines added by agc to reflect the case-insensitive
21936 -- regexp searching for varchar (in 1.02), and bpchar (in 1.02.1)
21937 create operator ~* (leftarg = bpchar, rightarg = text, procedure = texticregexeq);
21938 create operator !~* (leftarg = bpchar, rightarg = text, procedure = texticregexne);
21939 create operator ~* (leftarg = varchar, rightarg = text, procedure = texticregexeq);
21940 create operator !~* (leftarg = varchar, rightarg = text, procedure = texticregexne);
21941 </programlisting>
21942 </para>
21943 </sect2>
21944
21945 <sect2>
21946 <title>Changes</title>
21947
21948 <para>
21949 <programlisting>
21950 Source code maintenance and development
21951  * worldwide team of volunteers
21952  * the source tree now in CVS at ftp.ki.net
21953
21954 Enhancements
21955  * psql (and underlying libpq library) now has many more options for
21956    formatting output, including HTML
21957  * pg_dump now output the schema and/or the data, with many fixes to
21958    enhance completeness.
21959  * psql used in place of monitor in administration shell scripts.
21960    monitor to be deprecated in next release.
21961  * date/time functions enhanced
21962  * NULL insert/update/comparison fixed/enhanced
21963  * TCL/TK lib and shell fixed to work with both tck7.4/tk4.0 and tcl7.5/tk4.1
21964
21965 Bug Fixes (almost too numerous to mention)
21966  * indexes
21967  * storage management
21968  * check for NULL pointer before dereferencing
21969  * Makefile fixes
21970
21971 New Ports
21972  * added SolarisX86 port
21973  * added BSD/OS 2.1 port
21974  * added DG/UX port
21975 </programlisting>
21976 </para>
21977 <!--
21978 Contributors (apologies to any missed)
21979  * Kurt J. Lidl &lt;lidl@va.pubnix.com&gt;
21980         (missed in first run, but no less important)
21981  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
21982  * Jason Wright &lt;jason@shiloh.vnet.net&gt;
21983  * Cees de Groot &lt;C.deGroot@inter.NL.net&gt;
21984  * ernst.molitor@uni-bonn.de
21985  * michael.siebenborn@ae3.Hypo.DE (Michael Siebenborn (6929))
21986  * Brian E. Gallew &lt;geek+@cmu.edu&gt;
21987  * Vadim B. Mikheev &lt;vadim@sable.krasnoyarsk.su&gt;
21988  * Adam Sussman &lt;myddryn@vidya.com&gt;
21989  * Chris Dunlop &lt;chris@onthe.net.au&gt;
21990  * Marc G. Fournier &lt;scrappy@ki.net&gt;
21991  * Dan McGuirk &lt;mcguirk@indirect.com&gt;
21992  * Dr_George_D_Detlefsen &lt;drgeorge@ilt.com&gt;
21993  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
21994  * Massimo Dal Zotto &lt;dz@cs.unitn.it&gt;
21995  * Randy Kunkee &lt;kunkee@Starbase.NeoSoft.COM&gt;
21996  * Rick Weldon &lt;rick@wisetech.com&gt;
21997  * Thomas van Reimersdahl &lt;reimersd@dali.techinfo.rwth-aachen.de&gt;
21998  * david bennett &lt;dave@bensoft.com&gt;
21999  * ernst.molitor@uni-bonn.de
22000  * Julian Assange &lt;proff@suburbia.net&gt;
22001  * Bruce Momjian &lt;pgman@candle.pha.pa.us&gt;
22002  * Paul "Shag" Walmsley &lt;ccshag@cclabs.missouri.edu&gt;
22003  * "Alistair G. Crooks" &lt;azcb0@sde.uts.amdahl.com&gt;
22004 -->
22005 </sect2>
22006 </sect1>
22007
22008 <sect1 id="release-1-01">
22009 <title>Release 1.01</title>
22010
22011    <note>
22012    <title>Release date</title>
22013    <simpara>1996-02-23</simpara>
22014    </note>
22015
22016
22017 <sect2>
22018 <title>Migration from version 1.0 to version 1.01</title>
22019
22020 <para>
22021 The following notes are for the benefit of users who want to migrate
22022 databases from <productname>Postgres95</> 1.0 to <productname>Postgres95</> 1.01.
22023 </para>
22024 <para>
22025 If you are starting afresh with <productname>Postgres95</> 1.01 and do not need
22026 to migrate old databases, you do not need to read any further.
22027 </para>
22028 <para>
22029 In order to <productname>Postgres95</> version 1.01 with databases created with
22030 <productname>Postgres95</> version 1.0, the following steps are required:
22031 </para>
22032 <procedure>
22033 <step>
22034 <para>
22035 Set the definition of <symbol>NAMEDATALEN</symbol> in <filename>src/Makefile.global</filename> to 16
22036    and <symbol>OIDNAMELEN</symbol> to 20.
22037 </para>
22038 </step>
22039 <step>
22040 <para>
22041 Decide whether you want to use Host based authentication.
22042 </para>
22043 <substeps>
22044 <step>
22045 <para>
22046 If you do, you must create a file name <literal>pg_hba</literal> in your top-level data
22047    directory (typically the value of your <envar>$PGDATA</envar>).  <filename>src/libpq/pg_hba</filename>
22048    shows an example syntax.
22049 </para>
22050 </step>
22051 <step>
22052 <para>
22053 If you do not want host-based authentication, you can comment out
22054    the line:
22055 <programlisting>
22056         HBA = 1
22057 </programlisting>
22058    in <filename>src/Makefile.global</filename>
22059 </para>
22060 <para>
22061    Note that host-based authentication is turned on by default, and if
22062    you do not take steps A or B above, the out-of-the-box 1.01 will
22063    not allow you to connect to 1.0 databases.
22064 </para>
22065 </step>
22066 </substeps>
22067 </step>
22068
22069 <step>
22070 <para>
22071 Compile and install 1.01, but DO NOT do the <command>initdb</command> step.
22072 </para>
22073 </step>
22074 <step>
22075 <para>
22076 Before doing anything else, terminate your 1.0 postmaster, and
22077    backup your existing <envar>$PGDATA</envar> directory.
22078 </para>
22079 </step>
22080 <step>
22081 <para>
22082 Set your <envar>PGDATA</envar> environment variable to your 1.0 databases, but set up
22083    path up so that 1.01 binaries are being used.
22084 </para>
22085 </step>
22086 <step>
22087 <para>
22088 Modify the file <filename><envar>$PGDATA</envar>/PG_VERSION</filename> from 5.0 to 5.1
22089 </para>
22090 </step>
22091 <step>
22092 <para>
22093 Start up a new 1.01 postmaster
22094 </para>
22095 </step>
22096 <step>
22097 <para>
22098 Add the new built-in functions and operators of 1.01 to 1.0
22099    databases.  This is done by running the new 1.01 server against
22100    your own 1.0 database and applying the queries attached and saving
22101    in the file 1.0_to_1.01.sql.   This can be done easily through <command>psql</command>.
22102    If your 1.0 database is name <literal>testdb</literal>:
22103
22104 <programlisting>
22105         % psql testdb -f 1.0_to_1.01.sql
22106 </programlisting>
22107
22108 and then execute the following commands (cut and paste from here):
22109
22110 <programlisting>
22111 -- add builtin functions that are new to 1.01
22112
22113 create function int4eqoid (int4, oid) returns bool as 'foo'
22114 language 'internal';
22115 create function oideqint4 (oid, int4) returns bool as 'foo'
22116 language 'internal';
22117 create function char2icregexeq (char2, text) returns bool as 'foo'
22118 language 'internal';
22119 create function char2icregexne (char2, text) returns bool as 'foo'
22120 language 'internal';
22121 create function char4icregexeq (char4, text) returns bool as 'foo'
22122 language 'internal';
22123 create function char4icregexne (char4, text) returns bool as 'foo'
22124 language 'internal';
22125 create function char8icregexeq (char8, text) returns bool as 'foo'
22126 language 'internal';
22127 create function char8icregexne (char8, text) returns bool as 'foo'
22128 language 'internal';
22129 create function char16icregexeq (char16, text) returns bool as 'foo'
22130 language 'internal';
22131 create function char16icregexne (char16, text) returns bool as 'foo'
22132 language 'internal';
22133 create function texticregexeq (text, text) returns bool as 'foo'
22134 language 'internal';
22135 create function texticregexne (text, text) returns bool as 'foo'
22136 language 'internal';
22137
22138 -- add builtin functions that are new to 1.01
22139
22140 create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
22141 create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
22142 create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
22143 create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
22144 create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
22145 create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
22146 create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
22147 create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
22148 create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
22149 create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
22150 create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
22151 create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);
22152 </programlisting>
22153 </para>
22154 </step>
22155 </procedure>
22156 </sect2>
22157
22158 <sect2>
22159 <title>Changes</title>
22160
22161 <para>
22162 <programlisting>
22163 Incompatibilities:
22164  * 1.01 is backwards compatible with 1.0 database provided the user
22165    follow the steps outlined in the MIGRATION_from_1.0_to_1.01 file.
22166    If those steps are not taken, 1.01 is not compatible with 1.0 database.
22167
22168 Enhancements:
22169  * added PQdisplayTuples() to libpq and changed monitor and psql to use it
22170  * added NeXT port (requires SysVIPC implementation)
22171  * added CAST .. AS ... syntax
22172  * added ASC and DESC key words
22173  * added 'internal' as a possible language for CREATE FUNCTION
22174    internal functions are C functions which have been statically linked
22175    into the postgres backend.
22176  * a new type "name" has been added for system identifiers (table names,
22177    attribute names, etc.)  This replaces the old char16 type.   The
22178    of name is set by the NAMEDATALEN #define in src/Makefile.global
22179  * a readable reference manual that describes the query language.
22180  * added host-based access control.  A configuration file ($PGDATA/pg_hba)
22181    is used to hold the configuration data.  If host-based access control
22182    is not desired, comment out HBA=1 in src/Makefile.global.
22183  * changed regex handling to be uniform use of Henry Spencer's regex code
22184    regardless of platform.  The regex code is included in the distribution
22185  * added functions and operators for case-insensitive regular expressions.
22186    The operators are ~* and !~*.
22187  * pg_dump uses COPY instead of SELECT loop for better performance
22188
22189 Bug fixes:
22190  * fixed an optimizer bug that was causing core dumps when
22191    functions calls were used in comparisons in the WHERE clause
22192  * changed all uses of getuid to geteuid so that effective uids are used
22193  * psql now returns non-zero status on errors when using -c
22194  * applied public patches 1-14
22195 </programlisting>
22196 </para>
22197 </sect2>
22198 </sect1>
22199
22200 <sect1 id="release-1-0">
22201 <title>Release 1.0</title>
22202
22203    <note>
22204    <title>Release date</title>
22205    <simpara>1995-09-05</simpara>
22206    </note>
22207
22208 <sect2>
22209 <title>Changes</title>
22210
22211 <para>
22212 <programlisting>
22213 Copyright change:
22214  * The copyright of <productname>Postgres</productname> 1.0 has been loosened to be freely modifiable
22215    and modifiable for any purpose.  Please read the COPYRIGHT file.
22216    Thanks to Professor Michael Stonebraker for making this possible.
22217
22218 Incompatibilities:
22219  *  date formats have to be MM-DD-YYYY (or DD-MM-YYYY if you're using
22220    EUROPEAN STYLE).  This follows SQL-92 specs.
22221  *  "delimiters" is now a key word
22222
22223 Enhancements:
22224  *  sql LIKE syntax has been added
22225  *  copy command now takes an optional USING DELIMITER specification.
22226    delimiters can be any single-character string.
22227  *  IRIX 5.3 port has been added.
22228    Thanks to Paul Walmsley and others.
22229  *  updated pg_dump to work with new libpq
22230  *  \d has been added psql
22231    Thanks to Keith Parks
22232  *  regexp performance for architectures that use POSIX regex has been
22233    improved due to caching of precompiled patterns.
22234    Thanks to Alistair Crooks
22235  *  a new version of libpq++
22236    Thanks to William Wanders
22237
22238 Bug fixes:
22239  *  arbitrary userids can be specified in the createuser script
22240  *  \c to connect to other databases in psql now works.
22241  *  bad pg_proc entry for float4inc() is fixed
22242  *  users with usecreatedb field set can now create databases without
22243    having to be usesuper
22244  *  remove access control entries when the entry no longer has any
22245    privileges
22246  *  fixed non-portable datetimes implementation
22247  *  added kerberos flags to the src/backend/Makefile
22248  *  libpq now works with kerberos
22249  *  typographic errors in the user manual have been corrected.
22250  *  btrees with multiple index never worked, now we tell you they don't
22251    work when you try to use them
22252 </programlisting>
22253 </para>
22254 </sect2>
22255 </sect1>
22256
22257 <sect1 id="release-0-03">
22258 <title><productname>Postgres95</productname> Release 0.03</title>
22259
22260    <note>
22261    <title>Release date</title>
22262    <simpara>1995-07-21</simpara>
22263    </note>
22264
22265 <sect2>
22266 <title>Changes</title>
22267 <para>
22268 <programlisting>
22269 Incompatible changes:
22270  * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED WITH PREVIOUS VERSIONS
22271    (due to system catalog changes and indexing structure changes).
22272  * double-quote (") is deprecated as a quoting character for string literals;
22273    you need to convert them to single quotes ('). <!-- " -->
22274  * name of aggregates (eg. int4sum) are renamed in accordance with the
22275    SQL standard (eg. sum).
22276  * CHANGE ACL syntax is replaced by GRANT/REVOKE syntax.
22277  * float literals (eg. 3.14) are now of type float4 (instead of float8 in
22278    previous releases); you might have to do typecasting if you depend on it
22279    being of type float8.  If you neglect to do the typecasting and you assign
22280    a float literal to a field of type float8, you might get incorrect values
22281    stored!
22282  * LIBPQ has been totally revamped so that frontend applications
22283    can connect to multiple backends
22284  * the usesysid field in pg_user has been changed from int2 to int4 to
22285    allow wider range of Unix user ids.
22286  * the netbsd/freebsd/bsd o/s ports have been consolidated into a
22287    single BSD44_derived port.  (thanks to Alistair Crooks)
22288
22289 SQL standard-compliance (the following details changes that makes postgres95
22290 more compliant to the SQL-92 standard):
22291  * the following SQL types are now built-in: smallint, int(eger), float, real,
22292    char(N), varchar(N), date and time.
22293
22294    The following are aliases to existing postgres types:
22295                 smallint -&gt; int2
22296                 integer, int -&gt; int4
22297                 float, real  -&gt; float4
22298    char(N) and varchar(N) are implemented as truncated text types. In
22299    addition, char(N) does blank-padding.
22300  * single-quote (') is used for quoting string literals; '' (in addition to
22301    \') is supported as means of inserting a single quote in a string
22302  * SQL standard aggregate names (MAX, MIN, AVG, SUM, COUNT) are used
22303    (Also, aggregates can now be overloaded, i.e. you can define your
22304    own MAX aggregate to take in a user-defined type.)
22305  * CHANGE ACL removed. GRANT/REVOKE syntax added.
22306    - Privileges can be given to a group using the "GROUP" key word.
22307         For example:
22308                 GRANT SELECT ON foobar TO GROUP my_group;
22309         The key word 'PUBLIC' is also supported to mean all users.
22310
22311         Privileges can only be granted or revoked to one user or group
22312         at a time.
22313
22314         "WITH GRANT OPTION" is not supported.  Only class owners can change
22315         access control
22316    - The default access control is to grant users readonly access.
22317      You must explicitly grant insert/update access to users.  To change
22318      this, modify the line in
22319                 src/backend/utils/acl.h
22320      that defines ACL_WORLD_DEFAULT
22321
22322 Bug fixes:
22323  * the bug where aggregates of empty tables were not run has been fixed. Now,
22324    aggregates run on empty tables will return the initial conditions of the
22325    aggregates. Thus, COUNT of an empty  table will now properly return 0.
22326    MAX/MIN of an empty table will return a row of value NULL.
22327  * allow the use of \; inside the monitor
22328  * the LISTEN/NOTIFY asynchronous notification mechanism now work
22329  * NOTIFY in rule action bodies now work
22330  * hash indexes work, and access methods in general should perform better.
22331    creation of large btree indexes should be much faster.  (thanks to Paul
22332    Aoki)
22333
22334 Other changes and enhancements:
22335  * addition of an EXPLAIN statement used for explaining the query execution
22336    plan (eg. "EXPLAIN SELECT * FROM EMP" prints out the execution plan for
22337    the query).
22338  * WARN and NOTICE messages no longer have timestamps on them. To turn on
22339    timestamps of error messages, uncomment the line in
22340    src/backend/utils/elog.h:
22341         /* define ELOG_TIMESTAMPS */
22342  * On an access control violation, the message
22343         "Either no such class or insufficient privilege"
22344    will be given.  This is the same message that is returned when
22345    a class is not found.  This dissuades non-privileged users from
22346    guessing the existence of privileged classes.
22347  * some additional system catalog changes have been made that are not
22348    visible to the user.
22349
22350 libpgtcl changes:
22351  * The -oid option has been added to the "pg_result" tcl command.
22352    pg_result -oid returns oid of the last row inserted.   If the
22353    last command was not an INSERT, then pg_result -oid returns "".
22354  * the large object interface is available as pg_lo* tcl commands:
22355    pg_lo_open, pg_lo_close, pg_lo_creat, etc.
22356
22357 Portability enhancements and New Ports:
22358  * flex/lex problems have been cleared up.  Now, you should be able to use
22359    flex instead of lex on any platforms.  We no longer make assumptions of
22360    what lexer you use based on the platform you use.
22361  * The Linux-ELF port is now supported.  Various configuration have been
22362    tested:  The following configuration is known to work:
22363         kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
22364    with everything in ELF format,
22365
22366 New utilities:
22367  * ipcclean added to the distribution
22368    ipcclean usually does not need to be run, but if your backend crashes
22369    and leaves shared memory segments hanging around, ipcclean will
22370    clean them up for you.
22371
22372 New documentation:
22373  * the user manual has been revised and libpq documentation added.
22374 </programlisting>
22375 </para>
22376 </sect2>
22377 </sect1>
22378
22379 <sect1 id="release-0-02">
22380 <title><productname>Postgres95</productname> Release 0.02</title>
22381
22382    <note>
22383    <title>Release date</title>
22384    <simpara>1995-05-25</simpara>
22385    </note>
22386
22387 <sect2>
22388 <title>Changes</title>
22389
22390 <para>
22391 <programlisting>
22392 Incompatible changes:
22393  * The SQL statement for creating a database is 'CREATE DATABASE' instead
22394    of 'CREATEDB'. Similarly, dropping a database is 'DROP DATABASE' instead
22395    of 'DESTROYDB'. However, the names of the executables 'createdb' and
22396    'destroydb' remain the same.
22397
22398 New tools:
22399  * pgperl - a Perl (4.036) interface to Postgres95
22400  * pg_dump - a utility for dumping out a postgres database into a
22401         script file containing query commands. The script files are in a ASCII
22402         format and can be used to reconstruct the database, even on other
22403         machines and other architectures. (Also good for converting
22404         a Postgres 4.2 database to Postgres95 database.)
22405
22406 The following ports have been incorporated into postgres95-beta-0.02:
22407  * the NetBSD port by Alistair Crooks
22408  * the AIX port by Mike Tung
22409  * the Windows NT port by Jon Forrest (more stuff but not done yet)
22410  * the Linux ELF port by Brian Gallew
22411
22412 The following bugs have been fixed in postgres95-beta-0.02:
22413  * new lines not escaped in COPY OUT and problem with COPY OUT when first
22414    attribute is a '.'
22415  * cannot type return to use the default user id in createuser
22416  * SELECT DISTINCT on big tables crashes
22417  * Linux installation problems
22418  * monitor doesn't allow use of 'localhost' as PGHOST
22419  * psql core dumps when doing \c or \l
22420  * the "pgtclsh" target missing from src/bin/pgtclsh/Makefile
22421  * libpgtcl has a hard-wired default port number
22422  * SELECT DISTINCT INTO TABLE hangs
22423  * CREATE TYPE doesn't accept 'variable' as the internallength
22424  * wrong result using more than 1 aggregate in a SELECT
22425 </programlisting>
22426 </para>
22427 </sect2>
22428 </sect1>
22429
22430 <sect1 id="release-0-01">
22431 <title><productname>Postgres95</productname> Release 0.01</title>
22432
22433    <note>
22434    <title>Release date</title>
22435    <simpara>1995-05-01</simpara>
22436    </note>
22437
22438 <para>
22439 Initial release.
22440 </para>
22441 </sect1>
22442
22443 <![IGNORE[
22444   <sect1 id="timing-results">
22445    <title>Timing Results</title>
22446
22447    <para>
22448     These timing results are from running the regression test with the commands
22449
22450     <programlisting>
22451 % cd src/test/regress
22452 % make all
22453 % time make runtest
22454     </programlisting>
22455    </para>
22456    <para>
22457     Timing under Linux 2.0.27 seems to have a roughly 5% variation from run
22458     to run, presumably due to the scheduling vagaries of multitasking systems.
22459    </para>
22460
22461    <sect2>
22462     <title>Version 6.5</title>
22463
22464     <para>
22465      As has been the case for previous releases, timing between
22466      releases is not directly comparable since new regression tests
22467      have been added. In general, 6.5 is faster than previous
22468      releases.
22469     </para>
22470
22471     <para>
22472      Timing with <function>fsync()</function> disabled:
22473
22474      <programlisting>
22475   Time   System
22476   02:00  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
22477   04:38  Sparc Ultra 1 143MHz, 64MB, Solaris 2.6
22478      </programlisting>
22479     </para>
22480
22481     <para>
22482      Timing with <function>fsync()</function> enabled:
22483
22484      <programlisting>
22485   Time   System
22486   04:21  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
22487      </programlisting>
22488
22489      For the <systemitem class="osname">Linux</systemitem> system above, using <acronym>UW-SCSI</acronym> disks rather than (older) <acronym>IDE</acronym>
22490      disks leads to a 50% improvement in speed on the regression test.
22491     </para>
22492    </sect2>
22493
22494 <sect2>
22495 <title>Version 6.4beta</title>
22496
22497 <para>
22498 The times for this release are not directly comparable to those for previous releases
22499 since some additional regression tests have been included.
22500 In general, however, 6.4 should be slightly faster than the previous release (thanks, Bruce!).
22501 </para>
22502 <para>
22503 <programlisting>
22504   Time   System
22505   02:26  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22506 </programlisting>
22507 </para>
22508 </sect2>
22509
22510 <sect2>
22511 <title>Version 6.3</title>
22512
22513 <para>
22514 The times for this release are not directly comparable to those for previous releases
22515 since some additional regression tests have been included and some obsolete tests involving
22516 time travel have been removed.
22517 In general, however, 6.3 is substantially faster than previous releases (thanks, Bruce!).
22518 </para>
22519 <para>
22520 <programlisting>
22521   Time   System
22522   02:30  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22523   04:12  Dual Pentium Pro 180, 96MB, EIDE, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22524 </programlisting>
22525 </para>
22526 </sect2>
22527
22528 <sect2>
22529 <title>Version 6.1</title>
22530
22531 <para>
22532 <programlisting>
22533   Time   System
22534   06:12  Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, gcc 2.7.2 -O2 -m486
22535   12:06  P-100, 48MB, Linux 2.0.29, gcc
22536   39:58  Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g
22537 </programlisting>
22538 </para>
22539 </sect2>
22540 </sect1>
22541 ]]>
22542 </appendix>